From 9242c78cf59852c7c4c3f1593d59276c73788c13 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=80=9EBAS8243=E2=80=9C?= <gerd.embruch@uni-hamburg.de>
Date: Wed, 7 Aug 2024 18:00:19 +0200
Subject: [PATCH] fixed main chat chain; fixed some smaller things

---
 .env.template                                 |    5 +
 README.md                                     |    3 +-
 __tests__/manualREST/ollama.rest              |   10 +-
 controllers/Embeddings.js                     |    4 +-
 coverage/clover.xml                           | 4072 +++++++++++------
 coverage/coverage-final.json                  |   55 +-
 coverage/index.html                           |  139 +-
 .../__tests__/ai/chat.test.js.html            |  958 ++++
 .../__tests__/ai/chats.test.js.html           |  700 +++
 .../__tests__/ai/delete.test.js.html          |  646 +++
 coverage/ragchat-api/__tests__/ai/index.html  |  206 +
 .../__tests__/ai/model.test.js.html           |  637 +++
 .../__tests__/ai/models.test.js.html          |  931 ++++
 .../__tests__/ai/pull.test.js.html            | 1006 ++++
 .../__tests__/ai/status.test.js.html          |  346 ++
 .../auth/confirmpasswordreset.test.js.html    |  628 +++
 .../auth/confirmverification.test.js.html     |  481 ++
 .../ragchat-api/__tests__/auth/index.html     |  206 +
 .../__tests__/auth/login.test.js.html         |  589 +++
 .../__tests__/auth/logout.test.js.html        |  367 ++
 .../__tests__/auth/refreshjwt.test.js.html    |  448 ++
 .../auth/requestpasswordreset.test.js.html    |  472 ++
 .../auth/requestverification.test.js.html     |  469 ++
 .../ragchat-api/__tests__/users/index.html    |  116 +
 .../__tests__/users/signup.test.js.html       |  736 +++
 coverage/ragchat-api/app.js.html              |  141 +-
 coverage/ragchat-api/controllers/AI.js.html   |   91 +-
 coverage/ragchat-api/controllers/Auth.js.html |   68 +-
 .../controllers/Embeddings.js.html            | 1318 ------
 coverage/ragchat-api/controllers/User.js.html |   75 +-
 coverage/ragchat-api/controllers/index.html   |   71 +-
 .../ragchat-api/ecosystem.config.cjs.html     |  118 -
 coverage/ragchat-api/index.html               |   64 +-
 coverage/ragchat-api/models/Chat.js.html      |    2 +-
 coverage/ragchat-api/models/User.js.html      |    2 +-
 coverage/ragchat-api/models/index.html        |    2 +-
 coverage/ragchat-api/routes/ai.js.html        |   11 +-
 coverage/ragchat-api/routes/auth.js.html      |    4 +-
 .../ragchat-api/routes/embeddings.js.html     |    2 +-
 coverage/ragchat-api/routes/index.html        |   10 +-
 coverage/ragchat-api/routes/users.js.html     |    2 +-
 coverage/ragchat-api/server.js.html           |  166 -
 coverage/ragchat-api/utils/handleAI.js.html   |  685 ---
 coverage/ragchat-api/utils/handleDB.js.html   |  622 ---
 .../ragchat-api/utils/handleErrors.js.html    |   88 +-
 .../ragchat-api/utils/handleMailer.js.html    |  169 -
 .../ragchat-api/utils/handleSchemes.js.html   |   20 +-
 .../ragchat-api/utils/handleTokens.js.html    |   84 +-
 .../utils/handleValidations.js.html           |   40 +-
 coverage/ragchat-api/utils/index.html         |   89 +-
 .../ragchat-api/validationSchemes/AI.js.html  |    2 +-
 .../validationSchemes/Auth.js.html            |   11 +-
 .../validationSchemes/User.js.html            |    2 +-
 .../ragchat-api/validationSchemes/index.html  |   10 +-
 routes/ai.js                                  |    1 -
 routes/embeddings.js                          |    1 -
 utils/handleAI.js                             |  224 +-
 vitest.config.js                              |   11 +
 58 files changed, 13272 insertions(+), 5164 deletions(-)
 create mode 100644 coverage/ragchat-api/__tests__/ai/chat.test.js.html
 create mode 100644 coverage/ragchat-api/__tests__/ai/chats.test.js.html
 create mode 100644 coverage/ragchat-api/__tests__/ai/delete.test.js.html
 create mode 100644 coverage/ragchat-api/__tests__/ai/index.html
 create mode 100644 coverage/ragchat-api/__tests__/ai/model.test.js.html
 create mode 100644 coverage/ragchat-api/__tests__/ai/models.test.js.html
 create mode 100644 coverage/ragchat-api/__tests__/ai/pull.test.js.html
 create mode 100644 coverage/ragchat-api/__tests__/ai/status.test.js.html
 create mode 100644 coverage/ragchat-api/__tests__/auth/confirmpasswordreset.test.js.html
 create mode 100644 coverage/ragchat-api/__tests__/auth/confirmverification.test.js.html
 create mode 100644 coverage/ragchat-api/__tests__/auth/index.html
 create mode 100644 coverage/ragchat-api/__tests__/auth/login.test.js.html
 create mode 100644 coverage/ragchat-api/__tests__/auth/logout.test.js.html
 create mode 100644 coverage/ragchat-api/__tests__/auth/refreshjwt.test.js.html
 create mode 100644 coverage/ragchat-api/__tests__/auth/requestpasswordreset.test.js.html
 create mode 100644 coverage/ragchat-api/__tests__/auth/requestverification.test.js.html
 create mode 100644 coverage/ragchat-api/__tests__/users/index.html
 create mode 100644 coverage/ragchat-api/__tests__/users/signup.test.js.html
 delete mode 100644 coverage/ragchat-api/controllers/Embeddings.js.html
 delete mode 100644 coverage/ragchat-api/ecosystem.config.cjs.html
 delete mode 100644 coverage/ragchat-api/server.js.html
 delete mode 100644 coverage/ragchat-api/utils/handleAI.js.html
 delete mode 100644 coverage/ragchat-api/utils/handleDB.js.html
 delete mode 100644 coverage/ragchat-api/utils/handleMailer.js.html

diff --git a/.env.template b/.env.template
index cb3a65b..1fed17a 100644
--- a/.env.template
+++ b/.env.template
@@ -156,3 +156,8 @@ RAG_FOLDER=/RAGFiles
 
 # delete embeddings if RAG File is deleted [true|false]
 RAG_DELETE_EMBEDDINGS=true
+
+# [optional] enable tracing to LangSmith https://docs.smith.langchain.com/
+LANGCHAIN_TRACING_V2=true
+# if LANGCHAIN_TRACING_V2 === true API-Key is needed
+LANGCHAIN_API_KEY=lsv2_sk_c580367cGibberish82
\ No newline at end of file
diff --git a/README.md b/README.md
index c36cede..675d975 100644
--- a/README.md
+++ b/README.md
@@ -44,5 +44,4 @@ pm2 start ./ecosystem.config.cjs
 - [CheatSheet](https://gist.github.com/danielduckworth/b318e1297d9d953a2fe127738ce9e67c)
 
 # Roadmap
-- [ ] configure URLs in mail templates to match front end
-- [ ] stresstest with artillery
\ No newline at end of file
+- [ ] polishing
\ No newline at end of file
diff --git a/__tests__/manualREST/ollama.rest b/__tests__/manualREST/ollama.rest
index 73fea57..a804d80 100644
--- a/__tests__/manualREST/ollama.rest
+++ b/__tests__/manualREST/ollama.rest
@@ -14,7 +14,6 @@
 # JWT
 @token = {{login.response.body.accessToken}}
 # id for chat history
-@chatID = {{resumeChat.response.body.chat.id}}
 @chatID = {{startChat.response.body.chat.id}}
 
 
@@ -104,15 +103,10 @@ Accept: application/json
 Content-Type: application/json
 
 {
-  "input": "What's the diameter of mercury",
+  "input": "{{q1}}",
   "model": "llama3"
 }
 
-# {
-#   "input": "Under what path could members of the working group can find the exam git directory?",
-#   "model": "llama3"
-# }
-
 ### generate a follow up question
 # @name resumeChat
 POST {{host}}/ai/chat
@@ -122,6 +116,6 @@ Content-Type: application/json
 
 {
   "chatId": "{{chatID}}",  
-  "input": "What else can be found under that path?",
+  "input": "{{q2}}",
   "model": "llama3"
 }
\ No newline at end of file
diff --git a/controllers/Embeddings.js b/controllers/Embeddings.js
index 3318028..edec43d 100644
--- a/controllers/Embeddings.js
+++ b/controllers/Embeddings.js
@@ -57,9 +57,9 @@ export const vectorStoreConnection = async () => {
 /** *******************************************************
  * PROVIDE RETRIEVER
  */
-export const retriever = async () => {
+export const getRetriever = async () => {
   let vectorStore = await vectorStoreConnection();
-  return vectorStore.asRetriever();
+  return vectorStore.asRetriever({ k: 6, searchType: 'similarity' });
 };
 
 
diff --git a/coverage/clover.xml b/coverage/clover.xml
index 5f34f7c..3126d5e 100644
--- a/coverage/clover.xml
+++ b/coverage/clover.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<coverage generated="1722194604544" clover="3.2.0">
-  <project timestamp="1722194604544" name="All files">
-    <metrics statements="2326" coveredstatements="1633" conditionals="131" coveredconditionals="105" methods="76" coveredmethods="40" elements="2533" coveredelements="1778" complexity="0" loc="2326" ncloc="2326" packages="6" files="23" classes="23"/>
+<coverage generated="1723046384958" clover="3.2.0">
+  <project timestamp="1723046384958" name="All files">
+    <metrics statements="3338" coveredstatements="3214" conditionals="453" coveredconditionals="423" methods="52" coveredmethods="47" elements="3843" coveredelements="3684" complexity="0" loc="3338" ncloc="3338" packages="9" files="32" classes="32"/>
     <package name="ragchat-api">
-      <metrics statements="121" coveredstatements="71" conditionals="4" coveredconditionals="1" methods="2" coveredmethods="0"/>
-      <file name="app.js" path="/home/embruch/ragchat-api/app.js">
-        <metrics statements="81" coveredstatements="71" conditionals="2" coveredconditionals="1" methods="0" coveredmethods="0"/>
+      <metrics statements="120" coveredstatements="105" conditionals="5" coveredconditionals="3" methods="0" coveredmethods="0"/>
+      <file name="app.js" path="/local/embruch/ragchat-api/app.js">
+        <metrics statements="120" coveredstatements="105" conditionals="5" coveredconditionals="3" methods="0" coveredmethods="0"/>
         <line num="1" count="1" type="stmt"/>
         <line num="2" count="1" type="stmt"/>
         <line num="3" count="1" type="stmt"/>
@@ -20,21 +20,1414 @@
         <line num="12" count="1" type="stmt"/>
         <line num="13" count="1" type="stmt"/>
         <line num="14" count="1" type="stmt"/>
-        <line num="15" count="1" type="cond" truecount="0" falsecount="1"/>
-        <line num="16" count="0" type="stmt"/>
-        <line num="17" count="0" type="stmt"/>
-        <line num="18" count="0" type="stmt"/>
-        <line num="19" count="0" type="stmt"/>
-        <line num="20" count="0" type="stmt"/>
-        <line num="21" count="0" type="stmt"/>
-        <line num="22" count="0" type="stmt"/>
-        <line num="23" count="0" type="stmt"/>
-        <line num="24" count="0" type="stmt"/>
-        <line num="25" count="0" type="stmt"/>
-        <line num="26" count="1" type="stmt"/>
-        <line num="27" count="1" type="stmt"/>
-        <line num="28" count="1" type="stmt"/>
-        <line num="29" count="1" type="stmt"/>
+        <line num="15" count="1" type="stmt"/>
+        <line num="16" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="17" count="66" type="cond" truecount="1" falsecount="0"/>
+        <line num="18" count="228" type="stmt"/>
+        <line num="19" count="228" type="stmt"/>
+        <line num="20" count="228" type="cond" truecount="1" falsecount="0"/>
+        <line num="21" count="96" type="stmt"/>
+        <line num="22" count="96" type="stmt"/>
+        <line num="23" count="96" type="stmt"/>
+        <line num="24" count="96" type="stmt"/>
+        <line num="25" count="96" type="stmt"/>
+        <line num="26" count="96" type="stmt"/>
+        <line num="27" count="96" type="stmt"/>
+        <line num="28" count="96" type="stmt"/>
+        <line num="29" count="96" type="stmt"/>
+        <line num="30" count="96" type="stmt"/>
+        <line num="31" count="96" type="stmt"/>
+        <line num="32" count="96" type="stmt"/>
+        <line num="33" count="96" type="stmt"/>
+        <line num="34" count="96" type="stmt"/>
+        <line num="35" count="228" type="cond" truecount="0" falsecount="1"/>
+        <line num="36" count="0" type="stmt"/>
+        <line num="37" count="0" type="stmt"/>
+        <line num="38" count="0" type="stmt"/>
+        <line num="39" count="0" type="stmt"/>
+        <line num="40" count="0" type="stmt"/>
+        <line num="41" count="228" type="stmt"/>
+        <line num="42" count="228" type="stmt"/>
+        <line num="43" count="1" type="stmt"/>
+        <line num="44" count="1" type="stmt"/>
+        <line num="45" count="1" type="stmt"/>
+        <line num="46" count="1" type="stmt"/>
+        <line num="47" count="1" type="stmt"/>
+        <line num="48" count="1" type="stmt"/>
+        <line num="49" count="1" type="stmt"/>
+        <line num="50" count="1" type="stmt"/>
+        <line num="51" count="1" type="stmt"/>
+        <line num="52" count="1" type="stmt"/>
+        <line num="53" count="1" type="stmt"/>
+        <line num="54" count="1" type="cond" truecount="0" falsecount="1"/>
+        <line num="55" count="0" type="stmt"/>
+        <line num="56" count="0" type="stmt"/>
+        <line num="57" count="0" type="stmt"/>
+        <line num="58" count="0" type="stmt"/>
+        <line num="59" count="0" type="stmt"/>
+        <line num="60" count="0" type="stmt"/>
+        <line num="61" count="0" type="stmt"/>
+        <line num="62" count="0" type="stmt"/>
+        <line num="63" count="0" type="stmt"/>
+        <line num="64" count="0" type="stmt"/>
+        <line num="65" count="1" type="stmt"/>
+        <line num="66" count="1" type="stmt"/>
+        <line num="67" count="1" type="stmt"/>
+        <line num="68" count="1" type="stmt"/>
+        <line num="69" count="1" type="stmt"/>
+        <line num="70" count="1" type="stmt"/>
+        <line num="71" count="1" type="stmt"/>
+        <line num="72" count="1" type="stmt"/>
+        <line num="73" count="1" type="stmt"/>
+        <line num="74" count="1" type="stmt"/>
+        <line num="75" count="1" type="stmt"/>
+        <line num="76" count="1" type="stmt"/>
+        <line num="77" count="1" type="stmt"/>
+        <line num="78" count="1" type="stmt"/>
+        <line num="79" count="1" type="stmt"/>
+        <line num="80" count="1" type="stmt"/>
+        <line num="81" count="1" type="stmt"/>
+        <line num="82" count="1" type="stmt"/>
+        <line num="83" count="1" type="stmt"/>
+        <line num="84" count="1" type="stmt"/>
+        <line num="85" count="1" type="stmt"/>
+        <line num="86" count="1" type="stmt"/>
+        <line num="87" count="1" type="stmt"/>
+        <line num="88" count="1" type="stmt"/>
+        <line num="89" count="1" type="stmt"/>
+        <line num="90" count="1" type="stmt"/>
+        <line num="91" count="1" type="stmt"/>
+        <line num="92" count="1" type="stmt"/>
+        <line num="93" count="1" type="stmt"/>
+        <line num="94" count="1" type="stmt"/>
+        <line num="95" count="1" type="stmt"/>
+        <line num="96" count="1" type="stmt"/>
+        <line num="97" count="1" type="stmt"/>
+        <line num="98" count="1" type="stmt"/>
+        <line num="99" count="1" type="stmt"/>
+        <line num="100" count="1" type="stmt"/>
+        <line num="101" count="1" type="stmt"/>
+        <line num="102" count="1" type="stmt"/>
+        <line num="103" count="1" type="stmt"/>
+        <line num="104" count="1" type="stmt"/>
+        <line num="105" count="1" type="stmt"/>
+        <line num="106" count="1" type="stmt"/>
+        <line num="107" count="1" type="stmt"/>
+        <line num="108" count="1" type="stmt"/>
+        <line num="109" count="1" type="stmt"/>
+        <line num="110" count="1" type="stmt"/>
+        <line num="111" count="1" type="stmt"/>
+        <line num="112" count="1" type="stmt"/>
+        <line num="113" count="1" type="stmt"/>
+        <line num="114" count="1" type="stmt"/>
+        <line num="115" count="1" type="stmt"/>
+        <line num="116" count="1" type="stmt"/>
+        <line num="117" count="1" type="stmt"/>
+        <line num="118" count="1" type="stmt"/>
+        <line num="119" count="1" type="stmt"/>
+        <line num="120" count="1" type="stmt"/>
+      </file>
+    </package>
+    <package name="ragchat-api.__tests__.ai">
+      <metrics statements="881" coveredstatements="879" conditionals="156" coveredconditionals="156" methods="6" coveredmethods="6"/>
+      <file name="chat.test.js" path="/local/embruch/ragchat-api/__tests__/ai/chat.test.js">
+        <metrics statements="172" coveredstatements="172" conditionals="32" coveredconditionals="32" methods="1" coveredmethods="1"/>
+        <line num="1" count="1" type="stmt"/>
+        <line num="2" count="1" type="stmt"/>
+        <line num="3" count="1" type="stmt"/>
+        <line num="4" count="1" type="stmt"/>
+        <line num="6" count="1" type="stmt"/>
+        <line num="7" count="1" type="stmt"/>
+        <line num="8" count="1" type="stmt"/>
+        <line num="9" count="1" type="stmt"/>
+        <line num="10" count="1" type="stmt"/>
+        <line num="11" count="1" type="stmt"/>
+        <line num="12" count="1" type="stmt"/>
+        <line num="13" count="1" type="stmt"/>
+        <line num="14" count="1" type="stmt"/>
+        <line num="115" count="1" type="stmt"/>
+        <line num="116" count="1" type="stmt"/>
+        <line num="117" count="1" type="stmt"/>
+        <line num="118" count="1" type="stmt"/>
+        <line num="119" count="1" type="stmt"/>
+        <line num="120" count="1" type="stmt"/>
+        <line num="130" count="1" type="stmt"/>
+        <line num="131" count="1" type="stmt"/>
+        <line num="132" count="1" type="stmt"/>
+        <line num="143" count="1" type="stmt"/>
+        <line num="144" count="1" type="stmt"/>
+        <line num="145" count="1" type="stmt"/>
+        <line num="146" count="1" type="stmt"/>
+        <line num="147" count="1" type="stmt"/>
+        <line num="148" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="149" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="150" count="5" type="stmt"/>
+        <line num="151" count="1" type="stmt"/>
+        <line num="152" count="1" type="stmt"/>
+        <line num="153" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="154" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="155" count="1" type="stmt"/>
+        <line num="156" count="1" type="stmt"/>
+        <line num="157" count="1" type="stmt"/>
+        <line num="158" count="1" type="stmt"/>
+        <line num="159" count="1" type="stmt"/>
+        <line num="160" count="1" type="stmt"/>
+        <line num="161" count="1" type="stmt"/>
+        <line num="162" count="1" type="stmt"/>
+        <line num="163" count="1" type="stmt"/>
+        <line num="164" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="165" count="1" type="stmt"/>
+        <line num="166" count="1" type="stmt"/>
+        <line num="167" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="168" count="1" type="stmt"/>
+        <line num="169" count="1" type="stmt"/>
+        <line num="170" count="1" type="stmt"/>
+        <line num="171" count="1" type="stmt"/>
+        <line num="172" count="1" type="stmt"/>
+        <line num="173" count="1" type="stmt"/>
+        <line num="174" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="175" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="176" count="1" type="stmt"/>
+        <line num="177" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="178" count="1" type="stmt"/>
+        <line num="179" count="1" type="stmt"/>
+        <line num="180" count="1" type="stmt"/>
+        <line num="181" count="1" type="stmt"/>
+        <line num="182" count="1" type="stmt"/>
+        <line num="183" count="1" type="stmt"/>
+        <line num="184" count="1" type="stmt"/>
+        <line num="185" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="186" count="1" type="stmt"/>
+        <line num="187" count="1" type="stmt"/>
+        <line num="188" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="189" count="1" type="stmt"/>
+        <line num="190" count="1" type="stmt"/>
+        <line num="191" count="1" type="stmt"/>
+        <line num="192" count="1" type="stmt"/>
+        <line num="193" count="1" type="stmt"/>
+        <line num="194" count="1" type="stmt"/>
+        <line num="195" count="1" type="stmt"/>
+        <line num="196" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="197" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="198" count="1" type="stmt"/>
+        <line num="199" count="1" type="stmt"/>
+        <line num="200" count="1" type="stmt"/>
+        <line num="201" count="1" type="stmt"/>
+        <line num="202" count="1" type="stmt"/>
+        <line num="203" count="1" type="stmt"/>
+        <line num="204" count="1" type="stmt"/>
+        <line num="205" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="206" count="1" type="stmt"/>
+        <line num="207" count="1" type="stmt"/>
+        <line num="208" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="209" count="1" type="stmt"/>
+        <line num="210" count="1" type="stmt"/>
+        <line num="211" count="1" type="stmt"/>
+        <line num="212" count="1" type="stmt"/>
+        <line num="213" count="1" type="stmt"/>
+        <line num="214" count="1" type="stmt"/>
+        <line num="215" count="1" type="stmt"/>
+        <line num="216" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="217" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="218" count="1" type="stmt"/>
+        <line num="219" count="1" type="stmt"/>
+        <line num="220" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="221" count="1" type="stmt"/>
+        <line num="222" count="1" type="stmt"/>
+        <line num="223" count="1" type="stmt"/>
+        <line num="224" count="1" type="stmt"/>
+        <line num="225" count="1" type="stmt"/>
+        <line num="226" count="1" type="stmt"/>
+        <line num="227" count="1" type="stmt"/>
+        <line num="228" count="1" type="stmt"/>
+        <line num="229" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="230" count="1" type="stmt"/>
+        <line num="231" count="1" type="stmt"/>
+        <line num="232" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="233" count="1" type="stmt"/>
+        <line num="234" count="1" type="stmt"/>
+        <line num="235" count="1" type="stmt"/>
+        <line num="236" count="1" type="stmt"/>
+        <line num="237" count="1" type="stmt"/>
+        <line num="238" count="1" type="stmt"/>
+        <line num="239" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="240" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="241" count="1" type="stmt"/>
+        <line num="242" count="1" type="stmt"/>
+        <line num="243" count="1" type="stmt"/>
+        <line num="244" count="1" type="stmt"/>
+        <line num="245" count="1" type="stmt"/>
+        <line num="246" count="1" type="stmt"/>
+        <line num="247" count="1" type="stmt"/>
+        <line num="248" count="1" type="stmt"/>
+        <line num="249" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="250" count="1" type="stmt"/>
+        <line num="251" count="1" type="stmt"/>
+        <line num="252" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="253" count="1" type="stmt"/>
+        <line num="254" count="1" type="stmt"/>
+        <line num="255" count="1" type="stmt"/>
+        <line num="256" count="1" type="stmt"/>
+        <line num="257" count="1" type="stmt"/>
+        <line num="258" count="1" type="stmt"/>
+        <line num="259" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="260" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="261" count="1" type="stmt"/>
+        <line num="262" count="1" type="stmt"/>
+        <line num="263" count="1" type="stmt"/>
+        <line num="264" count="1" type="stmt"/>
+        <line num="265" count="1" type="stmt"/>
+        <line num="266" count="1" type="stmt"/>
+        <line num="267" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="268" count="1" type="stmt"/>
+        <line num="269" count="1" type="stmt"/>
+        <line num="270" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="271" count="1" type="stmt"/>
+        <line num="272" count="1" type="stmt"/>
+        <line num="273" count="1" type="stmt"/>
+        <line num="274" count="1" type="stmt"/>
+        <line num="275" count="1" type="stmt"/>
+        <line num="276" count="1" type="stmt"/>
+        <line num="277" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="278" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="279" count="1" type="stmt"/>
+        <line num="280" count="1" type="stmt"/>
+        <line num="281" count="1" type="stmt"/>
+        <line num="282" count="1" type="stmt"/>
+        <line num="283" count="1" type="stmt"/>
+        <line num="284" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="285" count="1" type="stmt"/>
+        <line num="286" count="1" type="stmt"/>
+        <line num="287" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="288" count="1" type="stmt"/>
+        <line num="289" count="1" type="stmt"/>
+        <line num="290" count="1" type="stmt"/>
+        <line num="291" count="1" type="stmt"/>
+        <line num="292" count="1" type="stmt"/>
+      </file>
+      <file name="chats.test.js" path="/local/embruch/ragchat-api/__tests__/ai/chats.test.js">
+        <metrics statements="82" coveredstatements="82" conditionals="14" coveredconditionals="14" methods="1" coveredmethods="1"/>
+        <line num="1" count="1" type="stmt"/>
+        <line num="2" count="1" type="stmt"/>
+        <line num="3" count="1" type="stmt"/>
+        <line num="4" count="1" type="stmt"/>
+        <line num="6" count="1" type="stmt"/>
+        <line num="7" count="1" type="stmt"/>
+        <line num="8" count="1" type="stmt"/>
+        <line num="9" count="1" type="stmt"/>
+        <line num="10" count="1" type="stmt"/>
+        <line num="11" count="1" type="stmt"/>
+        <line num="12" count="1" type="stmt"/>
+        <line num="13" count="1" type="stmt"/>
+        <line num="14" count="1" type="stmt"/>
+        <line num="15" count="1" type="stmt"/>
+        <line num="131" count="1" type="stmt"/>
+        <line num="132" count="1" type="stmt"/>
+        <line num="133" count="1" type="stmt"/>
+        <line num="134" count="1" type="stmt"/>
+        <line num="135" count="1" type="stmt"/>
+        <line num="136" count="1" type="stmt"/>
+        <line num="137" count="1" type="stmt"/>
+        <line num="146" count="1" type="stmt"/>
+        <line num="147" count="1" type="stmt"/>
+        <line num="148" count="1" type="stmt"/>
+        <line num="149" count="1" type="stmt"/>
+        <line num="150" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="151" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="152" count="1" type="stmt"/>
+        <line num="153" count="1" type="stmt"/>
+        <line num="154" count="1" type="stmt"/>
+        <line num="155" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="156" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="157" count="1" type="stmt"/>
+        <line num="158" count="1" type="stmt"/>
+        <line num="159" count="1" type="stmt"/>
+        <line num="160" count="1" type="stmt"/>
+        <line num="161" count="1" type="stmt"/>
+        <line num="162" count="1" type="stmt"/>
+        <line num="163" count="1" type="stmt"/>
+        <line num="164" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="165" count="1" type="stmt"/>
+        <line num="166" count="1" type="stmt"/>
+        <line num="167" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="168" count="1" type="stmt"/>
+        <line num="169" count="1" type="stmt"/>
+        <line num="170" count="1" type="stmt"/>
+        <line num="171" count="1" type="stmt"/>
+        <line num="172" count="1" type="stmt"/>
+        <line num="173" count="1" type="stmt"/>
+        <line num="174" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="175" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="176" count="1" type="stmt"/>
+        <line num="177" count="1" type="stmt"/>
+        <line num="178" count="1" type="stmt"/>
+        <line num="179" count="1" type="stmt"/>
+        <line num="180" count="1" type="stmt"/>
+        <line num="181" count="1" type="stmt"/>
+        <line num="182" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="183" count="1" type="stmt"/>
+        <line num="184" count="1" type="stmt"/>
+        <line num="185" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="186" count="1" type="stmt"/>
+        <line num="187" count="1" type="stmt"/>
+        <line num="188" count="1" type="stmt"/>
+        <line num="189" count="1" type="stmt"/>
+        <line num="190" count="1" type="stmt"/>
+        <line num="191" count="1" type="stmt"/>
+        <line num="192" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="193" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="194" count="1" type="stmt"/>
+        <line num="195" count="1" type="stmt"/>
+        <line num="196" count="1" type="stmt"/>
+        <line num="197" count="1" type="stmt"/>
+        <line num="198" count="1" type="stmt"/>
+        <line num="199" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="200" count="1" type="stmt"/>
+        <line num="201" count="1" type="stmt"/>
+        <line num="202" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="203" count="1" type="stmt"/>
+        <line num="204" count="1" type="stmt"/>
+        <line num="205" count="1" type="stmt"/>
+        <line num="206" count="1" type="stmt"/>
+      </file>
+      <file name="delete.test.js" path="/local/embruch/ragchat-api/__tests__/ai/delete.test.js">
+        <metrics statements="154" coveredstatements="153" conditionals="27" coveredconditionals="27" methods="1" coveredmethods="1"/>
+        <line num="1" count="1" type="stmt"/>
+        <line num="2" count="1" type="stmt"/>
+        <line num="3" count="1" type="stmt"/>
+        <line num="4" count="1" type="stmt"/>
+        <line num="6" count="1" type="stmt"/>
+        <line num="7" count="1" type="stmt"/>
+        <line num="8" count="1" type="stmt"/>
+        <line num="9" count="1" type="stmt"/>
+        <line num="10" count="1" type="stmt"/>
+        <line num="11" count="1" type="stmt"/>
+        <line num="12" count="1" type="stmt"/>
+        <line num="13" count="1" type="stmt"/>
+        <line num="14" count="1" type="stmt"/>
+        <line num="35" count="1" type="stmt"/>
+        <line num="36" count="1" type="stmt"/>
+        <line num="37" count="1" type="stmt"/>
+        <line num="38" count="1" type="stmt"/>
+        <line num="39" count="1" type="stmt"/>
+        <line num="40" count="1" type="stmt"/>
+        <line num="48" count="1" type="stmt"/>
+        <line num="49" count="1" type="stmt"/>
+        <line num="50" count="1" type="stmt"/>
+        <line num="51" count="1" type="stmt"/>
+        <line num="58" count="1" type="stmt"/>
+        <line num="59" count="1" type="stmt"/>
+        <line num="60" count="1" type="stmt"/>
+        <line num="61" count="1" type="stmt"/>
+        <line num="62" count="1" type="stmt"/>
+        <line num="63" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="64" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="65" count="4" type="stmt"/>
+        <line num="66" count="1" type="stmt"/>
+        <line num="67" count="1" type="stmt"/>
+        <line num="68" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="69" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="70" count="1" type="stmt"/>
+        <line num="71" count="1" type="stmt"/>
+        <line num="72" count="1" type="stmt"/>
+        <line num="73" count="1" type="stmt"/>
+        <line num="74" count="1" type="stmt"/>
+        <line num="75" count="1" type="stmt"/>
+        <line num="76" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="77" count="1" type="stmt"/>
+        <line num="78" count="1" type="stmt"/>
+        <line num="79" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="80" count="1" type="stmt"/>
+        <line num="81" count="1" type="stmt"/>
+        <line num="82" count="1" type="stmt"/>
+        <line num="83" count="1" type="stmt"/>
+        <line num="84" count="1" type="stmt"/>
+        <line num="85" count="1" type="stmt"/>
+        <line num="86" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="87" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="88" count="1" type="stmt"/>
+        <line num="89" count="1" type="stmt"/>
+        <line num="90" count="1" type="stmt"/>
+        <line num="91" count="1" type="stmt"/>
+        <line num="92" count="1" type="stmt"/>
+        <line num="93" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="94" count="1" type="stmt"/>
+        <line num="95" count="1" type="stmt"/>
+        <line num="96" count="1" type="stmt"/>
+        <line num="97" count="1" type="stmt"/>
+        <line num="98" count="1" type="stmt"/>
+        <line num="99" count="1" type="stmt"/>
+        <line num="100" count="1" type="stmt"/>
+        <line num="101" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="102" count="1" type="stmt"/>
+        <line num="103" count="1" type="stmt"/>
+        <line num="104" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="105" count="1" type="stmt"/>
+        <line num="106" count="1" type="stmt"/>
+        <line num="107" count="1" type="stmt"/>
+        <line num="108" count="1" type="stmt"/>
+        <line num="109" count="1" type="stmt"/>
+        <line num="110" count="1" type="stmt"/>
+        <line num="111" count="1" type="stmt"/>
+        <line num="112" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="113" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="114" count="1" type="stmt"/>
+        <line num="115" count="1" type="stmt"/>
+        <line num="116" count="1" type="stmt"/>
+        <line num="117" count="1" type="stmt"/>
+        <line num="118" count="1" type="stmt"/>
+        <line num="119" count="1" type="stmt"/>
+        <line num="120" count="1" type="stmt"/>
+        <line num="121" count="1" type="stmt"/>
+        <line num="122" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="123" count="1" type="stmt"/>
+        <line num="124" count="1" type="stmt"/>
+        <line num="125" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="126" count="1" type="stmt"/>
+        <line num="127" count="1" type="stmt"/>
+        <line num="128" count="1" type="stmt"/>
+        <line num="129" count="1" type="stmt"/>
+        <line num="130" count="1" type="stmt"/>
+        <line num="131" count="1" type="stmt"/>
+        <line num="132" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="133" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="134" count="1" type="stmt"/>
+        <line num="135" count="1" type="stmt"/>
+        <line num="136" count="0" type="stmt"/>
+        <line num="137" count="1" type="stmt"/>
+        <line num="138" count="1" type="stmt"/>
+        <line num="139" count="1" type="stmt"/>
+        <line num="140" count="1" type="stmt"/>
+        <line num="141" count="1" type="stmt"/>
+        <line num="142" count="1" type="stmt"/>
+        <line num="143" count="1" type="stmt"/>
+        <line num="144" count="1" type="stmt"/>
+        <line num="145" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="146" count="1" type="stmt"/>
+        <line num="147" count="1" type="stmt"/>
+        <line num="148" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="149" count="1" type="stmt"/>
+        <line num="150" count="1" type="stmt"/>
+        <line num="151" count="1" type="stmt"/>
+        <line num="152" count="1" type="stmt"/>
+        <line num="153" count="1" type="stmt"/>
+        <line num="154" count="1" type="stmt"/>
+        <line num="155" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="156" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="157" count="1" type="stmt"/>
+        <line num="158" count="1" type="stmt"/>
+        <line num="159" count="1" type="stmt"/>
+        <line num="160" count="1" type="stmt"/>
+        <line num="161" count="1" type="stmt"/>
+        <line num="162" count="1" type="stmt"/>
+        <line num="163" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="164" count="1" type="stmt"/>
+        <line num="165" count="1" type="stmt"/>
+        <line num="166" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="167" count="1" type="stmt"/>
+        <line num="168" count="1" type="stmt"/>
+        <line num="169" count="1" type="stmt"/>
+        <line num="170" count="1" type="stmt"/>
+        <line num="171" count="1" type="stmt"/>
+        <line num="172" count="1" type="stmt"/>
+        <line num="173" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="174" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="175" count="1" type="stmt"/>
+        <line num="176" count="1" type="stmt"/>
+        <line num="177" count="1" type="stmt"/>
+        <line num="178" count="1" type="stmt"/>
+        <line num="179" count="1" type="stmt"/>
+        <line num="180" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="181" count="1" type="stmt"/>
+        <line num="182" count="1" type="stmt"/>
+        <line num="183" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="184" count="1" type="stmt"/>
+        <line num="185" count="1" type="stmt"/>
+        <line num="186" count="1" type="stmt"/>
+        <line num="187" count="1" type="stmt"/>
+        <line num="188" count="1" type="stmt"/>
+      </file>
+      <file name="model.test.js" path="/local/embruch/ragchat-api/__tests__/ai/model.test.js">
+        <metrics statements="135" coveredstatements="135" conditionals="23" coveredconditionals="23" methods="1" coveredmethods="1"/>
+        <line num="1" count="1" type="stmt"/>
+        <line num="2" count="1" type="stmt"/>
+        <line num="3" count="1" type="stmt"/>
+        <line num="4" count="1" type="stmt"/>
+        <line num="6" count="1" type="stmt"/>
+        <line num="7" count="1" type="stmt"/>
+        <line num="8" count="1" type="stmt"/>
+        <line num="9" count="1" type="stmt"/>
+        <line num="10" count="1" type="stmt"/>
+        <line num="11" count="1" type="stmt"/>
+        <line num="12" count="1" type="stmt"/>
+        <line num="13" count="1" type="stmt"/>
+        <line num="14" count="1" type="stmt"/>
+        <line num="15" count="1" type="stmt"/>
+        <line num="16" count="1" type="stmt"/>
+        <line num="53" count="1" type="stmt"/>
+        <line num="54" count="1" type="stmt"/>
+        <line num="55" count="1" type="stmt"/>
+        <line num="56" count="1" type="stmt"/>
+        <line num="57" count="1" type="stmt"/>
+        <line num="58" count="1" type="stmt"/>
+        <line num="66" count="1" type="stmt"/>
+        <line num="67" count="1" type="stmt"/>
+        <line num="68" count="1" type="stmt"/>
+        <line num="75" count="1" type="stmt"/>
+        <line num="76" count="1" type="stmt"/>
+        <line num="77" count="1" type="stmt"/>
+        <line num="78" count="1" type="stmt"/>
+        <line num="79" count="1" type="stmt"/>
+        <line num="80" count="1" type="stmt"/>
+        <line num="81" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="82" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="83" count="3" type="stmt"/>
+        <line num="84" count="1" type="stmt"/>
+        <line num="85" count="1" type="stmt"/>
+        <line num="86" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="87" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="88" count="1" type="stmt"/>
+        <line num="89" count="1" type="stmt"/>
+        <line num="90" count="1" type="stmt"/>
+        <line num="91" count="1" type="stmt"/>
+        <line num="92" count="1" type="stmt"/>
+        <line num="93" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="94" count="1" type="stmt"/>
+        <line num="95" count="1" type="stmt"/>
+        <line num="96" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="97" count="1" type="stmt"/>
+        <line num="98" count="1" type="stmt"/>
+        <line num="99" count="1" type="stmt"/>
+        <line num="100" count="1" type="stmt"/>
+        <line num="101" count="1" type="stmt"/>
+        <line num="102" count="1" type="stmt"/>
+        <line num="103" count="1" type="stmt"/>
+        <line num="104" count="1" type="stmt"/>
+        <line num="105" count="1" type="stmt"/>
+        <line num="106" count="1" type="stmt"/>
+        <line num="107" count="1" type="stmt"/>
+        <line num="108" count="1" type="stmt"/>
+        <line num="109" count="1" type="stmt"/>
+        <line num="110" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="111" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="112" count="1" type="stmt"/>
+        <line num="113" count="1" type="stmt"/>
+        <line num="114" count="1" type="stmt"/>
+        <line num="115" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="116" count="1" type="stmt"/>
+        <line num="117" count="1" type="stmt"/>
+        <line num="118" count="1" type="stmt"/>
+        <line num="119" count="1" type="stmt"/>
+        <line num="120" count="1" type="stmt"/>
+        <line num="121" count="1" type="stmt"/>
+        <line num="122" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="123" count="1" type="stmt"/>
+        <line num="124" count="1" type="stmt"/>
+        <line num="125" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="126" count="1" type="stmt"/>
+        <line num="127" count="1" type="stmt"/>
+        <line num="128" count="1" type="stmt"/>
+        <line num="129" count="1" type="stmt"/>
+        <line num="130" count="1" type="stmt"/>
+        <line num="131" count="1" type="stmt"/>
+        <line num="132" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="133" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="134" count="1" type="stmt"/>
+        <line num="135" count="1" type="stmt"/>
+        <line num="136" count="1" type="stmt"/>
+        <line num="137" count="1" type="stmt"/>
+        <line num="138" count="1" type="stmt"/>
+        <line num="139" count="1" type="stmt"/>
+        <line num="140" count="1" type="stmt"/>
+        <line num="141" count="1" type="stmt"/>
+        <line num="142" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="143" count="1" type="stmt"/>
+        <line num="144" count="1" type="stmt"/>
+        <line num="145" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="146" count="1" type="stmt"/>
+        <line num="147" count="1" type="stmt"/>
+        <line num="148" count="1" type="stmt"/>
+        <line num="149" count="1" type="stmt"/>
+        <line num="150" count="1" type="stmt"/>
+        <line num="151" count="1" type="stmt"/>
+        <line num="152" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="153" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="154" count="1" type="stmt"/>
+        <line num="155" count="1" type="stmt"/>
+        <line num="156" count="1" type="stmt"/>
+        <line num="157" count="1" type="stmt"/>
+        <line num="158" count="1" type="stmt"/>
+        <line num="159" count="1" type="stmt"/>
+        <line num="160" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="161" count="1" type="stmt"/>
+        <line num="162" count="1" type="stmt"/>
+        <line num="163" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="164" count="1" type="stmt"/>
+        <line num="165" count="1" type="stmt"/>
+        <line num="166" count="1" type="stmt"/>
+        <line num="167" count="1" type="stmt"/>
+        <line num="168" count="1" type="stmt"/>
+        <line num="169" count="1" type="stmt"/>
+        <line num="170" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="171" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="172" count="1" type="stmt"/>
+        <line num="173" count="1" type="stmt"/>
+        <line num="174" count="1" type="stmt"/>
+        <line num="175" count="1" type="stmt"/>
+        <line num="176" count="1" type="stmt"/>
+        <line num="177" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="178" count="1" type="stmt"/>
+        <line num="179" count="1" type="stmt"/>
+        <line num="180" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="181" count="1" type="stmt"/>
+        <line num="182" count="1" type="stmt"/>
+        <line num="183" count="1" type="stmt"/>
+        <line num="184" count="1" type="stmt"/>
+        <line num="185" count="1" type="stmt"/>
+      </file>
+      <file name="models.test.js" path="/local/embruch/ragchat-api/__tests__/ai/models.test.js">
+        <metrics statements="128" coveredstatements="128" conditionals="23" coveredconditionals="23" methods="1" coveredmethods="1"/>
+        <line num="1" count="1" type="stmt"/>
+        <line num="2" count="1" type="stmt"/>
+        <line num="3" count="1" type="stmt"/>
+        <line num="4" count="1" type="stmt"/>
+        <line num="6" count="1" type="stmt"/>
+        <line num="7" count="1" type="stmt"/>
+        <line num="8" count="1" type="stmt"/>
+        <line num="9" count="1" type="stmt"/>
+        <line num="10" count="1" type="stmt"/>
+        <line num="11" count="1" type="stmt"/>
+        <line num="12" count="1" type="stmt"/>
+        <line num="13" count="1" type="stmt"/>
+        <line num="14" count="1" type="stmt"/>
+        <line num="156" count="1" type="stmt"/>
+        <line num="157" count="1" type="stmt"/>
+        <line num="158" count="1" type="stmt"/>
+        <line num="159" count="1" type="stmt"/>
+        <line num="160" count="1" type="stmt"/>
+        <line num="161" count="1" type="stmt"/>
+        <line num="162" count="1" type="stmt"/>
+        <line num="170" count="1" type="stmt"/>
+        <line num="171" count="1" type="stmt"/>
+        <line num="172" count="1" type="stmt"/>
+        <line num="179" count="1" type="stmt"/>
+        <line num="180" count="1" type="stmt"/>
+        <line num="181" count="1" type="stmt"/>
+        <line num="182" count="1" type="stmt"/>
+        <line num="183" count="1" type="stmt"/>
+        <line num="184" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="185" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="186" count="3" type="stmt"/>
+        <line num="187" count="1" type="stmt"/>
+        <line num="188" count="1" type="stmt"/>
+        <line num="189" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="190" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="191" count="1" type="stmt"/>
+        <line num="192" count="1" type="stmt"/>
+        <line num="193" count="1" type="stmt"/>
+        <line num="194" count="1" type="stmt"/>
+        <line num="195" count="1" type="stmt"/>
+        <line num="196" count="1" type="stmt"/>
+        <line num="197" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="198" count="1" type="stmt"/>
+        <line num="199" count="1" type="stmt"/>
+        <line num="200" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="201" count="1" type="stmt"/>
+        <line num="202" count="1" type="stmt"/>
+        <line num="203" count="1" type="stmt"/>
+        <line num="204" count="1" type="stmt"/>
+        <line num="205" count="1" type="stmt"/>
+        <line num="206" count="1" type="stmt"/>
+        <line num="207" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="208" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="209" count="1" type="stmt"/>
+        <line num="210" count="1" type="stmt"/>
+        <line num="211" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="212" count="1" type="stmt"/>
+        <line num="213" count="1" type="stmt"/>
+        <line num="214" count="1" type="stmt"/>
+        <line num="215" count="1" type="stmt"/>
+        <line num="216" count="1" type="stmt"/>
+        <line num="217" count="1" type="stmt"/>
+        <line num="218" count="1" type="stmt"/>
+        <line num="219" count="1" type="stmt"/>
+        <line num="220" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="221" count="1" type="stmt"/>
+        <line num="222" count="1" type="stmt"/>
+        <line num="223" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="224" count="1" type="stmt"/>
+        <line num="225" count="1" type="stmt"/>
+        <line num="226" count="1" type="stmt"/>
+        <line num="227" count="1" type="stmt"/>
+        <line num="228" count="1" type="stmt"/>
+        <line num="229" count="1" type="stmt"/>
+        <line num="230" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="231" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="232" count="1" type="stmt"/>
+        <line num="233" count="1" type="stmt"/>
+        <line num="234" count="1" type="stmt"/>
+        <line num="235" count="1" type="stmt"/>
+        <line num="236" count="1" type="stmt"/>
+        <line num="237" count="1" type="stmt"/>
+        <line num="238" count="1" type="stmt"/>
+        <line num="239" count="1" type="stmt"/>
+        <line num="240" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="241" count="1" type="stmt"/>
+        <line num="242" count="1" type="stmt"/>
+        <line num="243" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="244" count="1" type="stmt"/>
+        <line num="245" count="1" type="stmt"/>
+        <line num="246" count="1" type="stmt"/>
+        <line num="247" count="1" type="stmt"/>
+        <line num="248" count="1" type="stmt"/>
+        <line num="249" count="1" type="stmt"/>
+        <line num="250" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="251" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="252" count="1" type="stmt"/>
+        <line num="253" count="1" type="stmt"/>
+        <line num="254" count="1" type="stmt"/>
+        <line num="255" count="1" type="stmt"/>
+        <line num="256" count="1" type="stmt"/>
+        <line num="257" count="1" type="stmt"/>
+        <line num="258" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="259" count="1" type="stmt"/>
+        <line num="260" count="1" type="stmt"/>
+        <line num="261" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="262" count="1" type="stmt"/>
+        <line num="263" count="1" type="stmt"/>
+        <line num="264" count="1" type="stmt"/>
+        <line num="265" count="1" type="stmt"/>
+        <line num="266" count="1" type="stmt"/>
+        <line num="267" count="1" type="stmt"/>
+        <line num="268" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="269" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="270" count="1" type="stmt"/>
+        <line num="271" count="1" type="stmt"/>
+        <line num="272" count="1" type="stmt"/>
+        <line num="273" count="1" type="stmt"/>
+        <line num="274" count="1" type="stmt"/>
+        <line num="275" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="276" count="1" type="stmt"/>
+        <line num="277" count="1" type="stmt"/>
+        <line num="278" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="279" count="1" type="stmt"/>
+        <line num="280" count="1" type="stmt"/>
+        <line num="281" count="1" type="stmt"/>
+        <line num="282" count="1" type="stmt"/>
+        <line num="283" count="1" type="stmt"/>
+      </file>
+      <file name="pull.test.js" path="/local/embruch/ragchat-api/__tests__/ai/pull.test.js">
+        <metrics statements="153" coveredstatements="152" conditionals="27" coveredconditionals="27" methods="1" coveredmethods="1"/>
+        <line num="1" count="1" type="stmt"/>
+        <line num="2" count="1" type="stmt"/>
+        <line num="3" count="1" type="stmt"/>
+        <line num="4" count="1" type="stmt"/>
+        <line num="6" count="1" type="stmt"/>
+        <line num="7" count="1" type="stmt"/>
+        <line num="8" count="1" type="stmt"/>
+        <line num="9" count="1" type="stmt"/>
+        <line num="10" count="1" type="stmt"/>
+        <line num="11" count="1" type="stmt"/>
+        <line num="12" count="1" type="stmt"/>
+        <line num="13" count="1" type="stmt"/>
+        <line num="14" count="1" type="stmt"/>
+        <line num="156" count="1" type="stmt"/>
+        <line num="157" count="1" type="stmt"/>
+        <line num="158" count="1" type="stmt"/>
+        <line num="159" count="1" type="stmt"/>
+        <line num="160" count="1" type="stmt"/>
+        <line num="161" count="1" type="stmt"/>
+        <line num="169" count="1" type="stmt"/>
+        <line num="170" count="1" type="stmt"/>
+        <line num="171" count="1" type="stmt"/>
+        <line num="172" count="1" type="stmt"/>
+        <line num="179" count="1" type="stmt"/>
+        <line num="180" count="1" type="stmt"/>
+        <line num="181" count="1" type="stmt"/>
+        <line num="182" count="1" type="stmt"/>
+        <line num="183" count="1" type="stmt"/>
+        <line num="184" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="185" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="186" count="4" type="stmt"/>
+        <line num="187" count="1" type="stmt"/>
+        <line num="188" count="1" type="stmt"/>
+        <line num="189" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="190" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="191" count="1" type="stmt"/>
+        <line num="192" count="1" type="stmt"/>
+        <line num="193" count="1" type="stmt"/>
+        <line num="194" count="1" type="stmt"/>
+        <line num="195" count="1" type="stmt"/>
+        <line num="196" count="1" type="stmt"/>
+        <line num="197" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="198" count="1" type="stmt"/>
+        <line num="199" count="1" type="stmt"/>
+        <line num="200" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="201" count="1" type="stmt"/>
+        <line num="202" count="1" type="stmt"/>
+        <line num="203" count="1" type="stmt"/>
+        <line num="204" count="1" type="stmt"/>
+        <line num="205" count="1" type="stmt"/>
+        <line num="206" count="1" type="stmt"/>
+        <line num="207" count="1" type="stmt"/>
+        <line num="208" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="209" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="210" count="1" type="stmt"/>
+        <line num="211" count="1" type="stmt"/>
+        <line num="212" count="1" type="stmt"/>
+        <line num="213" count="1" type="stmt"/>
+        <line num="214" count="1" type="stmt"/>
+        <line num="215" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="216" count="1" type="stmt"/>
+        <line num="217" count="1" type="stmt"/>
+        <line num="218" count="1" type="stmt"/>
+        <line num="219" count="1" type="stmt"/>
+        <line num="220" count="1" type="stmt"/>
+        <line num="221" count="1" type="stmt"/>
+        <line num="222" count="1" type="stmt"/>
+        <line num="223" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="224" count="1" type="stmt"/>
+        <line num="225" count="1" type="stmt"/>
+        <line num="226" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="227" count="1" type="stmt"/>
+        <line num="228" count="1" type="stmt"/>
+        <line num="229" count="1" type="stmt"/>
+        <line num="230" count="1" type="stmt"/>
+        <line num="231" count="1" type="stmt"/>
+        <line num="232" count="1" type="stmt"/>
+        <line num="233" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="234" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="235" count="1" type="stmt"/>
+        <line num="236" count="1" type="stmt"/>
+        <line num="237" count="1" type="stmt"/>
+        <line num="238" count="1" type="stmt"/>
+        <line num="239" count="1" type="stmt"/>
+        <line num="240" count="1" type="stmt"/>
+        <line num="241" count="1" type="stmt"/>
+        <line num="242" count="1" type="stmt"/>
+        <line num="243" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="244" count="1" type="stmt"/>
+        <line num="245" count="1" type="stmt"/>
+        <line num="246" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="247" count="1" type="stmt"/>
+        <line num="248" count="1" type="stmt"/>
+        <line num="249" count="1" type="stmt"/>
+        <line num="250" count="1" type="stmt"/>
+        <line num="251" count="1" type="stmt"/>
+        <line num="252" count="1" type="stmt"/>
+        <line num="253" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="254" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="255" count="1" type="stmt"/>
+        <line num="256" count="1" type="stmt"/>
+        <line num="257" count="0" type="stmt"/>
+        <line num="258" count="1" type="stmt"/>
+        <line num="259" count="1" type="stmt"/>
+        <line num="260" count="1" type="stmt"/>
+        <line num="261" count="1" type="stmt"/>
+        <line num="262" count="1" type="stmt"/>
+        <line num="263" count="1" type="stmt"/>
+        <line num="264" count="1" type="stmt"/>
+        <line num="265" count="1" type="stmt"/>
+        <line num="266" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="267" count="1" type="stmt"/>
+        <line num="268" count="1" type="stmt"/>
+        <line num="269" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="270" count="1" type="stmt"/>
+        <line num="271" count="1" type="stmt"/>
+        <line num="272" count="1" type="stmt"/>
+        <line num="273" count="1" type="stmt"/>
+        <line num="274" count="1" type="stmt"/>
+        <line num="275" count="1" type="stmt"/>
+        <line num="276" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="277" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="278" count="1" type="stmt"/>
+        <line num="279" count="1" type="stmt"/>
+        <line num="280" count="1" type="stmt"/>
+        <line num="281" count="1" type="stmt"/>
+        <line num="282" count="1" type="stmt"/>
+        <line num="283" count="1" type="stmt"/>
+        <line num="284" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="285" count="1" type="stmt"/>
+        <line num="286" count="1" type="stmt"/>
+        <line num="287" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="288" count="1" type="stmt"/>
+        <line num="289" count="1" type="stmt"/>
+        <line num="290" count="1" type="stmt"/>
+        <line num="291" count="1" type="stmt"/>
+        <line num="292" count="1" type="stmt"/>
+        <line num="293" count="1" type="stmt"/>
+        <line num="294" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="295" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="296" count="1" type="stmt"/>
+        <line num="297" count="1" type="stmt"/>
+        <line num="298" count="1" type="stmt"/>
+        <line num="299" count="1" type="stmt"/>
+        <line num="300" count="1" type="stmt"/>
+        <line num="301" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="302" count="1" type="stmt"/>
+        <line num="303" count="1" type="stmt"/>
+        <line num="304" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="305" count="1" type="stmt"/>
+        <line num="306" count="1" type="stmt"/>
+        <line num="307" count="1" type="stmt"/>
+        <line num="308" count="1" type="stmt"/>
+      </file>
+      <file name="status.test.js" path="/local/embruch/ragchat-api/__tests__/ai/status.test.js">
+        <metrics statements="57" coveredstatements="57" conditionals="10" coveredconditionals="10" methods="0" coveredmethods="0"/>
+        <line num="1" count="1" type="stmt"/>
+        <line num="2" count="1" type="stmt"/>
+        <line num="3" count="1" type="stmt"/>
+        <line num="5" count="1" type="stmt"/>
+        <line num="6" count="1" type="stmt"/>
+        <line num="7" count="1" type="stmt"/>
+        <line num="8" count="1" type="stmt"/>
+        <line num="9" count="1" type="stmt"/>
+        <line num="10" count="1" type="stmt"/>
+        <line num="11" count="1" type="stmt"/>
+        <line num="12" count="1" type="stmt"/>
+        <line num="13" count="1" type="stmt"/>
+        <line num="31" count="1" type="stmt"/>
+        <line num="32" count="1" type="stmt"/>
+        <line num="33" count="1" type="stmt"/>
+        <line num="34" count="1" type="stmt"/>
+        <line num="35" count="1" type="stmt"/>
+        <line num="36" count="1" type="stmt"/>
+        <line num="37" count="1" type="stmt"/>
+        <line num="45" count="1" type="stmt"/>
+        <line num="46" count="1" type="stmt"/>
+        <line num="47" count="1" type="stmt"/>
+        <line num="54" count="1" type="stmt"/>
+        <line num="55" count="1" type="stmt"/>
+        <line num="56" count="1" type="stmt"/>
+        <line num="57" count="1" type="stmt"/>
+        <line num="58" count="1" type="stmt"/>
+        <line num="59" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="60" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="61" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="62" count="1" type="stmt"/>
+        <line num="63" count="1" type="stmt"/>
+        <line num="64" count="1" type="stmt"/>
+        <line num="65" count="1" type="stmt"/>
+        <line num="66" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="67" count="1" type="stmt"/>
+        <line num="68" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="69" count="1" type="stmt"/>
+        <line num="70" count="1" type="stmt"/>
+        <line num="71" count="1" type="stmt"/>
+        <line num="72" count="1" type="stmt"/>
+        <line num="73" count="1" type="stmt"/>
+        <line num="74" count="1" type="stmt"/>
+        <line num="75" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="76" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="77" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="78" count="1" type="stmt"/>
+        <line num="79" count="1" type="stmt"/>
+        <line num="80" count="1" type="stmt"/>
+        <line num="81" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="82" count="1" type="stmt"/>
+        <line num="83" count="1" type="stmt"/>
+        <line num="84" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="85" count="1" type="stmt"/>
+        <line num="86" count="1" type="stmt"/>
+        <line num="87" count="1" type="stmt"/>
+        <line num="88" count="1" type="stmt"/>
+      </file>
+    </package>
+    <package name="ragchat-api.__tests__.auth">
+      <metrics statements="728" coveredstatements="728" conditionals="131" coveredconditionals="131" methods="1" coveredmethods="1"/>
+      <file name="confirmpasswordreset.test.js" path="/local/embruch/ragchat-api/__tests__/auth/confirmpasswordreset.test.js">
+        <metrics statements="144" coveredstatements="144" conditionals="25" coveredconditionals="25" methods="0" coveredmethods="0"/>
+        <line num="1" count="1" type="stmt"/>
+        <line num="2" count="1" type="stmt"/>
+        <line num="3" count="1" type="stmt"/>
+        <line num="4" count="1" type="stmt"/>
+        <line num="6" count="1" type="stmt"/>
+        <line num="7" count="1" type="stmt"/>
+        <line num="8" count="1" type="stmt"/>
+        <line num="9" count="1" type="stmt"/>
+        <line num="10" count="1" type="stmt"/>
+        <line num="11" count="1" type="stmt"/>
+        <line num="12" count="1" type="stmt"/>
+        <line num="13" count="1" type="stmt"/>
+        <line num="14" count="1" type="stmt"/>
+        <line num="38" count="1" type="stmt"/>
+        <line num="39" count="1" type="stmt"/>
+        <line num="40" count="1" type="stmt"/>
+        <line num="41" count="1" type="stmt"/>
+        <line num="42" count="1" type="stmt"/>
+        <line num="43" count="1" type="stmt"/>
+        <line num="44" count="1" type="stmt"/>
+        <line num="53" count="1" type="stmt"/>
+        <line num="54" count="1" type="stmt"/>
+        <line num="55" count="1" type="stmt"/>
+        <line num="56" count="1" type="stmt"/>
+        <line num="63" count="1" type="stmt"/>
+        <line num="64" count="1" type="stmt"/>
+        <line num="65" count="1" type="stmt"/>
+        <line num="66" count="1" type="stmt"/>
+        <line num="67" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="68" count="1" type="stmt"/>
+        <line num="69" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="70" count="1" type="stmt"/>
+        <line num="71" count="1" type="stmt"/>
+        <line num="72" count="1" type="stmt"/>
+        <line num="73" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="74" count="1" type="stmt"/>
+        <line num="75" count="1" type="stmt"/>
+        <line num="76" count="1" type="stmt"/>
+        <line num="77" count="1" type="stmt"/>
+        <line num="78" count="1" type="stmt"/>
+        <line num="79" count="1" type="stmt"/>
+        <line num="80" count="1" type="stmt"/>
+        <line num="81" count="1" type="stmt"/>
+        <line num="82" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="83" count="1" type="stmt"/>
+        <line num="84" count="1" type="stmt"/>
+        <line num="85" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="86" count="1" type="stmt"/>
+        <line num="87" count="1" type="stmt"/>
+        <line num="88" count="1" type="stmt"/>
+        <line num="89" count="1" type="stmt"/>
+        <line num="90" count="1" type="stmt"/>
+        <line num="91" count="1" type="stmt"/>
+        <line num="92" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="93" count="1" type="stmt"/>
+        <line num="94" count="1" type="stmt"/>
+        <line num="95" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="96" count="1" type="stmt"/>
+        <line num="97" count="1" type="stmt"/>
+        <line num="98" count="1" type="stmt"/>
+        <line num="99" count="1" type="stmt"/>
+        <line num="100" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="101" count="1" type="stmt"/>
+        <line num="102" count="1" type="stmt"/>
+        <line num="103" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="104" count="1" type="stmt"/>
+        <line num="105" count="1" type="stmt"/>
+        <line num="106" count="1" type="stmt"/>
+        <line num="107" count="1" type="stmt"/>
+        <line num="108" count="1" type="stmt"/>
+        <line num="109" count="1" type="stmt"/>
+        <line num="110" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="111" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="112" count="1" type="stmt"/>
+        <line num="113" count="1" type="stmt"/>
+        <line num="114" count="1" type="stmt"/>
+        <line num="115" count="1" type="stmt"/>
+        <line num="116" count="1" type="stmt"/>
+        <line num="117" count="1" type="stmt"/>
+        <line num="118" count="1" type="stmt"/>
+        <line num="119" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="120" count="1" type="stmt"/>
+        <line num="121" count="1" type="stmt"/>
+        <line num="122" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="123" count="1" type="stmt"/>
+        <line num="124" count="1" type="stmt"/>
+        <line num="125" count="1" type="stmt"/>
+        <line num="126" count="1" type="stmt"/>
+        <line num="127" count="1" type="stmt"/>
+        <line num="128" count="1" type="stmt"/>
+        <line num="129" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="130" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="131" count="1" type="stmt"/>
+        <line num="132" count="1" type="stmt"/>
+        <line num="133" count="1" type="stmt"/>
+        <line num="134" count="1" type="stmt"/>
+        <line num="135" count="1" type="stmt"/>
+        <line num="136" count="1" type="stmt"/>
+        <line num="137" count="1" type="stmt"/>
+        <line num="138" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="139" count="1" type="stmt"/>
+        <line num="140" count="1" type="stmt"/>
+        <line num="141" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="142" count="1" type="stmt"/>
+        <line num="143" count="1" type="stmt"/>
+        <line num="144" count="1" type="stmt"/>
+        <line num="145" count="1" type="stmt"/>
+        <line num="146" count="1" type="stmt"/>
+        <line num="147" count="1" type="stmt"/>
+        <line num="148" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="149" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="150" count="1" type="stmt"/>
+        <line num="151" count="1" type="stmt"/>
+        <line num="152" count="1" type="stmt"/>
+        <line num="153" count="1" type="stmt"/>
+        <line num="154" count="1" type="stmt"/>
+        <line num="155" count="1" type="stmt"/>
+        <line num="156" count="1" type="stmt"/>
+        <line num="157" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="158" count="1" type="stmt"/>
+        <line num="159" count="1" type="stmt"/>
+        <line num="160" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="161" count="1" type="stmt"/>
+        <line num="162" count="1" type="stmt"/>
+        <line num="163" count="1" type="stmt"/>
+        <line num="164" count="1" type="stmt"/>
+        <line num="165" count="1" type="stmt"/>
+        <line num="166" count="1" type="stmt"/>
+        <line num="167" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="168" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="169" count="1" type="stmt"/>
+        <line num="170" count="1" type="stmt"/>
+        <line num="171" count="1" type="stmt"/>
+        <line num="172" count="1" type="stmt"/>
+        <line num="173" count="1" type="stmt"/>
+        <line num="174" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="175" count="1" type="stmt"/>
+        <line num="176" count="1" type="stmt"/>
+        <line num="177" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="178" count="1" type="stmt"/>
+        <line num="179" count="1" type="stmt"/>
+        <line num="180" count="1" type="stmt"/>
+        <line num="181" count="1" type="stmt"/>
+        <line num="182" count="1" type="stmt"/>
+      </file>
+      <file name="confirmverification.test.js" path="/local/embruch/ragchat-api/__tests__/auth/confirmverification.test.js">
+        <metrics statements="88" coveredstatements="88" conditionals="14" coveredconditionals="14" methods="0" coveredmethods="0"/>
+        <line num="1" count="1" type="stmt"/>
+        <line num="2" count="1" type="stmt"/>
+        <line num="3" count="1" type="stmt"/>
+        <line num="4" count="1" type="stmt"/>
+        <line num="6" count="1" type="stmt"/>
+        <line num="7" count="1" type="stmt"/>
+        <line num="8" count="1" type="stmt"/>
+        <line num="9" count="1" type="stmt"/>
+        <line num="10" count="1" type="stmt"/>
+        <line num="11" count="1" type="stmt"/>
+        <line num="12" count="1" type="stmt"/>
+        <line num="13" count="1" type="stmt"/>
+        <line num="14" count="1" type="stmt"/>
+        <line num="45" count="1" type="stmt"/>
+        <line num="46" count="1" type="stmt"/>
+        <line num="47" count="1" type="stmt"/>
+        <line num="48" count="1" type="stmt"/>
+        <line num="49" count="1" type="stmt"/>
+        <line num="50" count="1" type="stmt"/>
+        <line num="51" count="1" type="stmt"/>
+        <line num="60" count="1" type="stmt"/>
+        <line num="61" count="1" type="stmt"/>
+        <line num="62" count="1" type="stmt"/>
+        <line num="69" count="1" type="stmt"/>
+        <line num="70" count="1" type="stmt"/>
+        <line num="71" count="1" type="stmt"/>
+        <line num="72" count="1" type="stmt"/>
+        <line num="73" count="1" type="stmt"/>
+        <line num="74" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="75" count="1" type="stmt"/>
+        <line num="76" count="1" type="stmt"/>
+        <line num="77" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="78" count="1" type="stmt"/>
+        <line num="79" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="80" count="1" type="stmt"/>
+        <line num="81" count="1" type="stmt"/>
+        <line num="82" count="1" type="stmt"/>
+        <line num="83" count="1" type="stmt"/>
+        <line num="84" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="85" count="1" type="stmt"/>
+        <line num="86" count="1" type="stmt"/>
+        <line num="87" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="88" count="1" type="stmt"/>
+        <line num="89" count="1" type="stmt"/>
+        <line num="90" count="1" type="stmt"/>
+        <line num="91" count="1" type="stmt"/>
+        <line num="92" count="1" type="stmt"/>
+        <line num="93" count="1" type="stmt"/>
+        <line num="94" count="1" type="stmt"/>
+        <line num="95" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="96" count="1" type="stmt"/>
+        <line num="97" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="98" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="99" count="1" type="stmt"/>
+        <line num="100" count="1" type="stmt"/>
+        <line num="101" count="1" type="stmt"/>
+        <line num="102" count="1" type="stmt"/>
+        <line num="103" count="1" type="stmt"/>
+        <line num="104" count="1" type="stmt"/>
+        <line num="105" count="1" type="stmt"/>
+        <line num="106" count="1" type="stmt"/>
+        <line num="107" count="1" type="stmt"/>
+        <line num="108" count="1" type="stmt"/>
+        <line num="109" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="110" count="1" type="stmt"/>
+        <line num="111" count="1" type="stmt"/>
+        <line num="112" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="113" count="1" type="stmt"/>
+        <line num="114" count="1" type="stmt"/>
+        <line num="115" count="1" type="stmt"/>
+        <line num="116" count="1" type="stmt"/>
+        <line num="117" count="1" type="stmt"/>
+        <line num="118" count="1" type="stmt"/>
+        <line num="119" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="120" count="1" type="stmt"/>
+        <line num="121" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="122" count="1" type="stmt"/>
+        <line num="123" count="1" type="stmt"/>
+        <line num="124" count="1" type="stmt"/>
+        <line num="125" count="1" type="stmt"/>
+        <line num="126" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="127" count="1" type="stmt"/>
+        <line num="128" count="1" type="stmt"/>
+        <line num="129" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="130" count="1" type="stmt"/>
+        <line num="131" count="1" type="stmt"/>
+        <line num="132" count="1" type="stmt"/>
+        <line num="133" count="1" type="stmt"/>
+      </file>
+      <file name="login.test.js" path="/local/embruch/ragchat-api/__tests__/auth/login.test.js">
+        <metrics statements="138" coveredstatements="138" conditionals="26" coveredconditionals="26" methods="1" coveredmethods="1"/>
+        <line num="1" count="1" type="stmt"/>
+        <line num="2" count="1" type="stmt"/>
+        <line num="3" count="1" type="stmt"/>
+        <line num="4" count="1" type="stmt"/>
+        <line num="6" count="1" type="stmt"/>
+        <line num="7" count="1" type="stmt"/>
+        <line num="8" count="1" type="stmt"/>
+        <line num="9" count="1" type="stmt"/>
+        <line num="10" count="1" type="stmt"/>
+        <line num="11" count="1" type="stmt"/>
+        <line num="12" count="1" type="stmt"/>
+        <line num="13" count="1" type="stmt"/>
+        <line num="14" count="1" type="stmt"/>
+        <line num="37" count="1" type="stmt"/>
+        <line num="38" count="1" type="stmt"/>
+        <line num="39" count="1" type="stmt"/>
+        <line num="40" count="1" type="stmt"/>
+        <line num="41" count="1" type="stmt"/>
+        <line num="42" count="1" type="stmt"/>
+        <line num="43" count="1" type="stmt"/>
+        <line num="52" count="1" type="stmt"/>
+        <line num="53" count="1" type="stmt"/>
+        <line num="54" count="1" type="stmt"/>
+        <line num="55" count="1" type="stmt"/>
+        <line num="56" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="57" count="1" type="stmt"/>
+        <line num="58" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="59" count="3" type="stmt"/>
+        <line num="60" count="1" type="stmt"/>
+        <line num="61" count="1" type="stmt"/>
+        <line num="62" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="63" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="64" count="1" type="stmt"/>
+        <line num="65" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="66" count="1" type="stmt"/>
+        <line num="67" count="1" type="stmt"/>
+        <line num="68" count="1" type="stmt"/>
+        <line num="69" count="1" type="stmt"/>
+        <line num="70" count="1" type="stmt"/>
+        <line num="71" count="1" type="stmt"/>
+        <line num="72" count="1" type="stmt"/>
+        <line num="73" count="1" type="stmt"/>
+        <line num="74" count="1" type="stmt"/>
+        <line num="75" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="76" count="1" type="stmt"/>
+        <line num="77" count="1" type="stmt"/>
+        <line num="78" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="79" count="1" type="stmt"/>
+        <line num="80" count="1" type="stmt"/>
+        <line num="81" count="1" type="stmt"/>
+        <line num="82" count="1" type="stmt"/>
+        <line num="83" count="1" type="stmt"/>
+        <line num="84" count="1" type="stmt"/>
+        <line num="85" count="1" type="stmt"/>
+        <line num="86" count="1" type="stmt"/>
+        <line num="87" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="88" count="1" type="stmt"/>
+        <line num="89" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="90" count="1" type="stmt"/>
+        <line num="91" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="92" count="1" type="stmt"/>
+        <line num="93" count="1" type="stmt"/>
+        <line num="94" count="1" type="stmt"/>
+        <line num="95" count="1" type="stmt"/>
+        <line num="96" count="1" type="stmt"/>
+        <line num="97" count="1" type="stmt"/>
+        <line num="98" count="1" type="stmt"/>
+        <line num="99" count="1" type="stmt"/>
+        <line num="100" count="1" type="stmt"/>
+        <line num="101" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="102" count="1" type="stmt"/>
+        <line num="103" count="1" type="stmt"/>
+        <line num="104" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="105" count="1" type="stmt"/>
+        <line num="106" count="1" type="stmt"/>
+        <line num="107" count="1" type="stmt"/>
+        <line num="108" count="1" type="stmt"/>
+        <line num="109" count="1" type="stmt"/>
+        <line num="110" count="1" type="stmt"/>
+        <line num="111" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="112" count="1" type="stmt"/>
+        <line num="113" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="114" count="1" type="stmt"/>
+        <line num="115" count="1" type="stmt"/>
+        <line num="116" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="117" count="1" type="stmt"/>
+        <line num="118" count="1" type="stmt"/>
+        <line num="119" count="1" type="stmt"/>
+        <line num="120" count="1" type="stmt"/>
+        <line num="121" count="1" type="stmt"/>
+        <line num="122" count="1" type="stmt"/>
+        <line num="123" count="1" type="stmt"/>
+        <line num="124" count="1" type="stmt"/>
+        <line num="125" count="1" type="stmt"/>
+        <line num="126" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="127" count="1" type="stmt"/>
+        <line num="128" count="1" type="stmt"/>
+        <line num="129" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="130" count="1" type="stmt"/>
+        <line num="131" count="1" type="stmt"/>
+        <line num="132" count="1" type="stmt"/>
+        <line num="133" count="1" type="stmt"/>
+        <line num="134" count="1" type="stmt"/>
+        <line num="135" count="1" type="stmt"/>
+        <line num="136" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="137" count="1" type="stmt"/>
+        <line num="138" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="139" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="140" count="1" type="stmt"/>
+        <line num="141" count="1" type="stmt"/>
+        <line num="142" count="1" type="stmt"/>
+        <line num="143" count="1" type="stmt"/>
+        <line num="144" count="1" type="stmt"/>
+        <line num="145" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="146" count="1" type="stmt"/>
+        <line num="147" count="1" type="stmt"/>
+        <line num="148" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="149" count="1" type="stmt"/>
+        <line num="150" count="1" type="stmt"/>
+        <line num="151" count="1" type="stmt"/>
+        <line num="152" count="1" type="stmt"/>
+        <line num="153" count="1" type="stmt"/>
+        <line num="154" count="1" type="stmt"/>
+        <line num="155" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="156" count="1" type="stmt"/>
+        <line num="157" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="158" count="1" type="stmt"/>
+        <line num="159" count="1" type="stmt"/>
+        <line num="160" count="1" type="stmt"/>
+        <line num="161" count="1" type="stmt"/>
+        <line num="162" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="163" count="1" type="stmt"/>
+        <line num="164" count="1" type="stmt"/>
+        <line num="165" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="166" count="1" type="stmt"/>
+        <line num="167" count="1" type="stmt"/>
+        <line num="168" count="1" type="stmt"/>
+        <line num="169" count="1" type="stmt"/>
+      </file>
+      <file name="logout.test.js" path="/local/embruch/ragchat-api/__tests__/auth/logout.test.js">
+        <metrics statements="70" coveredstatements="70" conditionals="13" coveredconditionals="13" methods="0" coveredmethods="0"/>
+        <line num="1" count="1" type="stmt"/>
+        <line num="2" count="1" type="stmt"/>
+        <line num="3" count="1" type="stmt"/>
+        <line num="4" count="1" type="stmt"/>
+        <line num="5" count="1" type="stmt"/>
+        <line num="6" count="1" type="stmt"/>
+        <line num="7" count="1" type="stmt"/>
+        <line num="8" count="1" type="stmt"/>
+        <line num="9" count="1" type="stmt"/>
+        <line num="10" count="1" type="stmt"/>
+        <line num="11" count="1" type="stmt"/>
+        <line num="12" count="1" type="stmt"/>
         <line num="30" count="1" type="stmt"/>
         <line num="31" count="1" type="stmt"/>
         <line num="32" count="1" type="stmt"/>
@@ -42,103 +1435,543 @@
         <line num="34" count="1" type="stmt"/>
         <line num="35" count="1" type="stmt"/>
         <line num="36" count="1" type="stmt"/>
+        <line num="45" count="1" type="stmt"/>
+        <line num="46" count="1" type="stmt"/>
+        <line num="47" count="1" type="stmt"/>
+        <line num="48" count="1" type="stmt"/>
+        <line num="49" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="50" count="1" type="stmt"/>
+        <line num="51" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="52" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="53" count="1" type="stmt"/>
+        <line num="54" count="1" type="stmt"/>
+        <line num="55" count="1" type="stmt"/>
+        <line num="56" count="1" type="stmt"/>
+        <line num="57" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="58" count="1" type="stmt"/>
+        <line num="59" count="1" type="stmt"/>
+        <line num="60" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="61" count="1" type="stmt"/>
+        <line num="62" count="1" type="stmt"/>
+        <line num="63" count="1" type="stmt"/>
+        <line num="64" count="1" type="stmt"/>
+        <line num="65" count="1" type="stmt"/>
+        <line num="66" count="1" type="stmt"/>
+        <line num="67" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="68" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="69" count="1" type="stmt"/>
+        <line num="70" count="1" type="stmt"/>
+        <line num="71" count="1" type="stmt"/>
+        <line num="72" count="1" type="stmt"/>
+        <line num="73" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="74" count="1" type="stmt"/>
+        <line num="75" count="1" type="stmt"/>
+        <line num="76" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="77" count="1" type="stmt"/>
+        <line num="78" count="1" type="stmt"/>
+        <line num="79" count="1" type="stmt"/>
+        <line num="80" count="1" type="stmt"/>
+        <line num="81" count="1" type="stmt"/>
+        <line num="82" count="1" type="stmt"/>
+        <line num="83" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="84" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="85" count="1" type="stmt"/>
+        <line num="86" count="1" type="stmt"/>
+        <line num="87" count="1" type="stmt"/>
+        <line num="88" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="89" count="1" type="stmt"/>
+        <line num="90" count="1" type="stmt"/>
+        <line num="91" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="92" count="1" type="stmt"/>
+        <line num="93" count="1" type="stmt"/>
+        <line num="94" count="1" type="stmt"/>
+        <line num="95" count="1" type="stmt"/>
+      </file>
+      <file name="refreshjwt.test.js" path="/local/embruch/ragchat-api/__tests__/auth/refreshjwt.test.js">
+        <metrics statements="95" coveredstatements="95" conditionals="17" coveredconditionals="17" methods="0" coveredmethods="0"/>
+        <line num="1" count="1" type="stmt"/>
+        <line num="2" count="1" type="stmt"/>
+        <line num="3" count="1" type="stmt"/>
+        <line num="4" count="1" type="stmt"/>
+        <line num="6" count="1" type="stmt"/>
+        <line num="7" count="1" type="stmt"/>
+        <line num="8" count="1" type="stmt"/>
+        <line num="9" count="1" type="stmt"/>
+        <line num="10" count="1" type="stmt"/>
+        <line num="11" count="1" type="stmt"/>
+        <line num="12" count="1" type="stmt"/>
+        <line num="13" count="1" type="stmt"/>
+        <line num="14" count="1" type="stmt"/>
+        <line num="33" count="1" type="stmt"/>
+        <line num="34" count="1" type="stmt"/>
+        <line num="35" count="1" type="stmt"/>
+        <line num="36" count="1" type="stmt"/>
+        <line num="37" count="1" type="stmt"/>
+        <line num="38" count="1" type="stmt"/>
+        <line num="39" count="1" type="stmt"/>
+        <line num="48" count="1" type="stmt"/>
+        <line num="49" count="1" type="stmt"/>
+        <line num="50" count="1" type="stmt"/>
+        <line num="51" count="1" type="stmt"/>
+        <line num="52" count="1" type="stmt"/>
+        <line num="53" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="54" count="1" type="stmt"/>
+        <line num="55" count="1" type="stmt"/>
+        <line num="56" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="57" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="58" count="1" type="stmt"/>
+        <line num="59" count="1" type="stmt"/>
+        <line num="60" count="1" type="stmt"/>
+        <line num="61" count="1" type="stmt"/>
+        <line num="62" count="1" type="stmt"/>
+        <line num="63" count="1" type="stmt"/>
+        <line num="64" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="65" count="1" type="stmt"/>
+        <line num="66" count="1" type="stmt"/>
+        <line num="67" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="68" count="1" type="stmt"/>
+        <line num="69" count="1" type="stmt"/>
+        <line num="70" count="1" type="stmt"/>
+        <line num="71" count="1" type="stmt"/>
+        <line num="72" count="1" type="stmt"/>
+        <line num="73" count="1" type="stmt"/>
+        <line num="74" count="1" type="stmt"/>
+        <line num="75" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="76" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="77" count="1" type="stmt"/>
+        <line num="78" count="1" type="stmt"/>
+        <line num="79" count="1" type="stmt"/>
+        <line num="80" count="1" type="stmt"/>
+        <line num="81" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="82" count="1" type="stmt"/>
+        <line num="83" count="1" type="stmt"/>
+        <line num="84" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="85" count="1" type="stmt"/>
+        <line num="86" count="1" type="stmt"/>
+        <line num="87" count="1" type="stmt"/>
+        <line num="88" count="1" type="stmt"/>
+        <line num="89" count="1" type="stmt"/>
+        <line num="90" count="1" type="stmt"/>
+        <line num="91" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="92" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="93" count="1" type="stmt"/>
+        <line num="94" count="1" type="stmt"/>
+        <line num="95" count="1" type="stmt"/>
+        <line num="96" count="1" type="stmt"/>
+        <line num="97" count="1" type="stmt"/>
+        <line num="98" count="1" type="stmt"/>
+        <line num="99" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="100" count="1" type="stmt"/>
+        <line num="101" count="1" type="stmt"/>
+        <line num="102" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="103" count="1" type="stmt"/>
+        <line num="104" count="1" type="stmt"/>
+        <line num="105" count="1" type="stmt"/>
+        <line num="106" count="1" type="stmt"/>
+        <line num="107" count="1" type="stmt"/>
+        <line num="108" count="1" type="stmt"/>
+        <line num="109" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="110" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="111" count="1" type="stmt"/>
+        <line num="112" count="1" type="stmt"/>
+        <line num="113" count="1" type="stmt"/>
+        <line num="114" count="1" type="stmt"/>
+        <line num="115" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="116" count="1" type="stmt"/>
+        <line num="117" count="1" type="stmt"/>
+        <line num="118" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="119" count="1" type="stmt"/>
+        <line num="120" count="1" type="stmt"/>
+        <line num="121" count="1" type="stmt"/>
+        <line num="122" count="1" type="stmt"/>
+      </file>
+      <file name="requestpasswordreset.test.js" path="/local/embruch/ragchat-api/__tests__/auth/requestpasswordreset.test.js">
+        <metrics statements="96" coveredstatements="96" conditionals="18" coveredconditionals="18" methods="0" coveredmethods="0"/>
+        <line num="1" count="1" type="stmt"/>
+        <line num="2" count="1" type="stmt"/>
+        <line num="3" count="1" type="stmt"/>
+        <line num="4" count="1" type="stmt"/>
+        <line num="5" count="1" type="stmt"/>
+        <line num="6" count="1" type="stmt"/>
+        <line num="7" count="1" type="stmt"/>
+        <line num="8" count="1" type="stmt"/>
+        <line num="9" count="1" type="stmt"/>
+        <line num="10" count="1" type="stmt"/>
+        <line num="11" count="1" type="stmt"/>
+        <line num="12" count="1" type="stmt"/>
+        <line num="33" count="1" type="stmt"/>
+        <line num="34" count="1" type="stmt"/>
+        <line num="35" count="1" type="stmt"/>
+        <line num="36" count="1" type="stmt"/>
+        <line num="37" count="1" type="stmt"/>
+        <line num="38" count="1" type="stmt"/>
+        <line num="39" count="1" type="stmt"/>
+        <line num="48" count="1" type="stmt"/>
+        <line num="55" count="1" type="stmt"/>
+        <line num="56" count="1" type="stmt"/>
+        <line num="57" count="1" type="stmt"/>
+        <line num="58" count="1" type="stmt"/>
+        <line num="59" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="60" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="61" count="1" type="stmt"/>
+        <line num="62" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="63" count="1" type="stmt"/>
+        <line num="64" count="1" type="stmt"/>
+        <line num="65" count="1" type="stmt"/>
+        <line num="66" count="1" type="stmt"/>
+        <line num="67" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="68" count="1" type="stmt"/>
+        <line num="69" count="1" type="stmt"/>
+        <line num="70" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="71" count="1" type="stmt"/>
+        <line num="72" count="1" type="stmt"/>
+        <line num="73" count="1" type="stmt"/>
+        <line num="74" count="1" type="stmt"/>
+        <line num="75" count="1" type="stmt"/>
+        <line num="76" count="1" type="stmt"/>
+        <line num="77" count="1" type="stmt"/>
+        <line num="78" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="79" count="1" type="stmt"/>
+        <line num="80" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="81" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="82" count="1" type="stmt"/>
+        <line num="83" count="1" type="stmt"/>
+        <line num="84" count="1" type="stmt"/>
+        <line num="85" count="1" type="stmt"/>
+        <line num="86" count="1" type="stmt"/>
+        <line num="87" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="88" count="1" type="stmt"/>
+        <line num="89" count="1" type="stmt"/>
+        <line num="90" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="91" count="1" type="stmt"/>
+        <line num="92" count="1" type="stmt"/>
+        <line num="93" count="1" type="stmt"/>
+        <line num="94" count="1" type="stmt"/>
+        <line num="95" count="1" type="stmt"/>
+        <line num="96" count="1" type="stmt"/>
+        <line num="97" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="98" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="99" count="1" type="stmt"/>
+        <line num="100" count="1" type="stmt"/>
+        <line num="101" count="1" type="stmt"/>
+        <line num="102" count="1" type="stmt"/>
+        <line num="103" count="1" type="stmt"/>
+        <line num="104" count="1" type="stmt"/>
+        <line num="105" count="1" type="stmt"/>
+        <line num="106" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="107" count="1" type="stmt"/>
+        <line num="108" count="1" type="stmt"/>
+        <line num="109" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="110" count="1" type="stmt"/>
+        <line num="111" count="1" type="stmt"/>
+        <line num="112" count="1" type="stmt"/>
+        <line num="113" count="1" type="stmt"/>
+        <line num="114" count="1" type="stmt"/>
+        <line num="115" count="1" type="stmt"/>
+        <line num="116" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="117" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="118" count="1" type="stmt"/>
+        <line num="119" count="1" type="stmt"/>
+        <line num="120" count="1" type="stmt"/>
+        <line num="121" count="1" type="stmt"/>
+        <line num="122" count="1" type="stmt"/>
+        <line num="123" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="124" count="1" type="stmt"/>
+        <line num="125" count="1" type="stmt"/>
+        <line num="126" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="127" count="1" type="stmt"/>
+        <line num="128" count="1" type="stmt"/>
+        <line num="129" count="1" type="stmt"/>
+        <line num="130" count="1" type="stmt"/>
+      </file>
+      <file name="requestverification.test.js" path="/local/embruch/ragchat-api/__tests__/auth/requestverification.test.js">
+        <metrics statements="97" coveredstatements="97" conditionals="18" coveredconditionals="18" methods="0" coveredmethods="0"/>
+        <line num="1" count="1" type="stmt"/>
+        <line num="2" count="1" type="stmt"/>
+        <line num="3" count="1" type="stmt"/>
+        <line num="4" count="1" type="stmt"/>
+        <line num="5" count="1" type="stmt"/>
+        <line num="6" count="1" type="stmt"/>
+        <line num="7" count="1" type="stmt"/>
+        <line num="8" count="1" type="stmt"/>
+        <line num="9" count="1" type="stmt"/>
+        <line num="10" count="1" type="stmt"/>
+        <line num="11" count="1" type="stmt"/>
+        <line num="12" count="1" type="stmt"/>
+        <line num="32" count="1" type="stmt"/>
+        <line num="33" count="1" type="stmt"/>
+        <line num="34" count="1" type="stmt"/>
+        <line num="35" count="1" type="stmt"/>
+        <line num="36" count="1" type="stmt"/>
         <line num="37" count="1" type="stmt"/>
         <line num="38" count="1" type="stmt"/>
-        <line num="39" count="1" type="stmt"/>
-        <line num="40" count="1" type="stmt"/>
-        <line num="41" count="1" type="stmt"/>
-        <line num="42" count="1" type="stmt"/>
-        <line num="43" count="1" type="stmt"/>
-        <line num="44" count="1" type="stmt"/>
-        <line num="45" count="1" type="cond" truecount="1" falsecount="0"/>
-        <line num="46" count="45" type="stmt"/>
-        <line num="47" count="45" type="stmt"/>
-        <line num="48" count="1" type="stmt"/>
-        <line num="49" count="1" type="stmt"/>
-        <line num="50" count="1" type="stmt"/>
-        <line num="51" count="1" type="stmt"/>
-        <line num="52" count="1" type="stmt"/>
+        <line num="46" count="1" type="stmt"/>
         <line num="53" count="1" type="stmt"/>
         <line num="54" count="1" type="stmt"/>
         <line num="55" count="1" type="stmt"/>
         <line num="56" count="1" type="stmt"/>
-        <line num="57" count="1" type="stmt"/>
-        <line num="58" count="1" type="stmt"/>
+        <line num="57" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="58" count="1" type="cond" truecount="1" falsecount="0"/>
         <line num="59" count="1" type="stmt"/>
-        <line num="60" count="1" type="stmt"/>
+        <line num="60" count="1" type="cond" truecount="1" falsecount="0"/>
         <line num="61" count="1" type="stmt"/>
         <line num="62" count="1" type="stmt"/>
         <line num="63" count="1" type="stmt"/>
         <line num="64" count="1" type="stmt"/>
-        <line num="65" count="1" type="stmt"/>
+        <line num="65" count="1" type="cond" truecount="1" falsecount="0"/>
         <line num="66" count="1" type="stmt"/>
         <line num="67" count="1" type="stmt"/>
-        <line num="68" count="1" type="stmt"/>
+        <line num="68" count="1" type="cond" truecount="1" falsecount="0"/>
         <line num="69" count="1" type="stmt"/>
         <line num="70" count="1" type="stmt"/>
         <line num="71" count="1" type="stmt"/>
         <line num="72" count="1" type="stmt"/>
         <line num="73" count="1" type="stmt"/>
         <line num="74" count="1" type="stmt"/>
-        <line num="75" count="1" type="stmt"/>
+        <line num="75" count="1" type="cond" truecount="1" falsecount="0"/>
         <line num="76" count="1" type="stmt"/>
-        <line num="77" count="1" type="stmt"/>
-        <line num="78" count="1" type="stmt"/>
+        <line num="77" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="78" count="1" type="cond" truecount="1" falsecount="0"/>
         <line num="79" count="1" type="stmt"/>
         <line num="80" count="1" type="stmt"/>
         <line num="81" count="1" type="stmt"/>
+        <line num="82" count="1" type="stmt"/>
+        <line num="83" count="1" type="stmt"/>
+        <line num="84" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="85" count="1" type="stmt"/>
+        <line num="86" count="1" type="stmt"/>
+        <line num="87" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="88" count="1" type="stmt"/>
+        <line num="89" count="1" type="stmt"/>
+        <line num="90" count="1" type="stmt"/>
+        <line num="91" count="1" type="stmt"/>
+        <line num="92" count="1" type="stmt"/>
+        <line num="93" count="1" type="stmt"/>
+        <line num="94" count="1" type="stmt"/>
+        <line num="95" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="96" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="97" count="1" type="stmt"/>
+        <line num="98" count="1" type="stmt"/>
+        <line num="99" count="1" type="stmt"/>
+        <line num="100" count="1" type="stmt"/>
+        <line num="101" count="1" type="stmt"/>
+        <line num="102" count="1" type="stmt"/>
+        <line num="103" count="1" type="stmt"/>
+        <line num="104" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="105" count="1" type="stmt"/>
+        <line num="106" count="1" type="stmt"/>
+        <line num="107" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="108" count="1" type="stmt"/>
+        <line num="109" count="1" type="stmt"/>
+        <line num="110" count="1" type="stmt"/>
+        <line num="111" count="1" type="stmt"/>
+        <line num="112" count="1" type="stmt"/>
+        <line num="113" count="1" type="stmt"/>
+        <line num="114" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="115" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="116" count="1" type="stmt"/>
+        <line num="117" count="1" type="stmt"/>
+        <line num="118" count="1" type="stmt"/>
+        <line num="119" count="1" type="stmt"/>
+        <line num="120" count="1" type="stmt"/>
+        <line num="121" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="122" count="1" type="stmt"/>
+        <line num="123" count="1" type="stmt"/>
+        <line num="124" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="125" count="1" type="stmt"/>
+        <line num="126" count="1" type="stmt"/>
+        <line num="127" count="1" type="stmt"/>
+        <line num="128" count="1" type="stmt"/>
+        <line num="129" count="1" type="stmt"/>
       </file>
-      <file name="ecosystem.config.cjs" path="/home/embruch/ragchat-api/ecosystem.config.cjs">
-        <metrics statements="12" coveredstatements="0" conditionals="1" coveredconditionals="0" methods="1" coveredmethods="0"/>
-        <line num="1" count="0" type="cond" truecount="0" falsecount="1"/>
-        <line num="2" count="0" type="stmt"/>
-        <line num="3" count="0" type="stmt"/>
-        <line num="4" count="0" type="stmt"/>
-        <line num="5" count="0" type="stmt"/>
-        <line num="6" count="0" type="stmt"/>
-        <line num="7" count="0" type="stmt"/>
-        <line num="8" count="0" type="stmt"/>
-        <line num="9" count="0" type="stmt"/>
-        <line num="10" count="0" type="stmt"/>
-        <line num="11" count="0" type="stmt"/>
-        <line num="12" count="0" type="stmt"/>
-      </file>
-      <file name="server.js" path="/home/embruch/ragchat-api/server.js">
-        <metrics statements="28" coveredstatements="0" conditionals="1" coveredconditionals="0" methods="1" coveredmethods="0"/>
-        <line num="1" count="0" type="cond" truecount="0" falsecount="1"/>
-        <line num="2" count="0" type="stmt"/>
-        <line num="3" count="0" type="stmt"/>
-        <line num="4" count="0" type="stmt"/>
-        <line num="5" count="0" type="stmt"/>
-        <line num="6" count="0" type="stmt"/>
-        <line num="7" count="0" type="stmt"/>
-        <line num="8" count="0" type="stmt"/>
-        <line num="9" count="0" type="stmt"/>
-        <line num="10" count="0" type="stmt"/>
-        <line num="11" count="0" type="stmt"/>
-        <line num="12" count="0" type="stmt"/>
-        <line num="13" count="0" type="stmt"/>
-        <line num="14" count="0" type="stmt"/>
-        <line num="15" count="0" type="stmt"/>
-        <line num="16" count="0" type="stmt"/>
-        <line num="17" count="0" type="stmt"/>
-        <line num="18" count="0" type="stmt"/>
-        <line num="19" count="0" type="stmt"/>
-        <line num="20" count="0" type="stmt"/>
-        <line num="21" count="0" type="stmt"/>
-        <line num="22" count="0" type="stmt"/>
-        <line num="23" count="0" type="stmt"/>
-        <line num="24" count="0" type="stmt"/>
-        <line num="25" count="0" type="stmt"/>
-        <line num="26" count="0" type="stmt"/>
-        <line num="27" count="0" type="stmt"/>
-        <line num="28" count="0" type="stmt"/>
+    </package>
+    <package name="ragchat-api.__tests__.users">
+      <metrics statements="177" coveredstatements="177" conditionals="30" coveredconditionals="30" methods="0" coveredmethods="0"/>
+      <file name="signup.test.js" path="/local/embruch/ragchat-api/__tests__/users/signup.test.js">
+        <metrics statements="177" coveredstatements="177" conditionals="30" coveredconditionals="30" methods="0" coveredmethods="0"/>
+        <line num="1" count="1" type="stmt"/>
+        <line num="2" count="1" type="stmt"/>
+        <line num="3" count="1" type="stmt"/>
+        <line num="5" count="1" type="stmt"/>
+        <line num="6" count="1" type="stmt"/>
+        <line num="7" count="1" type="stmt"/>
+        <line num="8" count="1" type="stmt"/>
+        <line num="9" count="1" type="stmt"/>
+        <line num="10" count="1" type="stmt"/>
+        <line num="11" count="1" type="stmt"/>
+        <line num="12" count="1" type="stmt"/>
+        <line num="13" count="1" type="stmt"/>
+        <line num="40" count="1" type="stmt"/>
+        <line num="41" count="1" type="stmt"/>
+        <line num="42" count="1" type="stmt"/>
+        <line num="43" count="1" type="stmt"/>
+        <line num="44" count="1" type="stmt"/>
+        <line num="45" count="1" type="stmt"/>
+        <line num="46" count="1" type="stmt"/>
+        <line num="55" count="1" type="stmt"/>
+        <line num="62" count="1" type="stmt"/>
+        <line num="63" count="1" type="stmt"/>
+        <line num="64" count="1" type="stmt"/>
+        <line num="65" count="1" type="stmt"/>
+        <line num="66" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="67" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="68" count="1" type="stmt"/>
+        <line num="69" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="70" count="1" type="stmt"/>
+        <line num="71" count="1" type="stmt"/>
+        <line num="72" count="1" type="stmt"/>
+        <line num="73" count="1" type="stmt"/>
+        <line num="74" count="1" type="stmt"/>
+        <line num="75" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="76" count="1" type="stmt"/>
+        <line num="77" count="1" type="stmt"/>
+        <line num="78" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="79" count="1" type="stmt"/>
+        <line num="80" count="1" type="stmt"/>
+        <line num="81" count="1" type="stmt"/>
+        <line num="82" count="1" type="stmt"/>
+        <line num="83" count="1" type="stmt"/>
+        <line num="84" count="1" type="stmt"/>
+        <line num="85" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="86" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="87" count="1" type="stmt"/>
+        <line num="88" count="1" type="stmt"/>
+        <line num="89" count="1" type="stmt"/>
+        <line num="90" count="1" type="stmt"/>
+        <line num="91" count="1" type="stmt"/>
+        <line num="92" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="93" count="1" type="stmt"/>
+        <line num="94" count="1" type="stmt"/>
+        <line num="95" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="96" count="1" type="stmt"/>
+        <line num="97" count="1" type="stmt"/>
+        <line num="98" count="1" type="stmt"/>
+        <line num="99" count="1" type="stmt"/>
+        <line num="100" count="1" type="stmt"/>
+        <line num="101" count="1" type="stmt"/>
+        <line num="102" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="103" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="104" count="1" type="stmt"/>
+        <line num="105" count="1" type="stmt"/>
+        <line num="106" count="1" type="stmt"/>
+        <line num="107" count="1" type="stmt"/>
+        <line num="108" count="1" type="stmt"/>
+        <line num="109" count="1" type="stmt"/>
+        <line num="110" count="1" type="stmt"/>
+        <line num="111" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="112" count="1" type="stmt"/>
+        <line num="113" count="1" type="stmt"/>
+        <line num="114" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="115" count="1" type="stmt"/>
+        <line num="116" count="1" type="stmt"/>
+        <line num="117" count="1" type="stmt"/>
+        <line num="118" count="1" type="stmt"/>
+        <line num="119" count="1" type="stmt"/>
+        <line num="120" count="1" type="stmt"/>
+        <line num="121" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="122" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="123" count="1" type="stmt"/>
+        <line num="124" count="1" type="stmt"/>
+        <line num="125" count="1" type="stmt"/>
+        <line num="126" count="1" type="stmt"/>
+        <line num="127" count="1" type="stmt"/>
+        <line num="128" count="1" type="stmt"/>
+        <line num="129" count="1" type="stmt"/>
+        <line num="130" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="131" count="1" type="stmt"/>
+        <line num="132" count="1" type="stmt"/>
+        <line num="133" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="134" count="1" type="stmt"/>
+        <line num="135" count="1" type="stmt"/>
+        <line num="136" count="1" type="stmt"/>
+        <line num="137" count="1" type="stmt"/>
+        <line num="138" count="1" type="stmt"/>
+        <line num="139" count="1" type="stmt"/>
+        <line num="140" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="141" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="142" count="1" type="stmt"/>
+        <line num="143" count="1" type="stmt"/>
+        <line num="144" count="1" type="stmt"/>
+        <line num="145" count="1" type="stmt"/>
+        <line num="146" count="1" type="stmt"/>
+        <line num="147" count="1" type="stmt"/>
+        <line num="148" count="1" type="stmt"/>
+        <line num="149" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="150" count="1" type="stmt"/>
+        <line num="151" count="1" type="stmt"/>
+        <line num="152" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="153" count="1" type="stmt"/>
+        <line num="154" count="1" type="stmt"/>
+        <line num="155" count="1" type="stmt"/>
+        <line num="156" count="1" type="stmt"/>
+        <line num="157" count="1" type="stmt"/>
+        <line num="158" count="1" type="stmt"/>
+        <line num="159" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="160" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="161" count="1" type="stmt"/>
+        <line num="162" count="1" type="stmt"/>
+        <line num="163" count="1" type="stmt"/>
+        <line num="164" count="1" type="stmt"/>
+        <line num="165" count="1" type="stmt"/>
+        <line num="166" count="1" type="stmt"/>
+        <line num="167" count="1" type="stmt"/>
+        <line num="168" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="169" count="1" type="stmt"/>
+        <line num="170" count="1" type="stmt"/>
+        <line num="171" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="172" count="1" type="stmt"/>
+        <line num="173" count="1" type="stmt"/>
+        <line num="174" count="1" type="stmt"/>
+        <line num="175" count="1" type="stmt"/>
+        <line num="176" count="1" type="stmt"/>
+        <line num="177" count="1" type="stmt"/>
+        <line num="178" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="179" count="1" type="stmt"/>
+        <line num="180" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="181" count="2" type="stmt"/>
+        <line num="182" count="2" type="stmt"/>
+        <line num="183" count="2" type="stmt"/>
+        <line num="184" count="2" type="stmt"/>
+        <line num="185" count="2" type="stmt"/>
+        <line num="186" count="2" type="stmt"/>
+        <line num="187" count="2" type="stmt"/>
+        <line num="188" count="2" type="stmt"/>
+        <line num="189" count="2" type="stmt"/>
+        <line num="190" count="2" type="stmt"/>
+        <line num="191" count="2" type="stmt"/>
+        <line num="192" count="2" type="stmt"/>
+        <line num="193" count="2" type="stmt"/>
+        <line num="194" count="2" type="stmt"/>
+        <line num="195" count="2" type="stmt"/>
+        <line num="196" count="2" type="stmt"/>
+        <line num="197" count="2" type="stmt"/>
+        <line num="198" count="2" type="stmt"/>
+        <line num="199" count="2" type="stmt"/>
+        <line num="200" count="2" type="stmt"/>
+        <line num="201" count="2" type="stmt"/>
+        <line num="202" count="2" type="stmt"/>
+        <line num="203" count="2" type="stmt"/>
+        <line num="204" count="2" type="cond" truecount="1" falsecount="0"/>
+        <line num="205" count="2" type="stmt"/>
+        <line num="206" count="2" type="stmt"/>
+        <line num="207" count="2" type="stmt"/>
+        <line num="208" count="2" type="stmt"/>
+        <line num="209" count="1" type="stmt"/>
+        <line num="210" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="211" count="1" type="stmt"/>
+        <line num="212" count="1" type="stmt"/>
+        <line num="213" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="214" count="1" type="stmt"/>
+        <line num="215" count="1" type="stmt"/>
+        <line num="216" count="1" type="stmt"/>
+        <line num="217" count="1" type="stmt"/>
+        <line num="218" count="1" type="stmt"/>
       </file>
     </package>
     <package name="ragchat-api.controllers">
-      <metrics statements="859" coveredstatements="548" conditionals="70" coveredconditionals="51" methods="33" coveredmethods="20"/>
-      <file name="AI.js" path="/home/embruch/ragchat-api/controllers/AI.js">
-        <metrics statements="192" coveredstatements="178" conditionals="30" coveredconditionals="22" methods="10" coveredmethods="10"/>
+      <metrics statements="474" coveredstatements="439" conditionals="72" coveredconditionals="50" methods="20" coveredmethods="20"/>
+      <file name="AI.js" path="/local/embruch/ragchat-api/controllers/AI.js">
+        <metrics statements="191" coveredstatements="177" conditionals="30" coveredconditionals="22" methods="10" coveredmethods="10"/>
         <line num="1" count="15" type="cond" truecount="2" falsecount="0"/>
         <line num="2" count="15" type="stmt"/>
         <line num="3" count="15" type="stmt"/>
@@ -154,95 +1987,95 @@
         <line num="13" count="15" type="stmt"/>
         <line num="14" count="15" type="stmt"/>
         <line num="15" count="15" type="stmt"/>
-        <line num="16" count="15" type="cond" truecount="1" falsecount="0"/>
-        <line num="17" count="2" type="stmt"/>
-        <line num="18" count="2" type="stmt"/>
+        <line num="16" count="15" type="stmt"/>
+        <line num="17" count="15" type="stmt"/>
+        <line num="18" count="15" type="cond" truecount="1" falsecount="0"/>
         <line num="19" count="2" type="stmt"/>
-        <line num="20" count="2" type="cond" truecount="1" falsecount="0"/>
-        <line num="21" count="1" type="stmt"/>
-        <line num="22" count="1" type="stmt"/>
+        <line num="20" count="2" type="stmt"/>
+        <line num="21" count="2" type="stmt"/>
+        <line num="22" count="2" type="cond" truecount="1" falsecount="0"/>
         <line num="23" count="1" type="stmt"/>
-        <line num="24" count="15" type="stmt"/>
-        <line num="25" count="15" type="stmt"/>
+        <line num="24" count="1" type="stmt"/>
+        <line num="25" count="1" type="stmt"/>
         <line num="26" count="15" type="stmt"/>
         <line num="27" count="15" type="stmt"/>
         <line num="28" count="15" type="stmt"/>
-        <line num="29" count="15" type="cond" truecount="1" falsecount="0"/>
-        <line num="30" count="2" type="stmt"/>
-        <line num="31" count="2" type="stmt"/>
+        <line num="29" count="15" type="stmt"/>
+        <line num="30" count="15" type="stmt"/>
+        <line num="31" count="15" type="cond" truecount="1" falsecount="0"/>
         <line num="32" count="2" type="stmt"/>
-        <line num="33" count="2" type="cond" truecount="0" falsecount="1"/>
-        <line num="34" count="0" type="stmt"/>
-        <line num="35" count="0" type="stmt"/>
-        <line num="36" count="2" type="stmt"/>
-        <line num="37" count="15" type="stmt"/>
-        <line num="38" count="15" type="stmt"/>
+        <line num="33" count="2" type="stmt"/>
+        <line num="34" count="2" type="stmt"/>
+        <line num="35" count="2" type="cond" truecount="0" falsecount="1"/>
+        <line num="36" count="0" type="stmt"/>
+        <line num="37" count="0" type="stmt"/>
+        <line num="38" count="2" type="stmt"/>
         <line num="39" count="15" type="stmt"/>
         <line num="40" count="15" type="stmt"/>
         <line num="41" count="15" type="stmt"/>
-        <line num="42" count="15" type="cond" truecount="1" falsecount="0"/>
-        <line num="43" count="2" type="stmt"/>
-        <line num="44" count="2" type="stmt"/>
-        <line num="45" count="1" type="cond" truecount="1" falsecount="0"/>
-        <line num="46" count="1" type="stmt"/>
-        <line num="47" count="1" type="stmt"/>
+        <line num="42" count="15" type="stmt"/>
+        <line num="43" count="15" type="stmt"/>
+        <line num="44" count="15" type="cond" truecount="1" falsecount="0"/>
+        <line num="45" count="2" type="stmt"/>
+        <line num="46" count="2" type="stmt"/>
+        <line num="47" count="1" type="cond" truecount="1" falsecount="0"/>
         <line num="48" count="1" type="stmt"/>
-        <line num="49" count="2" type="stmt"/>
-        <line num="50" count="15" type="stmt"/>
-        <line num="51" count="15" type="stmt"/>
+        <line num="49" count="1" type="stmt"/>
+        <line num="50" count="1" type="stmt"/>
+        <line num="51" count="2" type="stmt"/>
         <line num="52" count="15" type="stmt"/>
         <line num="53" count="15" type="stmt"/>
         <line num="54" count="15" type="stmt"/>
-        <line num="55" count="15" type="cond" truecount="1" falsecount="0"/>
-        <line num="56" count="2" type="stmt"/>
-        <line num="57" count="2" type="stmt"/>
-        <line num="58" count="1" type="cond" truecount="1" falsecount="0"/>
-        <line num="59" count="1" type="stmt"/>
-        <line num="60" count="1" type="stmt"/>
+        <line num="55" count="15" type="stmt"/>
+        <line num="56" count="15" type="stmt"/>
+        <line num="57" count="15" type="cond" truecount="1" falsecount="0"/>
+        <line num="58" count="2" type="stmt"/>
+        <line num="59" count="2" type="stmt"/>
+        <line num="60" count="1" type="cond" truecount="1" falsecount="0"/>
         <line num="61" count="1" type="stmt"/>
-        <line num="62" count="2" type="stmt"/>
-        <line num="63" count="15" type="stmt"/>
-        <line num="64" count="15" type="stmt"/>
-        <line num="65" count="15" type="stmt"/>
-        <line num="66" count="15" type="stmt"/>
+        <line num="62" count="1" type="stmt"/>
+        <line num="63" count="1" type="stmt"/>
+        <line num="64" count="1" type="stmt"/>
+        <line num="65" count="1" type="stmt"/>
+        <line num="66" count="2" type="stmt"/>
         <line num="67" count="15" type="stmt"/>
-        <line num="68" count="15" type="cond" truecount="1" falsecount="0"/>
-        <line num="69" count="2" type="stmt"/>
-        <line num="70" count="2" type="stmt"/>
-        <line num="71" count="1" type="cond" truecount="1" falsecount="0"/>
-        <line num="72" count="1" type="stmt"/>
-        <line num="73" count="1" type="stmt"/>
-        <line num="74" count="1" type="stmt"/>
-        <line num="75" count="2" type="stmt"/>
-        <line num="76" count="15" type="stmt"/>
-        <line num="77" count="15" type="stmt"/>
-        <line num="78" count="15" type="stmt"/>
-        <line num="79" count="15" type="stmt"/>
+        <line num="68" count="15" type="stmt"/>
+        <line num="69" count="15" type="stmt"/>
+        <line num="70" count="15" type="stmt"/>
+        <line num="71" count="15" type="stmt"/>
+        <line num="72" count="15" type="cond" truecount="1" falsecount="0"/>
+        <line num="73" count="2" type="stmt"/>
+        <line num="74" count="2" type="stmt"/>
+        <line num="75" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="76" count="1" type="stmt"/>
+        <line num="77" count="1" type="stmt"/>
+        <line num="78" count="1" type="stmt"/>
+        <line num="79" count="2" type="stmt"/>
         <line num="80" count="15" type="stmt"/>
         <line num="81" count="15" type="stmt"/>
-        <line num="82" count="15" type="cond" truecount="1" falsecount="0"/>
-        <line num="83" count="3" type="stmt"/>
-        <line num="84" count="3" type="cond" truecount="1" falsecount="0"/>
-        <line num="85" count="1" type="stmt"/>
-        <line num="86" count="1" type="stmt"/>
-        <line num="87" count="1" type="stmt"/>
-        <line num="88" count="1" type="stmt"/>
+        <line num="82" count="15" type="stmt"/>
+        <line num="83" count="15" type="stmt"/>
+        <line num="84" count="15" type="stmt"/>
+        <line num="85" count="15" type="stmt"/>
+        <line num="86" count="15" type="cond" truecount="1" falsecount="0"/>
+        <line num="87" count="3" type="stmt"/>
+        <line num="88" count="3" type="cond" truecount="1" falsecount="0"/>
         <line num="89" count="1" type="stmt"/>
-        <line num="90" count="1" type="cond" truecount="0" falsecount="1"/>
-        <line num="91" count="0" type="stmt"/>
-        <line num="92" count="0" type="stmt"/>
+        <line num="90" count="1" type="stmt"/>
+        <line num="91" count="1" type="stmt"/>
+        <line num="92" count="1" type="stmt"/>
         <line num="93" count="1" type="stmt"/>
-        <line num="94" count="2" type="cond" truecount="1" falsecount="0"/>
-        <line num="95" count="2" type="stmt"/>
-        <line num="96" count="2" type="stmt"/>
-        <line num="97" count="2" type="stmt"/>
-        <line num="98" count="2" type="stmt"/>
-        <line num="99" count="2" type="stmt"/>
-        <line num="100" count="3" type="cond" truecount="1" falsecount="0"/>
-        <line num="101" count="1" type="stmt"/>
-        <line num="102" count="1" type="stmt"/>
-        <line num="103" count="1" type="stmt"/>
-        <line num="104" count="1" type="stmt"/>
+        <line num="94" count="1" type="stmt"/>
+        <line num="95" count="1" type="cond" truecount="0" falsecount="1"/>
+        <line num="96" count="0" type="stmt"/>
+        <line num="97" count="0" type="stmt"/>
+        <line num="98" count="1" type="stmt"/>
+        <line num="99" count="2" type="cond" truecount="1" falsecount="0"/>
+        <line num="100" count="2" type="stmt"/>
+        <line num="101" count="2" type="stmt"/>
+        <line num="102" count="2" type="stmt"/>
+        <line num="103" count="2" type="stmt"/>
+        <line num="104" count="3" type="cond" truecount="1" falsecount="0"/>
         <line num="105" count="1" type="stmt"/>
         <line num="106" count="1" type="stmt"/>
         <line num="107" count="1" type="stmt"/>
@@ -287,53 +2120,52 @@
         <line num="146" count="1" type="stmt"/>
         <line num="147" count="1" type="stmt"/>
         <line num="148" count="1" type="stmt"/>
-        <line num="149" count="1" type="stmt"/>
-        <line num="150" count="1" type="stmt"/>
-        <line num="151" count="1" type="stmt"/>
+        <line num="149" count="1" type="cond" truecount="0" falsecount="1"/>
+        <line num="150" count="0" type="stmt"/>
+        <line num="151" count="0" type="stmt"/>
         <line num="152" count="1" type="stmt"/>
-        <line num="153" count="1" type="stmt"/>
-        <line num="154" count="1" type="cond" truecount="0" falsecount="1"/>
-        <line num="155" count="0" type="stmt"/>
-        <line num="156" count="0" type="stmt"/>
-        <line num="157" count="1" type="stmt"/>
-        <line num="158" count="15" type="stmt"/>
-        <line num="159" count="15" type="stmt"/>
-        <line num="160" count="15" type="stmt"/>
-        <line num="161" count="15" type="stmt"/>
-        <line num="162" count="15" type="stmt"/>
-        <line num="163" count="15" type="cond" truecount="1" falsecount="0"/>
-        <line num="164" count="4" type="cond" truecount="0" falsecount="1"/>
-        <line num="165" count="0" type="stmt"/>
-        <line num="166" count="0" type="stmt"/>
-        <line num="167" count="4" type="stmt"/>
-        <line num="168" count="4" type="stmt"/>
-        <line num="169" count="4" type="cond" truecount="1" falsecount="0"/>
-        <line num="170" count="1" type="stmt"/>
-        <line num="171" count="1" type="stmt"/>
-        <line num="172" count="3" type="cond" truecount="1" falsecount="0"/>
-        <line num="173" count="3" type="stmt"/>
+        <line num="153" count="15" type="stmt"/>
+        <line num="154" count="15" type="stmt"/>
+        <line num="155" count="15" type="stmt"/>
+        <line num="156" count="15" type="stmt"/>
+        <line num="157" count="15" type="stmt"/>
+        <line num="158" count="15" type="cond" truecount="1" falsecount="0"/>
+        <line num="159" count="4" type="stmt"/>
+        <line num="160" count="4" type="cond" truecount="0" falsecount="1"/>
+        <line num="161" count="0" type="stmt"/>
+        <line num="162" count="0" type="stmt"/>
+        <line num="163" count="4" type="stmt"/>
+        <line num="164" count="4" type="stmt"/>
+        <line num="165" count="4" type="cond" truecount="1" falsecount="0"/>
+        <line num="166" count="1" type="stmt"/>
+        <line num="167" count="1" type="stmt"/>
+        <line num="168" count="3" type="cond" truecount="1" falsecount="0"/>
+        <line num="169" count="3" type="stmt"/>
+        <line num="170" count="3" type="stmt"/>
+        <line num="171" count="15" type="stmt"/>
+        <line num="172" count="15" type="stmt"/>
+        <line num="173" count="15" type="stmt"/>
         <line num="174" count="15" type="stmt"/>
-        <line num="175" count="15" type="stmt"/>
-        <line num="176" count="15" type="stmt"/>
-        <line num="177" count="15" type="stmt"/>
-        <line num="178" count="15" type="cond" truecount="1" falsecount="0"/>
-        <line num="179" count="6" type="stmt"/>
-        <line num="180" count="6" type="stmt"/>
-        <line num="181" count="6" type="stmt"/>
-        <line num="182" count="6" type="stmt"/>
-        <line num="183" count="6" type="stmt"/>
-        <line num="184" count="6" type="cond" truecount="0" falsecount="1"/>
-        <line num="185" count="6" type="stmt"/>
-        <line num="186" count="6" type="stmt"/>
-        <line num="187" count="6" type="stmt"/>
-        <line num="188" count="6" type="cond" truecount="1" falsecount="0"/>
-        <line num="189" count="6" type="cond" truecount="0" falsecount="1"/>
+        <line num="175" count="15" type="cond" truecount="1" falsecount="0"/>
+        <line num="176" count="7" type="stmt"/>
+        <line num="177" count="7" type="stmt"/>
+        <line num="178" count="7" type="stmt"/>
+        <line num="179" count="7" type="stmt"/>
+        <line num="180" count="7" type="stmt"/>
+        <line num="181" count="7" type="stmt"/>
+        <line num="182" count="7" type="cond" truecount="0" falsecount="1"/>
+        <line num="183" count="7" type="stmt"/>
+        <line num="184" count="7" type="stmt"/>
+        <line num="185" count="7" type="stmt"/>
+        <line num="186" count="7" type="stmt"/>
+        <line num="187" count="7" type="cond" truecount="1" falsecount="0"/>
+        <line num="188" count="7" type="cond" truecount="0" falsecount="1"/>
+        <line num="189" count="0" type="stmt"/>
         <line num="190" count="0" type="stmt"/>
-        <line num="191" count="0" type="stmt"/>
-        <line num="192" count="6" type="stmt"/>
+        <line num="191" count="7" type="stmt"/>
       </file>
-      <file name="Auth.js" path="/home/embruch/ragchat-api/controllers/Auth.js">
-        <metrics statements="217" coveredstatements="202" conditionals="31" coveredconditionals="22" methods="8" coveredmethods="8"/>
+      <file name="Auth.js" path="/local/embruch/ragchat-api/controllers/Auth.js">
+        <metrics statements="229" coveredstatements="214" conditionals="31" coveredconditionals="22" methods="8" coveredmethods="8"/>
         <line num="1" count="1" type="stmt"/>
         <line num="2" count="1" type="stmt"/>
         <line num="3" count="1" type="stmt"/>
@@ -358,614 +2190,214 @@
         <line num="22" count="2" type="stmt"/>
         <line num="23" count="2" type="stmt"/>
         <line num="24" count="2" type="stmt"/>
-        <line num="25" count="2" type="cond" truecount="0" falsecount="1"/>
-        <line num="26" count="0" type="stmt"/>
-        <line num="27" count="0" type="stmt"/>
-        <line num="28" count="2" type="stmt"/>
-        <line num="29" count="1" type="stmt"/>
-        <line num="30" count="1" type="stmt"/>
+        <line num="25" count="2" type="stmt"/>
+        <line num="26" count="2" type="stmt"/>
+        <line num="27" count="2" type="cond" truecount="0" falsecount="1"/>
+        <line num="28" count="0" type="stmt"/>
+        <line num="29" count="0" type="stmt"/>
+        <line num="30" count="2" type="stmt"/>
         <line num="31" count="1" type="stmt"/>
         <line num="32" count="1" type="stmt"/>
         <line num="33" count="1" type="stmt"/>
-        <line num="34" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="34" count="1" type="stmt"/>
         <line num="35" count="1" type="stmt"/>
-        <line num="36" count="1" type="stmt"/>
+        <line num="36" count="1" type="cond" truecount="1" falsecount="0"/>
         <line num="37" count="1" type="stmt"/>
         <line num="38" count="1" type="stmt"/>
         <line num="39" count="1" type="stmt"/>
         <line num="40" count="1" type="stmt"/>
-        <line num="41" count="1" type="cond" truecount="0" falsecount="1"/>
-        <line num="42" count="0" type="stmt"/>
-        <line num="43" count="0" type="stmt"/>
-        <line num="44" count="1" type="stmt"/>
-        <line num="45" count="1" type="stmt"/>
-        <line num="46" count="1" type="stmt"/>
+        <line num="41" count="1" type="stmt"/>
+        <line num="42" count="1" type="stmt"/>
+        <line num="43" count="1" type="stmt"/>
+        <line num="44" count="1" type="cond" truecount="0" falsecount="1"/>
+        <line num="45" count="0" type="stmt"/>
+        <line num="46" count="0" type="stmt"/>
         <line num="47" count="1" type="stmt"/>
         <line num="48" count="1" type="stmt"/>
         <line num="49" count="1" type="stmt"/>
         <line num="50" count="1" type="stmt"/>
         <line num="51" count="1" type="stmt"/>
         <line num="52" count="1" type="stmt"/>
-        <line num="53" count="1" type="cond" truecount="1" falsecount="0"/>
-        <line num="54" count="4" type="stmt"/>
-        <line num="55" count="4" type="stmt"/>
-        <line num="56" count="4" type="stmt"/>
+        <line num="53" count="1" type="stmt"/>
+        <line num="54" count="1" type="stmt"/>
+        <line num="55" count="1" type="stmt"/>
+        <line num="56" count="1" type="cond" truecount="1" falsecount="0"/>
         <line num="57" count="4" type="stmt"/>
         <line num="58" count="4" type="stmt"/>
         <line num="59" count="4" type="stmt"/>
         <line num="60" count="4" type="stmt"/>
         <line num="61" count="4" type="stmt"/>
         <line num="62" count="4" type="stmt"/>
-        <line num="63" count="4" type="cond" truecount="1" falsecount="0"/>
-        <line num="64" count="1" type="stmt"/>
-        <line num="65" count="1" type="stmt"/>
-        <line num="66" count="3" type="cond" truecount="1" falsecount="0"/>
-        <line num="67" count="3" type="stmt"/>
-        <line num="68" count="4" type="cond" truecount="1" falsecount="0"/>
-        <line num="69" count="1" type="stmt"/>
-        <line num="70" count="1" type="stmt"/>
-        <line num="71" count="2" type="cond" truecount="1" falsecount="0"/>
-        <line num="72" count="2" type="stmt"/>
-        <line num="73" count="4" type="cond" truecount="1" falsecount="0"/>
-        <line num="74" count="1" type="stmt"/>
-        <line num="75" count="1" type="stmt"/>
-        <line num="76" count="1" type="stmt"/>
+        <line num="63" count="4" type="stmt"/>
+        <line num="64" count="4" type="stmt"/>
+        <line num="65" count="4" type="cond" truecount="1" falsecount="0"/>
+        <line num="66" count="1" type="stmt"/>
+        <line num="67" count="1" type="stmt"/>
+        <line num="68" count="3" type="cond" truecount="1" falsecount="0"/>
+        <line num="69" count="3" type="stmt"/>
+        <line num="70" count="4" type="cond" truecount="1" falsecount="0"/>
+        <line num="71" count="1" type="stmt"/>
+        <line num="72" count="1" type="stmt"/>
+        <line num="73" count="2" type="cond" truecount="1" falsecount="0"/>
+        <line num="74" count="2" type="stmt"/>
+        <line num="75" count="2" type="stmt"/>
+        <line num="76" count="4" type="cond" truecount="1" falsecount="0"/>
         <line num="77" count="1" type="stmt"/>
         <line num="78" count="1" type="stmt"/>
-        <line num="79" count="1" type="stmt"/>
-        <line num="80" count="1" type="stmt"/>
-        <line num="81" count="1" type="cond" truecount="0" falsecount="1"/>
-        <line num="82" count="1" type="stmt"/>
-        <line num="83" count="1" type="stmt"/>
-        <line num="84" count="1" type="stmt"/>
-        <line num="85" count="1" type="stmt"/>
-        <line num="86" count="1" type="stmt"/>
-        <line num="87" count="1" type="stmt"/>
-        <line num="88" count="1" type="stmt"/>
-        <line num="89" count="1" type="stmt"/>
-        <line num="90" count="1" type="stmt"/>
-        <line num="91" count="4" type="cond" truecount="0" falsecount="1"/>
-        <line num="92" count="0" type="stmt"/>
-        <line num="93" count="0" type="stmt"/>
-        <line num="94" count="0" type="stmt"/>
-        <line num="95" count="4" type="stmt"/>
-        <line num="96" count="1" type="stmt"/>
-        <line num="97" count="1" type="stmt"/>
-        <line num="98" count="1" type="stmt"/>
-        <line num="99" count="1" type="stmt"/>
-        <line num="100" count="1" type="stmt"/>
-        <line num="101" count="1" type="stmt"/>
-        <line num="102" count="1" type="stmt"/>
-        <line num="103" count="1" type="stmt"/>
-        <line num="104" count="1" type="cond" truecount="1" falsecount="0"/>
-        <line num="105" count="6" type="stmt"/>
-        <line num="106" count="6" type="stmt"/>
-        <line num="107" count="6" type="stmt"/>
-        <line num="108" count="6" type="cond" truecount="1" falsecount="0"/>
-        <line num="109" count="5" type="cond" truecount="1" falsecount="0"/>
-        <line num="110" count="5" type="stmt"/>
-        <line num="111" count="4" type="cond" truecount="3" falsecount="0"/>
-        <line num="112" count="1" type="stmt"/>
-        <line num="113" count="1" type="stmt"/>
-        <line num="114" count="1" type="stmt"/>
-        <line num="115" count="1" type="stmt"/>
-        <line num="116" count="1" type="stmt"/>
-        <line num="117" count="6" type="cond" truecount="1" falsecount="0"/>
-        <line num="118" count="3" type="stmt"/>
-        <line num="119" count="3" type="stmt"/>
-        <line num="120" count="6" type="stmt"/>
-        <line num="121" count="1" type="stmt"/>
-        <line num="122" count="1" type="stmt"/>
-        <line num="123" count="1" type="stmt"/>
-        <line num="124" count="1" type="stmt"/>
-        <line num="125" count="1" type="stmt"/>
-        <line num="126" count="1" type="stmt"/>
-        <line num="127" count="1" type="cond" truecount="1" falsecount="0"/>
-        <line num="128" count="1" type="stmt"/>
-        <line num="129" count="1" type="stmt"/>
-        <line num="130" count="1" type="cond" truecount="0" falsecount="1"/>
-        <line num="131" count="1" type="stmt"/>
-        <line num="132" count="1" type="stmt"/>
-        <line num="133" count="1" type="cond" truecount="0" falsecount="1"/>
-        <line num="134" count="0" type="stmt"/>
-        <line num="135" count="0" type="stmt"/>
-        <line num="136" count="1" type="stmt"/>
-        <line num="137" count="1" type="stmt"/>
-        <line num="138" count="1" type="stmt"/>
-        <line num="139" count="1" type="stmt"/>
-        <line num="140" count="1" type="stmt"/>
-        <line num="141" count="1" type="stmt"/>
-        <line num="142" count="1" type="stmt"/>
-        <line num="143" count="1" type="cond" truecount="1" falsecount="0"/>
-        <line num="144" count="2" type="stmt"/>
-        <line num="145" count="2" type="stmt"/>
-        <line num="146" count="2" type="stmt"/>
-        <line num="147" count="2" type="stmt"/>
-        <line num="148" count="2" type="stmt"/>
-        <line num="149" count="2" type="cond" truecount="1" falsecount="0"/>
-        <line num="150" count="1" type="stmt"/>
-        <line num="151" count="1" type="stmt"/>
-        <line num="152" count="1" type="stmt"/>
-        <line num="153" count="1" type="stmt"/>
-        <line num="154" count="1" type="stmt"/>
-        <line num="155" count="1" type="stmt"/>
-        <line num="156" count="1" type="stmt"/>
-        <line num="157" count="1" type="stmt"/>
-        <line num="158" count="1" type="stmt"/>
-        <line num="159" count="1" type="stmt"/>
-        <line num="160" count="1" type="stmt"/>
-        <line num="161" count="1" type="stmt"/>
-        <line num="162" count="1" type="stmt"/>
-        <line num="163" count="1" type="stmt"/>
-        <line num="164" count="1" type="stmt"/>
-        <line num="165" count="1" type="stmt"/>
-        <line num="166" count="1" type="stmt"/>
-        <line num="167" count="1" type="cond" truecount="0" falsecount="1"/>
-        <line num="168" count="0" type="stmt"/>
-        <line num="169" count="0" type="stmt"/>
-        <line num="170" count="1" type="stmt"/>
-        <line num="171" count="2" type="stmt"/>
-        <line num="172" count="2" type="stmt"/>
-        <line num="173" count="2" type="stmt"/>
-        <line num="174" count="2" type="cond" truecount="0" falsecount="1"/>
-        <line num="175" count="0" type="stmt"/>
-        <line num="176" count="0" type="stmt"/>
-        <line num="177" count="2" type="stmt"/>
-        <line num="178" count="1" type="stmt"/>
-        <line num="179" count="1" type="stmt"/>
-        <line num="180" count="1" type="stmt"/>
-        <line num="181" count="1" type="stmt"/>
-        <line num="182" count="1" type="stmt"/>
-        <line num="183" count="1" type="cond" truecount="1" falsecount="0"/>
-        <line num="184" count="1" type="stmt"/>
-        <line num="185" count="1" type="stmt"/>
-        <line num="186" count="1" type="stmt"/>
-        <line num="187" count="1" type="stmt"/>
-        <line num="188" count="1" type="stmt"/>
-        <line num="189" count="1" type="stmt"/>
-        <line num="190" count="1" type="stmt"/>
-        <line num="191" count="1" type="cond" truecount="0" falsecount="1"/>
-        <line num="192" count="0" type="stmt"/>
-        <line num="193" count="0" type="stmt"/>
-        <line num="194" count="1" type="stmt"/>
-        <line num="195" count="1" type="stmt"/>
-        <line num="196" count="1" type="stmt"/>
-        <line num="197" count="1" type="stmt"/>
-        <line num="198" count="1" type="stmt"/>
-        <line num="199" count="1" type="stmt"/>
-        <line num="200" count="1" type="stmt"/>
-        <line num="201" count="1" type="stmt"/>
-        <line num="202" count="1" type="cond" truecount="1" falsecount="0"/>
-        <line num="203" count="8" type="stmt"/>
-        <line num="204" count="8" type="cond" truecount="1" falsecount="0"/>
-        <line num="205" count="2" type="cond" truecount="1" falsecount="0"/>
-        <line num="206" count="2" type="stmt"/>
-        <line num="207" count="2" type="stmt"/>
-        <line num="208" count="2" type="stmt"/>
-        <line num="209" count="2" type="stmt"/>
-        <line num="210" count="2" type="stmt"/>
-        <line num="211" count="2" type="stmt"/>
-        <line num="212" count="2" type="stmt"/>
-        <line num="213" count="2" type="stmt"/>
-        <line num="214" count="2" type="stmt"/>
-        <line num="215" count="2" type="stmt"/>
-        <line num="216" count="2" type="stmt"/>
-        <line num="217" count="2" type="stmt"/>
-      </file>
-      <file name="Embeddings.js" path="/home/embruch/ragchat-api/controllers/Embeddings.js">
-        <metrics statements="409" coveredstatements="129" conditionals="1" coveredconditionals="0" methods="13" coveredmethods="0"/>
-        <line num="1" count="1" type="stmt"/>
-        <line num="2" count="1" type="stmt"/>
-        <line num="3" count="1" type="stmt"/>
-        <line num="4" count="1" type="stmt"/>
-        <line num="5" count="1" type="stmt"/>
-        <line num="6" count="1" type="stmt"/>
-        <line num="7" count="1" type="stmt"/>
-        <line num="8" count="1" type="stmt"/>
-        <line num="9" count="1" type="stmt"/>
-        <line num="10" count="1" type="stmt"/>
-        <line num="14" count="1" type="stmt"/>
-        <line num="15" count="1" type="stmt"/>
-        <line num="16" count="1" type="stmt"/>
-        <line num="17" count="1" type="stmt"/>
-        <line num="18" count="1" type="stmt"/>
-        <line num="19" count="1" type="stmt"/>
-        <line num="20" count="1" type="stmt"/>
-        <line num="21" count="1" type="stmt"/>
-        <line num="22" count="1" type="stmt"/>
-        <line num="23" count="1" type="stmt"/>
-        <line num="24" count="1" type="stmt"/>
-        <line num="25" count="1" type="stmt"/>
-        <line num="26" count="1" type="stmt"/>
-        <line num="27" count="1" type="stmt"/>
-        <line num="28" count="1" type="stmt"/>
-        <line num="29" count="1" type="stmt"/>
-        <line num="30" count="1" type="stmt"/>
-        <line num="31" count="1" type="stmt"/>
-        <line num="32" count="1" type="stmt"/>
-        <line num="33" count="1" type="stmt"/>
-        <line num="34" count="1" type="stmt"/>
-        <line num="35" count="1" type="stmt"/>
-        <line num="36" count="1" type="stmt"/>
-        <line num="37" count="1" type="stmt"/>
-        <line num="38" count="1" type="stmt"/>
-        <line num="39" count="1" type="stmt"/>
-        <line num="40" count="1" type="stmt"/>
-        <line num="41" count="1" type="stmt"/>
-        <line num="42" count="1" type="stmt"/>
-        <line num="43" count="1" type="stmt"/>
-        <line num="44" count="1" type="stmt"/>
-        <line num="45" count="1" type="stmt"/>
-        <line num="46" count="1" type="stmt"/>
-        <line num="47" count="1" type="stmt"/>
-        <line num="48" count="1" type="stmt"/>
-        <line num="49" count="1" type="cond" truecount="0" falsecount="1"/>
-        <line num="50" count="0" type="stmt"/>
-        <line num="51" count="0" type="stmt"/>
-        <line num="52" count="0" type="stmt"/>
-        <line num="53" count="1" type="stmt"/>
-        <line num="54" count="1" type="stmt"/>
-        <line num="55" count="1" type="stmt"/>
-        <line num="56" count="1" type="stmt"/>
-        <line num="57" count="1" type="stmt"/>
-        <line num="58" count="1" type="stmt"/>
-        <line num="59" count="1" type="stmt"/>
-        <line num="60" count="1" type="stmt"/>
-        <line num="61" count="1" type="stmt"/>
-        <line num="62" count="1" type="stmt"/>
-        <line num="63" count="1" type="stmt"/>
-        <line num="64" count="0" type="stmt"/>
-        <line num="65" count="0" type="stmt"/>
-        <line num="66" count="0" type="stmt"/>
-        <line num="67" count="0" type="stmt"/>
-        <line num="68" count="0" type="stmt"/>
-        <line num="69" count="0" type="stmt"/>
-        <line num="70" count="0" type="stmt"/>
-        <line num="71" count="0" type="stmt"/>
-        <line num="72" count="0" type="stmt"/>
-        <line num="73" count="0" type="stmt"/>
-        <line num="74" count="0" type="stmt"/>
-        <line num="75" count="0" type="stmt"/>
-        <line num="76" count="0" type="stmt"/>
-        <line num="77" count="0" type="stmt"/>
-        <line num="78" count="0" type="stmt"/>
-        <line num="79" count="0" type="stmt"/>
-        <line num="80" count="0" type="stmt"/>
-        <line num="81" count="1" type="stmt"/>
-        <line num="82" count="1" type="stmt"/>
-        <line num="83" count="1" type="stmt"/>
-        <line num="84" count="1" type="stmt"/>
-        <line num="85" count="1" type="stmt"/>
-        <line num="86" count="1" type="stmt"/>
-        <line num="87" count="0" type="stmt"/>
-        <line num="88" count="0" type="stmt"/>
-        <line num="89" count="0" type="stmt"/>
-        <line num="90" count="0" type="stmt"/>
-        <line num="91" count="0" type="stmt"/>
-        <line num="92" count="0" type="stmt"/>
-        <line num="93" count="0" type="stmt"/>
-        <line num="94" count="0" type="stmt"/>
-        <line num="95" count="0" type="stmt"/>
-        <line num="96" count="0" type="stmt"/>
-        <line num="97" count="0" type="stmt"/>
-        <line num="98" count="0" type="stmt"/>
-        <line num="99" count="0" type="stmt"/>
+        <line num="79" count="1" type="stmt"/>
+        <line num="80" count="1" type="stmt"/>
+        <line num="81" count="1" type="stmt"/>
+        <line num="82" count="1" type="stmt"/>
+        <line num="83" count="1" type="stmt"/>
+        <line num="84" count="1" type="stmt"/>
+        <line num="85" count="1" type="stmt"/>
+        <line num="86" count="1" type="stmt"/>
+        <line num="87" count="1" type="stmt"/>
+        <line num="88" count="1" type="cond" truecount="0" falsecount="1"/>
+        <line num="89" count="1" type="stmt"/>
+        <line num="90" count="1" type="stmt"/>
+        <line num="91" count="1" type="stmt"/>
+        <line num="92" count="1" type="stmt"/>
+        <line num="93" count="1" type="stmt"/>
+        <line num="94" count="1" type="stmt"/>
+        <line num="95" count="1" type="stmt"/>
+        <line num="96" count="1" type="stmt"/>
+        <line num="97" count="1" type="stmt"/>
+        <line num="98" count="1" type="stmt"/>
+        <line num="99" count="4" type="cond" truecount="0" falsecount="1"/>
         <line num="100" count="0" type="stmt"/>
         <line num="101" count="0" type="stmt"/>
         <line num="102" count="0" type="stmt"/>
-        <line num="103" count="0" type="stmt"/>
-        <line num="104" count="0" type="stmt"/>
-        <line num="105" count="0" type="stmt"/>
+        <line num="103" count="4" type="stmt"/>
+        <line num="104" count="1" type="stmt"/>
+        <line num="105" count="1" type="stmt"/>
         <line num="106" count="1" type="stmt"/>
         <line num="107" count="1" type="stmt"/>
         <line num="108" count="1" type="stmt"/>
         <line num="109" count="1" type="stmt"/>
         <line num="110" count="1" type="stmt"/>
-        <line num="111" count="0" type="stmt"/>
-        <line num="112" count="0" type="stmt"/>
-        <line num="113" count="0" type="stmt"/>
-        <line num="114" count="0" type="stmt"/>
-        <line num="115" count="0" type="stmt"/>
-        <line num="116" count="0" type="stmt"/>
-        <line num="117" count="0" type="stmt"/>
-        <line num="118" count="0" type="stmt"/>
-        <line num="119" count="0" type="stmt"/>
-        <line num="120" count="0" type="stmt"/>
-        <line num="121" count="0" type="stmt"/>
-        <line num="122" count="0" type="stmt"/>
-        <line num="123" count="0" type="stmt"/>
-        <line num="124" count="0" type="stmt"/>
-        <line num="125" count="0" type="stmt"/>
-        <line num="126" count="0" type="stmt"/>
-        <line num="127" count="0" type="stmt"/>
-        <line num="128" count="0" type="stmt"/>
-        <line num="129" count="0" type="stmt"/>
-        <line num="130" count="0" type="stmt"/>
-        <line num="131" count="0" type="stmt"/>
+        <line num="111" count="1" type="stmt"/>
+        <line num="112" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="113" count="6" type="stmt"/>
+        <line num="114" count="6" type="stmt"/>
+        <line num="115" count="6" type="stmt"/>
+        <line num="116" count="6" type="cond" truecount="1" falsecount="0"/>
+        <line num="117" count="5" type="cond" truecount="1" falsecount="0"/>
+        <line num="118" count="5" type="stmt"/>
+        <line num="119" count="4" type="cond" truecount="3" falsecount="0"/>
+        <line num="120" count="1" type="stmt"/>
+        <line num="121" count="1" type="stmt"/>
+        <line num="122" count="1" type="stmt"/>
+        <line num="123" count="1" type="stmt"/>
+        <line num="124" count="1" type="stmt"/>
+        <line num="125" count="6" type="cond" truecount="1" falsecount="0"/>
+        <line num="126" count="3" type="stmt"/>
+        <line num="127" count="3" type="stmt"/>
+        <line num="128" count="6" type="stmt"/>
+        <line num="129" count="1" type="stmt"/>
+        <line num="130" count="1" type="stmt"/>
+        <line num="131" count="1" type="stmt"/>
         <line num="132" count="1" type="stmt"/>
         <line num="133" count="1" type="stmt"/>
         <line num="134" count="1" type="stmt"/>
-        <line num="135" count="1" type="stmt"/>
+        <line num="135" count="1" type="cond" truecount="1" falsecount="0"/>
         <line num="136" count="1" type="stmt"/>
-        <line num="137" count="0" type="stmt"/>
-        <line num="138" count="0" type="stmt"/>
-        <line num="139" count="0" type="stmt"/>
-        <line num="140" count="0" type="stmt"/>
-        <line num="141" count="0" type="stmt"/>
-        <line num="142" count="0" type="stmt"/>
+        <line num="137" count="1" type="stmt"/>
+        <line num="138" count="1" type="stmt"/>
+        <line num="139" count="1" type="cond" truecount="0" falsecount="1"/>
+        <line num="140" count="1" type="stmt"/>
+        <line num="141" count="1" type="stmt"/>
+        <line num="142" count="1" type="cond" truecount="0" falsecount="1"/>
         <line num="143" count="0" type="stmt"/>
         <line num="144" count="0" type="stmt"/>
-        <line num="145" count="0" type="stmt"/>
-        <line num="146" count="0" type="stmt"/>
-        <line num="147" count="0" type="stmt"/>
-        <line num="148" count="0" type="stmt"/>
-        <line num="149" count="0" type="stmt"/>
-        <line num="150" count="0" type="stmt"/>
-        <line num="151" count="0" type="stmt"/>
-        <line num="152" count="0" type="stmt"/>
-        <line num="153" count="0" type="stmt"/>
-        <line num="154" count="0" type="stmt"/>
-        <line num="155" count="0" type="stmt"/>
-        <line num="156" count="0" type="stmt"/>
-        <line num="157" count="0" type="stmt"/>
-        <line num="158" count="0" type="stmt"/>
-        <line num="159" count="0" type="stmt"/>
-        <line num="160" count="0" type="stmt"/>
-        <line num="161" count="0" type="stmt"/>
-        <line num="162" count="0" type="stmt"/>
-        <line num="163" count="0" type="stmt"/>
-        <line num="164" count="0" type="stmt"/>
-        <line num="165" count="0" type="stmt"/>
-        <line num="166" count="0" type="stmt"/>
-        <line num="167" count="0" type="stmt"/>
-        <line num="168" count="0" type="stmt"/>
-        <line num="169" count="0" type="stmt"/>
-        <line num="170" count="0" type="stmt"/>
-        <line num="171" count="0" type="stmt"/>
-        <line num="172" count="0" type="stmt"/>
-        <line num="173" count="0" type="stmt"/>
-        <line num="174" count="0" type="stmt"/>
-        <line num="175" count="0" type="stmt"/>
-        <line num="176" count="0" type="stmt"/>
-        <line num="177" count="0" type="stmt"/>
-        <line num="178" count="0" type="stmt"/>
-        <line num="179" count="0" type="stmt"/>
+        <line num="145" count="1" type="stmt"/>
+        <line num="146" count="1" type="stmt"/>
+        <line num="147" count="1" type="stmt"/>
+        <line num="148" count="1" type="stmt"/>
+        <line num="149" count="1" type="stmt"/>
+        <line num="150" count="1" type="stmt"/>
+        <line num="151" count="1" type="stmt"/>
+        <line num="152" count="1" type="stmt"/>
+        <line num="153" count="1" type="stmt"/>
+        <line num="154" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="155" count="2" type="stmt"/>
+        <line num="156" count="2" type="stmt"/>
+        <line num="157" count="2" type="stmt"/>
+        <line num="158" count="2" type="stmt"/>
+        <line num="159" count="2" type="stmt"/>
+        <line num="160" count="2" type="cond" truecount="1" falsecount="0"/>
+        <line num="161" count="1" type="stmt"/>
+        <line num="162" count="1" type="stmt"/>
+        <line num="163" count="1" type="stmt"/>
+        <line num="164" count="1" type="stmt"/>
+        <line num="165" count="1" type="stmt"/>
+        <line num="166" count="1" type="stmt"/>
+        <line num="167" count="1" type="stmt"/>
+        <line num="168" count="1" type="stmt"/>
+        <line num="169" count="1" type="stmt"/>
+        <line num="170" count="1" type="stmt"/>
+        <line num="171" count="1" type="stmt"/>
+        <line num="172" count="1" type="stmt"/>
+        <line num="173" count="1" type="stmt"/>
+        <line num="174" count="1" type="stmt"/>
+        <line num="175" count="1" type="stmt"/>
+        <line num="176" count="1" type="stmt"/>
+        <line num="177" count="1" type="stmt"/>
+        <line num="178" count="1" type="stmt"/>
+        <line num="179" count="1" type="cond" truecount="0" falsecount="1"/>
         <line num="180" count="0" type="stmt"/>
         <line num="181" count="0" type="stmt"/>
-        <line num="182" count="0" type="stmt"/>
-        <line num="183" count="0" type="stmt"/>
-        <line num="184" count="0" type="stmt"/>
-        <line num="185" count="0" type="stmt"/>
-        <line num="186" count="0" type="stmt"/>
+        <line num="182" count="1" type="stmt"/>
+        <line num="183" count="2" type="stmt"/>
+        <line num="184" count="2" type="stmt"/>
+        <line num="185" count="2" type="stmt"/>
+        <line num="186" count="2" type="cond" truecount="0" falsecount="1"/>
         <line num="187" count="0" type="stmt"/>
         <line num="188" count="0" type="stmt"/>
-        <line num="189" count="0" type="stmt"/>
-        <line num="190" count="0" type="stmt"/>
-        <line num="191" count="0" type="stmt"/>
-        <line num="192" count="0" type="stmt"/>
-        <line num="193" count="0" type="stmt"/>
-        <line num="194" count="0" type="stmt"/>
-        <line num="195" count="0" type="stmt"/>
-        <line num="196" count="0" type="stmt"/>
-        <line num="197" count="0" type="stmt"/>
-        <line num="198" count="0" type="stmt"/>
-        <line num="199" count="0" type="stmt"/>
-        <line num="200" count="0" type="stmt"/>
-        <line num="201" count="0" type="stmt"/>
-        <line num="202" count="0" type="stmt"/>
-        <line num="203" count="0" type="stmt"/>
+        <line num="189" count="2" type="stmt"/>
+        <line num="190" count="1" type="stmt"/>
+        <line num="191" count="1" type="stmt"/>
+        <line num="192" count="1" type="stmt"/>
+        <line num="193" count="1" type="stmt"/>
+        <line num="194" count="1" type="stmt"/>
+        <line num="195" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="196" count="1" type="stmt"/>
+        <line num="197" count="1" type="stmt"/>
+        <line num="198" count="1" type="stmt"/>
+        <line num="199" count="1" type="stmt"/>
+        <line num="200" count="1" type="stmt"/>
+        <line num="201" count="1" type="stmt"/>
+        <line num="202" count="1" type="stmt"/>
+        <line num="203" count="1" type="cond" truecount="0" falsecount="1"/>
         <line num="204" count="0" type="stmt"/>
         <line num="205" count="0" type="stmt"/>
-        <line num="206" count="0" type="stmt"/>
-        <line num="207" count="0" type="stmt"/>
-        <line num="208" count="0" type="stmt"/>
-        <line num="209" count="0" type="stmt"/>
-        <line num="210" count="0" type="stmt"/>
-        <line num="211" count="0" type="stmt"/>
-        <line num="212" count="0" type="stmt"/>
-        <line num="213" count="0" type="stmt"/>
-        <line num="214" count="0" type="stmt"/>
-        <line num="215" count="0" type="stmt"/>
-        <line num="216" count="0" type="stmt"/>
-        <line num="217" count="0" type="stmt"/>
-        <line num="218" count="0" type="stmt"/>
-        <line num="219" count="0" type="stmt"/>
-        <line num="220" count="0" type="stmt"/>
-        <line num="221" count="0" type="stmt"/>
-        <line num="222" count="0" type="stmt"/>
-        <line num="223" count="0" type="stmt"/>
-        <line num="224" count="1" type="stmt"/>
-        <line num="225" count="1" type="stmt"/>
-        <line num="226" count="1" type="stmt"/>
-        <line num="227" count="1" type="stmt"/>
-        <line num="228" count="1" type="stmt"/>
-        <line num="229" count="1" type="stmt"/>
-        <line num="230" count="1" type="stmt"/>
-        <line num="231" count="1" type="stmt"/>
-        <line num="232" count="1" type="stmt"/>
-        <line num="233" count="1" type="stmt"/>
-        <line num="234" count="1" type="stmt"/>
-        <line num="235" count="0" type="stmt"/>
-        <line num="236" count="0" type="stmt"/>
-        <line num="237" count="0" type="stmt"/>
-        <line num="238" count="0" type="stmt"/>
-        <line num="239" count="0" type="stmt"/>
-        <line num="240" count="0" type="stmt"/>
-        <line num="241" count="0" type="stmt"/>
-        <line num="242" count="0" type="stmt"/>
-        <line num="243" count="0" type="stmt"/>
-        <line num="244" count="0" type="stmt"/>
-        <line num="245" count="0" type="stmt"/>
-        <line num="246" count="0" type="stmt"/>
-        <line num="247" count="0" type="stmt"/>
-        <line num="248" count="0" type="stmt"/>
-        <line num="249" count="0" type="stmt"/>
-        <line num="250" count="0" type="stmt"/>
-        <line num="251" count="0" type="stmt"/>
-        <line num="252" count="0" type="stmt"/>
-        <line num="253" count="0" type="stmt"/>
-        <line num="254" count="0" type="stmt"/>
-        <line num="255" count="0" type="stmt"/>
-        <line num="256" count="0" type="stmt"/>
-        <line num="257" count="1" type="stmt"/>
-        <line num="258" count="1" type="stmt"/>
-        <line num="259" count="1" type="stmt"/>
-        <line num="260" count="1" type="stmt"/>
-        <line num="261" count="1" type="stmt"/>
-        <line num="262" count="0" type="stmt"/>
-        <line num="263" count="0" type="stmt"/>
-        <line num="264" count="0" type="stmt"/>
-        <line num="265" count="0" type="stmt"/>
-        <line num="266" count="0" type="stmt"/>
-        <line num="267" count="0" type="stmt"/>
-        <line num="268" count="0" type="stmt"/>
-        <line num="269" count="0" type="stmt"/>
-        <line num="270" count="0" type="stmt"/>
-        <line num="271" count="0" type="stmt"/>
-        <line num="272" count="0" type="stmt"/>
-        <line num="273" count="0" type="stmt"/>
-        <line num="274" count="0" type="stmt"/>
-        <line num="275" count="0" type="stmt"/>
-        <line num="276" count="0" type="stmt"/>
-        <line num="277" count="0" type="stmt"/>
-        <line num="278" count="0" type="stmt"/>
-        <line num="279" count="0" type="stmt"/>
-        <line num="280" count="0" type="stmt"/>
-        <line num="281" count="0" type="stmt"/>
-        <line num="282" count="0" type="stmt"/>
-        <line num="283" count="0" type="stmt"/>
-        <line num="284" count="1" type="stmt"/>
-        <line num="285" count="1" type="stmt"/>
-        <line num="286" count="1" type="stmt"/>
-        <line num="287" count="1" type="stmt"/>
-        <line num="288" count="1" type="stmt"/>
-        <line num="289" count="1" type="stmt"/>
-        <line num="290" count="0" type="stmt"/>
-        <line num="291" count="0" type="stmt"/>
-        <line num="292" count="0" type="stmt"/>
-        <line num="293" count="0" type="stmt"/>
-        <line num="294" count="0" type="stmt"/>
-        <line num="295" count="0" type="stmt"/>
-        <line num="296" count="0" type="stmt"/>
-        <line num="297" count="0" type="stmt"/>
-        <line num="298" count="0" type="stmt"/>
-        <line num="299" count="1" type="stmt"/>
-        <line num="300" count="1" type="stmt"/>
-        <line num="301" count="1" type="stmt"/>
-        <line num="302" count="1" type="stmt"/>
-        <line num="303" count="1" type="stmt"/>
-        <line num="304" count="0" type="stmt"/>
-        <line num="305" count="0" type="stmt"/>
-        <line num="306" count="0" type="stmt"/>
-        <line num="307" count="0" type="stmt"/>
-        <line num="308" count="0" type="stmt"/>
-        <line num="309" count="0" type="stmt"/>
-        <line num="310" count="0" type="stmt"/>
-        <line num="311" count="0" type="stmt"/>
-        <line num="312" count="0" type="stmt"/>
-        <line num="313" count="0" type="stmt"/>
-        <line num="314" count="0" type="stmt"/>
-        <line num="315" count="0" type="stmt"/>
-        <line num="316" count="0" type="stmt"/>
-        <line num="317" count="0" type="stmt"/>
-        <line num="318" count="1" type="stmt"/>
-        <line num="319" count="1" type="stmt"/>
-        <line num="320" count="1" type="stmt"/>
-        <line num="321" count="1" type="stmt"/>
-        <line num="322" count="1" type="stmt"/>
-        <line num="323" count="1" type="stmt"/>
-        <line num="324" count="0" type="stmt"/>
-        <line num="325" count="0" type="stmt"/>
-        <line num="326" count="0" type="stmt"/>
-        <line num="327" count="0" type="stmt"/>
-        <line num="328" count="0" type="stmt"/>
-        <line num="329" count="0" type="stmt"/>
-        <line num="330" count="0" type="stmt"/>
-        <line num="331" count="0" type="stmt"/>
-        <line num="332" count="0" type="stmt"/>
-        <line num="333" count="0" type="stmt"/>
-        <line num="334" count="1" type="stmt"/>
-        <line num="335" count="1" type="stmt"/>
-        <line num="336" count="1" type="stmt"/>
-        <line num="337" count="1" type="stmt"/>
-        <line num="338" count="1" type="stmt"/>
-        <line num="339" count="1" type="stmt"/>
-        <line num="340" count="0" type="stmt"/>
-        <line num="341" count="0" type="stmt"/>
-        <line num="342" count="0" type="stmt"/>
-        <line num="343" count="0" type="stmt"/>
-        <line num="344" count="0" type="stmt"/>
-        <line num="345" count="0" type="stmt"/>
-        <line num="346" count="0" type="stmt"/>
-        <line num="347" count="0" type="stmt"/>
-        <line num="348" count="0" type="stmt"/>
-        <line num="349" count="0" type="stmt"/>
-        <line num="350" count="0" type="stmt"/>
-        <line num="351" count="0" type="stmt"/>
-        <line num="352" count="0" type="stmt"/>
-        <line num="353" count="0" type="stmt"/>
-        <line num="354" count="0" type="stmt"/>
-        <line num="355" count="1" type="stmt"/>
-        <line num="356" count="1" type="stmt"/>
-        <line num="357" count="1" type="stmt"/>
-        <line num="358" count="1" type="stmt"/>
-        <line num="359" count="1" type="stmt"/>
-        <line num="360" count="0" type="stmt"/>
-        <line num="361" count="0" type="stmt"/>
-        <line num="362" count="0" type="stmt"/>
-        <line num="363" count="0" type="stmt"/>
-        <line num="364" count="0" type="stmt"/>
-        <line num="365" count="0" type="stmt"/>
-        <line num="366" count="0" type="stmt"/>
-        <line num="367" count="0" type="stmt"/>
-        <line num="368" count="0" type="stmt"/>
-        <line num="369" count="0" type="stmt"/>
-        <line num="370" count="0" type="stmt"/>
-        <line num="371" count="0" type="stmt"/>
-        <line num="372" count="1" type="stmt"/>
-        <line num="373" count="1" type="stmt"/>
-        <line num="374" count="1" type="stmt"/>
-        <line num="375" count="1" type="stmt"/>
-        <line num="376" count="1" type="stmt"/>
-        <line num="377" count="1" type="stmt"/>
-        <line num="378" count="0" type="stmt"/>
-        <line num="379" count="0" type="stmt"/>
-        <line num="380" count="0" type="stmt"/>
-        <line num="381" count="0" type="stmt"/>
-        <line num="382" count="0" type="stmt"/>
-        <line num="383" count="0" type="stmt"/>
-        <line num="384" count="0" type="stmt"/>
-        <line num="385" count="0" type="stmt"/>
-        <line num="386" count="0" type="stmt"/>
-        <line num="387" count="0" type="stmt"/>
-        <line num="388" count="0" type="stmt"/>
-        <line num="389" count="0" type="stmt"/>
-        <line num="390" count="0" type="stmt"/>
-        <line num="391" count="0" type="stmt"/>
-        <line num="392" count="0" type="stmt"/>
-        <line num="393" count="0" type="stmt"/>
-        <line num="394" count="1" type="stmt"/>
-        <line num="395" count="1" type="stmt"/>
-        <line num="396" count="1" type="stmt"/>
-        <line num="397" count="1" type="stmt"/>
-        <line num="398" count="1" type="stmt"/>
-        <line num="399" count="1" type="stmt"/>
-        <line num="400" count="0" type="stmt"/>
-        <line num="401" count="0" type="stmt"/>
-        <line num="402" count="0" type="stmt"/>
-        <line num="403" count="0" type="stmt"/>
-        <line num="404" count="0" type="stmt"/>
-        <line num="405" count="0" type="stmt"/>
-        <line num="406" count="0" type="stmt"/>
-        <line num="407" count="0" type="stmt"/>
-        <line num="408" count="0" type="stmt"/>
-        <line num="409" count="0" type="stmt"/>
-        <line num="410" count="0" type="stmt"/>
-        <line num="411" count="0" type="stmt"/>
-        <line num="412" count="0" type="stmt"/>
+        <line num="206" count="1" type="stmt"/>
+        <line num="207" count="1" type="stmt"/>
+        <line num="208" count="1" type="stmt"/>
+        <line num="209" count="1" type="stmt"/>
+        <line num="210" count="1" type="stmt"/>
+        <line num="211" count="1" type="stmt"/>
+        <line num="212" count="1" type="stmt"/>
+        <line num="213" count="1" type="stmt"/>
+        <line num="214" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="215" count="8" type="stmt"/>
+        <line num="216" count="8" type="cond" truecount="1" falsecount="0"/>
+        <line num="217" count="2" type="cond" truecount="1" falsecount="0"/>
+        <line num="218" count="2" type="stmt"/>
+        <line num="219" count="2" type="stmt"/>
+        <line num="220" count="2" type="stmt"/>
+        <line num="221" count="2" type="stmt"/>
+        <line num="222" count="2" type="stmt"/>
+        <line num="223" count="2" type="stmt"/>
+        <line num="224" count="2" type="stmt"/>
+        <line num="225" count="2" type="stmt"/>
+        <line num="226" count="2" type="stmt"/>
+        <line num="227" count="2" type="stmt"/>
+        <line num="228" count="2" type="stmt"/>
+        <line num="229" count="2" type="stmt"/>
       </file>
-      <file name="User.js" path="/home/embruch/ragchat-api/controllers/User.js">
-        <metrics statements="41" coveredstatements="39" conditionals="8" coveredconditionals="7" methods="2" coveredmethods="2"/>
+      <file name="User.js" path="/local/embruch/ragchat-api/controllers/User.js">
+        <metrics statements="54" coveredstatements="48" conditionals="11" coveredconditionals="6" methods="2" coveredmethods="2"/>
         <line num="1" count="1" type="stmt"/>
         <line num="2" count="1" type="stmt"/>
         <line num="3" count="1" type="stmt"/>
@@ -976,42 +2408,55 @@
         <line num="8" count="1" type="cond" truecount="1" falsecount="0"/>
         <line num="9" count="3" type="stmt"/>
         <line num="10" count="3" type="stmt"/>
-        <line num="11" count="3" type="stmt"/>
-        <line num="12" count="1" type="cond" truecount="1" falsecount="0"/>
-        <line num="13" count="1" type="stmt"/>
-        <line num="14" count="1" type="stmt"/>
-        <line num="15" count="1" type="stmt"/>
-        <line num="16" count="3" type="cond" truecount="1" falsecount="0"/>
-        <line num="17" count="2" type="stmt"/>
+        <line num="11" count="3" type="cond" truecount="0" falsecount="2"/>
+        <line num="12" count="3" type="cond" truecount="0" falsecount="1"/>
+        <line num="13" count="0" type="stmt"/>
+        <line num="14" count="0" type="stmt"/>
+        <line num="15" count="3" type="stmt"/>
+        <line num="16" count="3" type="stmt"/>
+        <line num="17" count="3" type="stmt"/>
         <line num="18" count="3" type="stmt"/>
         <line num="19" count="3" type="stmt"/>
-        <line num="20" count="1" type="stmt"/>
+        <line num="20" count="1" type="cond" truecount="1" falsecount="0"/>
         <line num="21" count="1" type="stmt"/>
         <line num="22" count="1" type="stmt"/>
-        <line num="23" count="1" type="stmt"/>
-        <line num="24" count="1" type="stmt"/>
-        <line num="25" count="1" type="stmt"/>
+        <line num="23" count="3" type="cond" truecount="0" falsecount="1"/>
+        <line num="24" count="0" type="stmt"/>
+        <line num="25" count="0" type="stmt"/>
         <line num="26" count="1" type="cond" truecount="1" falsecount="0"/>
-        <line num="27" count="5" type="stmt"/>
-        <line num="28" count="5" type="stmt"/>
-        <line num="29" count="5" type="stmt"/>
-        <line num="30" count="5" type="stmt"/>
-        <line num="31" count="5" type="cond" truecount="2" falsecount="0"/>
-        <line num="32" count="2" type="stmt"/>
-        <line num="33" count="2" type="stmt"/>
-        <line num="34" count="2" type="stmt"/>
-        <line num="35" count="3" type="cond" truecount="1" falsecount="0"/>
-        <line num="36" count="3" type="stmt"/>
-        <line num="37" count="3" type="stmt"/>
-        <line num="38" count="5" type="cond" truecount="0" falsecount="1"/>
-        <line num="39" count="0" type="stmt"/>
-        <line num="40" count="0" type="stmt"/>
-        <line num="41" count="5" type="stmt"/>
+        <line num="27" count="1" type="stmt"/>
+        <line num="28" count="1" type="stmt"/>
+        <line num="29" count="3" type="cond" truecount="1" falsecount="0"/>
+        <line num="30" count="2" type="stmt"/>
+        <line num="31" count="3" type="stmt"/>
+        <line num="32" count="3" type="stmt"/>
+        <line num="33" count="1" type="stmt"/>
+        <line num="34" count="1" type="stmt"/>
+        <line num="35" count="1" type="stmt"/>
+        <line num="36" count="1" type="stmt"/>
+        <line num="37" count="1" type="stmt"/>
+        <line num="38" count="1" type="stmt"/>
+        <line num="39" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="40" count="2" type="stmt"/>
+        <line num="41" count="2" type="stmt"/>
+        <line num="42" count="2" type="stmt"/>
+        <line num="43" count="2" type="stmt"/>
+        <line num="44" count="2" type="cond" truecount="1" falsecount="0"/>
+        <line num="45" count="1" type="stmt"/>
+        <line num="46" count="1" type="stmt"/>
+        <line num="47" count="1" type="stmt"/>
+        <line num="48" count="1" type="stmt"/>
+        <line num="49" count="1" type="stmt"/>
+        <line num="50" count="1" type="stmt"/>
+        <line num="51" count="2" type="cond" truecount="0" falsecount="1"/>
+        <line num="52" count="0" type="stmt"/>
+        <line num="53" count="0" type="stmt"/>
+        <line num="54" count="2" type="stmt"/>
       </file>
     </package>
     <package name="ragchat-api.models">
       <metrics statements="216" coveredstatements="182" conditionals="0" coveredconditionals="0" methods="2" coveredmethods="0"/>
-      <file name="Chat.js" path="/home/embruch/ragchat-api/models/Chat.js">
+      <file name="Chat.js" path="/local/embruch/ragchat-api/models/Chat.js">
         <metrics statements="80" coveredstatements="66" conditionals="0" coveredconditionals="0" methods="1" coveredmethods="0"/>
         <line num="1" count="1" type="stmt"/>
         <line num="2" count="1" type="stmt"/>
@@ -1094,7 +2539,7 @@
         <line num="79" count="1" type="stmt"/>
         <line num="80" count="1" type="stmt"/>
       </file>
-      <file name="User.js" path="/home/embruch/ragchat-api/models/User.js">
+      <file name="User.js" path="/local/embruch/ragchat-api/models/User.js">
         <metrics statements="136" coveredstatements="116" conditionals="0" coveredconditionals="0" methods="1" coveredmethods="0"/>
         <line num="1" count="1" type="stmt"/>
         <line num="2" count="1" type="stmt"/>
@@ -1230,113 +2675,14 @@
         <line num="132" count="0" type="stmt"/>
         <line num="133" count="0" type="stmt"/>
         <line num="134" count="0" type="stmt"/>
-        <line num="135" count="1" type="stmt"/>
-        <line num="136" count="1" type="stmt"/>
-      </file>
-    </package>
-    <package name="ragchat-api.routes">
-      <metrics statements="271" coveredstatements="271" conditionals="0" coveredconditionals="0" methods="0" coveredmethods="0"/>
-      <file name="ai.js" path="/home/embruch/ragchat-api/routes/ai.js">
-        <metrics statements="96" coveredstatements="96" conditionals="0" coveredconditionals="0" methods="0" coveredmethods="0"/>
-        <line num="1" count="1" type="stmt"/>
-        <line num="2" count="1" type="stmt"/>
-        <line num="3" count="1" type="stmt"/>
-        <line num="4" count="1" type="stmt"/>
-        <line num="5" count="1" type="stmt"/>
-        <line num="6" count="1" type="stmt"/>
-        <line num="7" count="1" type="stmt"/>
-        <line num="8" count="1" type="stmt"/>
-        <line num="9" count="1" type="stmt"/>
-        <line num="10" count="1" type="stmt"/>
-        <line num="11" count="1" type="stmt"/>
-        <line num="12" count="1" type="stmt"/>
-        <line num="13" count="1" type="stmt"/>
-        <line num="14" count="1" type="stmt"/>
-        <line num="15" count="1" type="stmt"/>
-        <line num="16" count="1" type="stmt"/>
-        <line num="17" count="1" type="stmt"/>
-        <line num="18" count="1" type="stmt"/>
-        <line num="19" count="1" type="stmt"/>
-        <line num="20" count="1" type="stmt"/>
-        <line num="21" count="1" type="stmt"/>
-        <line num="22" count="1" type="stmt"/>
-        <line num="23" count="1" type="stmt"/>
-        <line num="24" count="1" type="stmt"/>
-        <line num="25" count="1" type="stmt"/>
-        <line num="26" count="1" type="stmt"/>
-        <line num="27" count="1" type="stmt"/>
-        <line num="28" count="1" type="stmt"/>
-        <line num="29" count="1" type="stmt"/>
-        <line num="30" count="1" type="stmt"/>
-        <line num="31" count="1" type="stmt"/>
-        <line num="32" count="1" type="stmt"/>
-        <line num="33" count="1" type="stmt"/>
-        <line num="34" count="1" type="stmt"/>
-        <line num="35" count="1" type="stmt"/>
-        <line num="36" count="1" type="stmt"/>
-        <line num="37" count="1" type="stmt"/>
-        <line num="38" count="1" type="stmt"/>
-        <line num="39" count="1" type="stmt"/>
-        <line num="40" count="1" type="stmt"/>
-        <line num="41" count="1" type="stmt"/>
-        <line num="42" count="1" type="stmt"/>
-        <line num="43" count="1" type="stmt"/>
-        <line num="44" count="1" type="stmt"/>
-        <line num="45" count="1" type="stmt"/>
-        <line num="46" count="1" type="stmt"/>
-        <line num="47" count="1" type="stmt"/>
-        <line num="48" count="1" type="stmt"/>
-        <line num="49" count="1" type="stmt"/>
-        <line num="50" count="1" type="stmt"/>
-        <line num="51" count="1" type="stmt"/>
-        <line num="52" count="1" type="stmt"/>
-        <line num="53" count="1" type="stmt"/>
-        <line num="54" count="1" type="stmt"/>
-        <line num="55" count="1" type="stmt"/>
-        <line num="56" count="1" type="stmt"/>
-        <line num="57" count="1" type="stmt"/>
-        <line num="58" count="1" type="stmt"/>
-        <line num="59" count="1" type="stmt"/>
-        <line num="60" count="1" type="stmt"/>
-        <line num="61" count="1" type="stmt"/>
-        <line num="62" count="1" type="stmt"/>
-        <line num="63" count="1" type="stmt"/>
-        <line num="64" count="1" type="stmt"/>
-        <line num="65" count="1" type="stmt"/>
-        <line num="66" count="1" type="stmt"/>
-        <line num="67" count="1" type="stmt"/>
-        <line num="68" count="1" type="stmt"/>
-        <line num="69" count="1" type="stmt"/>
-        <line num="70" count="1" type="stmt"/>
-        <line num="71" count="1" type="stmt"/>
-        <line num="72" count="1" type="stmt"/>
-        <line num="73" count="1" type="stmt"/>
-        <line num="74" count="1" type="stmt"/>
-        <line num="75" count="1" type="stmt"/>
-        <line num="76" count="1" type="stmt"/>
-        <line num="77" count="1" type="stmt"/>
-        <line num="78" count="1" type="stmt"/>
-        <line num="79" count="1" type="stmt"/>
-        <line num="80" count="1" type="stmt"/>
-        <line num="81" count="1" type="stmt"/>
-        <line num="82" count="1" type="stmt"/>
-        <line num="83" count="1" type="stmt"/>
-        <line num="84" count="1" type="stmt"/>
-        <line num="85" count="1" type="stmt"/>
-        <line num="86" count="1" type="stmt"/>
-        <line num="87" count="1" type="stmt"/>
-        <line num="88" count="1" type="stmt"/>
-        <line num="89" count="1" type="stmt"/>
-        <line num="90" count="1" type="stmt"/>
-        <line num="91" count="1" type="stmt"/>
-        <line num="92" count="1" type="stmt"/>
-        <line num="93" count="1" type="stmt"/>
-        <line num="94" count="1" type="stmt"/>
-        <line num="95" count="1" type="stmt"/>
-        <line num="96" count="1" type="stmt"/>
+        <line num="135" count="1" type="stmt"/>
+        <line num="136" count="1" type="stmt"/>
       </file>
-      <file name="auth.js" path="/home/embruch/ragchat-api/routes/auth.js">
-        <metrics statements="109" coveredstatements="109" conditionals="0" coveredconditionals="0" methods="0" coveredmethods="0"/>
+    </package>
+    <package name="ragchat-api.routes">
+      <metrics statements="272" coveredstatements="272" conditionals="0" coveredconditionals="0" methods="0" coveredmethods="0"/>
+      <file name="ai.js" path="/local/embruch/ragchat-api/routes/ai.js">
+        <metrics statements="97" coveredstatements="97" conditionals="0" coveredconditionals="0" methods="0" coveredmethods="0"/>
         <line num="1" count="1" type="stmt"/>
         <line num="2" count="1" type="stmt"/>
         <line num="3" count="1" type="stmt"/>
@@ -1434,21 +2780,9 @@
         <line num="95" count="1" type="stmt"/>
         <line num="96" count="1" type="stmt"/>
         <line num="97" count="1" type="stmt"/>
-        <line num="98" count="1" type="stmt"/>
-        <line num="99" count="1" type="stmt"/>
-        <line num="100" count="1" type="stmt"/>
-        <line num="101" count="1" type="stmt"/>
-        <line num="102" count="1" type="stmt"/>
-        <line num="103" count="1" type="stmt"/>
-        <line num="104" count="1" type="stmt"/>
-        <line num="105" count="1" type="stmt"/>
-        <line num="106" count="1" type="stmt"/>
-        <line num="107" count="1" type="stmt"/>
-        <line num="108" count="1" type="stmt"/>
-        <line num="109" count="1" type="stmt"/>
       </file>
-      <file name="embeddings.js" path="/home/embruch/ragchat-api/routes/embeddings.js">
-        <metrics statements="42" coveredstatements="42" conditionals="0" coveredconditionals="0" methods="0" coveredmethods="0"/>
+      <file name="auth.js" path="/local/embruch/ragchat-api/routes/auth.js">
+        <metrics statements="109" coveredstatements="109" conditionals="0" coveredconditionals="0" methods="0" coveredmethods="0"/>
         <line num="1" count="1" type="stmt"/>
         <line num="2" count="1" type="stmt"/>
         <line num="3" count="1" type="stmt"/>
@@ -1491,297 +2825,18 @@
         <line num="40" count="1" type="stmt"/>
         <line num="41" count="1" type="stmt"/>
         <line num="42" count="1" type="stmt"/>
-      </file>
-      <file name="users.js" path="/home/embruch/ragchat-api/routes/users.js">
-        <metrics statements="24" coveredstatements="24" conditionals="0" coveredconditionals="0" methods="0" coveredmethods="0"/>
-        <line num="1" count="1" type="stmt"/>
-        <line num="2" count="1" type="stmt"/>
-        <line num="3" count="1" type="stmt"/>
-        <line num="4" count="1" type="stmt"/>
-        <line num="5" count="1" type="stmt"/>
-        <line num="6" count="1" type="stmt"/>
-        <line num="7" count="1" type="stmt"/>
-        <line num="8" count="1" type="stmt"/>
-        <line num="9" count="1" type="stmt"/>
-        <line num="10" count="1" type="stmt"/>
-        <line num="11" count="1" type="stmt"/>
-        <line num="12" count="1" type="stmt"/>
-        <line num="13" count="1" type="stmt"/>
-        <line num="14" count="1" type="stmt"/>
-        <line num="15" count="1" type="stmt"/>
-        <line num="16" count="1" type="stmt"/>
-        <line num="17" count="1" type="stmt"/>
-        <line num="18" count="1" type="stmt"/>
-        <line num="19" count="1" type="stmt"/>
-        <line num="20" count="1" type="stmt"/>
-        <line num="21" count="1" type="stmt"/>
-        <line num="22" count="1" type="stmt"/>
-        <line num="23" count="1" type="stmt"/>
-        <line num="24" count="1" type="stmt"/>
-      </file>
-    </package>
-    <package name="ragchat-api.utils">
-      <metrics statements="778" coveredstatements="480" conditionals="53" coveredconditionals="49" methods="35" coveredmethods="16"/>
-      <file name="handleAI.js" path="/home/embruch/ragchat-api/utils/handleAI.js">
-        <metrics statements="201" coveredstatements="54" conditionals="0" coveredconditionals="0" methods="7" coveredmethods="0"/>
-        <line num="1" count="1" type="stmt"/>
-        <line num="2" count="1" type="stmt"/>
-        <line num="3" count="1" type="stmt"/>
-        <line num="4" count="1" type="stmt"/>
-        <line num="5" count="1" type="stmt"/>
-        <line num="6" count="1" type="stmt"/>
-        <line num="7" count="1" type="stmt"/>
-        <line num="8" count="1" type="stmt"/>
-        <line num="9" count="1" type="stmt"/>
-        <line num="10" count="1" type="stmt"/>
-        <line num="11" count="1" type="stmt"/>
-        <line num="12" count="1" type="stmt"/>
-        <line num="13" count="1" type="stmt"/>
-        <line num="14" count="1" type="stmt"/>
-        <line num="15" count="1" type="stmt"/>
-        <line num="16" count="1" type="stmt"/>
-        <line num="17" count="1" type="stmt"/>
-        <line num="18" count="1" type="stmt"/>
-        <line num="19" count="1" type="stmt"/>
-        <line num="20" count="1" type="stmt"/>
-        <line num="21" count="0" type="stmt"/>
-        <line num="22" count="0" type="stmt"/>
-        <line num="23" count="0" type="stmt"/>
-        <line num="24" count="0" type="stmt"/>
-        <line num="25" count="0" type="stmt"/>
-        <line num="26" count="0" type="stmt"/>
-        <line num="27" count="1" type="stmt"/>
-        <line num="28" count="1" type="stmt"/>
-        <line num="29" count="1" type="stmt"/>
-        <line num="30" count="1" type="stmt"/>
-        <line num="31" count="1" type="stmt"/>
-        <line num="32" count="0" type="stmt"/>
-        <line num="33" count="0" type="stmt"/>
-        <line num="34" count="0" type="stmt"/>
-        <line num="35" count="0" type="stmt"/>
-        <line num="36" count="0" type="stmt"/>
-        <line num="37" count="0" type="stmt"/>
-        <line num="38" count="1" type="stmt"/>
-        <line num="39" count="1" type="stmt"/>
-        <line num="40" count="1" type="stmt"/>
-        <line num="41" count="1" type="stmt"/>
-        <line num="42" count="1" type="stmt"/>
-        <line num="43" count="1" type="stmt"/>
-        <line num="44" count="0" type="stmt"/>
-        <line num="45" count="0" type="stmt"/>
-        <line num="46" count="0" type="stmt"/>
-        <line num="47" count="0" type="stmt"/>
-        <line num="48" count="0" type="stmt"/>
-        <line num="49" count="0" type="stmt"/>
-        <line num="50" count="1" type="stmt"/>
-        <line num="51" count="1" type="stmt"/>
-        <line num="52" count="1" type="stmt"/>
-        <line num="53" count="1" type="stmt"/>
-        <line num="54" count="1" type="stmt"/>
-        <line num="55" count="0" type="stmt"/>
-        <line num="56" count="0" type="stmt"/>
-        <line num="57" count="0" type="stmt"/>
-        <line num="58" count="0" type="stmt"/>
-        <line num="59" count="0" type="stmt"/>
-        <line num="60" count="0" type="stmt"/>
-        <line num="61" count="1" type="stmt"/>
-        <line num="62" count="1" type="stmt"/>
-        <line num="63" count="1" type="stmt"/>
-        <line num="64" count="1" type="stmt"/>
-        <line num="65" count="1" type="stmt"/>
-        <line num="66" count="1" type="stmt"/>
-        <line num="67" count="0" type="stmt"/>
-        <line num="68" count="0" type="stmt"/>
-        <line num="69" count="0" type="stmt"/>
-        <line num="70" count="0" type="stmt"/>
-        <line num="71" count="0" type="stmt"/>
-        <line num="72" count="0" type="stmt"/>
-        <line num="73" count="1" type="stmt"/>
-        <line num="74" count="1" type="stmt"/>
-        <line num="75" count="1" type="stmt"/>
-        <line num="76" count="1" type="stmt"/>
-        <line num="77" count="1" type="stmt"/>
-        <line num="78" count="1" type="stmt"/>
-        <line num="79" count="0" type="stmt"/>
-        <line num="80" count="0" type="stmt"/>
-        <line num="81" count="0" type="stmt"/>
-        <line num="82" count="0" type="stmt"/>
-        <line num="83" count="0" type="stmt"/>
-        <line num="84" count="0" type="stmt"/>
-        <line num="85" count="0" type="stmt"/>
-        <line num="86" count="0" type="stmt"/>
-        <line num="87" count="0" type="stmt"/>
-        <line num="88" count="0" type="stmt"/>
-        <line num="89" count="0" type="stmt"/>
-        <line num="90" count="0" type="stmt"/>
-        <line num="91" count="0" type="stmt"/>
-        <line num="92" count="0" type="stmt"/>
-        <line num="93" count="0" type="stmt"/>
-        <line num="94" count="0" type="stmt"/>
-        <line num="95" count="0" type="stmt"/>
-        <line num="96" count="0" type="stmt"/>
-        <line num="97" count="1" type="stmt"/>
-        <line num="98" count="1" type="stmt"/>
-        <line num="99" count="1" type="stmt"/>
-        <line num="100" count="1" type="stmt"/>
-        <line num="101" count="1" type="stmt"/>
-        <line num="102" count="1" type="stmt"/>
-        <line num="103" count="0" type="stmt"/>
-        <line num="104" count="0" type="stmt"/>
-        <line num="105" count="0" type="stmt"/>
-        <line num="106" count="0" type="stmt"/>
-        <line num="107" count="0" type="stmt"/>
-        <line num="108" count="0" type="stmt"/>
-        <line num="109" count="0" type="stmt"/>
-        <line num="110" count="0" type="stmt"/>
-        <line num="111" count="0" type="stmt"/>
-        <line num="112" count="0" type="stmt"/>
-        <line num="113" count="0" type="stmt"/>
-        <line num="114" count="0" type="stmt"/>
-        <line num="115" count="0" type="stmt"/>
-        <line num="116" count="0" type="stmt"/>
-        <line num="117" count="0" type="stmt"/>
-        <line num="118" count="0" type="stmt"/>
-        <line num="119" count="0" type="stmt"/>
-        <line num="120" count="0" type="stmt"/>
-        <line num="121" count="0" type="stmt"/>
-        <line num="122" count="0" type="stmt"/>
-        <line num="123" count="0" type="stmt"/>
-        <line num="124" count="0" type="stmt"/>
-        <line num="125" count="0" type="stmt"/>
-        <line num="126" count="0" type="stmt"/>
-        <line num="127" count="0" type="stmt"/>
-        <line num="128" count="0" type="stmt"/>
-        <line num="129" count="0" type="stmt"/>
-        <line num="130" count="0" type="stmt"/>
-        <line num="131" count="0" type="stmt"/>
-        <line num="132" count="0" type="stmt"/>
-        <line num="133" count="0" type="stmt"/>
-        <line num="134" count="0" type="stmt"/>
-        <line num="135" count="0" type="stmt"/>
-        <line num="136" count="0" type="stmt"/>
-        <line num="137" count="0" type="stmt"/>
-        <line num="138" count="0" type="stmt"/>
-        <line num="139" count="0" type="stmt"/>
-        <line num="140" count="0" type="stmt"/>
-        <line num="141" count="0" type="stmt"/>
-        <line num="142" count="0" type="stmt"/>
-        <line num="143" count="0" type="stmt"/>
-        <line num="144" count="0" type="stmt"/>
-        <line num="145" count="0" type="stmt"/>
-        <line num="146" count="0" type="stmt"/>
-        <line num="147" count="0" type="stmt"/>
-        <line num="148" count="0" type="stmt"/>
-        <line num="149" count="0" type="stmt"/>
-        <line num="150" count="0" type="stmt"/>
-        <line num="151" count="0" type="stmt"/>
-        <line num="152" count="0" type="stmt"/>
-        <line num="153" count="0" type="stmt"/>
-        <line num="154" count="0" type="stmt"/>
-        <line num="155" count="0" type="stmt"/>
-        <line num="156" count="0" type="stmt"/>
-        <line num="157" count="0" type="stmt"/>
-        <line num="158" count="0" type="stmt"/>
-        <line num="159" count="0" type="stmt"/>
-        <line num="160" count="0" type="stmt"/>
-        <line num="161" count="0" type="stmt"/>
-        <line num="162" count="0" type="stmt"/>
-        <line num="163" count="0" type="stmt"/>
-        <line num="164" count="0" type="stmt"/>
-        <line num="165" count="0" type="stmt"/>
-        <line num="166" count="0" type="stmt"/>
-        <line num="167" count="0" type="stmt"/>
-        <line num="168" count="0" type="stmt"/>
-        <line num="169" count="0" type="stmt"/>
-        <line num="170" count="0" type="stmt"/>
-        <line num="171" count="0" type="stmt"/>
-        <line num="172" count="0" type="stmt"/>
-        <line num="173" count="0" type="stmt"/>
-        <line num="174" count="0" type="stmt"/>
-        <line num="175" count="0" type="stmt"/>
-        <line num="176" count="0" type="stmt"/>
-        <line num="177" count="0" type="stmt"/>
-        <line num="178" count="0" type="stmt"/>
-        <line num="179" count="0" type="stmt"/>
-        <line num="180" count="0" type="stmt"/>
-        <line num="181" count="0" type="stmt"/>
-        <line num="182" count="0" type="stmt"/>
-        <line num="183" count="0" type="stmt"/>
-        <line num="184" count="0" type="stmt"/>
-        <line num="185" count="0" type="stmt"/>
-        <line num="186" count="0" type="stmt"/>
-        <line num="187" count="0" type="stmt"/>
-        <line num="188" count="0" type="stmt"/>
-        <line num="189" count="0" type="stmt"/>
-        <line num="190" count="0" type="stmt"/>
-        <line num="191" count="0" type="stmt"/>
-        <line num="192" count="0" type="stmt"/>
-        <line num="193" count="0" type="stmt"/>
-        <line num="194" count="0" type="stmt"/>
-        <line num="195" count="0" type="stmt"/>
-        <line num="196" count="0" type="stmt"/>
-        <line num="197" count="0" type="stmt"/>
-        <line num="198" count="0" type="stmt"/>
-        <line num="199" count="0" type="stmt"/>
-        <line num="200" count="0" type="stmt"/>
-        <line num="201" count="0" type="stmt"/>
-      </file>
-      <file name="handleDB.js" path="/home/embruch/ragchat-api/utils/handleDB.js">
-        <metrics statements="180" coveredstatements="89" conditionals="0" coveredconditionals="0" methods="8" coveredmethods="0"/>
-        <line num="1" count="1" type="stmt"/>
-        <line num="2" count="1" type="stmt"/>
-        <line num="3" count="1" type="stmt"/>
-        <line num="4" count="1" type="stmt"/>
-        <line num="5" count="1" type="stmt"/>
-        <line num="6" count="1" type="stmt"/>
-        <line num="7" count="1" type="stmt"/>
-        <line num="8" count="1" type="stmt"/>
-        <line num="9" count="1" type="stmt"/>
-        <line num="10" count="1" type="stmt"/>
-        <line num="11" count="1" type="stmt"/>
-        <line num="12" count="1" type="stmt"/>
-        <line num="13" count="0" type="stmt"/>
-        <line num="14" count="0" type="stmt"/>
-        <line num="15" count="0" type="stmt"/>
-        <line num="16" count="0" type="stmt"/>
-        <line num="17" count="0" type="stmt"/>
-        <line num="18" count="0" type="stmt"/>
-        <line num="19" count="0" type="stmt"/>
-        <line num="20" count="0" type="stmt"/>
-        <line num="21" count="0" type="stmt"/>
-        <line num="22" count="0" type="stmt"/>
-        <line num="23" count="0" type="stmt"/>
-        <line num="24" count="0" type="stmt"/>
-        <line num="25" count="0" type="stmt"/>
-        <line num="26" count="0" type="stmt"/>
-        <line num="27" count="0" type="stmt"/>
-        <line num="28" count="0" type="stmt"/>
-        <line num="29" count="0" type="stmt"/>
-        <line num="30" count="0" type="stmt"/>
-        <line num="31" count="0" type="stmt"/>
-        <line num="32" count="0" type="stmt"/>
-        <line num="33" count="0" type="stmt"/>
-        <line num="34" count="0" type="stmt"/>
-        <line num="35" count="0" type="stmt"/>
-        <line num="36" count="0" type="stmt"/>
-        <line num="37" count="1" type="stmt"/>
-        <line num="38" count="1" type="stmt"/>
-        <line num="39" count="1" type="stmt"/>
-        <line num="40" count="1" type="stmt"/>
-        <line num="41" count="1" type="stmt"/>
-        <line num="42" count="1" type="stmt"/>
         <line num="43" count="1" type="stmt"/>
         <line num="44" count="1" type="stmt"/>
         <line num="45" count="1" type="stmt"/>
         <line num="46" count="1" type="stmt"/>
         <line num="47" count="1" type="stmt"/>
         <line num="48" count="1" type="stmt"/>
-        <line num="49" count="0" type="stmt"/>
-        <line num="50" count="0" type="stmt"/>
-        <line num="51" count="0" type="stmt"/>
-        <line num="52" count="0" type="stmt"/>
-        <line num="53" count="0" type="stmt"/>
-        <line num="54" count="0" type="stmt"/>
+        <line num="49" count="1" type="stmt"/>
+        <line num="50" count="1" type="stmt"/>
+        <line num="51" count="1" type="stmt"/>
+        <line num="52" count="1" type="stmt"/>
+        <line num="53" count="1" type="stmt"/>
+        <line num="54" count="1" type="stmt"/>
         <line num="55" count="1" type="stmt"/>
         <line num="56" count="1" type="stmt"/>
         <line num="57" count="1" type="stmt"/>
@@ -1794,18 +2849,18 @@
         <line num="64" count="1" type="stmt"/>
         <line num="65" count="1" type="stmt"/>
         <line num="66" count="1" type="stmt"/>
-        <line num="67" count="0" type="stmt"/>
-        <line num="68" count="0" type="stmt"/>
-        <line num="69" count="0" type="stmt"/>
-        <line num="70" count="0" type="stmt"/>
-        <line num="71" count="0" type="stmt"/>
-        <line num="72" count="0" type="stmt"/>
-        <line num="73" count="0" type="stmt"/>
-        <line num="74" count="0" type="stmt"/>
-        <line num="75" count="0" type="stmt"/>
-        <line num="76" count="0" type="stmt"/>
-        <line num="77" count="0" type="stmt"/>
-        <line num="78" count="0" type="stmt"/>
+        <line num="67" count="1" type="stmt"/>
+        <line num="68" count="1" type="stmt"/>
+        <line num="69" count="1" type="stmt"/>
+        <line num="70" count="1" type="stmt"/>
+        <line num="71" count="1" type="stmt"/>
+        <line num="72" count="1" type="stmt"/>
+        <line num="73" count="1" type="stmt"/>
+        <line num="74" count="1" type="stmt"/>
+        <line num="75" count="1" type="stmt"/>
+        <line num="76" count="1" type="stmt"/>
+        <line num="77" count="1" type="stmt"/>
+        <line num="78" count="1" type="stmt"/>
         <line num="79" count="1" type="stmt"/>
         <line num="80" count="1" type="stmt"/>
         <line num="81" count="1" type="stmt"/>
@@ -1817,18 +2872,18 @@
         <line num="87" count="1" type="stmt"/>
         <line num="88" count="1" type="stmt"/>
         <line num="89" count="1" type="stmt"/>
-        <line num="90" count="0" type="stmt"/>
-        <line num="91" count="0" type="stmt"/>
-        <line num="92" count="0" type="stmt"/>
-        <line num="93" count="0" type="stmt"/>
-        <line num="94" count="0" type="stmt"/>
-        <line num="95" count="0" type="stmt"/>
-        <line num="96" count="0" type="stmt"/>
-        <line num="97" count="0" type="stmt"/>
-        <line num="98" count="0" type="stmt"/>
-        <line num="99" count="0" type="stmt"/>
-        <line num="100" count="0" type="stmt"/>
-        <line num="101" count="0" type="stmt"/>
+        <line num="90" count="1" type="stmt"/>
+        <line num="91" count="1" type="stmt"/>
+        <line num="92" count="1" type="stmt"/>
+        <line num="93" count="1" type="stmt"/>
+        <line num="94" count="1" type="stmt"/>
+        <line num="95" count="1" type="stmt"/>
+        <line num="96" count="1" type="stmt"/>
+        <line num="97" count="1" type="stmt"/>
+        <line num="98" count="1" type="stmt"/>
+        <line num="99" count="1" type="stmt"/>
+        <line num="100" count="1" type="stmt"/>
+        <line num="101" count="1" type="stmt"/>
         <line num="102" count="1" type="stmt"/>
         <line num="103" count="1" type="stmt"/>
         <line num="104" count="1" type="stmt"/>
@@ -1837,92 +2892,96 @@
         <line num="107" count="1" type="stmt"/>
         <line num="108" count="1" type="stmt"/>
         <line num="109" count="1" type="stmt"/>
-        <line num="110" count="1" type="stmt"/>
-        <line num="111" count="0" type="stmt"/>
-        <line num="112" count="0" type="stmt"/>
-        <line num="113" count="0" type="stmt"/>
-        <line num="114" count="0" type="stmt"/>
-        <line num="115" count="0" type="stmt"/>
-        <line num="116" count="0" type="stmt"/>
-        <line num="117" count="0" type="stmt"/>
-        <line num="118" count="0" type="stmt"/>
-        <line num="119" count="1" type="stmt"/>
-        <line num="120" count="1" type="stmt"/>
-        <line num="121" count="1" type="stmt"/>
-        <line num="122" count="1" type="stmt"/>
-        <line num="123" count="1" type="stmt"/>
-        <line num="124" count="1" type="stmt"/>
-        <line num="125" count="1" type="stmt"/>
-        <line num="126" count="1" type="stmt"/>
-        <line num="127" count="1" type="stmt"/>
-        <line num="128" count="1" type="stmt"/>
-        <line num="129" count="1" type="stmt"/>
-        <line num="130" count="0" type="stmt"/>
-        <line num="131" count="0" type="stmt"/>
-        <line num="132" count="0" type="stmt"/>
-        <line num="133" count="0" type="stmt"/>
-        <line num="134" count="0" type="stmt"/>
-        <line num="135" count="0" type="stmt"/>
-        <line num="136" count="1" type="stmt"/>
-        <line num="137" count="1" type="stmt"/>
-        <line num="138" count="1" type="stmt"/>
-        <line num="139" count="1" type="stmt"/>
-        <line num="140" count="1" type="stmt"/>
-        <line num="141" count="1" type="stmt"/>
-        <line num="142" count="1" type="stmt"/>
-        <line num="143" count="1" type="stmt"/>
-        <line num="144" count="1" type="stmt"/>
-        <line num="145" count="1" type="stmt"/>
-        <line num="146" count="1" type="stmt"/>
-        <line num="147" count="1" type="stmt"/>
-        <line num="148" count="0" type="stmt"/>
-        <line num="149" count="0" type="stmt"/>
-        <line num="150" count="0" type="stmt"/>
-        <line num="151" count="0" type="stmt"/>
-        <line num="152" count="0" type="stmt"/>
-        <line num="153" count="0" type="stmt"/>
-        <line num="154" count="1" type="stmt"/>
-        <line num="155" count="1" type="stmt"/>
-        <line num="156" count="1" type="stmt"/>
-        <line num="157" count="1" type="stmt"/>
-        <line num="158" count="1" type="stmt"/>
-        <line num="159" count="1" type="stmt"/>
-        <line num="160" count="1" type="stmt"/>
-        <line num="161" count="1" type="stmt"/>
-        <line num="162" count="1" type="stmt"/>
-        <line num="163" count="1" type="stmt"/>
-        <line num="164" count="0" type="stmt"/>
-        <line num="165" count="0" type="stmt"/>
-        <line num="166" count="0" type="stmt"/>
-        <line num="167" count="0" type="stmt"/>
-        <line num="168" count="0" type="stmt"/>
-        <line num="169" count="0" type="stmt"/>
-        <line num="170" count="0" type="stmt"/>
-        <line num="171" count="0" type="stmt"/>
-        <line num="172" count="0" type="stmt"/>
-        <line num="173" count="0" type="stmt"/>
-        <line num="174" count="0" type="stmt"/>
-        <line num="175" count="0" type="stmt"/>
-        <line num="176" count="0" type="stmt"/>
-        <line num="177" count="0" type="stmt"/>
-        <line num="178" count="0" type="stmt"/>
-        <line num="179" count="0" type="stmt"/>
-        <line num="180" count="0" type="stmt"/>
       </file>
-      <file name="handleErrors.js" path="/home/embruch/ragchat-api/utils/handleErrors.js">
+      <file name="embeddings.js" path="/local/embruch/ragchat-api/routes/embeddings.js">
+        <metrics statements="42" coveredstatements="42" conditionals="0" coveredconditionals="0" methods="0" coveredmethods="0"/>
+        <line num="1" count="1" type="stmt"/>
+        <line num="2" count="1" type="stmt"/>
+        <line num="3" count="1" type="stmt"/>
+        <line num="4" count="1" type="stmt"/>
+        <line num="5" count="1" type="stmt"/>
+        <line num="6" count="1" type="stmt"/>
+        <line num="7" count="1" type="stmt"/>
+        <line num="8" count="1" type="stmt"/>
+        <line num="9" count="1" type="stmt"/>
+        <line num="10" count="1" type="stmt"/>
+        <line num="11" count="1" type="stmt"/>
+        <line num="12" count="1" type="stmt"/>
+        <line num="13" count="1" type="stmt"/>
+        <line num="14" count="1" type="stmt"/>
+        <line num="15" count="1" type="stmt"/>
+        <line num="16" count="1" type="stmt"/>
+        <line num="17" count="1" type="stmt"/>
+        <line num="18" count="1" type="stmt"/>
+        <line num="19" count="1" type="stmt"/>
+        <line num="20" count="1" type="stmt"/>
+        <line num="21" count="1" type="stmt"/>
+        <line num="22" count="1" type="stmt"/>
+        <line num="23" count="1" type="stmt"/>
+        <line num="24" count="1" type="stmt"/>
+        <line num="25" count="1" type="stmt"/>
+        <line num="26" count="1" type="stmt"/>
+        <line num="27" count="1" type="stmt"/>
+        <line num="28" count="1" type="stmt"/>
+        <line num="29" count="1" type="stmt"/>
+        <line num="30" count="1" type="stmt"/>
+        <line num="31" count="1" type="stmt"/>
+        <line num="32" count="1" type="stmt"/>
+        <line num="33" count="1" type="stmt"/>
+        <line num="34" count="1" type="stmt"/>
+        <line num="35" count="1" type="stmt"/>
+        <line num="36" count="1" type="stmt"/>
+        <line num="37" count="1" type="stmt"/>
+        <line num="38" count="1" type="stmt"/>
+        <line num="39" count="1" type="stmt"/>
+        <line num="40" count="1" type="stmt"/>
+        <line num="41" count="1" type="stmt"/>
+        <line num="42" count="1" type="stmt"/>
+      </file>
+      <file name="users.js" path="/local/embruch/ragchat-api/routes/users.js">
+        <metrics statements="24" coveredstatements="24" conditionals="0" coveredconditionals="0" methods="0" coveredmethods="0"/>
+        <line num="1" count="1" type="stmt"/>
+        <line num="2" count="1" type="stmt"/>
+        <line num="3" count="1" type="stmt"/>
+        <line num="4" count="1" type="stmt"/>
+        <line num="5" count="1" type="stmt"/>
+        <line num="6" count="1" type="stmt"/>
+        <line num="7" count="1" type="stmt"/>
+        <line num="8" count="1" type="stmt"/>
+        <line num="9" count="1" type="stmt"/>
+        <line num="10" count="1" type="stmt"/>
+        <line num="11" count="1" type="stmt"/>
+        <line num="12" count="1" type="stmt"/>
+        <line num="13" count="1" type="stmt"/>
+        <line num="14" count="1" type="stmt"/>
+        <line num="15" count="1" type="stmt"/>
+        <line num="16" count="1" type="stmt"/>
+        <line num="17" count="1" type="stmt"/>
+        <line num="18" count="1" type="stmt"/>
+        <line num="19" count="1" type="stmt"/>
+        <line num="20" count="1" type="stmt"/>
+        <line num="21" count="1" type="stmt"/>
+        <line num="22" count="1" type="stmt"/>
+        <line num="23" count="1" type="stmt"/>
+        <line num="24" count="1" type="stmt"/>
+      </file>
+    </package>
+    <package name="ragchat-api.utils">
+      <metrics statements="390" coveredstatements="352" conditionals="55" coveredconditionals="49" methods="19" coveredmethods="16"/>
+      <file name="handleErrors.js" path="/local/embruch/ragchat-api/utils/handleErrors.js">
         <metrics statements="118" coveredstatements="100" conditionals="17" coveredconditionals="15" methods="5" coveredmethods="4"/>
         <line num="1" count="1" type="stmt"/>
         <line num="2" count="1" type="stmt"/>
         <line num="3" count="1" type="stmt"/>
         <line num="4" count="1" type="stmt"/>
         <line num="5" count="1" type="cond" truecount="1" falsecount="0"/>
-        <line num="6" count="28" type="stmt"/>
-        <line num="7" count="28" type="stmt"/>
-        <line num="8" count="28" type="cond" truecount="1" falsecount="0"/>
-        <line num="9" count="28" type="stmt"/>
-        <line num="10" count="28" type="stmt"/>
-        <line num="11" count="28" type="stmt"/>
-        <line num="12" count="28" type="stmt"/>
+        <line num="6" count="27" type="stmt"/>
+        <line num="7" count="27" type="stmt"/>
+        <line num="8" count="27" type="cond" truecount="1" falsecount="0"/>
+        <line num="9" count="27" type="stmt"/>
+        <line num="10" count="27" type="stmt"/>
+        <line num="11" count="27" type="stmt"/>
+        <line num="12" count="27" type="stmt"/>
         <line num="13" count="1" type="stmt"/>
         <line num="14" count="1" type="stmt"/>
         <line num="15" count="1" type="stmt"/>
@@ -1948,9 +3007,9 @@
         <line num="35" count="1" type="stmt"/>
         <line num="36" count="1" type="stmt"/>
         <line num="37" count="1" type="cond" truecount="1" falsecount="0"/>
-        <line num="38" count="28" type="stmt"/>
-        <line num="39" count="28" type="stmt"/>
-        <line num="40" count="28" type="cond" truecount="1" falsecount="0"/>
+        <line num="38" count="27" type="stmt"/>
+        <line num="39" count="27" type="stmt"/>
+        <line num="40" count="27" type="cond" truecount="1" falsecount="0"/>
         <line num="41" count="2" type="stmt"/>
         <line num="42" count="2" type="cond" truecount="1" falsecount="0"/>
         <line num="43" count="2" type="stmt"/>
@@ -1961,18 +3020,18 @@
         <line num="48" count="2" type="stmt"/>
         <line num="49" count="2" type="stmt"/>
         <line num="50" count="2" type="stmt"/>
-        <line num="51" count="28" type="stmt"/>
-        <line num="52" count="28" type="cond" truecount="1" falsecount="0"/>
-        <line num="53" count="20" type="stmt"/>
-        <line num="54" count="20" type="stmt"/>
-        <line num="55" count="20" type="stmt"/>
-        <line num="56" count="20" type="stmt"/>
-        <line num="57" count="20" type="cond" truecount="1" falsecount="0"/>
-        <line num="58" count="48" type="stmt"/>
-        <line num="59" count="48" type="stmt"/>
-        <line num="60" count="48" type="stmt"/>
-        <line num="61" count="48" type="stmt"/>
-        <line num="62" count="48" type="cond" truecount="0" falsecount="1"/>
+        <line num="51" count="27" type="stmt"/>
+        <line num="52" count="27" type="cond" truecount="1" falsecount="0"/>
+        <line num="53" count="19" type="stmt"/>
+        <line num="54" count="19" type="stmt"/>
+        <line num="55" count="19" type="stmt"/>
+        <line num="56" count="19" type="stmt"/>
+        <line num="57" count="19" type="cond" truecount="1" falsecount="0"/>
+        <line num="58" count="45" type="stmt"/>
+        <line num="59" count="45" type="stmt"/>
+        <line num="60" count="45" type="stmt"/>
+        <line num="61" count="45" type="stmt"/>
+        <line num="62" count="45" type="cond" truecount="0" falsecount="1"/>
         <line num="63" count="0" type="stmt"/>
         <line num="64" count="0" type="stmt"/>
         <line num="65" count="0" type="stmt"/>
@@ -1985,17 +3044,17 @@
         <line num="72" count="0" type="stmt"/>
         <line num="73" count="0" type="stmt"/>
         <line num="74" count="0" type="stmt"/>
-        <line num="75" count="48" type="stmt"/>
-        <line num="76" count="48" type="cond" truecount="1" falsecount="0"/>
-        <line num="77" count="20" type="stmt"/>
-        <line num="78" count="20" type="stmt"/>
-        <line num="79" count="20" type="stmt"/>
-        <line num="80" count="20" type="stmt"/>
-        <line num="81" count="20" type="stmt"/>
-        <line num="82" count="20" type="stmt"/>
-        <line num="83" count="20" type="stmt"/>
-        <line num="84" count="28" type="stmt"/>
-        <line num="85" count="28" type="cond" truecount="1" falsecount="0"/>
+        <line num="75" count="45" type="stmt"/>
+        <line num="76" count="45" type="cond" truecount="1" falsecount="0"/>
+        <line num="77" count="19" type="stmt"/>
+        <line num="78" count="19" type="stmt"/>
+        <line num="79" count="19" type="stmt"/>
+        <line num="80" count="19" type="stmt"/>
+        <line num="81" count="19" type="stmt"/>
+        <line num="82" count="19" type="stmt"/>
+        <line num="83" count="19" type="stmt"/>
+        <line num="84" count="27" type="stmt"/>
+        <line num="85" count="27" type="cond" truecount="1" falsecount="0"/>
         <line num="86" count="6" type="stmt"/>
         <line num="87" count="6" type="cond" truecount="0" falsecount="1"/>
         <line num="88" count="0" type="stmt"/>
@@ -2005,8 +3064,8 @@
         <line num="92" count="6" type="stmt"/>
         <line num="93" count="6" type="stmt"/>
         <line num="94" count="6" type="stmt"/>
-        <line num="95" count="28" type="stmt"/>
-        <line num="96" count="28" type="stmt"/>
+        <line num="95" count="27" type="stmt"/>
+        <line num="96" count="27" type="stmt"/>
         <line num="97" count="1" type="stmt"/>
         <line num="98" count="1" type="stmt"/>
         <line num="99" count="1" type="stmt"/>
@@ -2021,49 +3080,17 @@
         <line num="108" count="1" type="stmt"/>
         <line num="109" count="1" type="stmt"/>
         <line num="110" count="1" type="cond" truecount="1" falsecount="0"/>
-        <line num="111" count="28" type="stmt"/>
-        <line num="112" count="28" type="stmt"/>
-        <line num="113" count="28" type="stmt"/>
-        <line num="114" count="28" type="stmt"/>
-        <line num="115" count="28" type="stmt"/>
-        <line num="116" count="28" type="stmt"/>
-        <line num="117" count="28" type="stmt"/>
-        <line num="118" count="28" type="stmt"/>
-      </file>
-      <file name="handleMailer.js" path="/home/embruch/ragchat-api/utils/handleMailer.js">
-        <metrics statements="29" coveredstatements="4" conditionals="0" coveredconditionals="0" methods="1" coveredmethods="0"/>
-        <line num="1" count="1" type="stmt"/>
-        <line num="2" count="1" type="stmt"/>
-        <line num="3" count="1" type="stmt"/>
-        <line num="4" count="1" type="stmt"/>
-        <line num="5" count="0" type="stmt"/>
-        <line num="6" count="0" type="stmt"/>
-        <line num="7" count="0" type="stmt"/>
-        <line num="8" count="0" type="stmt"/>
-        <line num="9" count="0" type="stmt"/>
-        <line num="10" count="0" type="stmt"/>
-        <line num="11" count="0" type="stmt"/>
-        <line num="12" count="0" type="stmt"/>
-        <line num="13" count="0" type="stmt"/>
-        <line num="14" count="0" type="stmt"/>
-        <line num="15" count="0" type="stmt"/>
-        <line num="16" count="0" type="stmt"/>
-        <line num="17" count="0" type="stmt"/>
-        <line num="18" count="0" type="stmt"/>
-        <line num="19" count="0" type="stmt"/>
-        <line num="20" count="0" type="stmt"/>
-        <line num="21" count="0" type="stmt"/>
-        <line num="22" count="0" type="stmt"/>
-        <line num="23" count="0" type="stmt"/>
-        <line num="24" count="0" type="stmt"/>
-        <line num="25" count="0" type="stmt"/>
-        <line num="26" count="0" type="stmt"/>
-        <line num="27" count="0" type="stmt"/>
-        <line num="28" count="0" type="stmt"/>
-        <line num="29" count="0" type="stmt"/>
+        <line num="111" count="27" type="stmt"/>
+        <line num="112" count="27" type="stmt"/>
+        <line num="113" count="27" type="stmt"/>
+        <line num="114" count="27" type="stmt"/>
+        <line num="115" count="27" type="stmt"/>
+        <line num="116" count="27" type="stmt"/>
+        <line num="117" count="27" type="stmt"/>
+        <line num="118" count="27" type="stmt"/>
       </file>
-      <file name="handleSchemes.js" path="/home/embruch/ragchat-api/utils/handleSchemes.js">
-        <metrics statements="63" coveredstatements="63" conditionals="10" coveredconditionals="10" methods="4" coveredmethods="4"/>
+      <file name="handleSchemes.js" path="/local/embruch/ragchat-api/utils/handleSchemes.js">
+        <metrics statements="67" coveredstatements="67" conditionals="10" coveredconditionals="10" methods="4" coveredmethods="4"/>
         <line num="1" count="1" type="stmt"/>
         <line num="2" count="1" type="stmt"/>
         <line num="3" count="1" type="stmt"/>
@@ -2074,13 +3101,13 @@
         <line num="8" count="1" type="stmt"/>
         <line num="9" count="1" type="cond" truecount="1" falsecount="0"/>
         <line num="10" count="3" type="stmt"/>
-        <line num="11" count="3" type="cond" truecount="1" falsecount="0"/>
-        <line num="12" count="42" type="stmt"/>
-        <line num="13" count="3" type="stmt"/>
-        <line num="14" count="3" type="cond" truecount="1" falsecount="0"/>
+        <line num="11" count="3" type="stmt"/>
+        <line num="12" count="3" type="cond" truecount="1" falsecount="0"/>
+        <line num="13" count="42" type="stmt"/>
+        <line num="14" count="3" type="stmt"/>
         <line num="15" count="3" type="stmt"/>
-        <line num="16" count="1" type="stmt"/>
-        <line num="17" count="1" type="stmt"/>
+        <line num="16" count="3" type="cond" truecount="1" falsecount="0"/>
+        <line num="17" count="3" type="stmt"/>
         <line num="18" count="1" type="stmt"/>
         <line num="19" count="1" type="stmt"/>
         <line num="20" count="1" type="stmt"/>
@@ -2089,47 +3116,51 @@
         <line num="23" count="1" type="stmt"/>
         <line num="24" count="1" type="stmt"/>
         <line num="25" count="1" type="stmt"/>
-        <line num="26" count="1" type="cond" truecount="1" falsecount="0"/>
-        <line num="27" count="3" type="stmt"/>
-        <line num="28" count="3" type="stmt"/>
-        <line num="29" count="3" type="cond" truecount="1" falsecount="0"/>
-        <line num="30" count="6" type="stmt"/>
+        <line num="26" count="1" type="stmt"/>
+        <line num="27" count="1" type="stmt"/>
+        <line num="28" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="29" count="3" type="stmt"/>
+        <line num="30" count="3" type="stmt"/>
         <line num="31" count="3" type="stmt"/>
-        <line num="32" count="3" type="stmt"/>
-        <line num="33" count="3" type="stmt"/>
-        <line num="34" count="1" type="stmt"/>
-        <line num="35" count="1" type="stmt"/>
-        <line num="36" count="1" type="stmt"/>
-        <line num="37" count="1" type="stmt"/>
+        <line num="32" count="3" type="cond" truecount="1" falsecount="0"/>
+        <line num="33" count="6" type="stmt"/>
+        <line num="34" count="3" type="stmt"/>
+        <line num="35" count="3" type="stmt"/>
+        <line num="36" count="3" type="stmt"/>
+        <line num="37" count="3" type="stmt"/>
         <line num="38" count="1" type="stmt"/>
         <line num="39" count="1" type="stmt"/>
         <line num="40" count="1" type="stmt"/>
         <line num="41" count="1" type="stmt"/>
-        <line num="42" count="1" type="cond" truecount="1" falsecount="0"/>
-        <line num="43" count="4" type="stmt"/>
-        <line num="44" count="4" type="stmt"/>
+        <line num="42" count="1" type="stmt"/>
+        <line num="43" count="1" type="stmt"/>
+        <line num="44" count="1" type="stmt"/>
         <line num="45" count="1" type="stmt"/>
-        <line num="46" count="1" type="stmt"/>
-        <line num="47" count="1" type="stmt"/>
-        <line num="48" count="1" type="stmt"/>
+        <line num="46" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="47" count="4" type="stmt"/>
+        <line num="48" count="4" type="stmt"/>
         <line num="49" count="1" type="stmt"/>
         <line num="50" count="1" type="stmt"/>
         <line num="51" count="1" type="stmt"/>
         <line num="52" count="1" type="stmt"/>
         <line num="53" count="1" type="stmt"/>
         <line num="54" count="1" type="stmt"/>
-        <line num="55" count="1" type="cond" truecount="1" falsecount="0"/>
-        <line num="56" count="4" type="stmt"/>
-        <line num="57" count="4" type="cond" truecount="1" falsecount="0"/>
-        <line num="58" count="50" type="cond" truecount="1" falsecount="0"/>
-        <line num="59" count="13" type="stmt"/>
-        <line num="60" count="13" type="stmt"/>
+        <line num="55" count="1" type="stmt"/>
+        <line num="56" count="1" type="stmt"/>
+        <line num="57" count="1" type="stmt"/>
+        <line num="58" count="1" type="stmt"/>
+        <line num="59" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="60" count="4" type="stmt"/>
         <line num="61" count="4" type="cond" truecount="1" falsecount="0"/>
-        <line num="62" count="4" type="stmt"/>
-        <line num="63" count="4" type="stmt"/>
+        <line num="62" count="50" type="cond" truecount="1" falsecount="0"/>
+        <line num="63" count="13" type="stmt"/>
+        <line num="64" count="13" type="stmt"/>
+        <line num="65" count="4" type="cond" truecount="1" falsecount="0"/>
+        <line num="66" count="4" type="stmt"/>
+        <line num="67" count="4" type="stmt"/>
       </file>
-      <file name="handleTokens.js" path="/home/embruch/ragchat-api/utils/handleTokens.js">
-        <metrics statements="170" coveredstatements="153" conditionals="23" coveredconditionals="21" methods="9" coveredmethods="7"/>
+      <file name="handleTokens.js" path="/local/embruch/ragchat-api/utils/handleTokens.js">
+        <metrics statements="186" coveredstatements="166" conditionals="25" coveredconditionals="21" methods="9" coveredmethods="7"/>
         <line num="1" count="1" type="stmt"/>
         <line num="2" count="1" type="stmt"/>
         <line num="3" count="1" type="stmt"/>
@@ -2143,11 +3174,11 @@
         <line num="11" count="1" type="stmt"/>
         <line num="12" count="1" type="stmt"/>
         <line num="13" count="1" type="stmt"/>
-        <line num="14" count="1" type="cond" truecount="1" falsecount="0"/>
-        <line num="15" count="2" type="stmt"/>
-        <line num="16" count="2" type="stmt"/>
-        <line num="17" count="1" type="stmt"/>
-        <line num="18" count="1" type="stmt"/>
+        <line num="14" count="1" type="stmt"/>
+        <line num="15" count="1" type="stmt"/>
+        <line num="16" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="17" count="2" type="stmt"/>
+        <line num="18" count="2" type="stmt"/>
         <line num="19" count="1" type="stmt"/>
         <line num="20" count="1" type="stmt"/>
         <line num="21" count="1" type="stmt"/>
@@ -2159,17 +3190,17 @@
         <line num="27" count="1" type="stmt"/>
         <line num="28" count="1" type="stmt"/>
         <line num="29" count="1" type="stmt"/>
-        <line num="30" count="0" type="stmt"/>
-        <line num="31" count="0" type="stmt"/>
+        <line num="30" count="1" type="stmt"/>
+        <line num="31" count="1" type="stmt"/>
         <line num="32" count="0" type="stmt"/>
         <line num="33" count="0" type="stmt"/>
         <line num="34" count="0" type="stmt"/>
         <line num="35" count="0" type="stmt"/>
         <line num="36" count="0" type="stmt"/>
         <line num="37" count="0" type="stmt"/>
-        <line num="38" count="1" type="stmt"/>
-        <line num="39" count="1" type="stmt"/>
-        <line num="40" count="1" type="stmt"/>
+        <line num="38" count="0" type="stmt"/>
+        <line num="39" count="0" type="stmt"/>
+        <line num="40" count="0" type="stmt"/>
         <line num="41" count="1" type="stmt"/>
         <line num="42" count="1" type="stmt"/>
         <line num="43" count="1" type="stmt"/>
@@ -2177,12 +3208,12 @@
         <line num="45" count="1" type="stmt"/>
         <line num="46" count="1" type="stmt"/>
         <line num="47" count="1" type="stmt"/>
-        <line num="48" count="1" type="cond" truecount="1" falsecount="0"/>
-        <line num="49" count="2" type="stmt"/>
-        <line num="50" count="2" type="stmt"/>
-        <line num="51" count="1" type="stmt"/>
-        <line num="52" count="1" type="stmt"/>
-        <line num="53" count="1" type="stmt"/>
+        <line num="48" count="1" type="stmt"/>
+        <line num="49" count="1" type="stmt"/>
+        <line num="50" count="1" type="stmt"/>
+        <line num="51" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="52" count="2" type="stmt"/>
+        <line num="53" count="2" type="stmt"/>
         <line num="54" count="1" type="stmt"/>
         <line num="55" count="1" type="stmt"/>
         <line num="56" count="1" type="stmt"/>
@@ -2190,10 +3221,10 @@
         <line num="58" count="1" type="stmt"/>
         <line num="59" count="1" type="stmt"/>
         <line num="60" count="1" type="stmt"/>
-        <line num="61" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="61" count="1" type="stmt"/>
         <line num="62" count="1" type="stmt"/>
         <line num="63" count="1" type="stmt"/>
-        <line num="64" count="1" type="stmt"/>
+        <line num="64" count="1" type="cond" truecount="1" falsecount="0"/>
         <line num="65" count="1" type="stmt"/>
         <line num="66" count="1" type="stmt"/>
         <line num="67" count="1" type="stmt"/>
@@ -2203,20 +3234,20 @@
         <line num="71" count="1" type="stmt"/>
         <line num="72" count="1" type="stmt"/>
         <line num="73" count="1" type="stmt"/>
-        <line num="74" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="74" count="1" type="stmt"/>
         <line num="75" count="1" type="stmt"/>
         <line num="76" count="1" type="stmt"/>
-        <line num="77" count="1" type="stmt"/>
+        <line num="77" count="1" type="cond" truecount="1" falsecount="0"/>
         <line num="78" count="1" type="stmt"/>
         <line num="79" count="1" type="stmt"/>
         <line num="80" count="1" type="stmt"/>
         <line num="81" count="1" type="stmt"/>
-        <line num="82" count="1" type="cond" truecount="0" falsecount="1"/>
-        <line num="83" count="0" type="stmt"/>
-        <line num="84" count="0" type="stmt"/>
-        <line num="85" count="1" type="stmt"/>
-        <line num="86" count="1" type="stmt"/>
-        <line num="87" count="1" type="stmt"/>
+        <line num="82" count="1" type="stmt"/>
+        <line num="83" count="1" type="stmt"/>
+        <line num="84" count="1" type="stmt"/>
+        <line num="85" count="1" type="cond" truecount="0" falsecount="1"/>
+        <line num="86" count="0" type="stmt"/>
+        <line num="87" count="0" type="stmt"/>
         <line num="88" count="1" type="stmt"/>
         <line num="89" count="1" type="stmt"/>
         <line num="90" count="1" type="stmt"/>
@@ -2224,35 +3255,35 @@
         <line num="92" count="1" type="stmt"/>
         <line num="93" count="1" type="stmt"/>
         <line num="94" count="1" type="stmt"/>
-        <line num="95" count="1" type="cond" truecount="1" falsecount="0"/>
-        <line num="96" count="5" type="stmt"/>
-        <line num="97" count="5" type="stmt"/>
-        <line num="98" count="5" type="stmt"/>
-        <line num="99" count="5" type="cond" truecount="0" falsecount="1"/>
+        <line num="95" count="1" type="stmt"/>
+        <line num="96" count="1" type="stmt"/>
+        <line num="97" count="1" type="stmt"/>
+        <line num="98" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="99" count="5" type="stmt"/>
         <line num="100" count="5" type="stmt"/>
         <line num="101" count="5" type="stmt"/>
-        <line num="102" count="5" type="cond" truecount="3" falsecount="0"/>
-        <line num="103" count="5" type="cond" truecount="1" falsecount="0"/>
-        <line num="104" count="3" type="stmt"/>
-        <line num="105" count="3" type="stmt"/>
-        <line num="106" count="5" type="stmt"/>
-        <line num="107" count="1" type="stmt"/>
-        <line num="108" count="1" type="stmt"/>
-        <line num="109" count="1" type="stmt"/>
+        <line num="102" count="5" type="cond" truecount="0" falsecount="1"/>
+        <line num="103" count="5" type="stmt"/>
+        <line num="104" count="5" type="stmt"/>
+        <line num="105" count="5" type="cond" truecount="3" falsecount="0"/>
+        <line num="106" count="5" type="cond" truecount="1" falsecount="0"/>
+        <line num="107" count="3" type="stmt"/>
+        <line num="108" count="3" type="stmt"/>
+        <line num="109" count="5" type="stmt"/>
         <line num="110" count="1" type="stmt"/>
         <line num="111" count="1" type="stmt"/>
         <line num="112" count="1" type="stmt"/>
         <line num="113" count="1" type="stmt"/>
-        <line num="114" count="0" type="stmt"/>
-        <line num="115" count="0" type="stmt"/>
-        <line num="116" count="0" type="stmt"/>
+        <line num="114" count="1" type="stmt"/>
+        <line num="115" count="1" type="stmt"/>
+        <line num="116" count="1" type="stmt"/>
         <line num="117" count="0" type="stmt"/>
         <line num="118" count="0" type="stmt"/>
         <line num="119" count="0" type="stmt"/>
         <line num="120" count="0" type="stmt"/>
-        <line num="121" count="1" type="stmt"/>
-        <line num="122" count="1" type="stmt"/>
-        <line num="123" count="1" type="stmt"/>
+        <line num="121" count="0" type="stmt"/>
+        <line num="122" count="0" type="stmt"/>
+        <line num="123" count="0" type="stmt"/>
         <line num="124" count="1" type="stmt"/>
         <line num="125" count="1" type="stmt"/>
         <line num="126" count="1" type="stmt"/>
@@ -2261,70 +3292,88 @@
         <line num="129" count="1" type="stmt"/>
         <line num="130" count="1" type="stmt"/>
         <line num="131" count="1" type="stmt"/>
-        <line num="132" count="1" type="cond" truecount="1" falsecount="0"/>
-        <line num="133" count="32" type="stmt"/>
-        <line num="134" count="32" type="stmt"/>
-        <line num="135" count="32" type="stmt"/>
-        <line num="136" count="32" type="cond" truecount="1" falsecount="0"/>
+        <line num="132" count="1" type="stmt"/>
+        <line num="133" count="1" type="stmt"/>
+        <line num="134" count="1" type="stmt"/>
+        <line num="135" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="136" count="32" type="stmt"/>
         <line num="137" count="32" type="stmt"/>
         <line num="138" count="32" type="stmt"/>
-        <line num="139" count="32" type="cond" truecount="1" falsecount="0"/>
-        <line num="140" count="26" type="cond" truecount="1" falsecount="0"/>
-        <line num="141" count="26" type="stmt"/>
-        <line num="142" count="26" type="cond" truecount="1" falsecount="0"/>
-        <line num="143" count="26" type="stmt"/>
-        <line num="144" count="26" type="cond" truecount="2" falsecount="0"/>
-        <line num="145" count="20" type="cond" truecount="1" falsecount="0"/>
-        <line num="146" count="20" type="stmt"/>
-        <line num="147" count="20" type="stmt"/>
-        <line num="148" count="20" type="stmt"/>
+        <line num="139" count="32" type="stmt"/>
+        <line num="140" count="32" type="stmt"/>
+        <line num="141" count="32" type="cond" truecount="1" falsecount="0"/>
+        <line num="142" count="32" type="stmt"/>
+        <line num="143" count="32" type="stmt"/>
+        <line num="144" count="32" type="cond" truecount="1" falsecount="0"/>
+        <line num="145" count="26" type="cond" truecount="1" falsecount="0"/>
+        <line num="146" count="26" type="stmt"/>
+        <line num="147" count="26" type="stmt"/>
+        <line num="148" count="26" type="cond" truecount="1" falsecount="0"/>
         <line num="149" count="26" type="stmt"/>
         <line num="150" count="26" type="stmt"/>
-        <line num="151" count="1" type="stmt"/>
-        <line num="152" count="1" type="stmt"/>
-        <line num="153" count="1" type="stmt"/>
-        <line num="154" count="1" type="stmt"/>
-        <line num="155" count="1" type="stmt"/>
-        <line num="156" count="1" type="stmt"/>
-        <line num="157" count="1" type="stmt"/>
-        <line num="158" count="1" type="stmt"/>
-        <line num="159" count="1" type="stmt"/>
-        <line num="160" count="1" type="stmt"/>
+        <line num="151" count="26" type="stmt"/>
+        <line num="152" count="26" type="cond" truecount="2" falsecount="0"/>
+        <line num="153" count="20" type="cond" truecount="1" falsecount="0"/>
+        <line num="154" count="20" type="stmt"/>
+        <line num="155" count="20" type="stmt"/>
+        <line num="156" count="20" type="stmt"/>
+        <line num="157" count="20" type="stmt"/>
+        <line num="158" count="20" type="stmt"/>
+        <line num="159" count="26" type="stmt"/>
+        <line num="160" count="26" type="stmt"/>
         <line num="161" count="1" type="stmt"/>
-        <line num="162" count="1" type="cond" truecount="1" falsecount="0"/>
-        <line num="163" count="3" type="stmt"/>
-        <line num="164" count="3" type="stmt"/>
-        <line num="165" count="3" type="cond" truecount="1" falsecount="0"/>
-        <line num="166" count="3" type="stmt"/>
-        <line num="167" count="3" type="cond" truecount="1" falsecount="0"/>
-        <line num="168" count="1" type="cond" truecount="1" falsecount="0"/>
-        <line num="169" count="3" type="stmt"/>
-        <line num="170" count="3" type="stmt"/>
+        <line num="162" count="1" type="stmt"/>
+        <line num="163" count="1" type="stmt"/>
+        <line num="164" count="1" type="stmt"/>
+        <line num="165" count="1" type="stmt"/>
+        <line num="166" count="1" type="stmt"/>
+        <line num="167" count="1" type="stmt"/>
+        <line num="168" count="1" type="stmt"/>
+        <line num="169" count="1" type="stmt"/>
+        <line num="170" count="1" type="stmt"/>
+        <line num="171" count="1" type="stmt"/>
+        <line num="172" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="173" count="3" type="stmt"/>
+        <line num="174" count="3" type="stmt"/>
+        <line num="175" count="3" type="stmt"/>
+        <line num="176" count="3" type="cond" truecount="0" falsecount="1"/>
+        <line num="177" count="3" type="stmt"/>
+        <line num="178" count="3" type="cond" truecount="1" falsecount="0"/>
+        <line num="179" count="3" type="stmt"/>
+        <line num="180" count="3" type="cond" truecount="1" falsecount="0"/>
+        <line num="181" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="182" count="3" type="stmt"/>
+        <line num="183" count="3" type="cond" truecount="0" falsecount="1"/>
+        <line num="184" count="0" type="stmt"/>
+        <line num="185" count="0" type="stmt"/>
+        <line num="186" count="3" type="stmt"/>
       </file>
-      <file name="handleValidations.js" path="/home/embruch/ragchat-api/utils/handleValidations.js">
-        <metrics statements="17" coveredstatements="17" conditionals="3" coveredconditionals="3" methods="1" coveredmethods="1"/>
+      <file name="handleValidations.js" path="/local/embruch/ragchat-api/utils/handleValidations.js">
+        <metrics statements="19" coveredstatements="19" conditionals="3" coveredconditionals="3" methods="1" coveredmethods="1"/>
         <line num="1" count="1" type="stmt"/>
         <line num="2" count="1" type="stmt"/>
         <line num="3" count="1" type="stmt"/>
         <line num="4" count="1" type="cond" truecount="2" falsecount="0"/>
-        <line num="5" count="49" type="stmt"/>
-        <line num="6" count="49" type="stmt"/>
-        <line num="7" count="49" type="stmt"/>
-        <line num="8" count="49" type="stmt"/>
-        <line num="9" count="49" type="stmt"/>
-        <line num="10" count="49" type="cond" truecount="1" falsecount="0"/>
-        <line num="11" count="20" type="stmt"/>
-        <line num="12" count="20" type="stmt"/>
-        <line num="13" count="20" type="stmt"/>
-        <line num="14" count="20" type="stmt"/>
-        <line num="15" count="20" type="stmt"/>
-        <line num="16" count="20" type="stmt"/>
-        <line num="17" count="49" type="stmt"/>
+        <line num="5" count="47" type="stmt"/>
+        <line num="6" count="47" type="stmt"/>
+        <line num="7" count="47" type="stmt"/>
+        <line num="8" count="47" type="stmt"/>
+        <line num="9" count="47" type="stmt"/>
+        <line num="10" count="47" type="stmt"/>
+        <line num="11" count="47" type="stmt"/>
+        <line num="12" count="47" type="cond" truecount="1" falsecount="0"/>
+        <line num="13" count="19" type="stmt"/>
+        <line num="14" count="19" type="stmt"/>
+        <line num="15" count="19" type="stmt"/>
+        <line num="16" count="19" type="stmt"/>
+        <line num="17" count="19" type="stmt"/>
+        <line num="18" count="19" type="stmt"/>
+        <line num="19" count="47" type="stmt"/>
       </file>
     </package>
     <package name="ragchat-api.validationSchemes">
-      <metrics statements="81" coveredstatements="81" conditionals="4" coveredconditionals="4" methods="4" coveredmethods="4"/>
-      <file name="AI.js" path="/home/embruch/ragchat-api/validationSchemes/AI.js">
+      <metrics statements="80" coveredstatements="80" conditionals="4" coveredconditionals="4" methods="4" coveredmethods="4"/>
+      <file name="AI.js" path="/local/embruch/ragchat-api/validationSchemes/AI.js">
         <metrics statements="29" coveredstatements="29" conditionals="0" coveredconditionals="0" methods="0" coveredmethods="0"/>
         <line num="1" count="1" type="stmt"/>
         <line num="2" count="1" type="stmt"/>
@@ -2356,8 +3405,8 @@
         <line num="28" count="1" type="stmt"/>
         <line num="29" count="1" type="stmt"/>
       </file>
-      <file name="Auth.js" path="/home/embruch/ragchat-api/validationSchemes/Auth.js">
-        <metrics statements="36" coveredstatements="36" conditionals="2" coveredconditionals="2" methods="2" coveredmethods="2"/>
+      <file name="Auth.js" path="/local/embruch/ragchat-api/validationSchemes/Auth.js">
+        <metrics statements="35" coveredstatements="35" conditionals="2" coveredconditionals="2" methods="2" coveredmethods="2"/>
         <line num="1" count="1" type="stmt"/>
         <line num="2" count="1" type="stmt"/>
         <line num="3" count="1" type="stmt"/>
@@ -2385,17 +3434,16 @@
         <line num="25" count="1" type="stmt"/>
         <line num="26" count="1" type="stmt"/>
         <line num="27" count="1" type="stmt"/>
-        <line num="28" count="1" type="stmt"/>
-        <line num="29" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="28" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="29" count="1" type="stmt"/>
         <line num="30" count="1" type="stmt"/>
         <line num="31" count="1" type="stmt"/>
-        <line num="32" count="1" type="stmt"/>
-        <line num="33" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="32" count="1" type="cond" truecount="1" falsecount="0"/>
+        <line num="33" count="1" type="stmt"/>
         <line num="34" count="1" type="stmt"/>
         <line num="35" count="1" type="stmt"/>
-        <line num="36" count="1" type="stmt"/>
       </file>
-      <file name="User.js" path="/home/embruch/ragchat-api/validationSchemes/User.js">
+      <file name="User.js" path="/local/embruch/ragchat-api/validationSchemes/User.js">
         <metrics statements="16" coveredstatements="16" conditionals="2" coveredconditionals="2" methods="2" coveredmethods="2"/>
         <line num="1" count="1" type="stmt"/>
         <line num="2" count="1" type="stmt"/>
diff --git a/coverage/coverage-final.json b/coverage/coverage-final.json
index 95c26af..68bcbb8 100644
--- a/coverage/coverage-final.json
+++ b/coverage/coverage-final.json
@@ -1,24 +1,33 @@
-{"/home/embruch/ragchat-api/app.js": {"path":"/home/embruch/ragchat-api/app.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":30}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":41}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":24}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":80}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":89}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":0}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":3}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":3}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":26}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":0}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":33}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":97}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":0}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":29}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":50}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":26}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":27}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":40}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":46}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":12}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":18}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":5}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":49}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":1}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":0}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":3}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":16}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":3}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":47}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":22}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":35}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":0}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":33}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":56}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":24}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":27}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":24}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":0}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":18}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":57}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":26}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":52}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":30}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":42}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":38}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":1}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":39}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":21}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":18}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":89}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":20}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":2}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":27}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":27}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":0}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":0}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":3}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":16}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":2}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":44}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":42}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":38}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":54}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":36}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":26}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":0}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":0}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":3}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":13}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":2}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":31}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":29}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":25}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":41}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":6}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":37}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":26}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":32}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":0}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":19}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":45,"46":45,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1},"branchMap":{"0":{"type":"branch","line":15,"loc":{"start":{"line":15,"column":28},"end":{"line":25,"column":1}},"locations":[{"start":{"line":15,"column":28},"end":{"line":25,"column":1}}]},"1":{"type":"branch","line":45,"loc":{"start":{"line":45,"column":41},"end":{"line":47,"column":1}},"locations":[{"start":{"line":45,"column":41},"end":{"line":47,"column":1}}]}},"b":{"0":[0],"1":[45]},"fnMap":{},"f":{}}
-,"/home/embruch/ragchat-api/ecosystem.config.cjs": {"path":"/home/embruch/ragchat-api/ecosystem.config.cjs","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":18}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":10}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":24}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":24}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":37}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":35}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":16}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":100}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":33}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":31}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":4}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":2}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":12,"column":2}},"locations":[{"start":{"line":1,"column":0},"end":{"line":12,"column":2}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":12,"column":2}},"loc":{"start":{"line":1,"column":0},"end":{"line":12,"column":2}},"line":1}},"f":{"0":0}}
-,"/home/embruch/ragchat-api/server.js": {"path":"/home/embruch/ragchat-api/server.js","all":true,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":27}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":26}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":20}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":0}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":3}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":16}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":3}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":19}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":17}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":21}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":53}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":55}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":0}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":47}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":0}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":39}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":61}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":18}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":1}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":78}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":0}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":3}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":63}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":3}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":65}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":47}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":34}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":3}}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":28,"column":-325}},"locations":[{"start":{"line":1,"column":0},"end":{"line":28,"column":-325}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"(empty-report)","decl":{"start":{"line":1,"column":0},"end":{"line":28,"column":-325}},"loc":{"start":{"line":1,"column":0},"end":{"line":28,"column":-325}},"line":1}},"f":{"0":0}}
-,"/home/embruch/ragchat-api/controllers/AI.js": {"path":"/home/embruch/ragchat-api/controllers/AI.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":37}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":122}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":75}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":80}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":66}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":0}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":0}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":0}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":42}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":67}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":0}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":59}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":16}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":3}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":52}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":33}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":38}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":18}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":57}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":14}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":31}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":2}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":0}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":0}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":59}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":13}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":3}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":52}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":7}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":68}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":33}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":19}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":16}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":3}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":2}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":0}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":0}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":59}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":12}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":3}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":51}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":7}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":51}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":27}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":19}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":16}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":3}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":2}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":0}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":0}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":59}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":17}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":3}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":55}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":7}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":58}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":30}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":19}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":16}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":3}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":2}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":0}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":0}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":59}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":16}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":3}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":54}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":7}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":57}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":30}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":19}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":16}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":3}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":2}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":0}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":0}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":0}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":59}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":13}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":3}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":50}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":23}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":25}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":9}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":36}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":73}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":15}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":20}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":21}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":25}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":5}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":3}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":0}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":20}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":7}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":24}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":70}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":0}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":18}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":100}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":5}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":54}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":0}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":0}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":28}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":84}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":79}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":0}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":78}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":0}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":0}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":11}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":19}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":16}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":3}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":2}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":0}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":59}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":12}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":3}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":51}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":7}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":79}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":31}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":19}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":16}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":3}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":2}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":0}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":59}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":58}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":59}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":0}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":3}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":13}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":11}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":2}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":51}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":7}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":24}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":52}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":0}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":51}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":0}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":20}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":84}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":0}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":53}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":0}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":0}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":23}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":21}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":19}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":16}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":3}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":2}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":0}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":0}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":59}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":40}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":3}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":62}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":24}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":71}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":3}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":60}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":22}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":23}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":86}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":3}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":9}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":2}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":0}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":59}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":34}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":3}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":63}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":7}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":33}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":38}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":0}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":44}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":39}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":22}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":45}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":35}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":66}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":19}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":16}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":3}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":2}}},"s":{"0":15,"1":15,"2":15,"3":15,"4":15,"5":15,"6":15,"7":15,"8":15,"9":15,"10":15,"11":15,"12":15,"13":15,"14":15,"15":15,"16":2,"17":2,"18":2,"19":2,"20":1,"21":1,"22":1,"23":15,"24":15,"25":15,"26":15,"27":15,"28":15,"29":2,"30":2,"31":2,"32":2,"33":0,"34":0,"35":2,"36":15,"37":15,"38":15,"39":15,"40":15,"41":15,"42":2,"43":2,"44":1,"45":1,"46":1,"47":1,"48":2,"49":15,"50":15,"51":15,"52":15,"53":15,"54":15,"55":2,"56":2,"57":1,"58":1,"59":1,"60":1,"61":2,"62":15,"63":15,"64":15,"65":15,"66":15,"67":15,"68":2,"69":2,"70":1,"71":1,"72":1,"73":1,"74":2,"75":15,"76":15,"77":15,"78":15,"79":15,"80":15,"81":15,"82":3,"83":3,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":0,"91":0,"92":1,"93":2,"94":2,"95":2,"96":2,"97":2,"98":2,"99":3,"100":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1,"108":1,"109":1,"110":1,"111":1,"112":1,"113":3,"114":0,"115":0,"116":3,"117":15,"118":15,"119":15,"120":15,"121":15,"122":1,"123":1,"124":1,"125":1,"126":0,"127":0,"128":1,"129":15,"130":15,"131":15,"132":15,"133":15,"134":15,"135":15,"136":15,"137":15,"138":15,"139":1,"140":1,"141":1,"142":1,"143":1,"144":1,"145":1,"146":1,"147":1,"148":1,"149":1,"150":1,"151":1,"152":1,"153":1,"154":0,"155":0,"156":1,"157":15,"158":15,"159":15,"160":15,"161":15,"162":15,"163":4,"164":0,"165":0,"166":4,"167":4,"168":4,"169":1,"170":1,"171":3,"172":3,"173":15,"174":15,"175":15,"176":15,"177":15,"178":6,"179":6,"180":6,"181":6,"182":6,"183":6,"184":6,"185":6,"186":6,"187":6,"188":6,"189":0,"190":0,"191":6},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":192,"column":2}},"locations":[{"start":{"line":1,"column":0},"end":{"line":192,"column":2}}]},"1":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":192,"column":2}},"locations":[{"start":{"line":1,"column":0},"end":{"line":192,"column":2}}]},"2":{"type":"branch","line":16,"loc":{"start":{"line":16,"column":25},"end":{"line":23,"column":2}},"locations":[{"start":{"line":16,"column":25},"end":{"line":23,"column":2}}]},"3":{"type":"branch","line":20,"loc":{"start":{"line":20,"column":16},"end":{"line":23,"column":2}},"locations":[{"start":{"line":20,"column":16},"end":{"line":23,"column":2}}]},"4":{"type":"branch","line":29,"loc":{"start":{"line":29,"column":25},"end":{"line":36,"column":2}},"locations":[{"start":{"line":29,"column":25},"end":{"line":36,"column":2}}]},"5":{"type":"branch","line":33,"loc":{"start":{"line":33,"column":4},"end":{"line":35,"column":3}},"locations":[{"start":{"line":33,"column":4},"end":{"line":35,"column":3}}]},"6":{"type":"branch","line":42,"loc":{"start":{"line":42,"column":24},"end":{"line":49,"column":2}},"locations":[{"start":{"line":42,"column":24},"end":{"line":49,"column":2}}]},"7":{"type":"branch","line":45,"loc":{"start":{"line":45,"column":-1},"end":{"line":48,"column":3}},"locations":[{"start":{"line":45,"column":-1},"end":{"line":48,"column":3}}]},"8":{"type":"branch","line":55,"loc":{"start":{"line":55,"column":28},"end":{"line":62,"column":2}},"locations":[{"start":{"line":55,"column":28},"end":{"line":62,"column":2}}]},"9":{"type":"branch","line":58,"loc":{"start":{"line":58,"column":-1},"end":{"line":61,"column":3}},"locations":[{"start":{"line":58,"column":-1},"end":{"line":61,"column":3}}]},"10":{"type":"branch","line":68,"loc":{"start":{"line":68,"column":27},"end":{"line":75,"column":2}},"locations":[{"start":{"line":68,"column":27},"end":{"line":75,"column":2}}]},"11":{"type":"branch","line":71,"loc":{"start":{"line":71,"column":-1},"end":{"line":74,"column":3}},"locations":[{"start":{"line":71,"column":-1},"end":{"line":74,"column":3}}]},"12":{"type":"branch","line":82,"loc":{"start":{"line":82,"column":23},"end":{"line":117,"column":2}},"locations":[{"start":{"line":82,"column":23},"end":{"line":117,"column":2}}]},"13":{"type":"branch","line":84,"loc":{"start":{"line":84,"column":24},"end":{"line":93,"column":3}},"locations":[{"start":{"line":84,"column":24},"end":{"line":93,"column":3}}]},"14":{"type":"branch","line":90,"loc":{"start":{"line":90,"column":6},"end":{"line":92,"column":5}},"locations":[{"start":{"line":90,"column":6},"end":{"line":92,"column":5}}]},"15":{"type":"branch","line":94,"loc":{"start":{"line":94,"column":-1},"end":{"line":100,"column":17}},"locations":[{"start":{"line":94,"column":-1},"end":{"line":100,"column":17}}]},"16":{"type":"branch","line":100,"loc":{"start":{"line":100,"column":17},"end":{"line":114,"column":4}},"locations":[{"start":{"line":100,"column":17},"end":{"line":114,"column":4}}]},"17":{"type":"branch","line":114,"loc":{"start":{"line":114,"column":4},"end":{"line":116,"column":3}},"locations":[{"start":{"line":114,"column":4},"end":{"line":116,"column":3}}]},"18":{"type":"branch","line":122,"loc":{"start":{"line":122,"column":24},"end":{"line":129,"column":2}},"locations":[{"start":{"line":122,"column":24},"end":{"line":129,"column":2}}]},"19":{"type":"branch","line":126,"loc":{"start":{"line":126,"column":4},"end":{"line":128,"column":3}},"locations":[{"start":{"line":126,"column":4},"end":{"line":128,"column":3}}]},"20":{"type":"branch","line":139,"loc":{"start":{"line":139,"column":26},"end":{"line":157,"column":2}},"locations":[{"start":{"line":139,"column":26},"end":{"line":157,"column":2}}]},"21":{"type":"branch","line":154,"loc":{"start":{"line":154,"column":4},"end":{"line":156,"column":3}},"locations":[{"start":{"line":154,"column":4},"end":{"line":156,"column":3}}]},"22":{"type":"branch","line":163,"loc":{"start":{"line":163,"column":35},"end":{"line":173,"column":2}},"locations":[{"start":{"line":163,"column":35},"end":{"line":173,"column":2}}]},"23":{"type":"branch","line":164,"loc":{"start":{"line":164,"column":23},"end":{"line":166,"column":3}},"locations":[{"start":{"line":164,"column":23},"end":{"line":166,"column":3}}]},"24":{"type":"branch","line":169,"loc":{"start":{"line":169,"column":22},"end":{"line":171,"column":3}},"locations":[{"start":{"line":169,"column":22},"end":{"line":171,"column":3}}]},"25":{"type":"branch","line":172,"loc":{"start":{"line":172,"column":-1},"end":{"line":173,"column":2}},"locations":[{"start":{"line":172,"column":-1},"end":{"line":173,"column":2}}]},"26":{"type":"branch","line":178,"loc":{"start":{"line":178,"column":36},"end":{"line":192,"column":2}},"locations":[{"start":{"line":178,"column":36},"end":{"line":192,"column":2}}]},"27":{"type":"branch","line":184,"loc":{"start":{"line":184,"column":26},"end":{"line":184,"column":39}},"locations":[{"start":{"line":184,"column":26},"end":{"line":184,"column":39}}]},"28":{"type":"branch","line":189,"loc":{"start":{"line":189,"column":4},"end":{"line":191,"column":3}},"locations":[{"start":{"line":189,"column":4},"end":{"line":191,"column":3}}]},"29":{"type":"branch","line":188,"loc":{"start":{"line":188,"column":31},"end":{"line":188,"column":64}},"locations":[{"start":{"line":188,"column":31},"end":{"line":188,"column":64}}]}},"b":{"0":[15],"1":[15],"2":[2],"3":[1],"4":[2],"5":[0],"6":[2],"7":[1],"8":[2],"9":[1],"10":[2],"11":[1],"12":[3],"13":[1],"14":[0],"15":[2],"16":[1],"17":[0],"18":[1],"19":[0],"20":[1],"21":[0],"22":[4],"23":[0],"24":[1],"25":[3],"26":[6],"27":[0],"28":[0],"29":[13]},"fnMap":{"0":{"name":"getStatus","decl":{"start":{"line":16,"column":25},"end":{"line":23,"column":2}},"loc":{"start":{"line":16,"column":25},"end":{"line":23,"column":2}},"line":16},"1":{"name":"getModels","decl":{"start":{"line":29,"column":25},"end":{"line":36,"column":2}},"loc":{"start":{"line":29,"column":25},"end":{"line":36,"column":2}},"line":29},"2":{"name":"getModel","decl":{"start":{"line":42,"column":24},"end":{"line":49,"column":2}},"loc":{"start":{"line":42,"column":24},"end":{"line":49,"column":2}},"line":42},"3":{"name":"installModel","decl":{"start":{"line":55,"column":28},"end":{"line":62,"column":2}},"loc":{"start":{"line":55,"column":28},"end":{"line":62,"column":2}},"line":55},"4":{"name":"deleteModel","decl":{"start":{"line":68,"column":27},"end":{"line":75,"column":2}},"loc":{"start":{"line":68,"column":27},"end":{"line":75,"column":2}},"line":68},"5":{"name":"getChat","decl":{"start":{"line":82,"column":23},"end":{"line":117,"column":2}},"loc":{"start":{"line":82,"column":23},"end":{"line":117,"column":2}},"line":82},"6":{"name":"getChats","decl":{"start":{"line":122,"column":24},"end":{"line":129,"column":2}},"loc":{"start":{"line":122,"column":24},"end":{"line":129,"column":2}},"line":122},"7":{"name":"createChat","decl":{"start":{"line":139,"column":26},"end":{"line":157,"column":2}},"loc":{"start":{"line":139,"column":26},"end":{"line":157,"column":2}},"line":139},"8":{"name":"checkRequestedModel","decl":{"start":{"line":163,"column":35},"end":{"line":173,"column":2}},"loc":{"start":{"line":163,"column":35},"end":{"line":173,"column":2}},"line":163},"9":{"name":"aiFilterModelsByName","decl":{"start":{"line":178,"column":36},"end":{"line":192,"column":2}},"loc":{"start":{"line":178,"column":36},"end":{"line":192,"column":2}},"line":178}},"f":{"0":2,"1":2,"2":2,"3":2,"4":2,"5":3,"6":1,"7":1,"8":4,"9":6}}
-,"/home/embruch/ragchat-api/controllers/Auth.js": {"path":"/home/embruch/ragchat-api/controllers/Auth.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":167}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":53}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":70}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":37}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":28}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":67}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":0}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":59}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":25}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":3}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":64}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":7}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":32}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":68}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":0}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":51}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":32}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":79}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":181}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":31}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":76}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":43}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":17}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":93}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":19}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":16}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":3}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":2}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":0}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":0}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":59}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":23}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":3}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":62}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":7}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":33}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":60}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":53}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":63}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":86}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":19}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":16}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":3}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":2}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":0}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":0}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":59}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":8}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":33}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":3}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":36}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":3}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":48}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":16}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":22}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":7}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":35}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":82}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":0}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":85}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":0}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":23}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":21}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":92}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":5}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":0}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":25}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":30}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":129}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":5}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":0}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":33}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":70}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":55}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":47}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":59}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":0}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":28}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":79}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":70}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":105}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":0}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":16}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":16}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":97}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":82}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":12}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":23}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":91}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":5}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":19}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":42}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":16}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":3}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":2}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":0}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":0}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":59}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":21}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":46}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":3}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":42}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":3}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":59}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":7}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":28}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":50}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":114}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":19}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":56}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":16}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":75}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":5}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":23}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":77}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":72}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":19}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":16}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":3}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":2}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":0}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":0}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":59}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":9}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":32}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":3}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":49}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":7}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":14}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":85}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":17}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":62}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":19}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":16}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":3}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":2}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":0}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":0}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":3}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":25}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":42}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":3}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":63}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":16}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":7}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":35}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":82}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":17}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":20}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":21}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":59}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":0}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":37}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":51}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":39}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":0}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":26}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":11}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":45}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":33}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":98}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":185}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":31}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":76}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":47}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":0}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":23}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":20}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":7}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":5}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":10}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":135}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":0}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":19}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":16}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":3}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":2}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":0}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":59}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":17}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":44}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":3}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":56}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":7}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":38}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":46}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":48}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":11}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":62}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":84}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":19}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":16}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":3}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":2}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":0}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":0}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":0}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":3}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":23}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":44}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":3}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":53}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":42}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":49}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":0}},"205":{"start":{"line":206,"column":0},"end":{"line":206,"column":13}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":80}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":85}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":46}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":24}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":53}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":21}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":6}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":0}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":27}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":63}},"216":{"start":{"line":217,"column":0},"end":{"line":217,"column":2}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":2,"12":2,"13":2,"14":2,"15":2,"16":2,"17":2,"18":2,"19":2,"20":2,"21":2,"22":2,"23":2,"24":2,"25":0,"26":0,"27":2,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":0,"42":0,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":4,"54":4,"55":4,"56":4,"57":4,"58":4,"59":4,"60":4,"61":4,"62":4,"63":1,"64":1,"65":3,"66":3,"67":4,"68":1,"69":1,"70":2,"71":2,"72":4,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":4,"91":0,"92":0,"93":0,"94":4,"95":1,"96":1,"97":1,"98":1,"99":1,"100":1,"101":1,"102":1,"103":1,"104":6,"105":6,"106":6,"107":6,"108":5,"109":5,"110":4,"111":1,"112":1,"113":1,"114":1,"115":1,"116":6,"117":3,"118":3,"119":6,"120":1,"121":1,"122":1,"123":1,"124":1,"125":1,"126":1,"127":1,"128":1,"129":1,"130":1,"131":1,"132":1,"133":0,"134":0,"135":1,"136":1,"137":1,"138":1,"139":1,"140":1,"141":1,"142":1,"143":2,"144":2,"145":2,"146":2,"147":2,"148":2,"149":1,"150":1,"151":1,"152":1,"153":1,"154":1,"155":1,"156":1,"157":1,"158":1,"159":1,"160":1,"161":1,"162":1,"163":1,"164":1,"165":1,"166":1,"167":0,"168":0,"169":1,"170":2,"171":2,"172":2,"173":2,"174":0,"175":0,"176":2,"177":1,"178":1,"179":1,"180":1,"181":1,"182":1,"183":1,"184":1,"185":1,"186":1,"187":1,"188":1,"189":1,"190":1,"191":0,"192":0,"193":1,"194":1,"195":1,"196":1,"197":1,"198":1,"199":1,"200":1,"201":1,"202":8,"203":8,"204":2,"205":2,"206":2,"207":2,"208":2,"209":2,"210":2,"211":2,"212":2,"213":2,"214":2,"215":2,"216":2},"branchMap":{"0":{"type":"branch","line":11,"loc":{"start":{"line":11,"column":37},"end":{"line":28,"column":2}},"locations":[{"start":{"line":11,"column":37},"end":{"line":28,"column":2}}]},"1":{"type":"branch","line":25,"loc":{"start":{"line":25,"column":4},"end":{"line":27,"column":3}},"locations":[{"start":{"line":25,"column":4},"end":{"line":27,"column":3}}]},"2":{"type":"branch","line":34,"loc":{"start":{"line":34,"column":35},"end":{"line":44,"column":2}},"locations":[{"start":{"line":34,"column":35},"end":{"line":44,"column":2}}]},"3":{"type":"branch","line":41,"loc":{"start":{"line":41,"column":4},"end":{"line":43,"column":3}},"locations":[{"start":{"line":41,"column":4},"end":{"line":43,"column":3}}]},"4":{"type":"branch","line":53,"loc":{"start":{"line":53,"column":21},"end":{"line":95,"column":2}},"locations":[{"start":{"line":53,"column":21},"end":{"line":95,"column":2}}]},"5":{"type":"branch","line":63,"loc":{"start":{"line":63,"column":20},"end":{"line":65,"column":5}},"locations":[{"start":{"line":63,"column":20},"end":{"line":65,"column":5}}]},"6":{"type":"branch","line":66,"loc":{"start":{"line":66,"column":-1},"end":{"line":68,"column":29}},"locations":[{"start":{"line":66,"column":-1},"end":{"line":68,"column":29}}]},"7":{"type":"branch","line":68,"loc":{"start":{"line":68,"column":29},"end":{"line":70,"column":5}},"locations":[{"start":{"line":68,"column":29},"end":{"line":70,"column":5}}]},"8":{"type":"branch","line":71,"loc":{"start":{"line":71,"column":-1},"end":{"line":73,"column":69}},"locations":[{"start":{"line":71,"column":-1},"end":{"line":73,"column":69}}]},"9":{"type":"branch","line":73,"loc":{"start":{"line":73,"column":69},"end":{"line":90,"column":5}},"locations":[{"start":{"line":73,"column":69},"end":{"line":90,"column":5}}]},"10":{"type":"branch","line":81,"loc":{"start":{"line":81,"column":32},"end":{"line":81,"column":105}},"locations":[{"start":{"line":81,"column":32},"end":{"line":81,"column":105}}]},"11":{"type":"branch","line":91,"loc":{"start":{"line":91,"column":4},"end":{"line":94,"column":3}},"locations":[{"start":{"line":91,"column":4},"end":{"line":94,"column":3}}]},"12":{"type":"branch","line":104,"loc":{"start":{"line":104,"column":32},"end":{"line":120,"column":2}},"locations":[{"start":{"line":104,"column":32},"end":{"line":120,"column":2}}]},"13":{"type":"branch","line":108,"loc":{"start":{"line":108,"column":23},"end":{"line":108,"column":114}},"locations":[{"start":{"line":108,"column":23},"end":{"line":108,"column":114}}]},"14":{"type":"branch","line":109,"loc":{"start":{"line":109,"column":-1},"end":{"line":110,"column":56}},"locations":[{"start":{"line":109,"column":-1},"end":{"line":110,"column":56}}]},"15":{"type":"branch","line":111,"loc":{"start":{"line":111,"column":-1},"end":{"line":117,"column":4}},"locations":[{"start":{"line":111,"column":-1},"end":{"line":117,"column":4}}]},"16":{"type":"branch","line":111,"loc":{"start":{"line":111,"column":-1},"end":{"line":111,"column":15}},"locations":[{"start":{"line":111,"column":-1},"end":{"line":111,"column":15}}]},"17":{"type":"branch","line":111,"loc":{"start":{"line":111,"column":15},"end":{"line":117,"column":4}},"locations":[{"start":{"line":111,"column":15},"end":{"line":117,"column":4}}]},"18":{"type":"branch","line":117,"loc":{"start":{"line":117,"column":4},"end":{"line":119,"column":3}},"locations":[{"start":{"line":117,"column":4},"end":{"line":119,"column":3}}]},"19":{"type":"branch","line":127,"loc":{"start":{"line":127,"column":22},"end":{"line":136,"column":2}},"locations":[{"start":{"line":127,"column":22},"end":{"line":136,"column":2}}]},"20":{"type":"branch","line":130,"loc":{"start":{"line":130,"column":34},"end":{"line":130,"column":85}},"locations":[{"start":{"line":130,"column":34},"end":{"line":130,"column":85}}]},"21":{"type":"branch","line":133,"loc":{"start":{"line":133,"column":4},"end":{"line":135,"column":3}},"locations":[{"start":{"line":133,"column":4},"end":{"line":135,"column":3}}]},"22":{"type":"branch","line":143,"loc":{"start":{"line":143,"column":36},"end":{"line":177,"column":2}},"locations":[{"start":{"line":143,"column":36},"end":{"line":177,"column":2}}]},"23":{"type":"branch","line":149,"loc":{"start":{"line":149,"column":19},"end":{"line":170,"column":5}},"locations":[{"start":{"line":149,"column":19},"end":{"line":170,"column":5}}]},"24":{"type":"branch","line":167,"loc":{"start":{"line":167,"column":8},"end":{"line":169,"column":7}},"locations":[{"start":{"line":167,"column":8},"end":{"line":169,"column":7}}]},"25":{"type":"branch","line":174,"loc":{"start":{"line":174,"column":4},"end":{"line":176,"column":3}},"locations":[{"start":{"line":174,"column":4},"end":{"line":176,"column":3}}]},"26":{"type":"branch","line":183,"loc":{"start":{"line":183,"column":29},"end":{"line":194,"column":2}},"locations":[{"start":{"line":183,"column":29},"end":{"line":194,"column":2}}]},"27":{"type":"branch","line":191,"loc":{"start":{"line":191,"column":4},"end":{"line":193,"column":3}},"locations":[{"start":{"line":191,"column":4},"end":{"line":193,"column":3}}]},"28":{"type":"branch","line":202,"loc":{"start":{"line":202,"column":26},"end":{"line":217,"column":2}},"locations":[{"start":{"line":202,"column":26},"end":{"line":217,"column":2}}]},"29":{"type":"branch","line":204,"loc":{"start":{"line":204,"column":35},"end":{"line":204,"column":49}},"locations":[{"start":{"line":204,"column":35},"end":{"line":204,"column":49}}]},"30":{"type":"branch","line":205,"loc":{"start":{"line":205,"column":-1},"end":{"line":217,"column":2}},"locations":[{"start":{"line":205,"column":-1},"end":{"line":217,"column":2}}]}},"b":{"0":[2],"1":[0],"2":[1],"3":[0],"4":[4],"5":[1],"6":[3],"7":[1],"8":[2],"9":[1],"10":[0],"11":[0],"12":[6],"13":[1],"14":[5],"15":[4],"16":[2],"17":[1],"18":[3],"19":[1],"20":[0],"21":[0],"22":[2],"23":[1],"24":[0],"25":[0],"26":[1],"27":[0],"28":[8],"29":[6],"30":[2]},"fnMap":{"0":{"name":"sendVerificationEmail","decl":{"start":{"line":11,"column":37},"end":{"line":28,"column":2}},"loc":{"start":{"line":11,"column":37},"end":{"line":28,"column":2}},"line":11},"1":{"name":"confirmVerification","decl":{"start":{"line":34,"column":35},"end":{"line":44,"column":2}},"loc":{"start":{"line":34,"column":35},"end":{"line":44,"column":2}},"line":34},"2":{"name":"login","decl":{"start":{"line":53,"column":21},"end":{"line":95,"column":2}},"loc":{"start":{"line":53,"column":21},"end":{"line":95,"column":2}},"line":53},"3":{"name":"renewAccessToken","decl":{"start":{"line":104,"column":32},"end":{"line":120,"column":2}},"loc":{"start":{"line":104,"column":32},"end":{"line":120,"column":2}},"line":104},"4":{"name":"logout","decl":{"start":{"line":127,"column":22},"end":{"line":136,"column":2}},"loc":{"start":{"line":127,"column":22},"end":{"line":136,"column":2}},"line":127},"5":{"name":"requestPasswordReset","decl":{"start":{"line":143,"column":36},"end":{"line":177,"column":2}},"loc":{"start":{"line":143,"column":36},"end":{"line":177,"column":2}},"line":143},"6":{"name":"passwordReset","decl":{"start":{"line":183,"column":29},"end":{"line":194,"column":2}},"loc":{"start":{"line":183,"column":29},"end":{"line":194,"column":2}},"line":183},"7":{"name":"gateKeeper","decl":{"start":{"line":202,"column":26},"end":{"line":217,"column":2}},"loc":{"start":{"line":202,"column":26},"end":{"line":217,"column":2}},"line":202}},"f":{"0":2,"1":1,"2":4,"3":6,"4":1,"5":2,"6":1,"7":8}}
-,"/home/embruch/ragchat-api/controllers/Embeddings.js": {"path":"/home/embruch/ragchat-api/controllers/Embeddings.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":0}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":32}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":60}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":40}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":13}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":66}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":74}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":73}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":89}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":74}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":44}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":64}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":73}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":20}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":24}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":73}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":75}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":0}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":0}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":28}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":67}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":31}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":70}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":26}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":48}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":37}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":39}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":20}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":3}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":47}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":33}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":56}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":37}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":23}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":26}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":3}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":2}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":34}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":50}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":26}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":5}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":35}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":27}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":22}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":92}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":17}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":51}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":92}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":1}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":31}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":37}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":20}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":61}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":0}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":0}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":0}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":59}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":19}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":3}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":57}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":28}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":54}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":24}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":25}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":53}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":3}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":35}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":40}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":118}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":3}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":0}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":22}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":32}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":51}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":4}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":54}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":2}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":0}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":0}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":59}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":28}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":3}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":52}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":28}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":54}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":24}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":25}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":53}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":3}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":37}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":49}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":20}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":24}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":52}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":42}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":3}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":25}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":45}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":42}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":18}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":62}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":2}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":0}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":59}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":20}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":3}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":53}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":37}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":51}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":20}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":118}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":3}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":31}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":75}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":29}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":23}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":62}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":64}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":3}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":70}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":19}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":39}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":10}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":42}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":0}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":69}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":56}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":2}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":0}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":59}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":20}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":3}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":59}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":37}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":51}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":20}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":118}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":3}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":0}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":22}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":22}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":24}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":42}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":53}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":0}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":80}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":52}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":54}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":82}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":38}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":15}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":9}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":0}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":0}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":22}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":22}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":22}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":23}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":30}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":33}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":55}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":42}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":34}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":28}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":39}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":13}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":5}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":51}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":82}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":56}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":28}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":35}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":36}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":13}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":5}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":54}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":83}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":58}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":36}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":13}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":5}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":5}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":0}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":22}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":22}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":22}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":31}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":38}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":92}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":3}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":0}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":24}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":31}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":47}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":12}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":44}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":3}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":0}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":56}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":98}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":96}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":3}},"205":{"start":{"line":206,"column":0},"end":{"line":206,"column":0}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":22}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":13}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":22}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":21}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":71}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":51}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":0}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":18}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":19}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":35}},"216":{"start":{"line":217,"column":0},"end":{"line":217,"column":39}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":25}},"218":{"start":{"line":219,"column":0},"end":{"line":219,"column":51}},"219":{"start":{"line":220,"column":0},"end":{"line":220,"column":21}},"220":{"start":{"line":221,"column":0},"end":{"line":221,"column":19}},"221":{"start":{"line":222,"column":0},"end":{"line":222,"column":5}},"222":{"start":{"line":223,"column":0},"end":{"line":223,"column":2}},"223":{"start":{"line":224,"column":0},"end":{"line":224,"column":0}},"224":{"start":{"line":225,"column":0},"end":{"line":225,"column":0}},"225":{"start":{"line":226,"column":0},"end":{"line":226,"column":59}},"226":{"start":{"line":227,"column":0},"end":{"line":227,"column":58}},"227":{"start":{"line":228,"column":0},"end":{"line":228,"column":59}},"228":{"start":{"line":229,"column":0},"end":{"line":229,"column":0}},"229":{"start":{"line":230,"column":0},"end":{"line":230,"column":0}},"230":{"start":{"line":231,"column":0},"end":{"line":231,"column":59}},"231":{"start":{"line":232,"column":0},"end":{"line":232,"column":62}},"232":{"start":{"line":233,"column":0},"end":{"line":233,"column":20}},"233":{"start":{"line":234,"column":0},"end":{"line":234,"column":2}},"234":{"start":{"line":235,"column":0},"end":{"line":235,"column":48}},"235":{"start":{"line":236,"column":0},"end":{"line":236,"column":33}},"236":{"start":{"line":237,"column":0},"end":{"line":237,"column":73}},"237":{"start":{"line":238,"column":0},"end":{"line":238,"column":22}},"238":{"start":{"line":239,"column":0},"end":{"line":239,"column":24}},"239":{"start":{"line":240,"column":0},"end":{"line":240,"column":28}},"240":{"start":{"line":241,"column":0},"end":{"line":241,"column":20}},"241":{"start":{"line":242,"column":0},"end":{"line":242,"column":58}},"242":{"start":{"line":243,"column":0},"end":{"line":243,"column":28}},"243":{"start":{"line":244,"column":0},"end":{"line":244,"column":30}},"244":{"start":{"line":245,"column":0},"end":{"line":245,"column":75}},"245":{"start":{"line":246,"column":0},"end":{"line":246,"column":71}},"246":{"start":{"line":247,"column":0},"end":{"line":247,"column":12}},"247":{"start":{"line":248,"column":0},"end":{"line":248,"column":36}},"248":{"start":{"line":249,"column":0},"end":{"line":249,"column":34}},"249":{"start":{"line":250,"column":0},"end":{"line":250,"column":42}},"250":{"start":{"line":251,"column":0},"end":{"line":251,"column":32}},"251":{"start":{"line":252,"column":0},"end":{"line":252,"column":5}},"252":{"start":{"line":253,"column":0},"end":{"line":253,"column":5}},"253":{"start":{"line":254,"column":0},"end":{"line":254,"column":0}},"254":{"start":{"line":255,"column":0},"end":{"line":255,"column":20}},"255":{"start":{"line":256,"column":0},"end":{"line":256,"column":1}},"256":{"start":{"line":257,"column":0},"end":{"line":257,"column":0}},"257":{"start":{"line":258,"column":0},"end":{"line":258,"column":59}},"258":{"start":{"line":259,"column":0},"end":{"line":259,"column":23}},"259":{"start":{"line":260,"column":0},"end":{"line":260,"column":2}},"260":{"start":{"line":261,"column":0},"end":{"line":261,"column":47}},"261":{"start":{"line":262,"column":0},"end":{"line":262,"column":23}},"262":{"start":{"line":263,"column":0},"end":{"line":263,"column":73}},"263":{"start":{"line":264,"column":0},"end":{"line":264,"column":67}},"264":{"start":{"line":265,"column":0},"end":{"line":265,"column":72}},"265":{"start":{"line":266,"column":0},"end":{"line":266,"column":48}},"266":{"start":{"line":267,"column":0},"end":{"line":267,"column":16}},"267":{"start":{"line":268,"column":0},"end":{"line":268,"column":5}},"268":{"start":{"line":269,"column":0},"end":{"line":269,"column":0}},"269":{"start":{"line":270,"column":0},"end":{"line":270,"column":23}},"270":{"start":{"line":271,"column":0},"end":{"line":271,"column":29}},"271":{"start":{"line":272,"column":0},"end":{"line":272,"column":27}},"272":{"start":{"line":273,"column":0},"end":{"line":273,"column":20}},"273":{"start":{"line":274,"column":0},"end":{"line":274,"column":36}},"274":{"start":{"line":275,"column":0},"end":{"line":275,"column":21}},"275":{"start":{"line":276,"column":0},"end":{"line":276,"column":40}},"276":{"start":{"line":277,"column":0},"end":{"line":277,"column":37}},"277":{"start":{"line":278,"column":0},"end":{"line":278,"column":74}},"278":{"start":{"line":279,"column":0},"end":{"line":279,"column":22}},"279":{"start":{"line":280,"column":0},"end":{"line":280,"column":37}},"280":{"start":{"line":281,"column":0},"end":{"line":281,"column":5}},"281":{"start":{"line":282,"column":0},"end":{"line":282,"column":25}},"282":{"start":{"line":283,"column":0},"end":{"line":283,"column":2}},"283":{"start":{"line":284,"column":0},"end":{"line":284,"column":0}},"284":{"start":{"line":285,"column":0},"end":{"line":285,"column":0}},"285":{"start":{"line":286,"column":0},"end":{"line":286,"column":59}},"286":{"start":{"line":287,"column":0},"end":{"line":287,"column":33}},"287":{"start":{"line":288,"column":0},"end":{"line":288,"column":2}},"288":{"start":{"line":289,"column":0},"end":{"line":289,"column":48}},"289":{"start":{"line":290,"column":0},"end":{"line":290,"column":16}},"290":{"start":{"line":291,"column":0},"end":{"line":291,"column":54}},"291":{"start":{"line":292,"column":0},"end":{"line":292,"column":7}},"292":{"start":{"line":293,"column":0},"end":{"line":293,"column":41}},"293":{"start":{"line":294,"column":0},"end":{"line":294,"column":16}},"294":{"start":{"line":295,"column":0},"end":{"line":295,"column":19}},"295":{"start":{"line":296,"column":0},"end":{"line":296,"column":17}},"296":{"start":{"line":297,"column":0},"end":{"line":297,"column":3}},"297":{"start":{"line":298,"column":0},"end":{"line":298,"column":2}},"298":{"start":{"line":299,"column":0},"end":{"line":299,"column":0}},"299":{"start":{"line":300,"column":0},"end":{"line":300,"column":59}},"300":{"start":{"line":301,"column":0},"end":{"line":301,"column":44}},"301":{"start":{"line":302,"column":0},"end":{"line":302,"column":2}},"302":{"start":{"line":303,"column":0},"end":{"line":303,"column":50}},"303":{"start":{"line":304,"column":0},"end":{"line":304,"column":47}},"304":{"start":{"line":305,"column":0},"end":{"line":305,"column":37}},"305":{"start":{"line":306,"column":0},"end":{"line":306,"column":17}},"306":{"start":{"line":307,"column":0},"end":{"line":307,"column":3}},"307":{"start":{"line":308,"column":0},"end":{"line":308,"column":27}},"308":{"start":{"line":309,"column":0},"end":{"line":309,"column":53}},"309":{"start":{"line":310,"column":0},"end":{"line":310,"column":40}},"310":{"start":{"line":311,"column":0},"end":{"line":311,"column":98}},"311":{"start":{"line":312,"column":0},"end":{"line":312,"column":24}},"312":{"start":{"line":313,"column":0},"end":{"line":313,"column":87}},"313":{"start":{"line":314,"column":0},"end":{"line":314,"column":3}},"314":{"start":{"line":315,"column":0},"end":{"line":315,"column":41}},"315":{"start":{"line":316,"column":0},"end":{"line":316,"column":15}},"316":{"start":{"line":317,"column":0},"end":{"line":317,"column":2}},"317":{"start":{"line":318,"column":0},"end":{"line":318,"column":0}},"318":{"start":{"line":319,"column":0},"end":{"line":319,"column":0}},"319":{"start":{"line":320,"column":0},"end":{"line":320,"column":59}},"320":{"start":{"line":321,"column":0},"end":{"line":321,"column":29}},"321":{"start":{"line":322,"column":0},"end":{"line":322,"column":2}},"322":{"start":{"line":323,"column":0},"end":{"line":323,"column":45}},"323":{"start":{"line":324,"column":0},"end":{"line":324,"column":22}},"324":{"start":{"line":325,"column":0},"end":{"line":325,"column":7}},"325":{"start":{"line":326,"column":0},"end":{"line":326,"column":42}},"326":{"start":{"line":327,"column":0},"end":{"line":327,"column":49}},"327":{"start":{"line":328,"column":0},"end":{"line":328,"column":7}},"328":{"start":{"line":329,"column":0},"end":{"line":329,"column":19}},"329":{"start":{"line":330,"column":0},"end":{"line":330,"column":64}},"330":{"start":{"line":331,"column":0},"end":{"line":331,"column":16}},"331":{"start":{"line":332,"column":0},"end":{"line":332,"column":3}},"332":{"start":{"line":333,"column":0},"end":{"line":333,"column":2}},"333":{"start":{"line":334,"column":0},"end":{"line":334,"column":0}},"334":{"start":{"line":335,"column":0},"end":{"line":335,"column":0}},"335":{"start":{"line":336,"column":0},"end":{"line":336,"column":59}},"336":{"start":{"line":337,"column":0},"end":{"line":337,"column":31}},"337":{"start":{"line":338,"column":0},"end":{"line":338,"column":2}},"338":{"start":{"line":339,"column":0},"end":{"line":339,"column":44}},"339":{"start":{"line":340,"column":0},"end":{"line":340,"column":0}},"340":{"start":{"line":341,"column":0},"end":{"line":341,"column":73}},"341":{"start":{"line":342,"column":0},"end":{"line":342,"column":46}},"342":{"start":{"line":343,"column":0},"end":{"line":343,"column":37}},"343":{"start":{"line":344,"column":0},"end":{"line":344,"column":18}},"344":{"start":{"line":345,"column":0},"end":{"line":345,"column":5}},"345":{"start":{"line":346,"column":0},"end":{"line":346,"column":56}},"346":{"start":{"line":347,"column":0},"end":{"line":347,"column":61}},"347":{"start":{"line":348,"column":0},"end":{"line":348,"column":45}},"348":{"start":{"line":349,"column":0},"end":{"line":349,"column":52}},"349":{"start":{"line":350,"column":0},"end":{"line":350,"column":52}},"350":{"start":{"line":351,"column":0},"end":{"line":351,"column":5}},"351":{"start":{"line":352,"column":0},"end":{"line":352,"column":4}},"352":{"start":{"line":353,"column":0},"end":{"line":353,"column":29}},"353":{"start":{"line":354,"column":0},"end":{"line":354,"column":2}},"354":{"start":{"line":355,"column":0},"end":{"line":355,"column":0}},"355":{"start":{"line":356,"column":0},"end":{"line":356,"column":59}},"356":{"start":{"line":357,"column":0},"end":{"line":357,"column":24}},"357":{"start":{"line":358,"column":0},"end":{"line":358,"column":2}},"358":{"start":{"line":359,"column":0},"end":{"line":359,"column":48}},"359":{"start":{"line":360,"column":0},"end":{"line":360,"column":37}},"360":{"start":{"line":361,"column":0},"end":{"line":361,"column":9}},"361":{"start":{"line":362,"column":0},"end":{"line":362,"column":5}},"362":{"start":{"line":363,"column":0},"end":{"line":363,"column":56}},"363":{"start":{"line":364,"column":0},"end":{"line":364,"column":61}},"364":{"start":{"line":365,"column":0},"end":{"line":365,"column":45}},"365":{"start":{"line":366,"column":0},"end":{"line":366,"column":52}},"366":{"start":{"line":367,"column":0},"end":{"line":367,"column":52}},"367":{"start":{"line":368,"column":0},"end":{"line":368,"column":5}},"368":{"start":{"line":369,"column":0},"end":{"line":369,"column":4}},"369":{"start":{"line":370,"column":0},"end":{"line":370,"column":29}},"370":{"start":{"line":371,"column":0},"end":{"line":371,"column":2}},"371":{"start":{"line":372,"column":0},"end":{"line":372,"column":0}},"372":{"start":{"line":373,"column":0},"end":{"line":373,"column":0}},"373":{"start":{"line":374,"column":0},"end":{"line":374,"column":59}},"374":{"start":{"line":375,"column":0},"end":{"line":375,"column":18}},"375":{"start":{"line":376,"column":0},"end":{"line":376,"column":2}},"376":{"start":{"line":377,"column":0},"end":{"line":377,"column":41}},"377":{"start":{"line":378,"column":0},"end":{"line":378,"column":16}},"378":{"start":{"line":379,"column":0},"end":{"line":379,"column":56}},"379":{"start":{"line":380,"column":0},"end":{"line":380,"column":53}},"380":{"start":{"line":381,"column":0},"end":{"line":381,"column":0}},"381":{"start":{"line":382,"column":0},"end":{"line":382,"column":49}},"382":{"start":{"line":383,"column":0},"end":{"line":383,"column":27}},"383":{"start":{"line":384,"column":0},"end":{"line":384,"column":71}},"384":{"start":{"line":385,"column":0},"end":{"line":385,"column":5}},"385":{"start":{"line":386,"column":0},"end":{"line":386,"column":0}},"386":{"start":{"line":387,"column":0},"end":{"line":387,"column":25}},"387":{"start":{"line":388,"column":0},"end":{"line":388,"column":36}},"388":{"start":{"line":389,"column":0},"end":{"line":389,"column":11}},"389":{"start":{"line":390,"column":0},"end":{"line":390,"column":15}},"390":{"start":{"line":391,"column":0},"end":{"line":391,"column":20}},"391":{"start":{"line":392,"column":0},"end":{"line":392,"column":4}},"392":{"start":{"line":393,"column":0},"end":{"line":393,"column":2}},"393":{"start":{"line":394,"column":0},"end":{"line":394,"column":0}},"394":{"start":{"line":395,"column":0},"end":{"line":395,"column":0}},"395":{"start":{"line":396,"column":0},"end":{"line":396,"column":59}},"396":{"start":{"line":397,"column":0},"end":{"line":397,"column":33}},"397":{"start":{"line":398,"column":0},"end":{"line":398,"column":3}},"398":{"start":{"line":399,"column":0},"end":{"line":399,"column":70}},"399":{"start":{"line":400,"column":0},"end":{"line":400,"column":0}},"400":{"start":{"line":401,"column":0},"end":{"line":401,"column":37}},"401":{"start":{"line":402,"column":0},"end":{"line":402,"column":51}},"402":{"start":{"line":403,"column":0},"end":{"line":403,"column":20}},"403":{"start":{"line":404,"column":0},"end":{"line":404,"column":118}},"404":{"start":{"line":405,"column":0},"end":{"line":405,"column":3}},"405":{"start":{"line":406,"column":0},"end":{"line":406,"column":0}},"406":{"start":{"line":407,"column":0},"end":{"line":407,"column":27}},"407":{"start":{"line":408,"column":0},"end":{"line":408,"column":37}},"408":{"start":{"line":409,"column":0},"end":{"line":409,"column":61}},"409":{"start":{"line":410,"column":0},"end":{"line":410,"column":4}},"410":{"start":{"line":411,"column":0},"end":{"line":411,"column":14}},"411":{"start":{"line":412,"column":0},"end":{"line":412,"column":2}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":0,"50":0,"51":0,"52":1,"53":1,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":1,"106":1,"107":1,"108":1,"109":1,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":1,"132":1,"133":1,"134":1,"135":1,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":1,"224":1,"225":1,"226":1,"227":1,"228":1,"229":1,"230":1,"231":1,"232":1,"233":1,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":1,"257":1,"258":1,"259":1,"260":1,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":1,"284":1,"285":1,"286":1,"287":1,"288":1,"289":0,"290":0,"291":0,"292":0,"293":0,"294":0,"295":0,"296":0,"297":0,"298":1,"299":1,"300":1,"301":1,"302":1,"303":0,"304":0,"305":0,"306":0,"307":0,"308":0,"309":0,"310":0,"311":0,"312":0,"313":0,"314":0,"315":0,"316":0,"317":1,"318":1,"319":1,"320":1,"321":1,"322":1,"323":0,"324":0,"325":0,"326":0,"327":0,"328":0,"329":0,"330":0,"331":0,"332":0,"333":1,"334":1,"335":1,"336":1,"337":1,"338":1,"339":0,"340":0,"341":0,"342":0,"343":0,"344":0,"345":0,"346":0,"347":0,"348":0,"349":0,"350":0,"351":0,"352":0,"353":0,"354":1,"355":1,"356":1,"357":1,"358":1,"359":0,"360":0,"361":0,"362":0,"363":0,"364":0,"365":0,"366":0,"367":0,"368":0,"369":0,"370":0,"371":1,"372":1,"373":1,"374":1,"375":1,"376":1,"377":0,"378":0,"379":0,"380":0,"381":0,"382":0,"383":0,"384":0,"385":0,"386":0,"387":0,"388":0,"389":0,"390":0,"391":0,"392":0,"393":1,"394":1,"395":1,"396":1,"397":1,"398":1,"399":0,"400":0,"401":0,"402":0,"403":0,"404":0,"405":0,"406":0,"407":0,"408":0,"409":0,"410":0,"411":0},"branchMap":{"0":{"type":"branch","line":49,"loc":{"start":{"line":49,"column":2},"end":{"line":52,"column":1}},"locations":[{"start":{"line":49,"column":2},"end":{"line":52,"column":1}}]}},"b":{"0":[0]},"fnMap":{"0":{"name":"removeVectorDb","decl":{"start":{"line":63,"column":30},"end":{"line":80,"column":2}},"loc":{"start":{"line":63,"column":30},"end":{"line":80,"column":2}},"line":63},"1":{"name":"getStatus","decl":{"start":{"line":86,"column":25},"end":{"line":105,"column":2}},"loc":{"start":{"line":86,"column":25},"end":{"line":105,"column":2}},"line":86},"2":{"name":"createEmbeddings","decl":{"start":{"line":110,"column":32},"end":{"line":131,"column":2}},"loc":{"start":{"line":110,"column":32},"end":{"line":131,"column":2}},"line":110},"3":{"name":"updateEmbeddings","decl":{"start":{"line":136,"column":32},"end":{"line":223,"column":2}},"loc":{"start":{"line":136,"column":32},"end":{"line":223,"column":2}},"line":136},"4":{"name":"readDirectoryRecursive","decl":{"start":{"line":235,"column":0},"end":{"line":256,"column":1}},"loc":{"start":{"line":235,"column":0},"end":{"line":256,"column":1}},"line":235},"5":{"name":"getCurrentRAGFiles","decl":{"start":{"line":261,"column":34},"end":{"line":283,"column":2}},"loc":{"start":{"line":261,"column":34},"end":{"line":283,"column":2}},"line":261},"6":{"name":"isVectorDbAvailable","decl":{"start":{"line":289,"column":35},"end":{"line":298,"column":2}},"loc":{"start":{"line":289,"column":35},"end":{"line":298,"column":2}},"line":289},"7":{"name":"isCollectionAvailable","decl":{"start":{"line":303,"column":37},"end":{"line":317,"column":2}},"loc":{"start":{"line":303,"column":37},"end":{"line":317,"column":2}},"line":303},"8":{"name":"createCollection","decl":{"start":{"line":323,"column":32},"end":{"line":333,"column":2}},"loc":{"start":{"line":323,"column":32},"end":{"line":333,"column":2}},"line":323},"9":{"name":"directoryLoader","decl":{"start":{"line":339,"column":31},"end":{"line":354,"column":2}},"loc":{"start":{"line":339,"column":31},"end":{"line":354,"column":2}},"line":339},"10":{"name":"fileLoader","decl":{"start":{"line":359,"column":26},"end":{"line":371,"column":2}},"loc":{"start":{"line":359,"column":26},"end":{"line":371,"column":2}},"line":359},"11":{"name":"embedder","decl":{"start":{"line":377,"column":24},"end":{"line":393,"column":2}},"loc":{"start":{"line":377,"column":24},"end":{"line":393,"column":2}},"line":377},"12":{"name":"deleteEmbeddingsByFileNames","decl":{"start":{"line":399,"column":43},"end":{"line":412,"column":2}},"loc":{"start":{"line":399,"column":43},"end":{"line":412,"column":2}},"line":399}},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0}}
-,"/home/embruch/ragchat-api/controllers/User.js": {"path":"/home/embruch/ragchat-api/controllers/User.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":37}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":67}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":90}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":0}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":59}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":13}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":3}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":53}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":7}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":25}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":86}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":53}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":59}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":11}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":15}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":19}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":16}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":4}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":2}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":0}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":0}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":0}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":59}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":20}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":3}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":62}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":7}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":35}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":75}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":24}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":21}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":21}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":72}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":5}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":56}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":29}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":11}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":19}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":16}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":3}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":2}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":3,"9":3,"10":3,"11":1,"12":1,"13":1,"14":1,"15":3,"16":2,"17":3,"18":3,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":5,"27":5,"28":5,"29":5,"30":5,"31":2,"32":2,"33":2,"34":3,"35":3,"36":3,"37":5,"38":0,"39":0,"40":5},"branchMap":{"0":{"type":"branch","line":8,"loc":{"start":{"line":8,"column":26},"end":{"line":19,"column":2}},"locations":[{"start":{"line":8,"column":26},"end":{"line":19,"column":2}}]},"1":{"type":"branch","line":12,"loc":{"start":{"line":12,"column":-1},"end":{"line":16,"column":4}},"locations":[{"start":{"line":12,"column":-1},"end":{"line":16,"column":4}}]},"2":{"type":"branch","line":16,"loc":{"start":{"line":16,"column":4},"end":{"line":18,"column":3}},"locations":[{"start":{"line":16,"column":4},"end":{"line":18,"column":3}}]},"3":{"type":"branch","line":26,"loc":{"start":{"line":26,"column":35},"end":{"line":41,"column":2}},"locations":[{"start":{"line":26,"column":35},"end":{"line":41,"column":2}}]},"4":{"type":"branch","line":31,"loc":{"start":{"line":31,"column":20},"end":{"line":38,"column":4}},"locations":[{"start":{"line":31,"column":20},"end":{"line":38,"column":4}}]},"5":{"type":"branch","line":31,"loc":{"start":{"line":31,"column":20},"end":{"line":34,"column":5}},"locations":[{"start":{"line":31,"column":20},"end":{"line":34,"column":5}}]},"6":{"type":"branch","line":35,"loc":{"start":{"line":35,"column":-1},"end":{"line":38,"column":4}},"locations":[{"start":{"line":35,"column":-1},"end":{"line":38,"column":4}}]},"7":{"type":"branch","line":38,"loc":{"start":{"line":38,"column":4},"end":{"line":40,"column":3}},"locations":[{"start":{"line":38,"column":4},"end":{"line":40,"column":3}}]}},"b":{"0":[3],"1":[1],"2":[2],"3":[5],"4":[4],"5":[2],"6":[3],"7":[0]},"fnMap":{"0":{"name":"createUser","decl":{"start":{"line":8,"column":26},"end":{"line":19,"column":2}},"loc":{"start":{"line":8,"column":26},"end":{"line":19,"column":2}},"line":8},"1":{"name":"prefetchUserByEmail","decl":{"start":{"line":26,"column":35},"end":{"line":41,"column":2}},"loc":{"start":{"line":26,"column":35},"end":{"line":41,"column":2}},"line":26}},"f":{"0":3,"1":5}}
-,"/home/embruch/ragchat-api/models/Chat.js": {"path":"/home/embruch/ragchat-api/models/Chat.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":41}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":64}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":0}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":51}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":14}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":19}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":29}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":15}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":62}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":2}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":0}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":43}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":30}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":3}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":12}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":19}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":21}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":20}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":6}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":19}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":27}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":6}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":16}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":34}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":26}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":17}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":6}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":16}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":34}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":26}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":17}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":5}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":4}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":6}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":2}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":0}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":45}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":0}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":0}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":48}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":67}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":11}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":46}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":20}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":19}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":42}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":10}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":42}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":3}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":10}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":9}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":3}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":0}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":0}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":0}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":44}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":0}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":50}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":0}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":53}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":3}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":51}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":76}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":3}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":99}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":0}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":3}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":37}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":27}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":3}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":56}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":51}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":61}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":39}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":5}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":51}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":2}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":0}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":41}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":1,"53":1,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":1,"79":1},"branchMap":{},"b":{},"fnMap":{"0":{"name":"ChatSchema.methods.getConfidentialFields","decl":{"start":{"line":72,"column":43},"end":{"line":78,"column":2}},"loc":{"start":{"line":72,"column":43},"end":{"line":78,"column":2}},"line":72}},"f":{"0":0}}
-,"/home/embruch/ragchat-api/models/User.js": {"path":"/home/embruch/ragchat-api/models/User.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":41}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":28}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":64}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":0}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":0}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":51}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":14}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":19}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":31}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":15}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":62}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":2}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":0}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":43}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":30}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":3}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":15}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":19}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":23}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":6}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":11}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":19}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":19}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":6}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":12}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":19}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":21}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":21}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":22}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":19}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":6}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":15}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":19}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":24}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":19}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":6}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":25}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":19}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":29}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":6}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":15}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":20}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":25}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":20}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":6}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":11}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":19}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":20}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":16}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":6}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":19}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":19}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":29}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":19}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":6}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":16}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":34}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":26}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":17}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":6}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":16}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":34}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":26}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":17}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":5}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":4}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":6}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":2}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":0}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":45}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":11}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":51}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":109}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":6}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":0}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":48}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":67}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":11}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":46}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":20}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":19}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":42}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":10}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":42}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":3}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":0}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":18}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":36}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":97}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":35}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":3}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":10}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":9}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":3}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":0}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":0}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":0}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":44}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":86}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":51}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":54}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":4}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":0}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":50}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":103}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":45}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":55}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":4}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":0}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":53}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":17}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":46}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":63}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":5}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":0}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":0}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":3}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":51}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":76}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":3}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":99}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":0}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":3}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":37}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":27}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":3}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":56}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":51}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":61}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":39}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":5}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":51}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":2}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":0}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":41}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":1,"95":1,"96":1,"97":1,"98":1,"99":1,"100":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1,"108":1,"109":1,"110":1,"111":1,"112":1,"113":1,"114":1,"115":1,"116":1,"117":1,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1,"124":1,"125":1,"126":1,"127":1,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":1,"135":1},"branchMap":{},"b":{},"fnMap":{"0":{"name":"UserSchema.methods.getConfidentialFields","decl":{"start":{"line":128,"column":43},"end":{"line":134,"column":2}},"loc":{"start":{"line":128,"column":43},"end":{"line":134,"column":2}},"line":128}},"f":{"0":0}}
-,"/home/embruch/ragchat-api/routes/ai.js": {"path":"/home/embruch/ragchat-api/routes/ai.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":33}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":137}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":44}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":128}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":57}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":52}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":61}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":0}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":24}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":0}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":3}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":13}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":28}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":3}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":60}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":3}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":33}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":0}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":3}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":13}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":31}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":22}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":3}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":66}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":99}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":3}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":51}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":3}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":80}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":0}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":0}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":3}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":12}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":34}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":3}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":66}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":67}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":3}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":42}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":3}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":77}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":0}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":0}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":3}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":16}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":78}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":2}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":65}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":63}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":3}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":50}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":3}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":97}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":0}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":0}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":3}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":15}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":47}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":3}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":34}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":65}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":63}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":3}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":46}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":3}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":98}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":0}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":0}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":3}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":7}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":36}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":37}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":80}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":88}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":99}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":3}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":34}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":65}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":63}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":80}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":82}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":3}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":62}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":3}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":98}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":0}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":0}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":3}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":20}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":3}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":65}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":87}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":3}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":50}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":0}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":22}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1},"branchMap":{},"b":{},"fnMap":{},"f":{}}
-,"/home/embruch/ragchat-api/routes/auth.js": {"path":"/home/embruch/ragchat-api/routes/auth.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":33}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":154}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":61}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":57}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":169}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":88}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":0}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":24}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":0}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":3}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":23}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":2}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":55}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":2}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":88}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":3}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":28}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":38}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":23}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":2}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":0}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":0}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":3}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":23}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":2}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":59}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":54}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":2}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":55}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":3}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":29}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":38}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":22}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":26}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":21}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":2}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":0}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":0}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":3}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":8}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":47}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":40}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":2}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":56}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":51}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":2}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":50}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":3}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":21}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":24}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":7}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":2}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":0}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":0}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":3}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":12}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":74}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":3}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":78}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":2}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":43}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":3}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":15}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":18}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":2}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":0}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":3}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":9}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":87}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":2}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":46}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":3}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":18}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":8}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":2}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":0}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":0}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":3}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":25}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":2}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":62}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":2}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":46}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":3}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":30}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":39}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":22}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":2}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":0}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":0}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":3}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":17}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":2}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":71}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":59}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":59}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":3}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":54}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":3}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":31}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":39}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":22}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":15}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":2}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":0}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":0}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":0}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":22}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":1,"98":1,"99":1,"100":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1,"108":1},"branchMap":{},"b":{},"fnMap":{},"f":{}}
-,"/home/embruch/ragchat-api/routes/embeddings.js": {"path":"/home/embruch/ragchat-api/routes/embeddings.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":33}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":91}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":61}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":52}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":0}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":24}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":0}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":3}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":19}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":41}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":2}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":65}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":2}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":56}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":3}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":66}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":0}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":3}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":19}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":45}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":38}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":2}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":65}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":2}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":83}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":3}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":58}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":0}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":20}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":3}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":20}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":43}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":43}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":2}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":65}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":2}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":69}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":3}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":67}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":0}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":0}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":22}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1},"branchMap":{},"b":{},"fnMap":{},"f":{}}
-,"/home/embruch/ragchat-api/routes/users.js": {"path":"/home/embruch/ragchat-api/routes/users.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":33}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":52}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":63}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":64}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":57}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":0}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":0}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":24}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":0}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":3}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":13}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":2}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":70}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":57}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":70}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":67}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":92}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":2}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":85}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":3}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":80}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":0}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":0}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":22}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1},"branchMap":{},"b":{},"fnMap":{},"f":{}}
-,"/home/embruch/ragchat-api/utils/handleAI.js": {"path":"/home/embruch/ragchat-api/utils/handleAI.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":33}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":32}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":69}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":98}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":80}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":87}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":79}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":66}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":67}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":43}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":29}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":0}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":0}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":42}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":67}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":0}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":59}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":35}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":3}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":40}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":7}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":55}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":19}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":17}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":3}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":2}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":0}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":59}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":44}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":3}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":40}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":7}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":31}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":19}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":16}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":3}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":2}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":0}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":0}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":59}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":12}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":3}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":44}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":7}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":40}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":19}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":16}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":3}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":2}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":0}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":59}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":16}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":3}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":48}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":7}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":55}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":19}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":16}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":3}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":2}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":0}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":0}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":59}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":15}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":3}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":47}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":7}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":42}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":19}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":16}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":3}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":2}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":0}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":0}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":59}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":28}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":3}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":54}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":7}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":17}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":32}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":41}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":19}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":56}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":7}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":22}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":91}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":46}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":43}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":39}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":56}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":27}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":19}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":16}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":3}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":2}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":0}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":0}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":59}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":16}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":3}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":47}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":39}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":101}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":90}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":0}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":36}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":51}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":20}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":118}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":3}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":0}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":22}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":30}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":39}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":26}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":54}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":5}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":0}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":22}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":28}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":100}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":141}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":22}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":52}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":62}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":44}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":24}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":52}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":5}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":67}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":72}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":8}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":14}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":39}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":5}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":0}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":0}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":22}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":26}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":22}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":47}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":54}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":5}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":15}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":36}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":6}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":44}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":24}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":5}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":22}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":53}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":8}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":23}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":24}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":5}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":22}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":33}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":22}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":27}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":67}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":42}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":32}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":5}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":0}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":29}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":60}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":45}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":26}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":5}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":0}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":65}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":58}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":64}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":59}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":68}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":21}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":42}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":72}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":62}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":58}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":51}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":10}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":34}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":3}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":0}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":45}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":0}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":35}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":48}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":37}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":69}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":5}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":0}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":22}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":41}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":30}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":0}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":0}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":51}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":2}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":1,"27":1,"28":1,"29":1,"30":1,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":1,"50":1,"51":1,"52":1,"53":1,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":1,"97":1,"98":1,"99":1,"100":1,"101":1,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0},"branchMap":{},"b":{},"fnMap":{"0":{"name":"aiIsRunning","decl":{"start":{"line":20,"column":27},"end":{"line":26,"column":2}},"loc":{"start":{"line":20,"column":27},"end":{"line":26,"column":2}},"line":20},"1":{"name":"aiGetModels","decl":{"start":{"line":31,"column":27},"end":{"line":37,"column":2}},"loc":{"start":{"line":31,"column":27},"end":{"line":37,"column":2}},"line":31},"2":{"name":"aiGetModel","decl":{"start":{"line":43,"column":26},"end":{"line":49,"column":2}},"loc":{"start":{"line":43,"column":26},"end":{"line":49,"column":2}},"line":43},"3":{"name":"aiInstallModel","decl":{"start":{"line":54,"column":30},"end":{"line":60,"column":2}},"loc":{"start":{"line":54,"column":30},"end":{"line":60,"column":2}},"line":54},"4":{"name":"aiDeleteModel","decl":{"start":{"line":66,"column":29},"end":{"line":72,"column":2}},"loc":{"start":{"line":66,"column":29},"end":{"line":72,"column":2}},"line":66},"5":{"name":"summarizeText","decl":{"start":{"line":78,"column":29},"end":{"line":96,"column":2}},"loc":{"start":{"line":78,"column":29},"end":{"line":96,"column":2}},"line":78},"6":{"name":"chat","decl":{"start":{"line":102,"column":20},"end":{"line":201,"column":2}},"loc":{"start":{"line":102,"column":20},"end":{"line":201,"column":2}},"line":102}},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0}}
-,"/home/embruch/ragchat-api/utils/handleDB.js": {"path":"/home/embruch/ragchat-api/utils/handleDB.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":26}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":37}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":75}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":0}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":0}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":3}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":37}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":2}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":49}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":3}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":41}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":20}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":46}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":24}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":7}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":34}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":38}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":14}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":44}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":21}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":45}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":0}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":38}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":60}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":7}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":0}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":41}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":38}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":7}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":24}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":19}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":25}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":20}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":3}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":2}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":0}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":0}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":3}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":37}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":3}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":53}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":72}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":55}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":3}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":38}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":3}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":52}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":7}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":36}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":19}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":16}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":3}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":2}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":0}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":0}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":3}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":18}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":2}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":84}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":115}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":108}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":2}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":48}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":3}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":85}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":7}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":20}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":24}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":54}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":12}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":75}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":5}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":23}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":19}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":16}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":3}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":2}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":0}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":3}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":24}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":2}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":84}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":115}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":108}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":2}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":49}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":3}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":83}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":7}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":21}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":24}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":52}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":12}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":73}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":5}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":24}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":19}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":16}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":3}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":2}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":0}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":3}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":20}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":2}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":76}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":2}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":60}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":3}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":51}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":7}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":54}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":51}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":45}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":19}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":16}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":3}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":2}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":0}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":3}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":38}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":2}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":84}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":80}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":85}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":2}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":48}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":3}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":61}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":7}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":45}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":19}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":16}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":3}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":2}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":0}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":0}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":3}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":38}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":2}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":84}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":115}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":85}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":2}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":48}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":3}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":70}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":7}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":47}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":19}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":16}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":3}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":2}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":0}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":3}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":54}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":2}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":59}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":91}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":2}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":51}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":3}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":55}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":22}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":16}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":40}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":11}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":3}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":7}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":24}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":61}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":41}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":73}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":114}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":25}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":86}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":19}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":16}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":3}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":2}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1,"108":1,"109":1,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1,"124":1,"125":1,"126":1,"127":1,"128":1,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":1,"136":1,"137":1,"138":1,"139":1,"140":1,"141":1,"142":1,"143":1,"144":1,"145":1,"146":1,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":1,"154":1,"155":1,"156":1,"157":1,"158":1,"159":1,"160":1,"161":1,"162":1,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0},"branchMap":{},"b":{},"fnMap":{"0":{"name":"dbConnection","decl":{"start":{"line":12,"column":28},"end":{"line":36,"column":2}},"loc":{"start":{"line":12,"column":28},"end":{"line":36,"column":2}},"line":12},"1":{"name":"createRecord","decl":{"start":{"line":48,"column":28},"end":{"line":54,"column":2}},"loc":{"start":{"line":48,"column":28},"end":{"line":54,"column":2}},"line":48},"2":{"name":"findOneRecord","decl":{"start":{"line":66,"column":29},"end":{"line":78,"column":2}},"loc":{"start":{"line":66,"column":29},"end":{"line":78,"column":2}},"line":66},"3":{"name":"findRecords","decl":{"start":{"line":89,"column":27},"end":{"line":101,"column":2}},"loc":{"start":{"line":89,"column":27},"end":{"line":101,"column":2}},"line":89},"4":{"name":"updateOneRecord","decl":{"start":{"line":110,"column":31},"end":{"line":118,"column":2}},"loc":{"start":{"line":110,"column":31},"end":{"line":118,"column":2}},"line":110},"5":{"name":"findByIdAndUpdate","decl":{"start":{"line":129,"column":33},"end":{"line":135,"column":2}},"loc":{"start":{"line":129,"column":33},"end":{"line":135,"column":2}},"line":129},"6":{"name":"findOneAndUpdate","decl":{"start":{"line":147,"column":32},"end":{"line":153,"column":2}},"loc":{"start":{"line":147,"column":32},"end":{"line":153,"column":2}},"line":147},"7":{"name":"extendChat","decl":{"start":{"line":163,"column":26},"end":{"line":180,"column":2}},"loc":{"start":{"line":163,"column":26},"end":{"line":180,"column":2}},"line":163}},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0}}
-,"/home/embruch/ragchat-api/utils/handleErrors.js": {"path":"/home/embruch/ragchat-api/utils/handleErrors.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":3}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":83}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":3}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":40}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":22}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":25}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":27}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":73}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":41}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":52}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":3}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":1}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":0}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":3}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":39}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":3}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":44}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":23}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":23}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":27}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":29}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":27}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":22}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":17}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":5}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":20}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":14}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":17}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":5}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":3}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":2}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":0}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":3}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":44}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":3}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":38}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":23}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":32}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":29}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":32}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":50}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":58}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":9}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":26}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":14}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":71}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":24}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":8}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":5}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":27}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":22}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":43}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":50}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":32}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":32}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":53}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":43}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":54}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":0}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":47}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":59}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":34}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":65}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":50}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":45}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":29}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":66}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":54}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":47}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":37}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":85}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":13}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":9}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":45}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":76}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":9}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":26}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":14}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":71}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":24}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":8}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":5}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":20}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":14}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":33}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":17}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":32}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":85}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":16}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":24}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":44}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":7}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":5}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":3}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":2}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":0}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":3}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":55}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":3}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":59}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":64}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":25}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":14}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":2}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":0}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":3}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":58}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":3}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":66}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":0}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":66}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":79}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":0}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":45}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":25}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":60}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":2}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":28,"6":28,"7":28,"8":28,"9":28,"10":28,"11":28,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":8,"19":8,"20":8,"21":8,"22":8,"23":8,"24":5,"25":5,"26":8,"27":8,"28":3,"29":3,"30":8,"31":8,"32":1,"33":1,"34":1,"35":1,"36":1,"37":28,"38":28,"39":28,"40":2,"41":2,"42":2,"43":2,"44":2,"45":2,"46":2,"47":2,"48":2,"49":2,"50":28,"51":28,"52":20,"53":20,"54":20,"55":20,"56":20,"57":48,"58":48,"59":48,"60":48,"61":48,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":48,"75":48,"76":20,"77":20,"78":20,"79":20,"80":20,"81":20,"82":20,"83":28,"84":28,"85":6,"86":6,"87":0,"88":0,"89":6,"90":6,"91":6,"92":6,"93":6,"94":28,"95":28,"96":1,"97":1,"98":1,"99":1,"100":1,"101":0,"102":0,"103":0,"104":0,"105":1,"106":1,"107":1,"108":1,"109":1,"110":28,"111":28,"112":28,"113":28,"114":28,"115":28,"116":28,"117":28},"branchMap":{"0":{"type":"branch","line":5,"loc":{"start":{"line":5,"column":2},"end":{"line":12,"column":3}},"locations":[{"start":{"line":5,"column":2},"end":{"line":12,"column":3}}]},"1":{"type":"branch","line":8,"loc":{"start":{"line":8,"column":39},"end":{"line":8,"column":72}},"locations":[{"start":{"line":8,"column":39},"end":{"line":8,"column":72}}]},"2":{"type":"branch","line":18,"loc":{"start":{"line":18,"column":32},"end":{"line":32,"column":2}},"locations":[{"start":{"line":18,"column":32},"end":{"line":32,"column":2}}]},"3":{"type":"branch","line":21,"loc":{"start":{"line":21,"column":4},"end":{"line":21,"column":27}},"locations":[{"start":{"line":21,"column":4},"end":{"line":21,"column":27}}]},"4":{"type":"branch","line":22,"loc":{"start":{"line":22,"column":4},"end":{"line":22,"column":29}},"locations":[{"start":{"line":22,"column":4},"end":{"line":22,"column":29}}]},"5":{"type":"branch","line":24,"loc":{"start":{"line":24,"column":4},"end":{"line":26,"column":5}},"locations":[{"start":{"line":24,"column":4},"end":{"line":26,"column":5}}]},"6":{"type":"branch","line":28,"loc":{"start":{"line":28,"column":4},"end":{"line":30,"column":5}},"locations":[{"start":{"line":28,"column":4},"end":{"line":30,"column":5}}]},"7":{"type":"branch","line":37,"loc":{"start":{"line":37,"column":26},"end":{"line":96,"column":2}},"locations":[{"start":{"line":37,"column":26},"end":{"line":96,"column":2}}]},"8":{"type":"branch","line":40,"loc":{"start":{"line":40,"column":4},"end":{"line":50,"column":5}},"locations":[{"start":{"line":40,"column":4},"end":{"line":50,"column":5}}]},"9":{"type":"branch","line":52,"loc":{"start":{"line":52,"column":4},"end":{"line":83,"column":5}},"locations":[{"start":{"line":52,"column":4},"end":{"line":83,"column":5}}]},"10":{"type":"branch","line":85,"loc":{"start":{"line":85,"column":4},"end":{"line":94,"column":5}},"locations":[{"start":{"line":85,"column":4},"end":{"line":94,"column":5}}]},"11":{"type":"branch","line":87,"loc":{"start":{"line":87,"column":8},"end":{"line":89,"column":85}},"locations":[{"start":{"line":87,"column":8},"end":{"line":89,"column":85}}]},"12":{"type":"branch","line":42,"loc":{"start":{"line":42,"column":40},"end":{"line":44,"column":7}},"locations":[{"start":{"line":42,"column":40},"end":{"line":44,"column":7}}]},"13":{"type":"branch","line":57,"loc":{"start":{"line":57,"column":43},"end":{"line":77,"column":7}},"locations":[{"start":{"line":57,"column":43},"end":{"line":77,"column":7}}]},"14":{"type":"branch","line":62,"loc":{"start":{"line":62,"column":58},"end":{"line":74,"column":9}},"locations":[{"start":{"line":62,"column":58},"end":{"line":74,"column":9}}]},"15":{"type":"branch","line":76,"loc":{"start":{"line":76,"column":36},"end":{"line":76,"column":76}},"locations":[{"start":{"line":76,"column":36},"end":{"line":76,"column":76}}]},"16":{"type":"branch","line":110,"loc":{"start":{"line":110,"column":38},"end":{"line":118,"column":2}},"locations":[{"start":{"line":110,"column":38},"end":{"line":118,"column":2}}]}},"b":{"0":[28],"1":[8],"2":[8],"3":[2],"4":[5],"5":[5],"6":[3],"7":[28],"8":[2],"9":[20],"10":[6],"11":[0],"12":[2],"13":[48],"14":[0],"15":[28],"16":[28]},"fnMap":{"0":{"name":"CustomError","decl":{"start":{"line":5,"column":2},"end":{"line":12,"column":3}},"loc":{"start":{"line":5,"column":2},"end":{"line":12,"column":3}},"line":5},"1":{"name":"generateErrorStatusCode","decl":{"start":{"line":18,"column":32},"end":{"line":32,"column":2}},"loc":{"start":{"line":18,"column":32},"end":{"line":32,"column":2}},"line":18},"2":{"name":"generateErrorBody","decl":{"start":{"line":37,"column":26},"end":{"line":96,"column":2}},"loc":{"start":{"line":37,"column":26},"end":{"line":96,"column":2}},"line":37},"3":{"name":"middlewareUnknownRoute","decl":{"start":{"line":101,"column":38},"end":{"line":105,"column":2}},"loc":{"start":{"line":101,"column":38},"end":{"line":105,"column":2}},"line":101},"4":{"name":"middlewareErrorHandler","decl":{"start":{"line":110,"column":38},"end":{"line":118,"column":2}},"loc":{"start":{"line":110,"column":38},"end":{"line":118,"column":2}},"line":110}},"f":{"0":28,"1":8,"2":28,"3":0,"4":28}}
-,"/home/embruch/ragchat-api/utils/handleMailer.js": {"path":"/home/embruch/ragchat-api/utils/handleMailer.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":26}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":36}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":0}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":43}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":36}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":72}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":50}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":32}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":32}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":11}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":34}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":37}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":5}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":5}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":0}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":44}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":32}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":19}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":95}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":40}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":45}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":42}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":41}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":4}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":0}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":51}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":0}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":63}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":2}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0},"branchMap":{},"b":{},"fnMap":{"0":{"name":"sendEmail","decl":{"start":{"line":4,"column":25},"end":{"line":29,"column":2}},"loc":{"start":{"line":4,"column":25},"end":{"line":29,"column":2}},"line":4}},"f":{"0":0}}
-,"/home/embruch/ragchat-api/utils/handleSchemes.js": {"path":"/home/embruch/ragchat-api/utils/handleSchemes.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":0}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":3}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":77}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":2}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":44}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":2}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":49}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":3}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":49}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":52}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":61}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":39}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":5}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":51}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":2}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":0}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":0}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":3}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":66}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":2}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":45}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":47}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":2}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":45}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":3}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":58}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":58}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":23}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":39}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":25}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":5}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":16}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":2}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":0}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":3}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":50}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":2}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":44}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":2}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":49}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":3}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":37}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":41}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":2}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":0}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":3}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":37}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":58}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":2}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":44}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":56}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":2}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":85}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":3}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":57}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":48}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":64}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":52}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":36}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":5}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":29}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":16}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":2}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":3,"10":3,"11":42,"12":3,"13":3,"14":3,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":3,"27":3,"28":3,"29":6,"30":3,"31":3,"32":3,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":4,"43":4,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":4,"56":4,"57":50,"58":13,"59":13,"60":4,"61":4,"62":4},"branchMap":{"0":{"type":"branch","line":9,"loc":{"start":{"line":9,"column":37},"end":{"line":15,"column":2}},"locations":[{"start":{"line":9,"column":37},"end":{"line":15,"column":2}}]},"1":{"type":"branch","line":11,"loc":{"start":{"line":11,"column":43},"end":{"line":13,"column":3}},"locations":[{"start":{"line":11,"column":43},"end":{"line":13,"column":3}}]},"2":{"type":"branch","line":14,"loc":{"start":{"line":14,"column":32},"end":{"line":14,"column":49}},"locations":[{"start":{"line":14,"column":32},"end":{"line":14,"column":49}}]},"3":{"type":"branch","line":26,"loc":{"start":{"line":26,"column":38},"end":{"line":33,"column":2}},"locations":[{"start":{"line":26,"column":38},"end":{"line":33,"column":2}}]},"4":{"type":"branch","line":29,"loc":{"start":{"line":29,"column":29},"end":{"line":31,"column":3}},"locations":[{"start":{"line":29,"column":29},"end":{"line":31,"column":3}}]},"5":{"type":"branch","line":42,"loc":{"start":{"line":42,"column":25},"end":{"line":44,"column":2}},"locations":[{"start":{"line":42,"column":25},"end":{"line":44,"column":2}}]},"6":{"type":"branch","line":55,"loc":{"start":{"line":55,"column":37},"end":{"line":63,"column":2}},"locations":[{"start":{"line":55,"column":37},"end":{"line":63,"column":2}}]},"7":{"type":"branch","line":57,"loc":{"start":{"line":57,"column":52},"end":{"line":61,"column":3}},"locations":[{"start":{"line":57,"column":52},"end":{"line":61,"column":3}}]},"8":{"type":"branch","line":58,"loc":{"start":{"line":58,"column":51},"end":{"line":60,"column":5}},"locations":[{"start":{"line":58,"column":51},"end":{"line":60,"column":5}}]},"9":{"type":"branch","line":61,"loc":{"start":{"line":61,"column":12},"end":{"line":61,"column":26}},"locations":[{"start":{"line":61,"column":12},"end":{"line":61,"column":26}}]}},"b":{"0":[3],"1":[42],"2":[6],"3":[3],"4":[6],"5":[4],"6":[4],"7":[50],"8":[13],"9":[50]},"fnMap":{"0":{"name":"getConfidentialFields","decl":{"start":{"line":9,"column":37},"end":{"line":15,"column":2}},"loc":{"start":{"line":9,"column":37},"end":{"line":15,"column":2}},"line":9},"1":{"name":"hideConfidentialFields","decl":{"start":{"line":26,"column":38},"end":{"line":33,"column":2}},"loc":{"start":{"line":26,"column":38},"end":{"line":33,"column":2}},"line":26},"2":{"name":"getAllFieldnames","decl":{"start":{"line":42,"column":25},"end":{"line":44,"column":2}},"loc":{"start":{"line":42,"column":25},"end":{"line":44,"column":2}},"line":42},"3":{"name":"prefillDocumentObject","decl":{"start":{"line":55,"column":37},"end":{"line":63,"column":2}},"loc":{"start":{"line":55,"column":37},"end":{"line":63,"column":2}},"line":55}},"f":{"0":3,"1":3,"2":4,"3":4}}
-,"/home/embruch/ragchat-api/utils/handleTokens.js": {"path":"/home/embruch/ragchat-api/utils/handleTokens.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":31}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":37}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":83}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":0}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":3}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":54}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":42}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":83}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":2}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":51}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":2}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":19}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":3}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":53}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":166}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":2}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":0}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":3}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":48}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":39}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":54}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":46}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":2}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":30}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":46}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":66}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":2}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":3}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":66}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":17}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":130}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":17}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":85}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":15}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":11}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":5}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":2}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":0}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":0}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":3}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":44}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":42}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":2}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":51}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":2}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":19}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":3}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":47}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":91}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":2}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":0}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":3}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":54}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":42}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":79}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":2}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":51}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":2}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":19}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":3}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":49}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":158}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":2}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":0}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":0}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":3}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":44}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":42}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":2}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":51}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":2}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":19}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":3}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":54}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":7}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":13}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":72}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":30}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":64}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":13}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":24}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":19}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":16}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":3}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":2}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":0}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":0}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":3}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":57}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":2}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":49}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":2}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":62}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":3}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":59}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":7}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":21}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":66}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":33}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":21}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":71}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":66}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":19}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":16}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":3}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":2}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":0}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":3}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":42}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":2}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":56}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":3}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":59}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":7}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":98}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":11}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":19}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":16}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":3}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":2}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":0}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":0}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":3}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":46}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":74}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":2}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":30}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":46}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":66}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":2}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":3}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":60}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":18}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":50}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":47}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":55}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":0}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":45}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":96}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":0}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":17}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":75}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":17}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":107}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":58}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":38}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":42}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":11}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":5}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":2}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":0}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":0}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":3}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":48}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":74}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":2}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":30}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":46}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":66}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":2}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":3}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":62}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":24}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":113}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":112}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":17}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":85}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":11}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":5}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":2}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":2,"15":2,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":2,"49":2,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":0,"83":0,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":5,"96":5,"97":5,"98":5,"99":5,"100":5,"101":5,"102":5,"103":3,"104":3,"105":5,"106":1,"107":1,"108":1,"109":1,"110":1,"111":1,"112":1,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":1,"121":1,"122":1,"123":1,"124":1,"125":1,"126":1,"127":1,"128":1,"129":1,"130":1,"131":1,"132":32,"133":32,"134":32,"135":32,"136":32,"137":32,"138":32,"139":26,"140":26,"141":26,"142":26,"143":26,"144":20,"145":20,"146":20,"147":20,"148":26,"149":26,"150":1,"151":1,"152":1,"153":1,"154":1,"155":1,"156":1,"157":1,"158":1,"159":1,"160":1,"161":1,"162":3,"163":3,"164":3,"165":3,"166":3,"167":1,"168":3,"169":3},"branchMap":{"0":{"type":"branch","line":14,"loc":{"start":{"line":14,"column":39},"end":{"line":16,"column":2}},"locations":[{"start":{"line":14,"column":39},"end":{"line":16,"column":2}}]},"1":{"type":"branch","line":48,"loc":{"start":{"line":48,"column":33},"end":{"line":50,"column":2}},"locations":[{"start":{"line":48,"column":33},"end":{"line":50,"column":2}}]},"2":{"type":"branch","line":61,"loc":{"start":{"line":61,"column":35},"end":{"line":63,"column":2}},"locations":[{"start":{"line":61,"column":35},"end":{"line":63,"column":2}}]},"3":{"type":"branch","line":74,"loc":{"start":{"line":74,"column":34},"end":{"line":85,"column":2}},"locations":[{"start":{"line":74,"column":34},"end":{"line":85,"column":2}}]},"4":{"type":"branch","line":82,"loc":{"start":{"line":82,"column":4},"end":{"line":84,"column":3}},"locations":[{"start":{"line":82,"column":4},"end":{"line":84,"column":3}}]},"5":{"type":"branch","line":95,"loc":{"start":{"line":95,"column":34},"end":{"line":106,"column":2}},"locations":[{"start":{"line":95,"column":34},"end":{"line":106,"column":2}}]},"6":{"type":"branch","line":99,"loc":{"start":{"line":99,"column":20},"end":{"line":99,"column":33}},"locations":[{"start":{"line":99,"column":20},"end":{"line":99,"column":33}}]},"7":{"type":"branch","line":102,"loc":{"start":{"line":102,"column":17},"end":{"line":102,"column":44}},"locations":[{"start":{"line":102,"column":17},"end":{"line":102,"column":44}}]},"8":{"type":"branch","line":102,"loc":{"start":{"line":102,"column":45},"end":{"line":102,"column":56}},"locations":[{"start":{"line":102,"column":45},"end":{"line":102,"column":56}}]},"9":{"type":"branch","line":102,"loc":{"start":{"line":102,"column":57},"end":{"line":102,"column":64}},"locations":[{"start":{"line":102,"column":57},"end":{"line":102,"column":64}}]},"10":{"type":"branch","line":103,"loc":{"start":{"line":103,"column":4},"end":{"line":105,"column":3}},"locations":[{"start":{"line":103,"column":4},"end":{"line":105,"column":3}}]},"11":{"type":"branch","line":132,"loc":{"start":{"line":132,"column":33},"end":{"line":150,"column":2}},"locations":[{"start":{"line":132,"column":33},"end":{"line":150,"column":2}}]},"12":{"type":"branch","line":136,"loc":{"start":{"line":136,"column":27},"end":{"line":136,"column":54}},"locations":[{"start":{"line":136,"column":27},"end":{"line":136,"column":54}}]},"13":{"type":"branch","line":139,"loc":{"start":{"line":139,"column":14},"end":{"line":139,"column":96}},"locations":[{"start":{"line":139,"column":14},"end":{"line":139,"column":96}}]},"14":{"type":"branch","line":140,"loc":{"start":{"line":140,"column":-1},"end":{"line":150,"column":2}},"locations":[{"start":{"line":140,"column":-1},"end":{"line":150,"column":2}}]},"15":{"type":"branch","line":142,"loc":{"start":{"line":142,"column":48},"end":{"line":149,"column":3}},"locations":[{"start":{"line":142,"column":48},"end":{"line":149,"column":3}}]},"16":{"type":"branch","line":144,"loc":{"start":{"line":144,"column":15},"end":{"line":149,"column":2}},"locations":[{"start":{"line":144,"column":15},"end":{"line":149,"column":2}}]},"17":{"type":"branch","line":144,"loc":{"start":{"line":144,"column":15},"end":{"line":144,"column":107}},"locations":[{"start":{"line":144,"column":15},"end":{"line":144,"column":107}}]},"18":{"type":"branch","line":145,"loc":{"start":{"line":145,"column":-1},"end":{"line":149,"column":2}},"locations":[{"start":{"line":145,"column":-1},"end":{"line":149,"column":2}}]},"19":{"type":"branch","line":162,"loc":{"start":{"line":162,"column":35},"end":{"line":170,"column":2}},"locations":[{"start":{"line":162,"column":35},"end":{"line":170,"column":2}}]},"20":{"type":"branch","line":165,"loc":{"start":{"line":165,"column":85},"end":{"line":169,"column":3}},"locations":[{"start":{"line":165,"column":85},"end":{"line":169,"column":3}}]},"21":{"type":"branch","line":167,"loc":{"start":{"line":167,"column":15},"end":{"line":167,"column":85}},"locations":[{"start":{"line":167,"column":15},"end":{"line":167,"column":85}}]},"22":{"type":"branch","line":168,"loc":{"start":{"line":168,"column":-1},"end":{"line":169,"column":2}},"locations":[{"start":{"line":168,"column":-1},"end":{"line":169,"column":2}}]}},"b":{"0":[2],"1":[2],"2":[1],"3":[1],"4":[0],"5":[5],"6":[0],"7":[2],"8":[1],"9":[1],"10":[3],"11":[32],"12":[26],"13":[6],"14":[26],"15":[26],"16":[25],"17":[6],"18":[20],"19":[3],"20":[3],"21":[2],"22":[1]},"fnMap":{"0":{"name":"createVerificationToken","decl":{"start":{"line":14,"column":39},"end":{"line":16,"column":2}},"loc":{"start":{"line":14,"column":39},"end":{"line":16,"column":2}},"line":14},"1":{"name":"verifyVerificationToken","decl":{"start":{"line":29,"column":39},"end":{"line":37,"column":2}},"loc":{"start":{"line":29,"column":39},"end":{"line":37,"column":2}},"line":29},"2":{"name":"createAccessToken","decl":{"start":{"line":48,"column":33},"end":{"line":50,"column":2}},"loc":{"start":{"line":48,"column":33},"end":{"line":50,"column":2}},"line":48},"3":{"name":"createPasswordToken","decl":{"start":{"line":61,"column":35},"end":{"line":63,"column":2}},"loc":{"start":{"line":61,"column":35},"end":{"line":63,"column":2}},"line":61},"4":{"name":"createRefreshToken","decl":{"start":{"line":74,"column":34},"end":{"line":85,"column":2}},"loc":{"start":{"line":74,"column":34},"end":{"line":85,"column":2}},"line":74},"5":{"name":"verifyRefreshToken","decl":{"start":{"line":95,"column":34},"end":{"line":106,"column":2}},"loc":{"start":{"line":95,"column":34},"end":{"line":106,"column":2}},"line":95},"6":{"name":"deleteRefreshToken","decl":{"start":{"line":113,"column":34},"end":{"line":120,"column":2}},"loc":{"start":{"line":113,"column":34},"end":{"line":120,"column":2}},"line":113},"7":{"name":"verifyAccessToken","decl":{"start":{"line":132,"column":33},"end":{"line":150,"column":2}},"loc":{"start":{"line":132,"column":33},"end":{"line":150,"column":2}},"line":132},"8":{"name":"verifyPasswordToken","decl":{"start":{"line":162,"column":35},"end":{"line":170,"column":2}},"loc":{"start":{"line":162,"column":35},"end":{"line":170,"column":2}},"line":162}},"f":{"0":2,"1":0,"2":2,"3":1,"4":1,"5":5,"6":0,"7":32,"8":3}}
-,"/home/embruch/ragchat-api/utils/handleValidations.js": {"path":"/home/embruch/ragchat-api/utils/handleValidations.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":48}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":0}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":26}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":57}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":7}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":52}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":27}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":14}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":11}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":19}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":17}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":28}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":27}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":41}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":16}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":3}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":2}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":49,"5":49,"6":49,"7":49,"8":49,"9":49,"10":20,"11":20,"12":20,"13":20,"14":20,"15":20,"16":49},"branchMap":{"0":{"type":"branch","line":4,"loc":{"start":{"line":4,"column":24},"end":{"line":17,"column":2}},"locations":[{"start":{"line":4,"column":24},"end":{"line":17,"column":2}}]},"1":{"type":"branch","line":4,"loc":{"start":{"line":4,"column":36},"end":{"line":17,"column":2}},"locations":[{"start":{"line":4,"column":36},"end":{"line":17,"column":2}}]},"2":{"type":"branch","line":10,"loc":{"start":{"line":10,"column":4},"end":{"line":16,"column":3}},"locations":[{"start":{"line":10,"column":4},"end":{"line":16,"column":3}}]}},"b":{"0":[165],"1":[49],"2":[20]},"fnMap":{"0":{"name":"validate","decl":{"start":{"line":4,"column":24},"end":{"line":17,"column":2}},"loc":{"start":{"line":4,"column":24},"end":{"line":17,"column":2}},"line":4}},"f":{"0":165}}
-,"/home/embruch/ragchat-api/validationSchemes/AI.js": {"path":"/home/embruch/ragchat-api/validationSchemes/AI.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":24}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":0}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":13}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":41}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":21}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":3}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":0}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":12}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":40}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":27}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":3}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":0}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":16}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":44}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":27}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":33}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":3}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":0}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":15}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":43}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":27}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":3}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":0}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":7}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":36}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":27}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":27}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":39}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":3}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1},"branchMap":{},"b":{},"fnMap":{},"f":{}}
-,"/home/embruch/ragchat-api/validationSchemes/Auth.js": {"path":"/home/embruch/ragchat-api/validationSchemes/Auth.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":24}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":34}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":0}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":23}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":51}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":28}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":3}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":0}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":23}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":51}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":28}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":27}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":3}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":0}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":8}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":37}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":35}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":29}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":3}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":0}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":25}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":52}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":35}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":3}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":0}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":25}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":52}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":27}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":80}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":111}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":5}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":30}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":61}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":35}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":28}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":3}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1},"branchMap":{"0":{"type":"branch","line":29,"loc":{"start":{"line":29,"column":30},"end":{"line":29,"column":77}},"locations":[{"start":{"line":29,"column":30},"end":{"line":29,"column":77}}]},"1":{"type":"branch","line":33,"loc":{"start":{"line":33,"column":10},"end":{"line":33,"column":58}},"locations":[{"start":{"line":33,"column":10},"end":{"line":33,"column":58}}]}},"b":{"0":[5],"1":[4]},"fnMap":{"0":{"name":"__vite_ssr_import_0__.z.object.password.__vite_ssr_import_0__.z.string.refine.message","decl":{"start":{"line":29,"column":30},"end":{"line":29,"column":77}},"loc":{"start":{"line":29,"column":30},"end":{"line":29,"column":77}},"line":29},"1":{"name":"__vite_ssr_import_0__.z.object.refine.message","decl":{"start":{"line":33,"column":10},"end":{"line":33,"column":58}},"loc":{"start":{"line":33,"column":10},"end":{"line":33,"column":58}},"line":33}},"f":{"0":5,"1":4}}
-,"/home/embruch/ragchat-api/validationSchemes/User.js": {"path":"/home/embruch/ragchat-api/validationSchemes/User.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":24}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":34}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":0}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":10}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":42}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":26}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":30}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":28}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":80}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":111}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":5}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":30}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":61}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":35}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":28}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":3}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1},"branchMap":{"0":{"type":"branch","line":9,"loc":{"start":{"line":9,"column":30},"end":{"line":9,"column":77}},"locations":[{"start":{"line":9,"column":30},"end":{"line":9,"column":77}}]},"1":{"type":"branch","line":13,"loc":{"start":{"line":13,"column":10},"end":{"line":13,"column":58}},"locations":[{"start":{"line":13,"column":10},"end":{"line":13,"column":58}}]}},"b":{"0":[7],"1":[6]},"fnMap":{"0":{"name":"__vite_ssr_import_0__.z.object.password.__vite_ssr_import_0__.z.string.refine.message","decl":{"start":{"line":9,"column":30},"end":{"line":9,"column":77}},"loc":{"start":{"line":9,"column":30},"end":{"line":9,"column":77}},"line":9},"1":{"name":"__vite_ssr_import_0__.z.object.refine.message","decl":{"start":{"line":13,"column":10},"end":{"line":13,"column":58}},"loc":{"start":{"line":13,"column":10},"end":{"line":13,"column":58}},"line":13}},"f":{"0":7,"1":6}}
+{"/local/embruch/ragchat-api/app.js": {"path":"/local/embruch/ragchat-api/app.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":30}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":41}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":24}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":80}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":89}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":0}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":3}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":31}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":39}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":3}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":48}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":44}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":42}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":3}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":3}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":62}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":42}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":9}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":37}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":40}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":44}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":63}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":53}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":20}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":88}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":14}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":55}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":91}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":9}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":0}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":16}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":43}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":42}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":7}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":21}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":12}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":35}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":14}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":41}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":5}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":29}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":3}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":3}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":43}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":0}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":3}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":26}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":3}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":26}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":0}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":33}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":97}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":0}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":29}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":50}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":26}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":27}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":40}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":46}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":12}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":18}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":5}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":49}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":1}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":0}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":3}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":16}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":3}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":47}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":22}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":35}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":0}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":33}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":56}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":24}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":27}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":24}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":0}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":18}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":57}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":26}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":52}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":30}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":42}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":38}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":1}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":39}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":21}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":18}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":89}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":20}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":2}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":27}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":27}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":0}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":0}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":3}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":16}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":2}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":44}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":42}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":38}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":54}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":36}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":26}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":0}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":0}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":3}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":13}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":2}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":31}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":29}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":25}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":41}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":6}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":37}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":26}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":32}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":0}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":19}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":66,"17":228,"18":228,"19":228,"20":96,"21":96,"22":96,"23":96,"24":96,"25":96,"26":96,"27":96,"28":96,"29":96,"30":96,"31":96,"32":96,"33":96,"34":228,"35":0,"36":0,"37":0,"38":0,"39":0,"40":228,"41":228,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":1,"98":1,"99":1,"100":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1,"108":1,"109":1,"110":1,"111":1,"112":1,"113":1,"114":1,"115":1,"116":1,"117":1,"118":1,"119":1},"branchMap":{"0":{"type":"branch","line":54,"loc":{"start":{"line":54,"column":28},"end":{"line":64,"column":1}},"locations":[{"start":{"line":54,"column":28},"end":{"line":64,"column":1}}]},"1":{"type":"branch","line":16,"loc":{"start":{"line":16,"column":41},"end":{"line":43,"column":2}},"locations":[{"start":{"line":16,"column":41},"end":{"line":43,"column":2}}]},"2":{"type":"branch","line":17,"loc":{"start":{"line":17,"column":41},"end":{"line":42,"column":3}},"locations":[{"start":{"line":17,"column":41},"end":{"line":42,"column":3}}]},"3":{"type":"branch","line":20,"loc":{"start":{"line":20,"column":39},"end":{"line":34,"column":7}},"locations":[{"start":{"line":20,"column":39},"end":{"line":34,"column":7}}]},"4":{"type":"branch","line":35,"loc":{"start":{"line":35,"column":6},"end":{"line":40,"column":5}},"locations":[{"start":{"line":35,"column":6},"end":{"line":40,"column":5}}]}},"b":{"0":[0],"1":[66],"2":[228],"3":[96],"4":[0]},"fnMap":{},"f":{}}
+,"/local/embruch/ragchat-api/__tests__/ai/chat.test.js": {"path":"/local/embruch/ragchat-api/__tests__/ai/chat.test.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":33}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":104}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":34}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":31}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":0}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":12}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":25}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":32}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":13}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":0}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":31}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":11}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":31}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":0}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":31}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":9}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":31}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":53}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":17}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":20}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":53}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":17}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":0}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":31}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":9}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":31}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":0}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":38}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":30}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":98}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":4}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":0}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":47}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":27}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":0}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":91}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":0}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":37}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":20}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":99}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":37}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":7}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":0}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":59}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":40}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":7}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":51}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":46}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":7}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":5}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":0}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":33}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":0}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":49}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":27}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":0}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":66}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":0}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":37}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":20}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":99}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":37}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":7}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":0}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":59}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":40}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":7}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":51}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":46}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":7}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":5}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":0}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":0}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":33}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":0}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":44}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":27}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":57}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":37}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":20}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":99}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":21}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":7}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":0}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":59}},"205":{"start":{"line":206,"column":0},"end":{"line":206,"column":40}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":7}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":51}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":46}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":7}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":5}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":0}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":0}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":33}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":0}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":51}},"216":{"start":{"line":217,"column":0},"end":{"line":217,"column":27}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":72}},"218":{"start":{"line":219,"column":0},"end":{"line":219,"column":0}},"219":{"start":{"line":220,"column":0},"end":{"line":220,"column":81}},"220":{"start":{"line":221,"column":0},"end":{"line":221,"column":0}},"221":{"start":{"line":222,"column":0},"end":{"line":222,"column":0}},"222":{"start":{"line":223,"column":0},"end":{"line":223,"column":37}},"223":{"start":{"line":224,"column":0},"end":{"line":224,"column":20}},"224":{"start":{"line":225,"column":0},"end":{"line":225,"column":99}},"225":{"start":{"line":226,"column":0},"end":{"line":226,"column":21}},"226":{"start":{"line":227,"column":0},"end":{"line":227,"column":7}},"227":{"start":{"line":228,"column":0},"end":{"line":228,"column":0}},"228":{"start":{"line":229,"column":0},"end":{"line":229,"column":59}},"229":{"start":{"line":230,"column":0},"end":{"line":230,"column":40}},"230":{"start":{"line":231,"column":0},"end":{"line":231,"column":7}},"231":{"start":{"line":232,"column":0},"end":{"line":232,"column":51}},"232":{"start":{"line":233,"column":0},"end":{"line":233,"column":46}},"233":{"start":{"line":234,"column":0},"end":{"line":234,"column":7}},"234":{"start":{"line":235,"column":0},"end":{"line":235,"column":5}},"235":{"start":{"line":236,"column":0},"end":{"line":236,"column":0}},"236":{"start":{"line":237,"column":0},"end":{"line":237,"column":33}},"237":{"start":{"line":238,"column":0},"end":{"line":238,"column":0}},"238":{"start":{"line":239,"column":0},"end":{"line":239,"column":55}},"239":{"start":{"line":240,"column":0},"end":{"line":240,"column":27}},"240":{"start":{"line":241,"column":0},"end":{"line":241,"column":56}},"241":{"start":{"line":242,"column":0},"end":{"line":242,"column":0}},"242":{"start":{"line":243,"column":0},"end":{"line":243,"column":37}},"243":{"start":{"line":244,"column":0},"end":{"line":244,"column":20}},"244":{"start":{"line":245,"column":0},"end":{"line":245,"column":99}},"245":{"start":{"line":246,"column":0},"end":{"line":246,"column":21}},"246":{"start":{"line":247,"column":0},"end":{"line":247,"column":7}},"247":{"start":{"line":248,"column":0},"end":{"line":248,"column":0}},"248":{"start":{"line":249,"column":0},"end":{"line":249,"column":59}},"249":{"start":{"line":250,"column":0},"end":{"line":250,"column":40}},"250":{"start":{"line":251,"column":0},"end":{"line":251,"column":7}},"251":{"start":{"line":252,"column":0},"end":{"line":252,"column":51}},"252":{"start":{"line":253,"column":0},"end":{"line":253,"column":46}},"253":{"start":{"line":254,"column":0},"end":{"line":254,"column":7}},"254":{"start":{"line":255,"column":0},"end":{"line":255,"column":5}},"255":{"start":{"line":256,"column":0},"end":{"line":256,"column":0}},"256":{"start":{"line":257,"column":0},"end":{"line":257,"column":33}},"257":{"start":{"line":258,"column":0},"end":{"line":258,"column":0}},"258":{"start":{"line":259,"column":0},"end":{"line":259,"column":47}},"259":{"start":{"line":260,"column":0},"end":{"line":260,"column":27}},"260":{"start":{"line":261,"column":0},"end":{"line":261,"column":37}},"261":{"start":{"line":262,"column":0},"end":{"line":262,"column":20}},"262":{"start":{"line":263,"column":0},"end":{"line":263,"column":47}},"263":{"start":{"line":264,"column":0},"end":{"line":264,"column":37}},"264":{"start":{"line":265,"column":0},"end":{"line":265,"column":7}},"265":{"start":{"line":266,"column":0},"end":{"line":266,"column":0}},"266":{"start":{"line":267,"column":0},"end":{"line":267,"column":59}},"267":{"start":{"line":268,"column":0},"end":{"line":268,"column":40}},"268":{"start":{"line":269,"column":0},"end":{"line":269,"column":7}},"269":{"start":{"line":270,"column":0},"end":{"line":270,"column":51}},"270":{"start":{"line":271,"column":0},"end":{"line":271,"column":46}},"271":{"start":{"line":272,"column":0},"end":{"line":272,"column":7}},"272":{"start":{"line":273,"column":0},"end":{"line":273,"column":5}},"273":{"start":{"line":274,"column":0},"end":{"line":274,"column":0}},"274":{"start":{"line":275,"column":0},"end":{"line":275,"column":33}},"275":{"start":{"line":276,"column":0},"end":{"line":276,"column":0}},"276":{"start":{"line":277,"column":0},"end":{"line":277,"column":41}},"277":{"start":{"line":278,"column":0},"end":{"line":278,"column":27}},"278":{"start":{"line":279,"column":0},"end":{"line":279,"column":37}},"279":{"start":{"line":280,"column":0},"end":{"line":280,"column":20}},"280":{"start":{"line":281,"column":0},"end":{"line":281,"column":37}},"281":{"start":{"line":282,"column":0},"end":{"line":282,"column":7}},"282":{"start":{"line":283,"column":0},"end":{"line":283,"column":0}},"283":{"start":{"line":284,"column":0},"end":{"line":284,"column":59}},"284":{"start":{"line":285,"column":0},"end":{"line":285,"column":40}},"285":{"start":{"line":286,"column":0},"end":{"line":286,"column":7}},"286":{"start":{"line":287,"column":0},"end":{"line":287,"column":51}},"287":{"start":{"line":288,"column":0},"end":{"line":288,"column":46}},"288":{"start":{"line":289,"column":0},"end":{"line":289,"column":7}},"289":{"start":{"line":290,"column":0},"end":{"line":290,"column":5}},"290":{"start":{"line":291,"column":0},"end":{"line":291,"column":0}},"291":{"start":{"line":292,"column":0},"end":{"line":292,"column":3}}},"s":{"0":1,"1":1,"2":1,"3":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"114":1,"115":1,"116":1,"117":1,"118":1,"119":1,"129":1,"130":1,"131":1,"142":1,"143":1,"144":1,"145":1,"146":1,"147":1,"148":1,"149":5,"150":1,"151":1,"152":1,"153":1,"154":1,"155":1,"156":1,"157":1,"158":1,"159":1,"160":1,"161":1,"162":1,"163":1,"164":1,"165":1,"166":1,"167":1,"168":1,"169":1,"170":1,"171":1,"172":1,"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":1,"180":1,"181":1,"182":1,"183":1,"184":1,"185":1,"186":1,"187":1,"188":1,"189":1,"190":1,"191":1,"192":1,"193":1,"194":1,"195":1,"196":1,"197":1,"198":1,"199":1,"200":1,"201":1,"202":1,"203":1,"204":1,"205":1,"206":1,"207":1,"208":1,"209":1,"210":1,"211":1,"212":1,"213":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"221":1,"222":1,"223":1,"224":1,"225":1,"226":1,"227":1,"228":1,"229":1,"230":1,"231":1,"232":1,"233":1,"234":1,"235":1,"236":1,"237":1,"238":1,"239":1,"240":1,"241":1,"242":1,"243":1,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"250":1,"251":1,"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1,"262":1,"263":1,"264":1,"265":1,"266":1,"267":1,"268":1,"269":1,"270":1,"271":1,"272":1,"273":1,"274":1,"275":1,"276":1,"277":1,"278":1,"279":1,"280":1,"281":1,"282":1,"283":1,"284":1,"285":1,"286":1,"287":1,"288":1,"289":1,"290":1,"291":1},"branchMap":{"0":{"type":"branch","line":148,"loc":{"start":{"line":148,"column":31},"end":{"line":292,"column":2}},"locations":[{"start":{"line":148,"column":31},"end":{"line":292,"column":2}}]},"1":{"type":"branch","line":149,"loc":{"start":{"line":149,"column":15},"end":{"line":151,"column":3}},"locations":[{"start":{"line":149,"column":15},"end":{"line":151,"column":3}}]},"2":{"type":"branch","line":153,"loc":{"start":{"line":153,"column":40},"end":{"line":170,"column":3}},"locations":[{"start":{"line":153,"column":40},"end":{"line":170,"column":3}}]},"3":{"type":"branch","line":154,"loc":{"start":{"line":154,"column":14},"end":{"line":162,"column":5}},"locations":[{"start":{"line":154,"column":14},"end":{"line":162,"column":5}}]},"4":{"type":"branch","line":164,"loc":{"start":{"line":164,"column":52},"end":{"line":166,"column":5}},"locations":[{"start":{"line":164,"column":52},"end":{"line":166,"column":5}}]},"5":{"type":"branch","line":167,"loc":{"start":{"line":167,"column":44},"end":{"line":169,"column":5}},"locations":[{"start":{"line":167,"column":44},"end":{"line":169,"column":5}}]},"6":{"type":"branch","line":174,"loc":{"start":{"line":174,"column":42},"end":{"line":191,"column":3}},"locations":[{"start":{"line":174,"column":42},"end":{"line":191,"column":3}}]},"7":{"type":"branch","line":175,"loc":{"start":{"line":175,"column":14},"end":{"line":183,"column":5}},"locations":[{"start":{"line":175,"column":14},"end":{"line":183,"column":5}}]},"8":{"type":"branch","line":177,"loc":{"start":{"line":177,"column":54},"end":{"line":177,"column":64}},"locations":[{"start":{"line":177,"column":54},"end":{"line":177,"column":64}}]},"9":{"type":"branch","line":185,"loc":{"start":{"line":185,"column":52},"end":{"line":187,"column":5}},"locations":[{"start":{"line":185,"column":52},"end":{"line":187,"column":5}}]},"10":{"type":"branch","line":188,"loc":{"start":{"line":188,"column":44},"end":{"line":190,"column":5}},"locations":[{"start":{"line":188,"column":44},"end":{"line":190,"column":5}}]},"11":{"type":"branch","line":196,"loc":{"start":{"line":196,"column":37},"end":{"line":211,"column":3}},"locations":[{"start":{"line":196,"column":37},"end":{"line":211,"column":3}}]},"12":{"type":"branch","line":197,"loc":{"start":{"line":197,"column":14},"end":{"line":203,"column":5}},"locations":[{"start":{"line":197,"column":14},"end":{"line":203,"column":5}}]},"13":{"type":"branch","line":205,"loc":{"start":{"line":205,"column":52},"end":{"line":207,"column":5}},"locations":[{"start":{"line":205,"column":52},"end":{"line":207,"column":5}}]},"14":{"type":"branch","line":208,"loc":{"start":{"line":208,"column":44},"end":{"line":210,"column":5}},"locations":[{"start":{"line":208,"column":44},"end":{"line":210,"column":5}}]},"15":{"type":"branch","line":216,"loc":{"start":{"line":216,"column":44},"end":{"line":235,"column":3}},"locations":[{"start":{"line":216,"column":44},"end":{"line":235,"column":3}}]},"16":{"type":"branch","line":217,"loc":{"start":{"line":217,"column":14},"end":{"line":227,"column":5}},"locations":[{"start":{"line":217,"column":14},"end":{"line":227,"column":5}}]},"17":{"type":"branch","line":220,"loc":{"start":{"line":220,"column":47},"end":{"line":220,"column":79}},"locations":[{"start":{"line":220,"column":47},"end":{"line":220,"column":79}}]},"18":{"type":"branch","line":229,"loc":{"start":{"line":229,"column":52},"end":{"line":231,"column":5}},"locations":[{"start":{"line":229,"column":52},"end":{"line":231,"column":5}}]},"19":{"type":"branch","line":232,"loc":{"start":{"line":232,"column":44},"end":{"line":234,"column":5}},"locations":[{"start":{"line":232,"column":44},"end":{"line":234,"column":5}}]},"20":{"type":"branch","line":239,"loc":{"start":{"line":239,"column":48},"end":{"line":255,"column":3}},"locations":[{"start":{"line":239,"column":48},"end":{"line":255,"column":3}}]},"21":{"type":"branch","line":240,"loc":{"start":{"line":240,"column":14},"end":{"line":247,"column":5}},"locations":[{"start":{"line":240,"column":14},"end":{"line":247,"column":5}}]},"22":{"type":"branch","line":249,"loc":{"start":{"line":249,"column":52},"end":{"line":251,"column":5}},"locations":[{"start":{"line":249,"column":52},"end":{"line":251,"column":5}}]},"23":{"type":"branch","line":252,"loc":{"start":{"line":252,"column":44},"end":{"line":254,"column":5}},"locations":[{"start":{"line":252,"column":44},"end":{"line":254,"column":5}}]},"24":{"type":"branch","line":259,"loc":{"start":{"line":259,"column":40},"end":{"line":273,"column":3}},"locations":[{"start":{"line":259,"column":40},"end":{"line":273,"column":3}}]},"25":{"type":"branch","line":260,"loc":{"start":{"line":260,"column":14},"end":{"line":265,"column":5}},"locations":[{"start":{"line":260,"column":14},"end":{"line":265,"column":5}}]},"26":{"type":"branch","line":267,"loc":{"start":{"line":267,"column":52},"end":{"line":269,"column":5}},"locations":[{"start":{"line":267,"column":52},"end":{"line":269,"column":5}}]},"27":{"type":"branch","line":270,"loc":{"start":{"line":270,"column":44},"end":{"line":272,"column":5}},"locations":[{"start":{"line":270,"column":44},"end":{"line":272,"column":5}}]},"28":{"type":"branch","line":277,"loc":{"start":{"line":277,"column":34},"end":{"line":290,"column":3}},"locations":[{"start":{"line":277,"column":34},"end":{"line":290,"column":3}}]},"29":{"type":"branch","line":278,"loc":{"start":{"line":278,"column":14},"end":{"line":282,"column":5}},"locations":[{"start":{"line":278,"column":14},"end":{"line":282,"column":5}}]},"30":{"type":"branch","line":284,"loc":{"start":{"line":284,"column":52},"end":{"line":286,"column":5}},"locations":[{"start":{"line":284,"column":52},"end":{"line":286,"column":5}}]},"31":{"type":"branch","line":287,"loc":{"start":{"line":287,"column":44},"end":{"line":289,"column":5}},"locations":[{"start":{"line":287,"column":44},"end":{"line":289,"column":5}}]}},"b":{"0":[1],"1":[5],"2":[1],"3":[1],"4":[1],"5":[1],"6":[1],"7":[1],"8":[1],"9":[1],"10":[1],"11":[1],"12":[1],"13":[1],"14":[1],"15":[1],"16":[1],"17":[1],"18":[1],"19":[1],"20":[1],"21":[1],"22":[1],"23":[1],"24":[1],"25":[1],"26":[1],"27":[1],"28":[1],"29":[1],"30":[1],"31":[1]},"fnMap":{"0":{"name":"_jwt","decl":{"start":{"line":149,"column":15},"end":{"line":151,"column":3}},"loc":{"start":{"line":149,"column":15},"end":{"line":151,"column":3}},"line":149}},"f":{"0":5}}
+,"/local/embruch/ragchat-api/__tests__/ai/chats.test.js": {"path":"/local/embruch/ragchat-api/__tests__/ai/chats.test.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":33}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":104}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":34}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":31}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":0}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":12}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":32}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":13}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":0}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":31}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":11}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":31}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":0}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":0}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":0}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":31}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":9}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":31}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":53}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":17}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":0}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":31}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":9}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":31}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":38}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":30}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":98}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":4}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":0}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":48}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":27}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":0}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":37}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":19}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":99}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":16}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":7}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":0}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":59}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":40}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":7}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":51}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":46}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":7}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":5}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":0}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":33}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":0}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":47}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":27}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":37}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":19}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":47}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":16}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":7}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":0}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":59}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":40}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":7}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":51}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":46}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":7}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":5}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":0}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":33}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":0}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":41}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":27}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":37}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":19}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":16}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":7}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":0}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":59}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":40}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":7}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":51}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":46}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":7}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":5}},"205":{"start":{"line":206,"column":0},"end":{"line":206,"column":3}}},"s":{"0":1,"1":1,"2":1,"3":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":1,"136":1,"145":1,"146":1,"147":1,"148":1,"149":1,"150":1,"151":1,"152":1,"153":1,"154":1,"155":1,"156":1,"157":1,"158":1,"159":1,"160":1,"161":1,"162":1,"163":1,"164":1,"165":1,"166":1,"167":1,"168":1,"169":1,"170":1,"171":1,"172":1,"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":1,"180":1,"181":1,"182":1,"183":1,"184":1,"185":1,"186":1,"187":1,"188":1,"189":1,"190":1,"191":1,"192":1,"193":1,"194":1,"195":1,"196":1,"197":1,"198":1,"199":1,"200":1,"201":1,"202":1,"203":1,"204":1,"205":1},"branchMap":{"0":{"type":"branch","line":150,"loc":{"start":{"line":150,"column":31},"end":{"line":206,"column":2}},"locations":[{"start":{"line":150,"column":31},"end":{"line":206,"column":2}}]},"1":{"type":"branch","line":151,"loc":{"start":{"line":151,"column":15},"end":{"line":153,"column":3}},"locations":[{"start":{"line":151,"column":15},"end":{"line":153,"column":3}}]},"2":{"type":"branch","line":155,"loc":{"start":{"line":155,"column":41},"end":{"line":170,"column":3}},"locations":[{"start":{"line":155,"column":41},"end":{"line":170,"column":3}}]},"3":{"type":"branch","line":156,"loc":{"start":{"line":156,"column":14},"end":{"line":162,"column":5}},"locations":[{"start":{"line":156,"column":14},"end":{"line":162,"column":5}}]},"4":{"type":"branch","line":164,"loc":{"start":{"line":164,"column":52},"end":{"line":166,"column":5}},"locations":[{"start":{"line":164,"column":52},"end":{"line":166,"column":5}}]},"5":{"type":"branch","line":167,"loc":{"start":{"line":167,"column":44},"end":{"line":169,"column":5}},"locations":[{"start":{"line":167,"column":44},"end":{"line":169,"column":5}}]},"6":{"type":"branch","line":174,"loc":{"start":{"line":174,"column":40},"end":{"line":188,"column":3}},"locations":[{"start":{"line":174,"column":40},"end":{"line":188,"column":3}}]},"7":{"type":"branch","line":175,"loc":{"start":{"line":175,"column":14},"end":{"line":180,"column":5}},"locations":[{"start":{"line":175,"column":14},"end":{"line":180,"column":5}}]},"8":{"type":"branch","line":182,"loc":{"start":{"line":182,"column":52},"end":{"line":184,"column":5}},"locations":[{"start":{"line":182,"column":52},"end":{"line":184,"column":5}}]},"9":{"type":"branch","line":185,"loc":{"start":{"line":185,"column":44},"end":{"line":187,"column":5}},"locations":[{"start":{"line":185,"column":44},"end":{"line":187,"column":5}}]},"10":{"type":"branch","line":192,"loc":{"start":{"line":192,"column":34},"end":{"line":205,"column":3}},"locations":[{"start":{"line":192,"column":34},"end":{"line":205,"column":3}}]},"11":{"type":"branch","line":193,"loc":{"start":{"line":193,"column":14},"end":{"line":197,"column":5}},"locations":[{"start":{"line":193,"column":14},"end":{"line":197,"column":5}}]},"12":{"type":"branch","line":199,"loc":{"start":{"line":199,"column":52},"end":{"line":201,"column":5}},"locations":[{"start":{"line":199,"column":52},"end":{"line":201,"column":5}}]},"13":{"type":"branch","line":202,"loc":{"start":{"line":202,"column":44},"end":{"line":204,"column":5}},"locations":[{"start":{"line":202,"column":44},"end":{"line":204,"column":5}}]}},"b":{"0":[1],"1":[1],"2":[1],"3":[1],"4":[1],"5":[1],"6":[1],"7":[1],"8":[1],"9":[1],"10":[1],"11":[1],"12":[1],"13":[1]},"fnMap":{"0":{"name":"_jwt","decl":{"start":{"line":151,"column":15},"end":{"line":153,"column":3}},"loc":{"start":{"line":151,"column":15},"end":{"line":153,"column":3}},"line":151}},"f":{"0":1}}
+,"/local/embruch/ragchat-api/__tests__/ai/delete.test.js": {"path":"/local/embruch/ragchat-api/__tests__/ai/delete.test.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":33}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":104}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":34}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":31}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":0}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":12}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":27}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":32}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":13}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":0}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":31}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":11}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":31}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":0}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":31}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":9}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":31}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":53}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":17}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":0}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":20}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":53}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":17}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":0}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":31}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":9}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":31}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":0}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":35}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":30}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":98}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":4}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":0}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":54}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":27}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":37}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":22}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":99}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":37}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":7}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":0}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":59}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":40}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":7}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":51}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":46}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":7}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":5}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":0}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":33}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":0}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":51}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":27}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":72}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":0}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":72}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":35}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":25}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":73}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":0}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":37}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":22}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":99}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":21}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":7}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":0}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":59}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":40}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":7}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":51}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":46}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":7}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":5}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":0}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":0}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":33}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":0}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":55}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":27}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":56}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":0}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":37}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":22}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":99}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":21}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":7}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":0}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":59}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":40}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":7}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":51}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":46}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":7}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":5}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":0}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":33}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":0}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":50}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":27}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":0}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":66}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":52}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":9}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":0}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":37}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":22}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":75}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":37}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":7}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":0}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":59}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":40}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":7}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":51}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":46}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":7}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":5}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":0}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":33}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":0}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":47}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":27}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":37}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":22}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":47}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":37}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":7}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":0}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":59}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":40}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":7}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":51}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":46}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":7}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":5}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":0}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":33}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":0}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":41}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":27}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":37}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":22}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":37}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":7}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":0}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":59}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":40}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":7}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":51}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":46}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":7}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":5}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":0}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":3}}},"s":{"0":1,"1":1,"2":1,"3":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"47":1,"48":1,"49":1,"50":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":4,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":1,"98":1,"99":1,"100":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1,"108":1,"109":1,"110":1,"111":1,"112":1,"113":1,"114":1,"115":1,"116":1,"117":1,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1,"124":1,"125":1,"126":1,"127":1,"128":1,"129":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":0,"136":1,"137":1,"138":1,"139":1,"140":1,"141":1,"142":1,"143":1,"144":1,"145":1,"146":1,"147":1,"148":1,"149":1,"150":1,"151":1,"152":1,"153":1,"154":1,"155":1,"156":1,"157":1,"158":1,"159":1,"160":1,"161":1,"162":1,"163":1,"164":1,"165":1,"166":1,"167":1,"168":1,"169":1,"170":1,"171":1,"172":1,"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":1,"180":1,"181":1,"182":1,"183":1,"184":1,"185":1,"186":1,"187":1},"branchMap":{"0":{"type":"branch","line":63,"loc":{"start":{"line":63,"column":28},"end":{"line":188,"column":2}},"locations":[{"start":{"line":63,"column":28},"end":{"line":188,"column":2}}]},"1":{"type":"branch","line":64,"loc":{"start":{"line":64,"column":15},"end":{"line":66,"column":3}},"locations":[{"start":{"line":64,"column":15},"end":{"line":66,"column":3}}]},"2":{"type":"branch","line":68,"loc":{"start":{"line":68,"column":41},"end":{"line":82,"column":3}},"locations":[{"start":{"line":68,"column":41},"end":{"line":82,"column":3}}]},"3":{"type":"branch","line":69,"loc":{"start":{"line":69,"column":14},"end":{"line":74,"column":5}},"locations":[{"start":{"line":69,"column":14},"end":{"line":74,"column":5}}]},"4":{"type":"branch","line":76,"loc":{"start":{"line":76,"column":52},"end":{"line":78,"column":5}},"locations":[{"start":{"line":76,"column":52},"end":{"line":78,"column":5}}]},"5":{"type":"branch","line":79,"loc":{"start":{"line":79,"column":44},"end":{"line":81,"column":5}},"locations":[{"start":{"line":79,"column":44},"end":{"line":81,"column":5}}]},"6":{"type":"branch","line":86,"loc":{"start":{"line":86,"column":44},"end":{"line":107,"column":3}},"locations":[{"start":{"line":86,"column":44},"end":{"line":107,"column":3}}]},"7":{"type":"branch","line":87,"loc":{"start":{"line":87,"column":14},"end":{"line":99,"column":5}},"locations":[{"start":{"line":87,"column":14},"end":{"line":99,"column":5}}]},"8":{"type":"branch","line":93,"loc":{"start":{"line":93,"column":49},"end":{"line":93,"column":71}},"locations":[{"start":{"line":93,"column":49},"end":{"line":93,"column":71}}]},"9":{"type":"branch","line":101,"loc":{"start":{"line":101,"column":52},"end":{"line":103,"column":5}},"locations":[{"start":{"line":101,"column":52},"end":{"line":103,"column":5}}]},"10":{"type":"branch","line":104,"loc":{"start":{"line":104,"column":44},"end":{"line":106,"column":5}},"locations":[{"start":{"line":104,"column":44},"end":{"line":106,"column":5}}]},"11":{"type":"branch","line":112,"loc":{"start":{"line":112,"column":48},"end":{"line":128,"column":3}},"locations":[{"start":{"line":112,"column":48},"end":{"line":128,"column":3}}]},"12":{"type":"branch","line":113,"loc":{"start":{"line":113,"column":14},"end":{"line":120,"column":5}},"locations":[{"start":{"line":113,"column":14},"end":{"line":120,"column":5}}]},"13":{"type":"branch","line":122,"loc":{"start":{"line":122,"column":52},"end":{"line":124,"column":5}},"locations":[{"start":{"line":122,"column":52},"end":{"line":124,"column":5}}]},"14":{"type":"branch","line":125,"loc":{"start":{"line":125,"column":44},"end":{"line":127,"column":5}},"locations":[{"start":{"line":125,"column":44},"end":{"line":127,"column":5}}]},"15":{"type":"branch","line":132,"loc":{"start":{"line":132,"column":43},"end":{"line":151,"column":3}},"locations":[{"start":{"line":132,"column":43},"end":{"line":151,"column":3}}]},"16":{"type":"branch","line":133,"loc":{"start":{"line":133,"column":14},"end":{"line":143,"column":5}},"locations":[{"start":{"line":133,"column":14},"end":{"line":143,"column":5}}]},"17":{"type":"branch","line":145,"loc":{"start":{"line":145,"column":52},"end":{"line":147,"column":5}},"locations":[{"start":{"line":145,"column":52},"end":{"line":147,"column":5}}]},"18":{"type":"branch","line":148,"loc":{"start":{"line":148,"column":44},"end":{"line":150,"column":5}},"locations":[{"start":{"line":148,"column":44},"end":{"line":150,"column":5}}]},"19":{"type":"branch","line":155,"loc":{"start":{"line":155,"column":40},"end":{"line":169,"column":3}},"locations":[{"start":{"line":155,"column":40},"end":{"line":169,"column":3}}]},"20":{"type":"branch","line":156,"loc":{"start":{"line":156,"column":14},"end":{"line":161,"column":5}},"locations":[{"start":{"line":156,"column":14},"end":{"line":161,"column":5}}]},"21":{"type":"branch","line":163,"loc":{"start":{"line":163,"column":52},"end":{"line":165,"column":5}},"locations":[{"start":{"line":163,"column":52},"end":{"line":165,"column":5}}]},"22":{"type":"branch","line":166,"loc":{"start":{"line":166,"column":44},"end":{"line":168,"column":5}},"locations":[{"start":{"line":166,"column":44},"end":{"line":168,"column":5}}]},"23":{"type":"branch","line":173,"loc":{"start":{"line":173,"column":34},"end":{"line":186,"column":3}},"locations":[{"start":{"line":173,"column":34},"end":{"line":186,"column":3}}]},"24":{"type":"branch","line":174,"loc":{"start":{"line":174,"column":14},"end":{"line":178,"column":5}},"locations":[{"start":{"line":174,"column":14},"end":{"line":178,"column":5}}]},"25":{"type":"branch","line":180,"loc":{"start":{"line":180,"column":52},"end":{"line":182,"column":5}},"locations":[{"start":{"line":180,"column":52},"end":{"line":182,"column":5}}]},"26":{"type":"branch","line":183,"loc":{"start":{"line":183,"column":44},"end":{"line":185,"column":5}},"locations":[{"start":{"line":183,"column":44},"end":{"line":185,"column":5}}]}},"b":{"0":[1],"1":[4],"2":[1],"3":[1],"4":[1],"5":[1],"6":[1],"7":[1],"8":[1],"9":[1],"10":[1],"11":[1],"12":[1],"13":[1],"14":[1],"15":[1],"16":[1],"17":[1],"18":[1],"19":[1],"20":[1],"21":[1],"22":[1],"23":[1],"24":[1],"25":[1],"26":[1]},"fnMap":{"0":{"name":"_jwt","decl":{"start":{"line":64,"column":15},"end":{"line":66,"column":3}},"loc":{"start":{"line":64,"column":15},"end":{"line":66,"column":3}},"line":64}},"f":{"0":4}}
+,"/local/embruch/ragchat-api/__tests__/ai/model.test.js": {"path":"/local/embruch/ragchat-api/__tests__/ai/model.test.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":33}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":104}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":34}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":31}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":0}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":12}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":26}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":32}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":13}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":0}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":31}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":11}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":31}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":0}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":0}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":0}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":31}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":9}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":31}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":53}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":17}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":0}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":17}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":53}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":0}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":31}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":9}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":31}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":0}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":0}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":28}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":22}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":150}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":4}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":0}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":48}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":27}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":37}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":20}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":49}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":37}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":7}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":52}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":40}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":7}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":51}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":45}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":36}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":38}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":39}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":37}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":9}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":7}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":5}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":0}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":0}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":0}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":33}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":0}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":51}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":27}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":53}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":35}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":25}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":70}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":0}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":37}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":20}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":49}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":32}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":7}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":52}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":40}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":7}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":51}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":46}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":7}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":5}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":0}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":33}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":0}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":55}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":27}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":56}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":0}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":37}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":20}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":49}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":21}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":7}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":0}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":59}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":40}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":7}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":51}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":46}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":7}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":5}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":0}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":33}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":0}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":47}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":27}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":37}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":20}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":47}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":37}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":7}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":0}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":59}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":40}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":7}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":51}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":46}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":7}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":5}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":0}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":33}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":0}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":41}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":27}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":37}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":20}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":37}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":7}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":0}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":59}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":40}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":7}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":51}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":46}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":7}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":5}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":0}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":3}}},"s":{"0":1,"1":1,"2":1,"3":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"52":1,"53":1,"54":1,"55":1,"56":1,"57":1,"65":1,"66":1,"67":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":3,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":1,"98":1,"99":1,"100":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1,"108":1,"109":1,"110":1,"111":1,"112":1,"113":1,"114":1,"115":1,"116":1,"117":1,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1,"124":1,"125":1,"126":1,"127":1,"128":1,"129":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":1,"136":1,"137":1,"138":1,"139":1,"140":1,"141":1,"142":1,"143":1,"144":1,"145":1,"146":1,"147":1,"148":1,"149":1,"150":1,"151":1,"152":1,"153":1,"154":1,"155":1,"156":1,"157":1,"158":1,"159":1,"160":1,"161":1,"162":1,"163":1,"164":1,"165":1,"166":1,"167":1,"168":1,"169":1,"170":1,"171":1,"172":1,"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":1,"180":1,"181":1,"182":1,"183":1,"184":1},"branchMap":{"0":{"type":"branch","line":81,"loc":{"start":{"line":81,"column":21},"end":{"line":185,"column":2}},"locations":[{"start":{"line":81,"column":21},"end":{"line":185,"column":2}}]},"1":{"type":"branch","line":82,"loc":{"start":{"line":82,"column":15},"end":{"line":84,"column":3}},"locations":[{"start":{"line":82,"column":15},"end":{"line":84,"column":3}}]},"2":{"type":"branch","line":86,"loc":{"start":{"line":86,"column":41},"end":{"line":104,"column":3}},"locations":[{"start":{"line":86,"column":41},"end":{"line":104,"column":3}}]},"3":{"type":"branch","line":87,"loc":{"start":{"line":87,"column":14},"end":{"line":92,"column":5}},"locations":[{"start":{"line":87,"column":14},"end":{"line":92,"column":5}}]},"4":{"type":"branch","line":93,"loc":{"start":{"line":93,"column":45},"end":{"line":95,"column":5}},"locations":[{"start":{"line":93,"column":45},"end":{"line":95,"column":5}}]},"5":{"type":"branch","line":96,"loc":{"start":{"line":96,"column":44},"end":{"line":103,"column":5}},"locations":[{"start":{"line":96,"column":44},"end":{"line":103,"column":5}}]},"6":{"type":"branch","line":110,"loc":{"start":{"line":110,"column":44},"end":{"line":128,"column":3}},"locations":[{"start":{"line":110,"column":44},"end":{"line":128,"column":3}}]},"7":{"type":"branch","line":111,"loc":{"start":{"line":111,"column":14},"end":{"line":121,"column":5}},"locations":[{"start":{"line":111,"column":14},"end":{"line":121,"column":5}}]},"8":{"type":"branch","line":115,"loc":{"start":{"line":115,"column":46},"end":{"line":115,"column":68}},"locations":[{"start":{"line":115,"column":46},"end":{"line":115,"column":68}}]},"9":{"type":"branch","line":122,"loc":{"start":{"line":122,"column":45},"end":{"line":124,"column":5}},"locations":[{"start":{"line":122,"column":45},"end":{"line":124,"column":5}}]},"10":{"type":"branch","line":125,"loc":{"start":{"line":125,"column":44},"end":{"line":127,"column":5}},"locations":[{"start":{"line":125,"column":44},"end":{"line":127,"column":5}}]},"11":{"type":"branch","line":132,"loc":{"start":{"line":132,"column":48},"end":{"line":148,"column":3}},"locations":[{"start":{"line":132,"column":48},"end":{"line":148,"column":3}}]},"12":{"type":"branch","line":133,"loc":{"start":{"line":133,"column":14},"end":{"line":140,"column":5}},"locations":[{"start":{"line":133,"column":14},"end":{"line":140,"column":5}}]},"13":{"type":"branch","line":142,"loc":{"start":{"line":142,"column":52},"end":{"line":144,"column":5}},"locations":[{"start":{"line":142,"column":52},"end":{"line":144,"column":5}}]},"14":{"type":"branch","line":145,"loc":{"start":{"line":145,"column":44},"end":{"line":147,"column":5}},"locations":[{"start":{"line":145,"column":44},"end":{"line":147,"column":5}}]},"15":{"type":"branch","line":152,"loc":{"start":{"line":152,"column":40},"end":{"line":166,"column":3}},"locations":[{"start":{"line":152,"column":40},"end":{"line":166,"column":3}}]},"16":{"type":"branch","line":153,"loc":{"start":{"line":153,"column":14},"end":{"line":158,"column":5}},"locations":[{"start":{"line":153,"column":14},"end":{"line":158,"column":5}}]},"17":{"type":"branch","line":160,"loc":{"start":{"line":160,"column":52},"end":{"line":162,"column":5}},"locations":[{"start":{"line":160,"column":52},"end":{"line":162,"column":5}}]},"18":{"type":"branch","line":163,"loc":{"start":{"line":163,"column":44},"end":{"line":165,"column":5}},"locations":[{"start":{"line":163,"column":44},"end":{"line":165,"column":5}}]},"19":{"type":"branch","line":170,"loc":{"start":{"line":170,"column":34},"end":{"line":183,"column":3}},"locations":[{"start":{"line":170,"column":34},"end":{"line":183,"column":3}}]},"20":{"type":"branch","line":171,"loc":{"start":{"line":171,"column":14},"end":{"line":175,"column":5}},"locations":[{"start":{"line":171,"column":14},"end":{"line":175,"column":5}}]},"21":{"type":"branch","line":177,"loc":{"start":{"line":177,"column":52},"end":{"line":179,"column":5}},"locations":[{"start":{"line":177,"column":52},"end":{"line":179,"column":5}}]},"22":{"type":"branch","line":180,"loc":{"start":{"line":180,"column":44},"end":{"line":182,"column":5}},"locations":[{"start":{"line":180,"column":44},"end":{"line":182,"column":5}}]}},"b":{"0":[1],"1":[3],"2":[1],"3":[1],"4":[1],"5":[1],"6":[1],"7":[1],"8":[1],"9":[1],"10":[1],"11":[1],"12":[1],"13":[1],"14":[1],"15":[1],"16":[1],"17":[1],"18":[1],"19":[1],"20":[1],"21":[1],"22":[1]},"fnMap":{"0":{"name":"_jwt","decl":{"start":{"line":82,"column":15},"end":{"line":84,"column":3}},"loc":{"start":{"line":82,"column":15},"end":{"line":84,"column":3}},"line":82}},"f":{"0":3}}
+,"/local/embruch/ragchat-api/__tests__/ai/models.test.js": {"path":"/local/embruch/ragchat-api/__tests__/ai/models.test.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":33}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":104}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":34}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":31}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":0}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":12}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":27}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":32}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":13}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":0}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":31}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":11}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":31}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":0}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":31}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":9}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":31}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":26}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":53}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":17}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":0}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":17}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":53}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":0}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":31}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":9}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":31}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":0}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":29}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":22}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":150}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":4}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":0}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":48}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":27}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":37}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":20}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":49}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":37}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":7}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":0}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":59}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":40}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":7}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":51}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":46}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":7}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":5}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":0}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":33}},"205":{"start":{"line":206,"column":0},"end":{"line":206,"column":0}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":51}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":27}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":72}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":0}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":81}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":0}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":0}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":37}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":20}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":99}},"216":{"start":{"line":217,"column":0},"end":{"line":217,"column":21}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":7}},"218":{"start":{"line":219,"column":0},"end":{"line":219,"column":0}},"219":{"start":{"line":220,"column":0},"end":{"line":220,"column":59}},"220":{"start":{"line":221,"column":0},"end":{"line":221,"column":40}},"221":{"start":{"line":222,"column":0},"end":{"line":222,"column":7}},"222":{"start":{"line":223,"column":0},"end":{"line":223,"column":51}},"223":{"start":{"line":224,"column":0},"end":{"line":224,"column":46}},"224":{"start":{"line":225,"column":0},"end":{"line":225,"column":7}},"225":{"start":{"line":226,"column":0},"end":{"line":226,"column":5}},"226":{"start":{"line":227,"column":0},"end":{"line":227,"column":0}},"227":{"start":{"line":228,"column":0},"end":{"line":228,"column":33}},"228":{"start":{"line":229,"column":0},"end":{"line":229,"column":0}},"229":{"start":{"line":230,"column":0},"end":{"line":230,"column":55}},"230":{"start":{"line":231,"column":0},"end":{"line":231,"column":27}},"231":{"start":{"line":232,"column":0},"end":{"line":232,"column":57}},"232":{"start":{"line":233,"column":0},"end":{"line":233,"column":0}},"233":{"start":{"line":234,"column":0},"end":{"line":234,"column":37}},"234":{"start":{"line":235,"column":0},"end":{"line":235,"column":20}},"235":{"start":{"line":236,"column":0},"end":{"line":236,"column":49}},"236":{"start":{"line":237,"column":0},"end":{"line":237,"column":21}},"237":{"start":{"line":238,"column":0},"end":{"line":238,"column":7}},"238":{"start":{"line":239,"column":0},"end":{"line":239,"column":0}},"239":{"start":{"line":240,"column":0},"end":{"line":240,"column":59}},"240":{"start":{"line":241,"column":0},"end":{"line":241,"column":40}},"241":{"start":{"line":242,"column":0},"end":{"line":242,"column":7}},"242":{"start":{"line":243,"column":0},"end":{"line":243,"column":51}},"243":{"start":{"line":244,"column":0},"end":{"line":244,"column":46}},"244":{"start":{"line":245,"column":0},"end":{"line":245,"column":7}},"245":{"start":{"line":246,"column":0},"end":{"line":246,"column":5}},"246":{"start":{"line":247,"column":0},"end":{"line":247,"column":0}},"247":{"start":{"line":248,"column":0},"end":{"line":248,"column":33}},"248":{"start":{"line":249,"column":0},"end":{"line":249,"column":0}},"249":{"start":{"line":250,"column":0},"end":{"line":250,"column":47}},"250":{"start":{"line":251,"column":0},"end":{"line":251,"column":27}},"251":{"start":{"line":252,"column":0},"end":{"line":252,"column":37}},"252":{"start":{"line":253,"column":0},"end":{"line":253,"column":20}},"253":{"start":{"line":254,"column":0},"end":{"line":254,"column":47}},"254":{"start":{"line":255,"column":0},"end":{"line":255,"column":37}},"255":{"start":{"line":256,"column":0},"end":{"line":256,"column":7}},"256":{"start":{"line":257,"column":0},"end":{"line":257,"column":0}},"257":{"start":{"line":258,"column":0},"end":{"line":258,"column":59}},"258":{"start":{"line":259,"column":0},"end":{"line":259,"column":40}},"259":{"start":{"line":260,"column":0},"end":{"line":260,"column":7}},"260":{"start":{"line":261,"column":0},"end":{"line":261,"column":51}},"261":{"start":{"line":262,"column":0},"end":{"line":262,"column":46}},"262":{"start":{"line":263,"column":0},"end":{"line":263,"column":7}},"263":{"start":{"line":264,"column":0},"end":{"line":264,"column":5}},"264":{"start":{"line":265,"column":0},"end":{"line":265,"column":0}},"265":{"start":{"line":266,"column":0},"end":{"line":266,"column":33}},"266":{"start":{"line":267,"column":0},"end":{"line":267,"column":0}},"267":{"start":{"line":268,"column":0},"end":{"line":268,"column":41}},"268":{"start":{"line":269,"column":0},"end":{"line":269,"column":27}},"269":{"start":{"line":270,"column":0},"end":{"line":270,"column":37}},"270":{"start":{"line":271,"column":0},"end":{"line":271,"column":20}},"271":{"start":{"line":272,"column":0},"end":{"line":272,"column":37}},"272":{"start":{"line":273,"column":0},"end":{"line":273,"column":7}},"273":{"start":{"line":274,"column":0},"end":{"line":274,"column":0}},"274":{"start":{"line":275,"column":0},"end":{"line":275,"column":59}},"275":{"start":{"line":276,"column":0},"end":{"line":276,"column":40}},"276":{"start":{"line":277,"column":0},"end":{"line":277,"column":7}},"277":{"start":{"line":278,"column":0},"end":{"line":278,"column":51}},"278":{"start":{"line":279,"column":0},"end":{"line":279,"column":46}},"279":{"start":{"line":280,"column":0},"end":{"line":280,"column":7}},"280":{"start":{"line":281,"column":0},"end":{"line":281,"column":5}},"281":{"start":{"line":282,"column":0},"end":{"line":282,"column":0}},"282":{"start":{"line":283,"column":0},"end":{"line":283,"column":3}}},"s":{"0":1,"1":1,"2":1,"3":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"155":1,"156":1,"157":1,"158":1,"159":1,"160":1,"161":1,"169":1,"170":1,"171":1,"178":1,"179":1,"180":1,"181":1,"182":1,"183":1,"184":1,"185":3,"186":1,"187":1,"188":1,"189":1,"190":1,"191":1,"192":1,"193":1,"194":1,"195":1,"196":1,"197":1,"198":1,"199":1,"200":1,"201":1,"202":1,"203":1,"204":1,"205":1,"206":1,"207":1,"208":1,"209":1,"210":1,"211":1,"212":1,"213":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"221":1,"222":1,"223":1,"224":1,"225":1,"226":1,"227":1,"228":1,"229":1,"230":1,"231":1,"232":1,"233":1,"234":1,"235":1,"236":1,"237":1,"238":1,"239":1,"240":1,"241":1,"242":1,"243":1,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"250":1,"251":1,"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1,"262":1,"263":1,"264":1,"265":1,"266":1,"267":1,"268":1,"269":1,"270":1,"271":1,"272":1,"273":1,"274":1,"275":1,"276":1,"277":1,"278":1,"279":1,"280":1,"281":1,"282":1},"branchMap":{"0":{"type":"branch","line":184,"loc":{"start":{"line":184,"column":22},"end":{"line":283,"column":2}},"locations":[{"start":{"line":184,"column":22},"end":{"line":283,"column":2}}]},"1":{"type":"branch","line":185,"loc":{"start":{"line":185,"column":15},"end":{"line":187,"column":3}},"locations":[{"start":{"line":185,"column":15},"end":{"line":187,"column":3}}]},"2":{"type":"branch","line":189,"loc":{"start":{"line":189,"column":41},"end":{"line":203,"column":3}},"locations":[{"start":{"line":189,"column":41},"end":{"line":203,"column":3}}]},"3":{"type":"branch","line":190,"loc":{"start":{"line":190,"column":14},"end":{"line":195,"column":5}},"locations":[{"start":{"line":190,"column":14},"end":{"line":195,"column":5}}]},"4":{"type":"branch","line":197,"loc":{"start":{"line":197,"column":52},"end":{"line":199,"column":5}},"locations":[{"start":{"line":197,"column":52},"end":{"line":199,"column":5}}]},"5":{"type":"branch","line":200,"loc":{"start":{"line":200,"column":44},"end":{"line":202,"column":5}},"locations":[{"start":{"line":200,"column":44},"end":{"line":202,"column":5}}]},"6":{"type":"branch","line":207,"loc":{"start":{"line":207,"column":44},"end":{"line":226,"column":3}},"locations":[{"start":{"line":207,"column":44},"end":{"line":226,"column":3}}]},"7":{"type":"branch","line":208,"loc":{"start":{"line":208,"column":14},"end":{"line":218,"column":5}},"locations":[{"start":{"line":208,"column":14},"end":{"line":218,"column":5}}]},"8":{"type":"branch","line":211,"loc":{"start":{"line":211,"column":47},"end":{"line":211,"column":79}},"locations":[{"start":{"line":211,"column":47},"end":{"line":211,"column":79}}]},"9":{"type":"branch","line":220,"loc":{"start":{"line":220,"column":52},"end":{"line":222,"column":5}},"locations":[{"start":{"line":220,"column":52},"end":{"line":222,"column":5}}]},"10":{"type":"branch","line":223,"loc":{"start":{"line":223,"column":44},"end":{"line":225,"column":5}},"locations":[{"start":{"line":223,"column":44},"end":{"line":225,"column":5}}]},"11":{"type":"branch","line":230,"loc":{"start":{"line":230,"column":48},"end":{"line":246,"column":3}},"locations":[{"start":{"line":230,"column":48},"end":{"line":246,"column":3}}]},"12":{"type":"branch","line":231,"loc":{"start":{"line":231,"column":14},"end":{"line":238,"column":5}},"locations":[{"start":{"line":231,"column":14},"end":{"line":238,"column":5}}]},"13":{"type":"branch","line":240,"loc":{"start":{"line":240,"column":52},"end":{"line":242,"column":5}},"locations":[{"start":{"line":240,"column":52},"end":{"line":242,"column":5}}]},"14":{"type":"branch","line":243,"loc":{"start":{"line":243,"column":44},"end":{"line":245,"column":5}},"locations":[{"start":{"line":243,"column":44},"end":{"line":245,"column":5}}]},"15":{"type":"branch","line":250,"loc":{"start":{"line":250,"column":40},"end":{"line":264,"column":3}},"locations":[{"start":{"line":250,"column":40},"end":{"line":264,"column":3}}]},"16":{"type":"branch","line":251,"loc":{"start":{"line":251,"column":14},"end":{"line":256,"column":5}},"locations":[{"start":{"line":251,"column":14},"end":{"line":256,"column":5}}]},"17":{"type":"branch","line":258,"loc":{"start":{"line":258,"column":52},"end":{"line":260,"column":5}},"locations":[{"start":{"line":258,"column":52},"end":{"line":260,"column":5}}]},"18":{"type":"branch","line":261,"loc":{"start":{"line":261,"column":44},"end":{"line":263,"column":5}},"locations":[{"start":{"line":261,"column":44},"end":{"line":263,"column":5}}]},"19":{"type":"branch","line":268,"loc":{"start":{"line":268,"column":34},"end":{"line":281,"column":3}},"locations":[{"start":{"line":268,"column":34},"end":{"line":281,"column":3}}]},"20":{"type":"branch","line":269,"loc":{"start":{"line":269,"column":14},"end":{"line":273,"column":5}},"locations":[{"start":{"line":269,"column":14},"end":{"line":273,"column":5}}]},"21":{"type":"branch","line":275,"loc":{"start":{"line":275,"column":52},"end":{"line":277,"column":5}},"locations":[{"start":{"line":275,"column":52},"end":{"line":277,"column":5}}]},"22":{"type":"branch","line":278,"loc":{"start":{"line":278,"column":44},"end":{"line":280,"column":5}},"locations":[{"start":{"line":278,"column":44},"end":{"line":280,"column":5}}]}},"b":{"0":[1],"1":[3],"2":[1],"3":[1],"4":[1],"5":[1],"6":[1],"7":[1],"8":[1],"9":[1],"10":[1],"11":[1],"12":[1],"13":[1],"14":[1],"15":[1],"16":[1],"17":[1],"18":[1],"19":[1],"20":[1],"21":[1],"22":[1]},"fnMap":{"0":{"name":"_jwt","decl":{"start":{"line":185,"column":15},"end":{"line":187,"column":3}},"loc":{"start":{"line":185,"column":15},"end":{"line":187,"column":3}},"line":185}},"f":{"0":3}}
+,"/local/embruch/ragchat-api/__tests__/ai/pull.test.js": {"path":"/local/embruch/ragchat-api/__tests__/ai/pull.test.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":33}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":104}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":34}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":31}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":0}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":12}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":27}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":32}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":13}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":0}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":31}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":11}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":31}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":0}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":31}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":9}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":31}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":53}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":17}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":0}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":20}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":53}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":17}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":0}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":31}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":9}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":31}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":0}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":33}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":30}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":98}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":4}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":0}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":54}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":27}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":37}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":19}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":99}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":37}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":7}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":0}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":59}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":40}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":7}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":51}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":46}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":7}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":5}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":0}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":0}},"205":{"start":{"line":206,"column":0},"end":{"line":206,"column":33}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":0}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":51}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":27}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":72}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":0}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":72}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":35}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":25}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":74}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":0}},"216":{"start":{"line":217,"column":0},"end":{"line":217,"column":37}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":19}},"218":{"start":{"line":219,"column":0},"end":{"line":219,"column":99}},"219":{"start":{"line":220,"column":0},"end":{"line":220,"column":21}},"220":{"start":{"line":221,"column":0},"end":{"line":221,"column":7}},"221":{"start":{"line":222,"column":0},"end":{"line":222,"column":0}},"222":{"start":{"line":223,"column":0},"end":{"line":223,"column":59}},"223":{"start":{"line":224,"column":0},"end":{"line":224,"column":40}},"224":{"start":{"line":225,"column":0},"end":{"line":225,"column":7}},"225":{"start":{"line":226,"column":0},"end":{"line":226,"column":51}},"226":{"start":{"line":227,"column":0},"end":{"line":227,"column":46}},"227":{"start":{"line":228,"column":0},"end":{"line":228,"column":7}},"228":{"start":{"line":229,"column":0},"end":{"line":229,"column":5}},"229":{"start":{"line":230,"column":0},"end":{"line":230,"column":0}},"230":{"start":{"line":231,"column":0},"end":{"line":231,"column":33}},"231":{"start":{"line":232,"column":0},"end":{"line":232,"column":0}},"232":{"start":{"line":233,"column":0},"end":{"line":233,"column":55}},"233":{"start":{"line":234,"column":0},"end":{"line":234,"column":27}},"234":{"start":{"line":235,"column":0},"end":{"line":235,"column":56}},"235":{"start":{"line":236,"column":0},"end":{"line":236,"column":0}},"236":{"start":{"line":237,"column":0},"end":{"line":237,"column":37}},"237":{"start":{"line":238,"column":0},"end":{"line":238,"column":19}},"238":{"start":{"line":239,"column":0},"end":{"line":239,"column":99}},"239":{"start":{"line":240,"column":0},"end":{"line":240,"column":21}},"240":{"start":{"line":241,"column":0},"end":{"line":241,"column":7}},"241":{"start":{"line":242,"column":0},"end":{"line":242,"column":0}},"242":{"start":{"line":243,"column":0},"end":{"line":243,"column":59}},"243":{"start":{"line":244,"column":0},"end":{"line":244,"column":40}},"244":{"start":{"line":245,"column":0},"end":{"line":245,"column":7}},"245":{"start":{"line":246,"column":0},"end":{"line":246,"column":51}},"246":{"start":{"line":247,"column":0},"end":{"line":247,"column":46}},"247":{"start":{"line":248,"column":0},"end":{"line":248,"column":7}},"248":{"start":{"line":249,"column":0},"end":{"line":249,"column":5}},"249":{"start":{"line":250,"column":0},"end":{"line":250,"column":0}},"250":{"start":{"line":251,"column":0},"end":{"line":251,"column":33}},"251":{"start":{"line":252,"column":0},"end":{"line":252,"column":0}},"252":{"start":{"line":253,"column":0},"end":{"line":253,"column":50}},"253":{"start":{"line":254,"column":0},"end":{"line":254,"column":27}},"254":{"start":{"line":255,"column":0},"end":{"line":255,"column":0}},"255":{"start":{"line":256,"column":0},"end":{"line":256,"column":66}},"256":{"start":{"line":257,"column":0},"end":{"line":257,"column":52}},"257":{"start":{"line":258,"column":0},"end":{"line":258,"column":9}},"258":{"start":{"line":259,"column":0},"end":{"line":259,"column":0}},"259":{"start":{"line":260,"column":0},"end":{"line":260,"column":37}},"260":{"start":{"line":261,"column":0},"end":{"line":261,"column":19}},"261":{"start":{"line":262,"column":0},"end":{"line":262,"column":75}},"262":{"start":{"line":263,"column":0},"end":{"line":263,"column":37}},"263":{"start":{"line":264,"column":0},"end":{"line":264,"column":7}},"264":{"start":{"line":265,"column":0},"end":{"line":265,"column":0}},"265":{"start":{"line":266,"column":0},"end":{"line":266,"column":59}},"266":{"start":{"line":267,"column":0},"end":{"line":267,"column":40}},"267":{"start":{"line":268,"column":0},"end":{"line":268,"column":7}},"268":{"start":{"line":269,"column":0},"end":{"line":269,"column":51}},"269":{"start":{"line":270,"column":0},"end":{"line":270,"column":46}},"270":{"start":{"line":271,"column":0},"end":{"line":271,"column":7}},"271":{"start":{"line":272,"column":0},"end":{"line":272,"column":5}},"272":{"start":{"line":273,"column":0},"end":{"line":273,"column":0}},"273":{"start":{"line":274,"column":0},"end":{"line":274,"column":33}},"274":{"start":{"line":275,"column":0},"end":{"line":275,"column":0}},"275":{"start":{"line":276,"column":0},"end":{"line":276,"column":47}},"276":{"start":{"line":277,"column":0},"end":{"line":277,"column":27}},"277":{"start":{"line":278,"column":0},"end":{"line":278,"column":37}},"278":{"start":{"line":279,"column":0},"end":{"line":279,"column":19}},"279":{"start":{"line":280,"column":0},"end":{"line":280,"column":47}},"280":{"start":{"line":281,"column":0},"end":{"line":281,"column":37}},"281":{"start":{"line":282,"column":0},"end":{"line":282,"column":7}},"282":{"start":{"line":283,"column":0},"end":{"line":283,"column":0}},"283":{"start":{"line":284,"column":0},"end":{"line":284,"column":59}},"284":{"start":{"line":285,"column":0},"end":{"line":285,"column":40}},"285":{"start":{"line":286,"column":0},"end":{"line":286,"column":7}},"286":{"start":{"line":287,"column":0},"end":{"line":287,"column":51}},"287":{"start":{"line":288,"column":0},"end":{"line":288,"column":46}},"288":{"start":{"line":289,"column":0},"end":{"line":289,"column":7}},"289":{"start":{"line":290,"column":0},"end":{"line":290,"column":5}},"290":{"start":{"line":291,"column":0},"end":{"line":291,"column":0}},"291":{"start":{"line":292,"column":0},"end":{"line":292,"column":33}},"292":{"start":{"line":293,"column":0},"end":{"line":293,"column":0}},"293":{"start":{"line":294,"column":0},"end":{"line":294,"column":41}},"294":{"start":{"line":295,"column":0},"end":{"line":295,"column":27}},"295":{"start":{"line":296,"column":0},"end":{"line":296,"column":37}},"296":{"start":{"line":297,"column":0},"end":{"line":297,"column":19}},"297":{"start":{"line":298,"column":0},"end":{"line":298,"column":37}},"298":{"start":{"line":299,"column":0},"end":{"line":299,"column":7}},"299":{"start":{"line":300,"column":0},"end":{"line":300,"column":0}},"300":{"start":{"line":301,"column":0},"end":{"line":301,"column":59}},"301":{"start":{"line":302,"column":0},"end":{"line":302,"column":40}},"302":{"start":{"line":303,"column":0},"end":{"line":303,"column":7}},"303":{"start":{"line":304,"column":0},"end":{"line":304,"column":51}},"304":{"start":{"line":305,"column":0},"end":{"line":305,"column":46}},"305":{"start":{"line":306,"column":0},"end":{"line":306,"column":7}},"306":{"start":{"line":307,"column":0},"end":{"line":307,"column":5}},"307":{"start":{"line":308,"column":0},"end":{"line":308,"column":3}}},"s":{"0":1,"1":1,"2":1,"3":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"155":1,"156":1,"157":1,"158":1,"159":1,"160":1,"168":1,"169":1,"170":1,"171":1,"178":1,"179":1,"180":1,"181":1,"182":1,"183":1,"184":1,"185":4,"186":1,"187":1,"188":1,"189":1,"190":1,"191":1,"192":1,"193":1,"194":1,"195":1,"196":1,"197":1,"198":1,"199":1,"200":1,"201":1,"202":1,"203":1,"204":1,"205":1,"206":1,"207":1,"208":1,"209":1,"210":1,"211":1,"212":1,"213":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"221":1,"222":1,"223":1,"224":1,"225":1,"226":1,"227":1,"228":1,"229":1,"230":1,"231":1,"232":1,"233":1,"234":1,"235":1,"236":1,"237":1,"238":1,"239":1,"240":1,"241":1,"242":1,"243":1,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"250":1,"251":1,"252":1,"253":1,"254":1,"255":1,"256":0,"257":1,"258":1,"259":1,"260":1,"261":1,"262":1,"263":1,"264":1,"265":1,"266":1,"267":1,"268":1,"269":1,"270":1,"271":1,"272":1,"273":1,"274":1,"275":1,"276":1,"277":1,"278":1,"279":1,"280":1,"281":1,"282":1,"283":1,"284":1,"285":1,"286":1,"287":1,"288":1,"289":1,"290":1,"291":1,"292":1,"293":1,"294":1,"295":1,"296":1,"297":1,"298":1,"299":1,"300":1,"301":1,"302":1,"303":1,"304":1,"305":1,"306":1,"307":1},"branchMap":{"0":{"type":"branch","line":184,"loc":{"start":{"line":184,"column":26},"end":{"line":308,"column":2}},"locations":[{"start":{"line":184,"column":26},"end":{"line":308,"column":2}}]},"1":{"type":"branch","line":185,"loc":{"start":{"line":185,"column":15},"end":{"line":187,"column":3}},"locations":[{"start":{"line":185,"column":15},"end":{"line":187,"column":3}}]},"2":{"type":"branch","line":189,"loc":{"start":{"line":189,"column":41},"end":{"line":203,"column":3}},"locations":[{"start":{"line":189,"column":41},"end":{"line":203,"column":3}}]},"3":{"type":"branch","line":190,"loc":{"start":{"line":190,"column":14},"end":{"line":195,"column":5}},"locations":[{"start":{"line":190,"column":14},"end":{"line":195,"column":5}}]},"4":{"type":"branch","line":197,"loc":{"start":{"line":197,"column":52},"end":{"line":199,"column":5}},"locations":[{"start":{"line":197,"column":52},"end":{"line":199,"column":5}}]},"5":{"type":"branch","line":200,"loc":{"start":{"line":200,"column":44},"end":{"line":202,"column":5}},"locations":[{"start":{"line":200,"column":44},"end":{"line":202,"column":5}}]},"6":{"type":"branch","line":208,"loc":{"start":{"line":208,"column":44},"end":{"line":229,"column":3}},"locations":[{"start":{"line":208,"column":44},"end":{"line":229,"column":3}}]},"7":{"type":"branch","line":209,"loc":{"start":{"line":209,"column":14},"end":{"line":221,"column":5}},"locations":[{"start":{"line":209,"column":14},"end":{"line":221,"column":5}}]},"8":{"type":"branch","line":215,"loc":{"start":{"line":215,"column":50},"end":{"line":215,"column":72}},"locations":[{"start":{"line":215,"column":50},"end":{"line":215,"column":72}}]},"9":{"type":"branch","line":223,"loc":{"start":{"line":223,"column":52},"end":{"line":225,"column":5}},"locations":[{"start":{"line":223,"column":52},"end":{"line":225,"column":5}}]},"10":{"type":"branch","line":226,"loc":{"start":{"line":226,"column":44},"end":{"line":228,"column":5}},"locations":[{"start":{"line":226,"column":44},"end":{"line":228,"column":5}}]},"11":{"type":"branch","line":233,"loc":{"start":{"line":233,"column":48},"end":{"line":249,"column":3}},"locations":[{"start":{"line":233,"column":48},"end":{"line":249,"column":3}}]},"12":{"type":"branch","line":234,"loc":{"start":{"line":234,"column":14},"end":{"line":241,"column":5}},"locations":[{"start":{"line":234,"column":14},"end":{"line":241,"column":5}}]},"13":{"type":"branch","line":243,"loc":{"start":{"line":243,"column":52},"end":{"line":245,"column":5}},"locations":[{"start":{"line":243,"column":52},"end":{"line":245,"column":5}}]},"14":{"type":"branch","line":246,"loc":{"start":{"line":246,"column":44},"end":{"line":248,"column":5}},"locations":[{"start":{"line":246,"column":44},"end":{"line":248,"column":5}}]},"15":{"type":"branch","line":253,"loc":{"start":{"line":253,"column":43},"end":{"line":272,"column":3}},"locations":[{"start":{"line":253,"column":43},"end":{"line":272,"column":3}}]},"16":{"type":"branch","line":254,"loc":{"start":{"line":254,"column":14},"end":{"line":264,"column":5}},"locations":[{"start":{"line":254,"column":14},"end":{"line":264,"column":5}}]},"17":{"type":"branch","line":266,"loc":{"start":{"line":266,"column":52},"end":{"line":268,"column":5}},"locations":[{"start":{"line":266,"column":52},"end":{"line":268,"column":5}}]},"18":{"type":"branch","line":269,"loc":{"start":{"line":269,"column":44},"end":{"line":271,"column":5}},"locations":[{"start":{"line":269,"column":44},"end":{"line":271,"column":5}}]},"19":{"type":"branch","line":276,"loc":{"start":{"line":276,"column":40},"end":{"line":290,"column":3}},"locations":[{"start":{"line":276,"column":40},"end":{"line":290,"column":3}}]},"20":{"type":"branch","line":277,"loc":{"start":{"line":277,"column":14},"end":{"line":282,"column":5}},"locations":[{"start":{"line":277,"column":14},"end":{"line":282,"column":5}}]},"21":{"type":"branch","line":284,"loc":{"start":{"line":284,"column":52},"end":{"line":286,"column":5}},"locations":[{"start":{"line":284,"column":52},"end":{"line":286,"column":5}}]},"22":{"type":"branch","line":287,"loc":{"start":{"line":287,"column":44},"end":{"line":289,"column":5}},"locations":[{"start":{"line":287,"column":44},"end":{"line":289,"column":5}}]},"23":{"type":"branch","line":294,"loc":{"start":{"line":294,"column":34},"end":{"line":307,"column":3}},"locations":[{"start":{"line":294,"column":34},"end":{"line":307,"column":3}}]},"24":{"type":"branch","line":295,"loc":{"start":{"line":295,"column":14},"end":{"line":299,"column":5}},"locations":[{"start":{"line":295,"column":14},"end":{"line":299,"column":5}}]},"25":{"type":"branch","line":301,"loc":{"start":{"line":301,"column":52},"end":{"line":303,"column":5}},"locations":[{"start":{"line":301,"column":52},"end":{"line":303,"column":5}}]},"26":{"type":"branch","line":304,"loc":{"start":{"line":304,"column":44},"end":{"line":306,"column":5}},"locations":[{"start":{"line":304,"column":44},"end":{"line":306,"column":5}}]}},"b":{"0":[1],"1":[4],"2":[1],"3":[1],"4":[1],"5":[1],"6":[1],"7":[1],"8":[1],"9":[1],"10":[1],"11":[1],"12":[1],"13":[1],"14":[1],"15":[1],"16":[1],"17":[1],"18":[1],"19":[1],"20":[1],"21":[1],"22":[1],"23":[1],"24":[1],"25":[1],"26":[1]},"fnMap":{"0":{"name":"_jwt","decl":{"start":{"line":185,"column":15},"end":{"line":187,"column":3}},"loc":{"start":{"line":185,"column":15},"end":{"line":187,"column":3}},"line":185}},"f":{"0":4}}
+,"/local/embruch/ragchat-api/__tests__/ai/status.test.js": {"path":"/local/embruch/ragchat-api/__tests__/ai/status.test.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":33}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":104}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":34}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":0}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":12}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":27}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":32}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":13}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":0}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":31}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":11}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":31}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":0}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":31}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":9}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":31}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":26}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":53}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":17}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":20}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":53}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":17}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":0}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":31}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":9}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":31}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":0}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":29}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":41}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":27}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":37}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":20}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":7}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":0}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":52}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":40}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":55}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":46}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":7}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":5}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":0}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":33}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":0}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":45}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":27}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":60}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":37}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":20}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":7}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":52}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":40}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":7}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":51}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":46}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":7}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":5}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":3}}},"s":{"0":1,"1":1,"2":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"44":1,"45":1,"46":1,"53":1,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1},"branchMap":{"0":{"type":"branch","line":59,"loc":{"start":{"line":59,"column":22},"end":{"line":88,"column":2}},"locations":[{"start":{"line":59,"column":22},"end":{"line":88,"column":2}}]},"1":{"type":"branch","line":60,"loc":{"start":{"line":60,"column":34},"end":{"line":71,"column":3}},"locations":[{"start":{"line":60,"column":34},"end":{"line":71,"column":3}}]},"2":{"type":"branch","line":61,"loc":{"start":{"line":61,"column":14},"end":{"line":64,"column":5}},"locations":[{"start":{"line":61,"column":14},"end":{"line":64,"column":5}}]},"3":{"type":"branch","line":66,"loc":{"start":{"line":66,"column":45},"end":{"line":68,"column":5}},"locations":[{"start":{"line":66,"column":45},"end":{"line":68,"column":5}}]},"4":{"type":"branch","line":68,"loc":{"start":{"line":68,"column":48},"end":{"line":70,"column":5}},"locations":[{"start":{"line":68,"column":48},"end":{"line":70,"column":5}}]},"5":{"type":"branch","line":75,"loc":{"start":{"line":75,"column":38},"end":{"line":87,"column":3}},"locations":[{"start":{"line":75,"column":38},"end":{"line":87,"column":3}}]},"6":{"type":"branch","line":76,"loc":{"start":{"line":76,"column":14},"end":{"line":80,"column":5}},"locations":[{"start":{"line":76,"column":14},"end":{"line":80,"column":5}}]},"7":{"type":"branch","line":77,"loc":{"start":{"line":77,"column":47},"end":{"line":77,"column":58}},"locations":[{"start":{"line":77,"column":47},"end":{"line":77,"column":58}}]},"8":{"type":"branch","line":81,"loc":{"start":{"line":81,"column":45},"end":{"line":83,"column":5}},"locations":[{"start":{"line":81,"column":45},"end":{"line":83,"column":5}}]},"9":{"type":"branch","line":84,"loc":{"start":{"line":84,"column":44},"end":{"line":86,"column":5}},"locations":[{"start":{"line":84,"column":44},"end":{"line":86,"column":5}}]}},"b":{"0":[1],"1":[1],"2":[1],"3":[1],"4":[1],"5":[1],"6":[1],"7":[1],"8":[1],"9":[1]},"fnMap":{},"f":{}}
+,"/local/embruch/ragchat-api/__tests__/auth/confirmpasswordreset.test.js": {"path":"/local/embruch/ragchat-api/__tests__/auth/confirmpasswordreset.test.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":33}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":104}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":34}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":31}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":0}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":12}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":37}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":32}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":13}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":0}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":31}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":11}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":31}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":0}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":31}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":9}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":31}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":26}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":53}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":17}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":0}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":23}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":60}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":17}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":0}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":31}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":9}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":31}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":47}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":0}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":56}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":206}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":0}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":36}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":27}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":0}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":56}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":0}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":37}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":21}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":21}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":7}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":0}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":52}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":40}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":7}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":51}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":46}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":7}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":5}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":0}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":0}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":33}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":54}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":73}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":0}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":27}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":37}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":21}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":21}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":7}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":52}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":40}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":7}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":51}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":46}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":7}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":5}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":0}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":33}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":0}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":44}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":27}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":0}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":208}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":0}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":37}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":21}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":21}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":7}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":52}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":40}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":7}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":51}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":46}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":7}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":5}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":0}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":33}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":0}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":55}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":27}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":66}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":0}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":37}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":21}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":21}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":7}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":0}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":59}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":40}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":7}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":51}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":46}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":7}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":5}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":0}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":33}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":0}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":73}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":27}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":82}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":0}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":37}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":21}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":21}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":7}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":0}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":59}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":40}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":7}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":51}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":46}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":7}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":5}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":0}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":33}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":0}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":47}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":27}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":37}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":21}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":16}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":7}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":0}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":59}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":40}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":7}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":51}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":46}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":7}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":5}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":0}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":3}}},"s":{"0":1,"1":1,"2":1,"3":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"52":1,"53":1,"54":1,"55":1,"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":1,"98":1,"99":1,"100":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1,"108":1,"109":1,"110":1,"111":1,"112":1,"113":1,"114":1,"115":1,"116":1,"117":1,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1,"124":1,"125":1,"126":1,"127":1,"128":1,"129":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":1,"136":1,"137":1,"138":1,"139":1,"140":1,"141":1,"142":1,"143":1,"144":1,"145":1,"146":1,"147":1,"148":1,"149":1,"150":1,"151":1,"152":1,"153":1,"154":1,"155":1,"156":1,"157":1,"158":1,"159":1,"160":1,"161":1,"162":1,"163":1,"164":1,"165":1,"166":1,"167":1,"168":1,"169":1,"170":1,"171":1,"172":1,"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":1,"180":1,"181":1},"branchMap":{"0":{"type":"branch","line":67,"loc":{"start":{"line":67,"column":40},"end":{"line":182,"column":2}},"locations":[{"start":{"line":67,"column":40},"end":{"line":182,"column":2}}]},"1":{"type":"branch","line":69,"loc":{"start":{"line":69,"column":43},"end":{"line":88,"column":3}},"locations":[{"start":{"line":69,"column":43},"end":{"line":88,"column":3}}]},"2":{"type":"branch","line":73,"loc":{"start":{"line":73,"column":14},"end":{"line":80,"column":5}},"locations":[{"start":{"line":73,"column":14},"end":{"line":80,"column":5}}]},"3":{"type":"branch","line":82,"loc":{"start":{"line":82,"column":45},"end":{"line":84,"column":5}},"locations":[{"start":{"line":82,"column":45},"end":{"line":84,"column":5}}]},"4":{"type":"branch","line":85,"loc":{"start":{"line":85,"column":44},"end":{"line":87,"column":5}},"locations":[{"start":{"line":85,"column":44},"end":{"line":87,"column":5}}]},"5":{"type":"branch","line":92,"loc":{"start":{"line":92,"column":47},"end":{"line":106,"column":3}},"locations":[{"start":{"line":92,"column":47},"end":{"line":106,"column":3}}]},"6":{"type":"branch","line":95,"loc":{"start":{"line":95,"column":14},"end":{"line":99,"column":5}},"locations":[{"start":{"line":95,"column":14},"end":{"line":99,"column":5}}]},"7":{"type":"branch","line":100,"loc":{"start":{"line":100,"column":45},"end":{"line":102,"column":5}},"locations":[{"start":{"line":100,"column":45},"end":{"line":102,"column":5}}]},"8":{"type":"branch","line":103,"loc":{"start":{"line":103,"column":44},"end":{"line":105,"column":5}},"locations":[{"start":{"line":103,"column":44},"end":{"line":105,"column":5}}]},"9":{"type":"branch","line":110,"loc":{"start":{"line":110,"column":37},"end":{"line":125,"column":3}},"locations":[{"start":{"line":110,"column":37},"end":{"line":125,"column":3}}]},"10":{"type":"branch","line":111,"loc":{"start":{"line":111,"column":14},"end":{"line":118,"column":5}},"locations":[{"start":{"line":111,"column":14},"end":{"line":118,"column":5}}]},"11":{"type":"branch","line":119,"loc":{"start":{"line":119,"column":45},"end":{"line":121,"column":5}},"locations":[{"start":{"line":119,"column":45},"end":{"line":121,"column":5}}]},"12":{"type":"branch","line":122,"loc":{"start":{"line":122,"column":44},"end":{"line":124,"column":5}},"locations":[{"start":{"line":122,"column":44},"end":{"line":124,"column":5}}]},"13":{"type":"branch","line":129,"loc":{"start":{"line":129,"column":48},"end":{"line":144,"column":3}},"locations":[{"start":{"line":129,"column":48},"end":{"line":144,"column":3}}]},"14":{"type":"branch","line":130,"loc":{"start":{"line":130,"column":14},"end":{"line":136,"column":5}},"locations":[{"start":{"line":130,"column":14},"end":{"line":136,"column":5}}]},"15":{"type":"branch","line":138,"loc":{"start":{"line":138,"column":52},"end":{"line":140,"column":5}},"locations":[{"start":{"line":138,"column":52},"end":{"line":140,"column":5}}]},"16":{"type":"branch","line":141,"loc":{"start":{"line":141,"column":44},"end":{"line":143,"column":5}},"locations":[{"start":{"line":141,"column":44},"end":{"line":143,"column":5}}]},"17":{"type":"branch","line":148,"loc":{"start":{"line":148,"column":66},"end":{"line":163,"column":3}},"locations":[{"start":{"line":148,"column":66},"end":{"line":163,"column":3}}]},"18":{"type":"branch","line":149,"loc":{"start":{"line":149,"column":14},"end":{"line":155,"column":5}},"locations":[{"start":{"line":149,"column":14},"end":{"line":155,"column":5}}]},"19":{"type":"branch","line":157,"loc":{"start":{"line":157,"column":52},"end":{"line":159,"column":5}},"locations":[{"start":{"line":157,"column":52},"end":{"line":159,"column":5}}]},"20":{"type":"branch","line":160,"loc":{"start":{"line":160,"column":44},"end":{"line":162,"column":5}},"locations":[{"start":{"line":160,"column":44},"end":{"line":162,"column":5}}]},"21":{"type":"branch","line":167,"loc":{"start":{"line":167,"column":40},"end":{"line":180,"column":3}},"locations":[{"start":{"line":167,"column":40},"end":{"line":180,"column":3}}]},"22":{"type":"branch","line":168,"loc":{"start":{"line":168,"column":14},"end":{"line":172,"column":5}},"locations":[{"start":{"line":168,"column":14},"end":{"line":172,"column":5}}]},"23":{"type":"branch","line":174,"loc":{"start":{"line":174,"column":52},"end":{"line":176,"column":5}},"locations":[{"start":{"line":174,"column":52},"end":{"line":176,"column":5}}]},"24":{"type":"branch","line":177,"loc":{"start":{"line":177,"column":44},"end":{"line":179,"column":5}},"locations":[{"start":{"line":177,"column":44},"end":{"line":179,"column":5}}]}},"b":{"0":[1],"1":[1],"2":[1],"3":[1],"4":[1],"5":[1],"6":[1],"7":[1],"8":[1],"9":[1],"10":[1],"11":[1],"12":[1],"13":[1],"14":[1],"15":[1],"16":[1],"17":[1],"18":[1],"19":[1],"20":[1],"21":[1],"22":[1],"23":[1],"24":[1]},"fnMap":{},"f":{}}
+,"/local/embruch/ragchat-api/__tests__/auth/confirmverification.test.js": {"path":"/local/embruch/ragchat-api/__tests__/auth/confirmverification.test.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":0}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":33}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":104}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":34}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":0}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":12}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":35}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":32}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":13}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":0}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":31}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":11}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":31}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":0}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":31}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":9}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":31}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":26}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":53}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":17}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":23}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":60}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":17}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":0}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":0}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":31}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":9}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":31}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":50}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":0}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":0}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":54}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":36}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":27}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":37}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":21}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":37}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":7}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":52}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":40}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":7}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":51}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":46}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":7}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":5}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":0}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":0}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":33}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":0}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":54}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":36}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":27}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":83}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":78}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":9}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":0}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":73}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":0}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":37}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":21}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":21}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":7}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":0}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":52}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":40}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":7}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":51}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":46}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":7}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":5}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":0}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":33}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":0}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":59}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":36}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":27}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":37}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":21}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":16}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":7}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":52}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":40}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":7}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":51}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":46}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":7}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":5}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":3}}},"s":{"0":1,"1":1,"2":1,"3":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"59":1,"60":1,"61":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":1,"98":1,"99":1,"100":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1,"108":1,"109":1,"110":1,"111":1,"112":1,"113":1,"114":1,"115":1,"116":1,"117":1,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1,"124":1,"125":1,"126":1,"127":1,"128":1,"129":1,"130":1,"131":1,"132":1},"branchMap":{"0":{"type":"branch","line":74,"loc":{"start":{"line":74,"column":43},"end":{"line":133,"column":2}},"locations":[{"start":{"line":74,"column":43},"end":{"line":133,"column":2}}]},"1":{"type":"branch","line":77,"loc":{"start":{"line":77,"column":41},"end":{"line":90,"column":3}},"locations":[{"start":{"line":77,"column":41},"end":{"line":90,"column":3}}]},"2":{"type":"branch","line":79,"loc":{"start":{"line":79,"column":14},"end":{"line":83,"column":5}},"locations":[{"start":{"line":79,"column":14},"end":{"line":83,"column":5}}]},"3":{"type":"branch","line":84,"loc":{"start":{"line":84,"column":45},"end":{"line":86,"column":5}},"locations":[{"start":{"line":84,"column":45},"end":{"line":86,"column":5}}]},"4":{"type":"branch","line":87,"loc":{"start":{"line":87,"column":44},"end":{"line":89,"column":5}},"locations":[{"start":{"line":87,"column":44},"end":{"line":89,"column":5}}]},"5":{"type":"branch","line":95,"loc":{"start":{"line":95,"column":41},"end":{"line":115,"column":3}},"locations":[{"start":{"line":95,"column":41},"end":{"line":115,"column":3}}]},"6":{"type":"branch","line":97,"loc":{"start":{"line":97,"column":14},"end":{"line":107,"column":5}},"locations":[{"start":{"line":97,"column":14},"end":{"line":107,"column":5}}]},"7":{"type":"branch","line":98,"loc":{"start":{"line":98,"column":62},"end":{"line":100,"column":7}},"locations":[{"start":{"line":98,"column":62},"end":{"line":100,"column":7}}]},"8":{"type":"branch","line":109,"loc":{"start":{"line":109,"column":45},"end":{"line":111,"column":5}},"locations":[{"start":{"line":109,"column":45},"end":{"line":111,"column":5}}]},"9":{"type":"branch","line":112,"loc":{"start":{"line":112,"column":44},"end":{"line":114,"column":5}},"locations":[{"start":{"line":112,"column":44},"end":{"line":114,"column":5}}]},"10":{"type":"branch","line":119,"loc":{"start":{"line":119,"column":46},"end":{"line":132,"column":3}},"locations":[{"start":{"line":119,"column":46},"end":{"line":132,"column":3}}]},"11":{"type":"branch","line":121,"loc":{"start":{"line":121,"column":14},"end":{"line":125,"column":5}},"locations":[{"start":{"line":121,"column":14},"end":{"line":125,"column":5}}]},"12":{"type":"branch","line":126,"loc":{"start":{"line":126,"column":45},"end":{"line":128,"column":5}},"locations":[{"start":{"line":126,"column":45},"end":{"line":128,"column":5}}]},"13":{"type":"branch","line":129,"loc":{"start":{"line":129,"column":44},"end":{"line":131,"column":5}},"locations":[{"start":{"line":129,"column":44},"end":{"line":131,"column":5}}]}},"b":{"0":[1],"1":[1],"2":[1],"3":[1],"4":[1],"5":[1],"6":[1],"7":[1],"8":[1],"9":[1],"10":[1],"11":[1],"12":[1],"13":[1]},"fnMap":{},"f":{}}
+,"/local/embruch/ragchat-api/__tests__/auth/login.test.js": {"path":"/local/embruch/ragchat-api/__tests__/auth/login.test.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":33}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":104}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":34}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":31}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":0}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":12}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":28}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":32}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":13}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":0}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":31}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":11}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":31}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":0}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":31}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":9}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":31}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":26}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":53}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":17}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":0}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":31}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":9}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":31}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":36}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":62}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":31}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":97}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":4}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":0}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":48}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":27}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":23}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":66}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":70}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":9}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":0}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":38}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":37}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":20}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":37}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":7}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":0}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":52}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":40}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":7}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":51}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":45}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":40}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":9}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":7}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":5}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":0}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":33}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":0}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":82}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":0}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":27}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":39}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":66}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":87}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":9}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":0}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":38}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":37}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":20}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":37}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":7}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":0}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":52}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":40}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":7}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":51}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":46}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":7}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":5}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":0}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":33}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":0}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":55}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":36}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":27}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":0}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":23}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":66}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":70}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":9}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":0}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":79}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":0}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":37}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":20}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":21}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":7}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":52}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":40}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":7}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":51}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":46}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":7}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":5}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":0}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":33}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":0}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":54}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":36}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":27}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":65}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":0}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":37}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":20}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":37}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":7}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":52}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":40}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":7}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":51}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":46}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":7}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":5}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":0}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":33}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":0}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":59}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":36}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":27}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":37}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":20}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":16}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":7}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":52}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":40}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":7}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":51}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":46}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":7}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":5}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":3}}},"s":{"0":1,"1":1,"2":1,"3":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":1,"57":1,"58":3,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":1,"98":1,"99":1,"100":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1,"108":1,"109":1,"110":1,"111":1,"112":1,"113":1,"114":1,"115":1,"116":1,"117":1,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1,"124":1,"125":1,"126":1,"127":1,"128":1,"129":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":1,"136":1,"137":1,"138":1,"139":1,"140":1,"141":1,"142":1,"143":1,"144":1,"145":1,"146":1,"147":1,"148":1,"149":1,"150":1,"151":1,"152":1,"153":1,"154":1,"155":1,"156":1,"157":1,"158":1,"159":1,"160":1,"161":1,"162":1,"163":1,"164":1,"165":1,"166":1,"167":1,"168":1},"branchMap":{"0":{"type":"branch","line":56,"loc":{"start":{"line":56,"column":23},"end":{"line":169,"column":2}},"locations":[{"start":{"line":56,"column":23},"end":{"line":169,"column":2}}]},"1":{"type":"branch","line":58,"loc":{"start":{"line":58,"column":18},"end":{"line":60,"column":3}},"locations":[{"start":{"line":58,"column":18},"end":{"line":60,"column":3}}]},"2":{"type":"branch","line":62,"loc":{"start":{"line":62,"column":41},"end":{"line":83,"column":3}},"locations":[{"start":{"line":62,"column":41},"end":{"line":83,"column":3}}]},"3":{"type":"branch","line":63,"loc":{"start":{"line":63,"column":14},"end":{"line":73,"column":5}},"locations":[{"start":{"line":63,"column":14},"end":{"line":73,"column":5}}]},"4":{"type":"branch","line":65,"loc":{"start":{"line":65,"column":53},"end":{"line":67,"column":7}},"locations":[{"start":{"line":65,"column":53},"end":{"line":67,"column":7}}]},"5":{"type":"branch","line":75,"loc":{"start":{"line":75,"column":45},"end":{"line":77,"column":5}},"locations":[{"start":{"line":75,"column":45},"end":{"line":77,"column":5}}]},"6":{"type":"branch","line":78,"loc":{"start":{"line":78,"column":44},"end":{"line":82,"column":5}},"locations":[{"start":{"line":78,"column":44},"end":{"line":82,"column":5}}]},"7":{"type":"branch","line":87,"loc":{"start":{"line":87,"column":75},"end":{"line":107,"column":3}},"locations":[{"start":{"line":87,"column":75},"end":{"line":107,"column":3}}]},"8":{"type":"branch","line":89,"loc":{"start":{"line":89,"column":14},"end":{"line":99,"column":5}},"locations":[{"start":{"line":89,"column":14},"end":{"line":99,"column":5}}]},"9":{"type":"branch","line":91,"loc":{"start":{"line":91,"column":53},"end":{"line":93,"column":7}},"locations":[{"start":{"line":91,"column":53},"end":{"line":93,"column":7}}]},"10":{"type":"branch","line":101,"loc":{"start":{"line":101,"column":45},"end":{"line":103,"column":5}},"locations":[{"start":{"line":101,"column":45},"end":{"line":103,"column":5}}]},"11":{"type":"branch","line":104,"loc":{"start":{"line":104,"column":44},"end":{"line":106,"column":5}},"locations":[{"start":{"line":104,"column":44},"end":{"line":106,"column":5}}]},"12":{"type":"branch","line":111,"loc":{"start":{"line":111,"column":42},"end":{"line":132,"column":3}},"locations":[{"start":{"line":111,"column":42},"end":{"line":132,"column":3}}]},"13":{"type":"branch","line":113,"loc":{"start":{"line":113,"column":14},"end":{"line":125,"column":5}},"locations":[{"start":{"line":113,"column":14},"end":{"line":125,"column":5}}]},"14":{"type":"branch","line":116,"loc":{"start":{"line":116,"column":53},"end":{"line":118,"column":7}},"locations":[{"start":{"line":116,"column":53},"end":{"line":118,"column":7}}]},"15":{"type":"branch","line":126,"loc":{"start":{"line":126,"column":45},"end":{"line":128,"column":5}},"locations":[{"start":{"line":126,"column":45},"end":{"line":128,"column":5}}]},"16":{"type":"branch","line":129,"loc":{"start":{"line":129,"column":44},"end":{"line":131,"column":5}},"locations":[{"start":{"line":129,"column":44},"end":{"line":131,"column":5}}]},"17":{"type":"branch","line":136,"loc":{"start":{"line":136,"column":41},"end":{"line":151,"column":3}},"locations":[{"start":{"line":136,"column":41},"end":{"line":151,"column":3}}]},"18":{"type":"branch","line":138,"loc":{"start":{"line":138,"column":14},"end":{"line":144,"column":5}},"locations":[{"start":{"line":138,"column":14},"end":{"line":144,"column":5}}]},"19":{"type":"branch","line":139,"loc":{"start":{"line":139,"column":53},"end":{"line":139,"column":63}},"locations":[{"start":{"line":139,"column":53},"end":{"line":139,"column":63}}]},"20":{"type":"branch","line":145,"loc":{"start":{"line":145,"column":45},"end":{"line":147,"column":5}},"locations":[{"start":{"line":145,"column":45},"end":{"line":147,"column":5}}]},"21":{"type":"branch","line":148,"loc":{"start":{"line":148,"column":44},"end":{"line":150,"column":5}},"locations":[{"start":{"line":148,"column":44},"end":{"line":150,"column":5}}]},"22":{"type":"branch","line":155,"loc":{"start":{"line":155,"column":46},"end":{"line":168,"column":3}},"locations":[{"start":{"line":155,"column":46},"end":{"line":168,"column":3}}]},"23":{"type":"branch","line":157,"loc":{"start":{"line":157,"column":14},"end":{"line":161,"column":5}},"locations":[{"start":{"line":157,"column":14},"end":{"line":161,"column":5}}]},"24":{"type":"branch","line":162,"loc":{"start":{"line":162,"column":45},"end":{"line":164,"column":5}},"locations":[{"start":{"line":162,"column":45},"end":{"line":164,"column":5}}]},"25":{"type":"branch","line":165,"loc":{"start":{"line":165,"column":44},"end":{"line":167,"column":5}},"locations":[{"start":{"line":165,"column":44},"end":{"line":167,"column":5}}]}},"b":{"0":[1],"1":[3],"2":[1],"3":[1],"4":[1],"5":[1],"6":[1],"7":[1],"8":[1],"9":[1],"10":[1],"11":[1],"12":[1],"13":[1],"14":[1],"15":[1],"16":[1],"17":[1],"18":[1],"19":[1],"20":[1],"21":[1],"22":[1],"23":[1],"24":[1],"25":[1]},"fnMap":{"0":{"name":"_hashPw","decl":{"start":{"line":58,"column":18},"end":{"line":60,"column":3}},"loc":{"start":{"line":58,"column":18},"end":{"line":60,"column":3}},"line":58}},"f":{"0":3}}
+,"/local/embruch/ragchat-api/__tests__/auth/logout.test.js": {"path":"/local/embruch/ragchat-api/__tests__/auth/logout.test.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":33}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":104}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":34}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":31}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":12}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":22}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":32}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":13}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":0}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":31}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":11}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":31}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":3}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":31}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":9}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":31}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":26}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":53}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":17}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":0}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":31}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":9}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":31}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":31}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":33}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":50}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":27}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":37}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":19}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":45}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":7}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":52}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":40}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":7}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":51}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":46}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":7}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":5}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":0}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":33}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":0}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":52}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":27}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":37}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":19}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":47}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":7}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":52}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":40}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":7}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":51}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":46}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":7}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":5}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":0}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":33}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":0}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":46}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":27}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":37}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":23}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":7}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":52}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":40}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":7}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":51}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":46}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":7}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":5}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":3}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1},"branchMap":{"0":{"type":"branch","line":49,"loc":{"start":{"line":49,"column":24},"end":{"line":95,"column":2}},"locations":[{"start":{"line":49,"column":24},"end":{"line":95,"column":2}}]},"1":{"type":"branch","line":51,"loc":{"start":{"line":51,"column":43},"end":{"line":63,"column":3}},"locations":[{"start":{"line":51,"column":43},"end":{"line":63,"column":3}}]},"2":{"type":"branch","line":52,"loc":{"start":{"line":52,"column":14},"end":{"line":56,"column":5}},"locations":[{"start":{"line":52,"column":14},"end":{"line":56,"column":5}}]},"3":{"type":"branch","line":57,"loc":{"start":{"line":57,"column":45},"end":{"line":59,"column":5}},"locations":[{"start":{"line":57,"column":45},"end":{"line":59,"column":5}}]},"4":{"type":"branch","line":60,"loc":{"start":{"line":60,"column":44},"end":{"line":62,"column":5}},"locations":[{"start":{"line":60,"column":44},"end":{"line":62,"column":5}}]},"5":{"type":"branch","line":67,"loc":{"start":{"line":67,"column":45},"end":{"line":79,"column":3}},"locations":[{"start":{"line":67,"column":45},"end":{"line":79,"column":3}}]},"6":{"type":"branch","line":68,"loc":{"start":{"line":68,"column":14},"end":{"line":72,"column":5}},"locations":[{"start":{"line":68,"column":14},"end":{"line":72,"column":5}}]},"7":{"type":"branch","line":73,"loc":{"start":{"line":73,"column":45},"end":{"line":75,"column":5}},"locations":[{"start":{"line":73,"column":45},"end":{"line":75,"column":5}}]},"8":{"type":"branch","line":76,"loc":{"start":{"line":76,"column":44},"end":{"line":78,"column":5}},"locations":[{"start":{"line":76,"column":44},"end":{"line":78,"column":5}}]},"9":{"type":"branch","line":83,"loc":{"start":{"line":83,"column":39},"end":{"line":94,"column":3}},"locations":[{"start":{"line":83,"column":39},"end":{"line":94,"column":3}}]},"10":{"type":"branch","line":84,"loc":{"start":{"line":84,"column":14},"end":{"line":87,"column":5}},"locations":[{"start":{"line":84,"column":14},"end":{"line":87,"column":5}}]},"11":{"type":"branch","line":88,"loc":{"start":{"line":88,"column":45},"end":{"line":90,"column":5}},"locations":[{"start":{"line":88,"column":45},"end":{"line":90,"column":5}}]},"12":{"type":"branch","line":91,"loc":{"start":{"line":91,"column":44},"end":{"line":93,"column":5}},"locations":[{"start":{"line":91,"column":44},"end":{"line":93,"column":5}}]}},"b":{"0":[1],"1":[1],"2":[1],"3":[1],"4":[1],"5":[1],"6":[1],"7":[1],"8":[1],"9":[1],"10":[1],"11":[1],"12":[1]},"fnMap":{},"f":{}}
+,"/local/embruch/ragchat-api/__tests__/auth/refreshjwt.test.js": {"path":"/local/embruch/ragchat-api/__tests__/auth/refreshjwt.test.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":33}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":104}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":34}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":31}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":0}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":12}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":22}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":32}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":13}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":0}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":31}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":11}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":31}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":0}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":31}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":9}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":31}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":26}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":53}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":17}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":0}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":31}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":9}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":31}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":0}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":31}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":0}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":0}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":46}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":27}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":98}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":51}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":37}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":19}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":55}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":7}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":52}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":40}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":7}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":51}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":45}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":40}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":9}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":7}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":5}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":0}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":33}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":54}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":27}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":37}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":19}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":47}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":7}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":52}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":40}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":7}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":51}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":46}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":7}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":5}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":0}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":33}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":0}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":52}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":27}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":101}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":51}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":37}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":19}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":188}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":7}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":52}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":40}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":7}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":51}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":46}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":7}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":5}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":0}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":33}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":0}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":52}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":27}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":0}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":37}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":20}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":7}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":52}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":40}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":7}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":51}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":46}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":7}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":5}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":3}}},"s":{"0":1,"1":1,"2":1,"3":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":1,"98":1,"99":1,"100":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1,"108":1,"109":1,"110":1,"111":1,"112":1,"113":1,"114":1,"115":1,"116":1,"117":1,"118":1,"119":1,"120":1,"121":1},"branchMap":{"0":{"type":"branch","line":53,"loc":{"start":{"line":53,"column":24},"end":{"line":122,"column":2}},"locations":[{"start":{"line":53,"column":24},"end":{"line":122,"column":2}}]},"1":{"type":"branch","line":56,"loc":{"start":{"line":56,"column":39},"end":{"line":72,"column":3}},"locations":[{"start":{"line":56,"column":39},"end":{"line":72,"column":3}}]},"2":{"type":"branch","line":57,"loc":{"start":{"line":57,"column":14},"end":{"line":63,"column":5}},"locations":[{"start":{"line":57,"column":14},"end":{"line":63,"column":5}}]},"3":{"type":"branch","line":64,"loc":{"start":{"line":64,"column":45},"end":{"line":66,"column":5}},"locations":[{"start":{"line":64,"column":45},"end":{"line":66,"column":5}}]},"4":{"type":"branch","line":67,"loc":{"start":{"line":67,"column":44},"end":{"line":71,"column":5}},"locations":[{"start":{"line":67,"column":44},"end":{"line":71,"column":5}}]},"5":{"type":"branch","line":75,"loc":{"start":{"line":75,"column":47},"end":{"line":87,"column":3}},"locations":[{"start":{"line":75,"column":47},"end":{"line":87,"column":3}}]},"6":{"type":"branch","line":76,"loc":{"start":{"line":76,"column":14},"end":{"line":80,"column":5}},"locations":[{"start":{"line":76,"column":14},"end":{"line":80,"column":5}}]},"7":{"type":"branch","line":81,"loc":{"start":{"line":81,"column":45},"end":{"line":83,"column":5}},"locations":[{"start":{"line":81,"column":45},"end":{"line":83,"column":5}}]},"8":{"type":"branch","line":84,"loc":{"start":{"line":84,"column":44},"end":{"line":86,"column":5}},"locations":[{"start":{"line":84,"column":44},"end":{"line":86,"column":5}}]},"9":{"type":"branch","line":91,"loc":{"start":{"line":91,"column":45},"end":{"line":105,"column":3}},"locations":[{"start":{"line":91,"column":45},"end":{"line":105,"column":3}}]},"10":{"type":"branch","line":92,"loc":{"start":{"line":92,"column":14},"end":{"line":98,"column":5}},"locations":[{"start":{"line":92,"column":14},"end":{"line":98,"column":5}}]},"11":{"type":"branch","line":99,"loc":{"start":{"line":99,"column":45},"end":{"line":101,"column":5}},"locations":[{"start":{"line":99,"column":45},"end":{"line":101,"column":5}}]},"12":{"type":"branch","line":102,"loc":{"start":{"line":102,"column":44},"end":{"line":104,"column":5}},"locations":[{"start":{"line":102,"column":44},"end":{"line":104,"column":5}}]},"13":{"type":"branch","line":109,"loc":{"start":{"line":109,"column":45},"end":{"line":121,"column":3}},"locations":[{"start":{"line":109,"column":45},"end":{"line":121,"column":3}}]},"14":{"type":"branch","line":110,"loc":{"start":{"line":110,"column":14},"end":{"line":114,"column":5}},"locations":[{"start":{"line":110,"column":14},"end":{"line":114,"column":5}}]},"15":{"type":"branch","line":115,"loc":{"start":{"line":115,"column":45},"end":{"line":117,"column":5}},"locations":[{"start":{"line":115,"column":45},"end":{"line":117,"column":5}}]},"16":{"type":"branch","line":118,"loc":{"start":{"line":118,"column":44},"end":{"line":120,"column":5}},"locations":[{"start":{"line":118,"column":44},"end":{"line":120,"column":5}}]}},"b":{"0":[1],"1":[1],"2":[1],"3":[1],"4":[1],"5":[1],"6":[1],"7":[1],"8":[1],"9":[1],"10":[1],"11":[1],"12":[1],"13":[1],"14":[1],"15":[1],"16":[1]},"fnMap":{},"f":{}}
+,"/local/embruch/ragchat-api/__tests__/auth/requestpasswordreset.test.js": {"path":"/local/embruch/ragchat-api/__tests__/auth/requestpasswordreset.test.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":33}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":104}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":34}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":31}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":12}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":37}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":32}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":13}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":0}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":31}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":11}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":31}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":0}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":31}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":9}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":31}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":26}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":53}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":17}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":14}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":0}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":31}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":9}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":31}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":47}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":54}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":36}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":27}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":37}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":20}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":37}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":7}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":52}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":40}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":7}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":51}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":46}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":7}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":5}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":0}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":0}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":33}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":0}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":54}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":36}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":27}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":65}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":0}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":37}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":20}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":37}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":7}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":52}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":40}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":7}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":51}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":46}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":7}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":5}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":0}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":33}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":0}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":55}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":27}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":80}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":0}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":37}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":20}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":21}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":7}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":0}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":59}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":40}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":7}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":51}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":46}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":7}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":5}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":0}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":33}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":0}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":47}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":27}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":37}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":20}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":16}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":7}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":0}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":59}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":40}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":7}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":51}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":46}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":7}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":5}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":3}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"47":1,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":1,"98":1,"99":1,"100":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1,"108":1,"109":1,"110":1,"111":1,"112":1,"113":1,"114":1,"115":1,"116":1,"117":1,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1,"124":1,"125":1,"126":1,"127":1,"128":1,"129":1},"branchMap":{"0":{"type":"branch","line":59,"loc":{"start":{"line":59,"column":40},"end":{"line":130,"column":2}},"locations":[{"start":{"line":59,"column":40},"end":{"line":130,"column":2}}]},"1":{"type":"branch","line":60,"loc":{"start":{"line":60,"column":41},"end":{"line":73,"column":3}},"locations":[{"start":{"line":60,"column":41},"end":{"line":73,"column":3}}]},"2":{"type":"branch","line":62,"loc":{"start":{"line":62,"column":14},"end":{"line":66,"column":5}},"locations":[{"start":{"line":62,"column":14},"end":{"line":66,"column":5}}]},"3":{"type":"branch","line":67,"loc":{"start":{"line":67,"column":45},"end":{"line":69,"column":5}},"locations":[{"start":{"line":67,"column":45},"end":{"line":69,"column":5}}]},"4":{"type":"branch","line":70,"loc":{"start":{"line":70,"column":44},"end":{"line":72,"column":5}},"locations":[{"start":{"line":70,"column":44},"end":{"line":72,"column":5}}]},"5":{"type":"branch","line":78,"loc":{"start":{"line":78,"column":41},"end":{"line":93,"column":3}},"locations":[{"start":{"line":78,"column":41},"end":{"line":93,"column":3}}]},"6":{"type":"branch","line":80,"loc":{"start":{"line":80,"column":14},"end":{"line":86,"column":5}},"locations":[{"start":{"line":80,"column":14},"end":{"line":86,"column":5}}]},"7":{"type":"branch","line":81,"loc":{"start":{"line":81,"column":53},"end":{"line":81,"column":63}},"locations":[{"start":{"line":81,"column":53},"end":{"line":81,"column":63}}]},"8":{"type":"branch","line":87,"loc":{"start":{"line":87,"column":45},"end":{"line":89,"column":5}},"locations":[{"start":{"line":87,"column":45},"end":{"line":89,"column":5}}]},"9":{"type":"branch","line":90,"loc":{"start":{"line":90,"column":44},"end":{"line":92,"column":5}},"locations":[{"start":{"line":90,"column":44},"end":{"line":92,"column":5}}]},"10":{"type":"branch","line":97,"loc":{"start":{"line":97,"column":48},"end":{"line":112,"column":3}},"locations":[{"start":{"line":97,"column":48},"end":{"line":112,"column":3}}]},"11":{"type":"branch","line":98,"loc":{"start":{"line":98,"column":14},"end":{"line":104,"column":5}},"locations":[{"start":{"line":98,"column":14},"end":{"line":104,"column":5}}]},"12":{"type":"branch","line":106,"loc":{"start":{"line":106,"column":52},"end":{"line":108,"column":5}},"locations":[{"start":{"line":106,"column":52},"end":{"line":108,"column":5}}]},"13":{"type":"branch","line":109,"loc":{"start":{"line":109,"column":44},"end":{"line":111,"column":5}},"locations":[{"start":{"line":109,"column":44},"end":{"line":111,"column":5}}]},"14":{"type":"branch","line":116,"loc":{"start":{"line":116,"column":40},"end":{"line":129,"column":3}},"locations":[{"start":{"line":116,"column":40},"end":{"line":129,"column":3}}]},"15":{"type":"branch","line":117,"loc":{"start":{"line":117,"column":14},"end":{"line":121,"column":5}},"locations":[{"start":{"line":117,"column":14},"end":{"line":121,"column":5}}]},"16":{"type":"branch","line":123,"loc":{"start":{"line":123,"column":52},"end":{"line":125,"column":5}},"locations":[{"start":{"line":123,"column":52},"end":{"line":125,"column":5}}]},"17":{"type":"branch","line":126,"loc":{"start":{"line":126,"column":44},"end":{"line":128,"column":5}},"locations":[{"start":{"line":126,"column":44},"end":{"line":128,"column":5}}]}},"b":{"0":[1],"1":[1],"2":[1],"3":[1],"4":[1],"5":[1],"6":[1],"7":[1],"8":[1],"9":[1],"10":[1],"11":[1],"12":[1],"13":[1],"14":[1],"15":[1],"16":[1],"17":[1]},"fnMap":{},"f":{}}
+,"/local/embruch/ragchat-api/__tests__/auth/requestverification.test.js": {"path":"/local/embruch/ragchat-api/__tests__/auth/requestverification.test.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":33}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":104}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":34}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":31}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":12}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":35}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":32}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":13}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":0}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":31}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":11}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":31}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":0}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":31}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":9}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":31}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":26}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":53}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":17}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":14}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":0}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":31}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":9}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":31}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":48}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":54}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":36}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":27}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":37}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":20}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":37}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":7}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":52}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":40}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":7}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":51}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":46}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":7}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":5}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":0}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":33}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":0}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":54}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":36}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":43}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":65}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":0}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":37}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":20}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":37}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":7}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":52}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":40}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":7}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":51}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":46}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":7}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":5}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":0}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":0}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":33}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":0}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":55}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":27}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":80}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":0}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":37}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":20}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":21}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":7}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":0}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":59}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":40}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":7}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":51}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":46}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":7}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":5}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":0}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":33}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":0}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":47}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":27}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":37}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":20}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":16}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":7}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":0}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":59}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":40}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":7}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":51}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":46}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":7}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":5}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":0}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":3}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"45":1,"52":1,"53":1,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":1,"98":1,"99":1,"100":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1,"108":1,"109":1,"110":1,"111":1,"112":1,"113":1,"114":1,"115":1,"116":1,"117":1,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1,"124":1,"125":1,"126":1,"127":1,"128":1},"branchMap":{"0":{"type":"branch","line":57,"loc":{"start":{"line":57,"column":41},"end":{"line":129,"column":2}},"locations":[{"start":{"line":57,"column":41},"end":{"line":129,"column":2}}]},"1":{"type":"branch","line":58,"loc":{"start":{"line":58,"column":41},"end":{"line":71,"column":3}},"locations":[{"start":{"line":58,"column":41},"end":{"line":71,"column":3}}]},"2":{"type":"branch","line":60,"loc":{"start":{"line":60,"column":14},"end":{"line":64,"column":5}},"locations":[{"start":{"line":60,"column":14},"end":{"line":64,"column":5}}]},"3":{"type":"branch","line":65,"loc":{"start":{"line":65,"column":45},"end":{"line":67,"column":5}},"locations":[{"start":{"line":65,"column":45},"end":{"line":67,"column":5}}]},"4":{"type":"branch","line":68,"loc":{"start":{"line":68,"column":44},"end":{"line":70,"column":5}},"locations":[{"start":{"line":68,"column":44},"end":{"line":70,"column":5}}]},"5":{"type":"branch","line":75,"loc":{"start":{"line":75,"column":41},"end":{"line":90,"column":3}},"locations":[{"start":{"line":75,"column":41},"end":{"line":90,"column":3}}]},"6":{"type":"branch","line":77,"loc":{"start":{"line":77,"column":14},"end":{"line":83,"column":5}},"locations":[{"start":{"line":77,"column":14},"end":{"line":83,"column":5}}]},"7":{"type":"branch","line":78,"loc":{"start":{"line":78,"column":53},"end":{"line":78,"column":63}},"locations":[{"start":{"line":78,"column":53},"end":{"line":78,"column":63}}]},"8":{"type":"branch","line":84,"loc":{"start":{"line":84,"column":45},"end":{"line":86,"column":5}},"locations":[{"start":{"line":84,"column":45},"end":{"line":86,"column":5}}]},"9":{"type":"branch","line":87,"loc":{"start":{"line":87,"column":44},"end":{"line":89,"column":5}},"locations":[{"start":{"line":87,"column":44},"end":{"line":89,"column":5}}]},"10":{"type":"branch","line":95,"loc":{"start":{"line":95,"column":48},"end":{"line":110,"column":3}},"locations":[{"start":{"line":95,"column":48},"end":{"line":110,"column":3}}]},"11":{"type":"branch","line":96,"loc":{"start":{"line":96,"column":14},"end":{"line":102,"column":5}},"locations":[{"start":{"line":96,"column":14},"end":{"line":102,"column":5}}]},"12":{"type":"branch","line":104,"loc":{"start":{"line":104,"column":52},"end":{"line":106,"column":5}},"locations":[{"start":{"line":104,"column":52},"end":{"line":106,"column":5}}]},"13":{"type":"branch","line":107,"loc":{"start":{"line":107,"column":44},"end":{"line":109,"column":5}},"locations":[{"start":{"line":107,"column":44},"end":{"line":109,"column":5}}]},"14":{"type":"branch","line":114,"loc":{"start":{"line":114,"column":40},"end":{"line":127,"column":3}},"locations":[{"start":{"line":114,"column":40},"end":{"line":127,"column":3}}]},"15":{"type":"branch","line":115,"loc":{"start":{"line":115,"column":14},"end":{"line":119,"column":5}},"locations":[{"start":{"line":115,"column":14},"end":{"line":119,"column":5}}]},"16":{"type":"branch","line":121,"loc":{"start":{"line":121,"column":52},"end":{"line":123,"column":5}},"locations":[{"start":{"line":121,"column":52},"end":{"line":123,"column":5}}]},"17":{"type":"branch","line":124,"loc":{"start":{"line":124,"column":44},"end":{"line":126,"column":5}},"locations":[{"start":{"line":124,"column":44},"end":{"line":126,"column":5}}]}},"b":{"0":[1],"1":[1],"2":[1],"3":[1],"4":[1],"5":[1],"6":[1],"7":[1],"8":[1],"9":[1],"10":[1],"11":[1],"12":[1],"13":[1],"14":[1],"15":[1],"16":[1],"17":[1]},"fnMap":{},"f":{}}
+,"/local/embruch/ragchat-api/__tests__/users/signup.test.js": {"path":"/local/embruch/ragchat-api/__tests__/users/signup.test.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":33}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":104}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":34}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":0}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":12}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":23}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":32}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":13}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":0}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":31}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":11}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":31}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":0}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":31}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":9}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":31}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":26}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":53}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":17}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":14}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":0}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":31}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":9}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":31}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":37}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":54}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":36}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":27}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":37}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":20}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":37}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":7}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":0}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":52}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":40}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":7}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":51}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":46}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":7}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":5}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":0}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":33}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":0}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":47}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":27}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":37}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":20}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":16}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":7}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":0}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":59}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":40}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":7}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":51}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":46}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":7}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":5}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":0}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":33}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":0}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":73}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":27}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":82}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":0}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":37}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":20}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":21}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":7}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":0}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":59}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":40}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":7}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":51}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":46}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":7}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":5}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":0}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":33}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":0}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":55}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":27}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":56}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":0}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":37}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":20}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":21}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":7}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":0}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":59}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":40}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":7}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":51}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":46}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":7}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":5}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":0}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":33}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":0}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":55}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":27}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":80}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":0}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":37}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":20}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":21}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":7}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":0}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":59}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":40}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":7}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":51}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":46}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":7}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":5}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":0}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":33}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":0}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":76}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":27}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":100}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":0}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":37}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":20}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":21}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":7}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":0}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":59}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":40}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":7}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":51}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":46}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":7}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":5}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":0}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":33}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":0}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":71}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":36}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":28}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":108}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":0}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":15}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":19}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":20}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":37}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":64}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":27}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":66}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":31}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":30}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":22}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":33}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":14}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":29}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":28}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":38}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":11}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":10}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":45}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":34}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":90}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":8}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":72}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":0}},"205":{"start":{"line":206,"column":0},"end":{"line":206,"column":37}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":20}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":37}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":7}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":52}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":40}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":7}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":51}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":46}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":7}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":5}},"216":{"start":{"line":217,"column":0},"end":{"line":217,"column":0}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":3}}},"s":{"0":1,"1":1,"2":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"54":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":1,"98":1,"99":1,"100":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1,"108":1,"109":1,"110":1,"111":1,"112":1,"113":1,"114":1,"115":1,"116":1,"117":1,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1,"124":1,"125":1,"126":1,"127":1,"128":1,"129":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":1,"136":1,"137":1,"138":1,"139":1,"140":1,"141":1,"142":1,"143":1,"144":1,"145":1,"146":1,"147":1,"148":1,"149":1,"150":1,"151":1,"152":1,"153":1,"154":1,"155":1,"156":1,"157":1,"158":1,"159":1,"160":1,"161":1,"162":1,"163":1,"164":1,"165":1,"166":1,"167":1,"168":1,"169":1,"170":1,"171":1,"172":1,"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":1,"180":2,"181":2,"182":2,"183":2,"184":2,"185":2,"186":2,"187":2,"188":2,"189":2,"190":2,"191":2,"192":2,"193":2,"194":2,"195":2,"196":2,"197":2,"198":2,"199":2,"200":2,"201":2,"202":2,"203":2,"204":2,"205":2,"206":2,"207":2,"208":1,"209":1,"210":1,"211":1,"212":1,"213":1,"214":1,"215":1,"216":1,"217":1},"branchMap":{"0":{"type":"branch","line":66,"loc":{"start":{"line":66,"column":30},"end":{"line":218,"column":2}},"locations":[{"start":{"line":66,"column":30},"end":{"line":218,"column":2}}]},"1":{"type":"branch","line":67,"loc":{"start":{"line":67,"column":41},"end":{"line":81,"column":3}},"locations":[{"start":{"line":67,"column":41},"end":{"line":81,"column":3}}]},"2":{"type":"branch","line":69,"loc":{"start":{"line":69,"column":14},"end":{"line":73,"column":5}},"locations":[{"start":{"line":69,"column":14},"end":{"line":73,"column":5}}]},"3":{"type":"branch","line":75,"loc":{"start":{"line":75,"column":45},"end":{"line":77,"column":5}},"locations":[{"start":{"line":75,"column":45},"end":{"line":77,"column":5}}]},"4":{"type":"branch","line":78,"loc":{"start":{"line":78,"column":44},"end":{"line":80,"column":5}},"locations":[{"start":{"line":78,"column":44},"end":{"line":80,"column":5}}]},"5":{"type":"branch","line":85,"loc":{"start":{"line":85,"column":40},"end":{"line":98,"column":3}},"locations":[{"start":{"line":85,"column":40},"end":{"line":98,"column":3}}]},"6":{"type":"branch","line":86,"loc":{"start":{"line":86,"column":14},"end":{"line":90,"column":5}},"locations":[{"start":{"line":86,"column":14},"end":{"line":90,"column":5}}]},"7":{"type":"branch","line":92,"loc":{"start":{"line":92,"column":52},"end":{"line":94,"column":5}},"locations":[{"start":{"line":92,"column":52},"end":{"line":94,"column":5}}]},"8":{"type":"branch","line":95,"loc":{"start":{"line":95,"column":44},"end":{"line":97,"column":5}},"locations":[{"start":{"line":95,"column":44},"end":{"line":97,"column":5}}]},"9":{"type":"branch","line":102,"loc":{"start":{"line":102,"column":66},"end":{"line":117,"column":3}},"locations":[{"start":{"line":102,"column":66},"end":{"line":117,"column":3}}]},"10":{"type":"branch","line":103,"loc":{"start":{"line":103,"column":14},"end":{"line":109,"column":5}},"locations":[{"start":{"line":103,"column":14},"end":{"line":109,"column":5}}]},"11":{"type":"branch","line":111,"loc":{"start":{"line":111,"column":52},"end":{"line":113,"column":5}},"locations":[{"start":{"line":111,"column":52},"end":{"line":113,"column":5}}]},"12":{"type":"branch","line":114,"loc":{"start":{"line":114,"column":44},"end":{"line":116,"column":5}},"locations":[{"start":{"line":114,"column":44},"end":{"line":116,"column":5}}]},"13":{"type":"branch","line":121,"loc":{"start":{"line":121,"column":48},"end":{"line":136,"column":3}},"locations":[{"start":{"line":121,"column":48},"end":{"line":136,"column":3}}]},"14":{"type":"branch","line":122,"loc":{"start":{"line":122,"column":14},"end":{"line":128,"column":5}},"locations":[{"start":{"line":122,"column":14},"end":{"line":128,"column":5}}]},"15":{"type":"branch","line":130,"loc":{"start":{"line":130,"column":52},"end":{"line":132,"column":5}},"locations":[{"start":{"line":130,"column":52},"end":{"line":132,"column":5}}]},"16":{"type":"branch","line":133,"loc":{"start":{"line":133,"column":44},"end":{"line":135,"column":5}},"locations":[{"start":{"line":133,"column":44},"end":{"line":135,"column":5}}]},"17":{"type":"branch","line":140,"loc":{"start":{"line":140,"column":48},"end":{"line":155,"column":3}},"locations":[{"start":{"line":140,"column":48},"end":{"line":155,"column":3}}]},"18":{"type":"branch","line":141,"loc":{"start":{"line":141,"column":14},"end":{"line":147,"column":5}},"locations":[{"start":{"line":141,"column":14},"end":{"line":147,"column":5}}]},"19":{"type":"branch","line":149,"loc":{"start":{"line":149,"column":52},"end":{"line":151,"column":5}},"locations":[{"start":{"line":149,"column":52},"end":{"line":151,"column":5}}]},"20":{"type":"branch","line":152,"loc":{"start":{"line":152,"column":44},"end":{"line":154,"column":5}},"locations":[{"start":{"line":152,"column":44},"end":{"line":154,"column":5}}]},"21":{"type":"branch","line":159,"loc":{"start":{"line":159,"column":69},"end":{"line":174,"column":3}},"locations":[{"start":{"line":159,"column":69},"end":{"line":174,"column":3}}]},"22":{"type":"branch","line":160,"loc":{"start":{"line":160,"column":14},"end":{"line":166,"column":5}},"locations":[{"start":{"line":160,"column":14},"end":{"line":166,"column":5}}]},"23":{"type":"branch","line":168,"loc":{"start":{"line":168,"column":52},"end":{"line":170,"column":5}},"locations":[{"start":{"line":168,"column":52},"end":{"line":170,"column":5}}]},"24":{"type":"branch","line":171,"loc":{"start":{"line":171,"column":44},"end":{"line":173,"column":5}},"locations":[{"start":{"line":171,"column":44},"end":{"line":173,"column":5}}]},"25":{"type":"branch","line":178,"loc":{"start":{"line":178,"column":64},"end":{"line":216,"column":3}},"locations":[{"start":{"line":178,"column":64},"end":{"line":216,"column":3}}]},"26":{"type":"branch","line":180,"loc":{"start":{"line":180,"column":15},"end":{"line":209,"column":5}},"locations":[{"start":{"line":180,"column":15},"end":{"line":209,"column":5}}]},"27":{"type":"branch","line":204,"loc":{"start":{"line":204,"column":48},"end":{"line":204,"column":70}},"locations":[{"start":{"line":204,"column":48},"end":{"line":204,"column":70}}]},"28":{"type":"branch","line":210,"loc":{"start":{"line":210,"column":45},"end":{"line":212,"column":5}},"locations":[{"start":{"line":210,"column":45},"end":{"line":212,"column":5}}]},"29":{"type":"branch","line":213,"loc":{"start":{"line":213,"column":44},"end":{"line":215,"column":5}},"locations":[{"start":{"line":213,"column":44},"end":{"line":215,"column":5}}]}},"b":{"0":[1],"1":[1],"2":[1],"3":[1],"4":[1],"5":[1],"6":[1],"7":[1],"8":[1],"9":[1],"10":[1],"11":[1],"12":[1],"13":[1],"14":[1],"15":[1],"16":[1],"17":[1],"18":[1],"19":[1],"20":[1],"21":[1],"22":[1],"23":[1],"24":[1],"25":[1],"26":[2],"27":[2],"28":[1],"29":[1]},"fnMap":{},"f":{}}
+,"/local/embruch/ragchat-api/controllers/AI.js": {"path":"/local/embruch/ragchat-api/controllers/AI.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":32}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":37}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":122}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":75}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":96}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":66}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":46}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":0}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":0}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":0}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":0}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":42}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":67}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":0}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":59}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":16}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":3}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":52}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":33}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":38}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":18}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":57}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":14}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":31}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":2}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":0}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":0}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":59}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":13}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":3}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":52}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":7}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":68}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":33}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":19}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":16}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":3}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":2}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":0}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":0}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":59}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":12}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":3}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":51}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":7}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":51}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":27}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":19}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":16}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":3}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":2}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":0}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":0}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":59}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":17}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":3}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":55}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":7}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":58}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":61}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":0}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":58}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":19}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":16}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":3}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":2}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":0}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":0}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":59}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":16}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":3}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":54}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":7}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":57}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":30}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":19}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":16}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":3}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":2}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":0}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":0}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":0}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":59}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":13}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":3}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":50}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":23}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":25}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":9}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":36}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":73}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":0}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":15}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":20}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":21}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":25}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":5}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":3}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":0}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":20}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":7}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":24}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":63}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":18}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":100}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":5}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":28}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":84}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":62}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":79}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":60}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":12}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":11}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":19}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":16}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":3}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":2}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":0}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":59}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":12}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":3}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":51}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":7}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":79}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":31}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":19}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":16}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":3}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":2}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":0}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":59}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":58}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":59}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":0}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":3}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":13}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":11}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":2}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":51}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":7}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":42}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":24}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":52}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":20}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":84}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":23}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":40}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":21}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":19}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":16}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":3}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":2}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":0}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":0}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":59}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":40}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":3}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":62}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":48}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":24}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":71}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":3}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":60}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":22}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":23}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":86}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":3}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":46}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":9}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":2}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":0}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":59}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":34}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":3}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":63}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":7}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":51}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":33}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":38}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":0}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":44}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":39}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":22}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":45}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":35}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":49}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":66}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":19}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":16}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":3}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":2}}},"s":{"0":15,"1":15,"2":15,"3":15,"4":15,"5":15,"6":15,"7":15,"8":15,"9":15,"10":15,"11":15,"12":15,"13":15,"14":15,"15":15,"16":15,"17":15,"18":2,"19":2,"20":2,"21":2,"22":1,"23":1,"24":1,"25":15,"26":15,"27":15,"28":15,"29":15,"30":15,"31":2,"32":2,"33":2,"34":2,"35":0,"36":0,"37":2,"38":15,"39":15,"40":15,"41":15,"42":15,"43":15,"44":2,"45":2,"46":1,"47":1,"48":1,"49":1,"50":2,"51":15,"52":15,"53":15,"54":15,"55":15,"56":15,"57":2,"58":2,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"65":2,"66":15,"67":15,"68":15,"69":15,"70":15,"71":15,"72":2,"73":2,"74":1,"75":1,"76":1,"77":1,"78":2,"79":15,"80":15,"81":15,"82":15,"83":15,"84":15,"85":15,"86":3,"87":3,"88":1,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":0,"96":0,"97":1,"98":2,"99":2,"100":2,"101":2,"102":2,"103":3,"104":1,"105":1,"106":1,"107":1,"108":1,"109":1,"110":1,"111":1,"112":1,"113":3,"114":0,"115":0,"116":3,"117":15,"118":15,"119":15,"120":15,"121":15,"122":1,"123":1,"124":1,"125":1,"126":0,"127":0,"128":1,"129":15,"130":15,"131":15,"132":15,"133":15,"134":15,"135":15,"136":15,"137":15,"138":15,"139":1,"140":1,"141":1,"142":1,"143":1,"144":1,"145":1,"146":1,"147":1,"148":1,"149":0,"150":0,"151":1,"152":15,"153":15,"154":15,"155":15,"156":15,"157":15,"158":4,"159":4,"160":0,"161":0,"162":4,"163":4,"164":4,"165":1,"166":1,"167":3,"168":3,"169":3,"170":15,"171":15,"172":15,"173":15,"174":15,"175":7,"176":7,"177":7,"178":7,"179":7,"180":7,"181":7,"182":7,"183":7,"184":7,"185":7,"186":7,"187":7,"188":0,"189":0,"190":7},"branchMap":{"0":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":191,"column":2}},"locations":[{"start":{"line":1,"column":0},"end":{"line":191,"column":2}}]},"1":{"type":"branch","line":1,"loc":{"start":{"line":1,"column":0},"end":{"line":191,"column":2}},"locations":[{"start":{"line":1,"column":0},"end":{"line":191,"column":2}}]},"2":{"type":"branch","line":18,"loc":{"start":{"line":18,"column":25},"end":{"line":25,"column":2}},"locations":[{"start":{"line":18,"column":25},"end":{"line":25,"column":2}}]},"3":{"type":"branch","line":22,"loc":{"start":{"line":22,"column":16},"end":{"line":25,"column":2}},"locations":[{"start":{"line":22,"column":16},"end":{"line":25,"column":2}}]},"4":{"type":"branch","line":31,"loc":{"start":{"line":31,"column":25},"end":{"line":38,"column":2}},"locations":[{"start":{"line":31,"column":25},"end":{"line":38,"column":2}}]},"5":{"type":"branch","line":35,"loc":{"start":{"line":35,"column":4},"end":{"line":37,"column":3}},"locations":[{"start":{"line":35,"column":4},"end":{"line":37,"column":3}}]},"6":{"type":"branch","line":44,"loc":{"start":{"line":44,"column":24},"end":{"line":51,"column":2}},"locations":[{"start":{"line":44,"column":24},"end":{"line":51,"column":2}}]},"7":{"type":"branch","line":47,"loc":{"start":{"line":47,"column":-1},"end":{"line":50,"column":3}},"locations":[{"start":{"line":47,"column":-1},"end":{"line":50,"column":3}}]},"8":{"type":"branch","line":57,"loc":{"start":{"line":57,"column":28},"end":{"line":66,"column":2}},"locations":[{"start":{"line":57,"column":28},"end":{"line":66,"column":2}}]},"9":{"type":"branch","line":60,"loc":{"start":{"line":60,"column":-1},"end":{"line":65,"column":3}},"locations":[{"start":{"line":60,"column":-1},"end":{"line":65,"column":3}}]},"10":{"type":"branch","line":72,"loc":{"start":{"line":72,"column":27},"end":{"line":79,"column":2}},"locations":[{"start":{"line":72,"column":27},"end":{"line":79,"column":2}}]},"11":{"type":"branch","line":75,"loc":{"start":{"line":75,"column":-1},"end":{"line":78,"column":3}},"locations":[{"start":{"line":75,"column":-1},"end":{"line":78,"column":3}}]},"12":{"type":"branch","line":86,"loc":{"start":{"line":86,"column":23},"end":{"line":117,"column":2}},"locations":[{"start":{"line":86,"column":23},"end":{"line":117,"column":2}}]},"13":{"type":"branch","line":88,"loc":{"start":{"line":88,"column":24},"end":{"line":98,"column":3}},"locations":[{"start":{"line":88,"column":24},"end":{"line":98,"column":3}}]},"14":{"type":"branch","line":95,"loc":{"start":{"line":95,"column":6},"end":{"line":97,"column":5}},"locations":[{"start":{"line":95,"column":6},"end":{"line":97,"column":5}}]},"15":{"type":"branch","line":99,"loc":{"start":{"line":99,"column":-1},"end":{"line":104,"column":17}},"locations":[{"start":{"line":99,"column":-1},"end":{"line":104,"column":17}}]},"16":{"type":"branch","line":104,"loc":{"start":{"line":104,"column":17},"end":{"line":114,"column":4}},"locations":[{"start":{"line":104,"column":17},"end":{"line":114,"column":4}}]},"17":{"type":"branch","line":114,"loc":{"start":{"line":114,"column":4},"end":{"line":116,"column":3}},"locations":[{"start":{"line":114,"column":4},"end":{"line":116,"column":3}}]},"18":{"type":"branch","line":122,"loc":{"start":{"line":122,"column":24},"end":{"line":129,"column":2}},"locations":[{"start":{"line":122,"column":24},"end":{"line":129,"column":2}}]},"19":{"type":"branch","line":126,"loc":{"start":{"line":126,"column":4},"end":{"line":128,"column":3}},"locations":[{"start":{"line":126,"column":4},"end":{"line":128,"column":3}}]},"20":{"type":"branch","line":139,"loc":{"start":{"line":139,"column":26},"end":{"line":152,"column":2}},"locations":[{"start":{"line":139,"column":26},"end":{"line":152,"column":2}}]},"21":{"type":"branch","line":149,"loc":{"start":{"line":149,"column":4},"end":{"line":151,"column":3}},"locations":[{"start":{"line":149,"column":4},"end":{"line":151,"column":3}}]},"22":{"type":"branch","line":158,"loc":{"start":{"line":158,"column":35},"end":{"line":170,"column":2}},"locations":[{"start":{"line":158,"column":35},"end":{"line":170,"column":2}}]},"23":{"type":"branch","line":160,"loc":{"start":{"line":160,"column":23},"end":{"line":162,"column":3}},"locations":[{"start":{"line":160,"column":23},"end":{"line":162,"column":3}}]},"24":{"type":"branch","line":165,"loc":{"start":{"line":165,"column":22},"end":{"line":167,"column":3}},"locations":[{"start":{"line":165,"column":22},"end":{"line":167,"column":3}}]},"25":{"type":"branch","line":168,"loc":{"start":{"line":168,"column":-1},"end":{"line":170,"column":2}},"locations":[{"start":{"line":168,"column":-1},"end":{"line":170,"column":2}}]},"26":{"type":"branch","line":175,"loc":{"start":{"line":175,"column":36},"end":{"line":191,"column":2}},"locations":[{"start":{"line":175,"column":36},"end":{"line":191,"column":2}}]},"27":{"type":"branch","line":182,"loc":{"start":{"line":182,"column":26},"end":{"line":182,"column":39}},"locations":[{"start":{"line":182,"column":26},"end":{"line":182,"column":39}}]},"28":{"type":"branch","line":188,"loc":{"start":{"line":188,"column":4},"end":{"line":190,"column":3}},"locations":[{"start":{"line":188,"column":4},"end":{"line":190,"column":3}}]},"29":{"type":"branch","line":187,"loc":{"start":{"line":187,"column":31},"end":{"line":187,"column":64}},"locations":[{"start":{"line":187,"column":31},"end":{"line":187,"column":64}}]}},"b":{"0":[15],"1":[15],"2":[2],"3":[1],"4":[2],"5":[0],"6":[2],"7":[1],"8":[2],"9":[1],"10":[2],"11":[1],"12":[3],"13":[1],"14":[0],"15":[2],"16":[1],"17":[0],"18":[1],"19":[0],"20":[1],"21":[0],"22":[4],"23":[0],"24":[1],"25":[3],"26":[7],"27":[0],"28":[0],"29":[18]},"fnMap":{"0":{"name":"getStatus","decl":{"start":{"line":18,"column":25},"end":{"line":25,"column":2}},"loc":{"start":{"line":18,"column":25},"end":{"line":25,"column":2}},"line":18},"1":{"name":"getModels","decl":{"start":{"line":31,"column":25},"end":{"line":38,"column":2}},"loc":{"start":{"line":31,"column":25},"end":{"line":38,"column":2}},"line":31},"2":{"name":"getModel","decl":{"start":{"line":44,"column":24},"end":{"line":51,"column":2}},"loc":{"start":{"line":44,"column":24},"end":{"line":51,"column":2}},"line":44},"3":{"name":"installModel","decl":{"start":{"line":57,"column":28},"end":{"line":66,"column":2}},"loc":{"start":{"line":57,"column":28},"end":{"line":66,"column":2}},"line":57},"4":{"name":"deleteModel","decl":{"start":{"line":72,"column":27},"end":{"line":79,"column":2}},"loc":{"start":{"line":72,"column":27},"end":{"line":79,"column":2}},"line":72},"5":{"name":"getChat","decl":{"start":{"line":86,"column":23},"end":{"line":117,"column":2}},"loc":{"start":{"line":86,"column":23},"end":{"line":117,"column":2}},"line":86},"6":{"name":"getChats","decl":{"start":{"line":122,"column":24},"end":{"line":129,"column":2}},"loc":{"start":{"line":122,"column":24},"end":{"line":129,"column":2}},"line":122},"7":{"name":"createChat","decl":{"start":{"line":139,"column":26},"end":{"line":152,"column":2}},"loc":{"start":{"line":139,"column":26},"end":{"line":152,"column":2}},"line":139},"8":{"name":"checkRequestedModel","decl":{"start":{"line":158,"column":35},"end":{"line":170,"column":2}},"loc":{"start":{"line":158,"column":35},"end":{"line":170,"column":2}},"line":158},"9":{"name":"aiFilterModelsByName","decl":{"start":{"line":175,"column":36},"end":{"line":191,"column":2}},"loc":{"start":{"line":175,"column":36},"end":{"line":191,"column":2}},"line":175}},"f":{"0":2,"1":2,"2":2,"3":2,"4":2,"5":3,"6":1,"7":1,"8":4,"9":7}}
+,"/local/embruch/ragchat-api/controllers/Auth.js": {"path":"/local/embruch/ragchat-api/controllers/Auth.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":167}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":53}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":88}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":37}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":28}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":67}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":0}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":59}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":25}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":3}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":64}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":7}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":32}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":68}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":0}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":51}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":32}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":73}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":119}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":66}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":18}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":31}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":76}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":43}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":17}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":93}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":19}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":16}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":3}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":2}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":0}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":0}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":59}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":23}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":3}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":62}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":7}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":36}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":63}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":100}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":53}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":63}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":86}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":19}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":16}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":3}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":2}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":0}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":0}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":59}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":8}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":33}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":3}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":36}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":3}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":48}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":16}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":22}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":7}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":35}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":36}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":82}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":0}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":23}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":21}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":92}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":5}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":0}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":25}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":30}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":129}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":5}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":0}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":33}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":52}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":70}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":52}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":55}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":59}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":0}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":28}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":50}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":79}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":48}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":51}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":70}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":49}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":105}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":0}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":36}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":16}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":16}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":97}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":82}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":12}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":23}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":91}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":5}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":19}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":42}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":16}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":3}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":2}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":0}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":0}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":59}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":21}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":46}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":3}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":42}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":3}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":59}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":7}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":28}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":50}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":114}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":19}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":56}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":16}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":75}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":5}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":23}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":77}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":72}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":19}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":16}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":3}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":2}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":0}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":0}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":59}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":9}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":32}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":3}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":49}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":7}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":14}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":85}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":85}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":17}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":62}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":19}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":16}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":3}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":0}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":0}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":2}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":0}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":0}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":3}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":25}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":42}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":3}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":63}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":16}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":7}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":35}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":82}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":17}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":20}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":21}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":59}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":0}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":37}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":51}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":39}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":0}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":26}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":11}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":45}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":33}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":81}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":185}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":22}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":31}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":76}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":47}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":0}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":23}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":20}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":7}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":5}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":10}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":135}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":0}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":19}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":16}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":3}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":2}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":0}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":59}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":17}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":44}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":3}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":56}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":7}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":38}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":46}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":48}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":11}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":62}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":84}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":19}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":16}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":3}},"205":{"start":{"line":206,"column":0},"end":{"line":206,"column":2}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":0}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":0}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":0}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":3}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":23}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":44}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":3}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":53}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":42}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":49}},"216":{"start":{"line":217,"column":0},"end":{"line":217,"column":0}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":13}},"218":{"start":{"line":219,"column":0},"end":{"line":219,"column":80}},"219":{"start":{"line":220,"column":0},"end":{"line":220,"column":85}},"220":{"start":{"line":221,"column":0},"end":{"line":221,"column":46}},"221":{"start":{"line":222,"column":0},"end":{"line":222,"column":24}},"222":{"start":{"line":223,"column":0},"end":{"line":223,"column":53}},"223":{"start":{"line":224,"column":0},"end":{"line":224,"column":21}},"224":{"start":{"line":225,"column":0},"end":{"line":225,"column":6}},"225":{"start":{"line":226,"column":0},"end":{"line":226,"column":0}},"226":{"start":{"line":227,"column":0},"end":{"line":227,"column":27}},"227":{"start":{"line":228,"column":0},"end":{"line":228,"column":63}},"228":{"start":{"line":229,"column":0},"end":{"line":229,"column":2}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":2,"12":2,"13":2,"14":2,"15":2,"16":2,"17":2,"18":2,"19":2,"20":2,"21":2,"22":2,"23":2,"24":2,"25":2,"26":2,"27":0,"28":0,"29":2,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":0,"45":0,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":4,"57":4,"58":4,"59":4,"60":4,"61":4,"62":4,"63":4,"64":4,"65":1,"66":1,"67":3,"68":3,"69":4,"70":1,"71":1,"72":2,"73":2,"74":2,"75":4,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":1,"98":4,"99":0,"100":0,"101":0,"102":4,"103":1,"104":1,"105":1,"106":1,"107":1,"108":1,"109":1,"110":1,"111":1,"112":6,"113":6,"114":6,"115":6,"116":5,"117":5,"118":4,"119":1,"120":1,"121":1,"122":1,"123":1,"124":6,"125":3,"126":3,"127":6,"128":1,"129":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":1,"136":1,"137":1,"138":1,"139":1,"140":1,"141":1,"142":0,"143":0,"144":1,"145":1,"146":1,"147":1,"148":1,"149":1,"150":1,"151":1,"152":1,"153":1,"154":2,"155":2,"156":2,"157":2,"158":2,"159":2,"160":1,"161":1,"162":1,"163":1,"164":1,"165":1,"166":1,"167":1,"168":1,"169":1,"170":1,"171":1,"172":1,"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":0,"180":0,"181":1,"182":2,"183":2,"184":2,"185":2,"186":0,"187":0,"188":2,"189":1,"190":1,"191":1,"192":1,"193":1,"194":1,"195":1,"196":1,"197":1,"198":1,"199":1,"200":1,"201":1,"202":1,"203":0,"204":0,"205":1,"206":1,"207":1,"208":1,"209":1,"210":1,"211":1,"212":1,"213":1,"214":8,"215":8,"216":2,"217":2,"218":2,"219":2,"220":2,"221":2,"222":2,"223":2,"224":2,"225":2,"226":2,"227":2,"228":2},"branchMap":{"0":{"type":"branch","line":11,"loc":{"start":{"line":11,"column":37},"end":{"line":30,"column":2}},"locations":[{"start":{"line":11,"column":37},"end":{"line":30,"column":2}}]},"1":{"type":"branch","line":27,"loc":{"start":{"line":27,"column":4},"end":{"line":29,"column":3}},"locations":[{"start":{"line":27,"column":4},"end":{"line":29,"column":3}}]},"2":{"type":"branch","line":36,"loc":{"start":{"line":36,"column":35},"end":{"line":47,"column":2}},"locations":[{"start":{"line":36,"column":35},"end":{"line":47,"column":2}}]},"3":{"type":"branch","line":44,"loc":{"start":{"line":44,"column":4},"end":{"line":46,"column":3}},"locations":[{"start":{"line":44,"column":4},"end":{"line":46,"column":3}}]},"4":{"type":"branch","line":56,"loc":{"start":{"line":56,"column":21},"end":{"line":103,"column":2}},"locations":[{"start":{"line":56,"column":21},"end":{"line":103,"column":2}}]},"5":{"type":"branch","line":65,"loc":{"start":{"line":65,"column":20},"end":{"line":67,"column":5}},"locations":[{"start":{"line":65,"column":20},"end":{"line":67,"column":5}}]},"6":{"type":"branch","line":68,"loc":{"start":{"line":68,"column":-1},"end":{"line":70,"column":29}},"locations":[{"start":{"line":68,"column":-1},"end":{"line":70,"column":29}}]},"7":{"type":"branch","line":70,"loc":{"start":{"line":70,"column":29},"end":{"line":72,"column":5}},"locations":[{"start":{"line":70,"column":29},"end":{"line":72,"column":5}}]},"8":{"type":"branch","line":73,"loc":{"start":{"line":73,"column":-1},"end":{"line":76,"column":69}},"locations":[{"start":{"line":73,"column":-1},"end":{"line":76,"column":69}}]},"9":{"type":"branch","line":76,"loc":{"start":{"line":76,"column":69},"end":{"line":98,"column":5}},"locations":[{"start":{"line":76,"column":69},"end":{"line":98,"column":5}}]},"10":{"type":"branch","line":88,"loc":{"start":{"line":88,"column":32},"end":{"line":88,"column":105}},"locations":[{"start":{"line":88,"column":32},"end":{"line":88,"column":105}}]},"11":{"type":"branch","line":99,"loc":{"start":{"line":99,"column":4},"end":{"line":102,"column":3}},"locations":[{"start":{"line":99,"column":4},"end":{"line":102,"column":3}}]},"12":{"type":"branch","line":112,"loc":{"start":{"line":112,"column":32},"end":{"line":128,"column":2}},"locations":[{"start":{"line":112,"column":32},"end":{"line":128,"column":2}}]},"13":{"type":"branch","line":116,"loc":{"start":{"line":116,"column":23},"end":{"line":116,"column":114}},"locations":[{"start":{"line":116,"column":23},"end":{"line":116,"column":114}}]},"14":{"type":"branch","line":117,"loc":{"start":{"line":117,"column":-1},"end":{"line":118,"column":56}},"locations":[{"start":{"line":117,"column":-1},"end":{"line":118,"column":56}}]},"15":{"type":"branch","line":119,"loc":{"start":{"line":119,"column":-1},"end":{"line":125,"column":4}},"locations":[{"start":{"line":119,"column":-1},"end":{"line":125,"column":4}}]},"16":{"type":"branch","line":119,"loc":{"start":{"line":119,"column":-1},"end":{"line":119,"column":15}},"locations":[{"start":{"line":119,"column":-1},"end":{"line":119,"column":15}}]},"17":{"type":"branch","line":119,"loc":{"start":{"line":119,"column":15},"end":{"line":125,"column":4}},"locations":[{"start":{"line":119,"column":15},"end":{"line":125,"column":4}}]},"18":{"type":"branch","line":125,"loc":{"start":{"line":125,"column":4},"end":{"line":127,"column":3}},"locations":[{"start":{"line":125,"column":4},"end":{"line":127,"column":3}}]},"19":{"type":"branch","line":135,"loc":{"start":{"line":135,"column":22},"end":{"line":147,"column":2}},"locations":[{"start":{"line":135,"column":22},"end":{"line":147,"column":2}}]},"20":{"type":"branch","line":139,"loc":{"start":{"line":139,"column":34},"end":{"line":139,"column":85}},"locations":[{"start":{"line":139,"column":34},"end":{"line":139,"column":85}}]},"21":{"type":"branch","line":142,"loc":{"start":{"line":142,"column":4},"end":{"line":144,"column":3}},"locations":[{"start":{"line":142,"column":4},"end":{"line":144,"column":3}}]},"22":{"type":"branch","line":154,"loc":{"start":{"line":154,"column":36},"end":{"line":189,"column":2}},"locations":[{"start":{"line":154,"column":36},"end":{"line":189,"column":2}}]},"23":{"type":"branch","line":160,"loc":{"start":{"line":160,"column":19},"end":{"line":182,"column":5}},"locations":[{"start":{"line":160,"column":19},"end":{"line":182,"column":5}}]},"24":{"type":"branch","line":179,"loc":{"start":{"line":179,"column":8},"end":{"line":181,"column":7}},"locations":[{"start":{"line":179,"column":8},"end":{"line":181,"column":7}}]},"25":{"type":"branch","line":186,"loc":{"start":{"line":186,"column":4},"end":{"line":188,"column":3}},"locations":[{"start":{"line":186,"column":4},"end":{"line":188,"column":3}}]},"26":{"type":"branch","line":195,"loc":{"start":{"line":195,"column":29},"end":{"line":206,"column":2}},"locations":[{"start":{"line":195,"column":29},"end":{"line":206,"column":2}}]},"27":{"type":"branch","line":203,"loc":{"start":{"line":203,"column":4},"end":{"line":205,"column":3}},"locations":[{"start":{"line":203,"column":4},"end":{"line":205,"column":3}}]},"28":{"type":"branch","line":214,"loc":{"start":{"line":214,"column":26},"end":{"line":229,"column":2}},"locations":[{"start":{"line":214,"column":26},"end":{"line":229,"column":2}}]},"29":{"type":"branch","line":216,"loc":{"start":{"line":216,"column":35},"end":{"line":216,"column":49}},"locations":[{"start":{"line":216,"column":35},"end":{"line":216,"column":49}}]},"30":{"type":"branch","line":217,"loc":{"start":{"line":217,"column":-1},"end":{"line":229,"column":2}},"locations":[{"start":{"line":217,"column":-1},"end":{"line":229,"column":2}}]}},"b":{"0":[2],"1":[0],"2":[1],"3":[0],"4":[4],"5":[1],"6":[3],"7":[1],"8":[2],"9":[1],"10":[0],"11":[0],"12":[6],"13":[1],"14":[5],"15":[4],"16":[2],"17":[1],"18":[3],"19":[1],"20":[0],"21":[0],"22":[2],"23":[1],"24":[0],"25":[0],"26":[1],"27":[0],"28":[8],"29":[6],"30":[2]},"fnMap":{"0":{"name":"sendVerificationEmail","decl":{"start":{"line":11,"column":37},"end":{"line":30,"column":2}},"loc":{"start":{"line":11,"column":37},"end":{"line":30,"column":2}},"line":11},"1":{"name":"confirmVerification","decl":{"start":{"line":36,"column":35},"end":{"line":47,"column":2}},"loc":{"start":{"line":36,"column":35},"end":{"line":47,"column":2}},"line":36},"2":{"name":"login","decl":{"start":{"line":56,"column":21},"end":{"line":103,"column":2}},"loc":{"start":{"line":56,"column":21},"end":{"line":103,"column":2}},"line":56},"3":{"name":"renewAccessToken","decl":{"start":{"line":112,"column":32},"end":{"line":128,"column":2}},"loc":{"start":{"line":112,"column":32},"end":{"line":128,"column":2}},"line":112},"4":{"name":"logout","decl":{"start":{"line":135,"column":22},"end":{"line":147,"column":2}},"loc":{"start":{"line":135,"column":22},"end":{"line":147,"column":2}},"line":135},"5":{"name":"requestPasswordReset","decl":{"start":{"line":154,"column":36},"end":{"line":189,"column":2}},"loc":{"start":{"line":154,"column":36},"end":{"line":189,"column":2}},"line":154},"6":{"name":"passwordReset","decl":{"start":{"line":195,"column":29},"end":{"line":206,"column":2}},"loc":{"start":{"line":195,"column":29},"end":{"line":206,"column":2}},"line":195},"7":{"name":"gateKeeper","decl":{"start":{"line":214,"column":26},"end":{"line":229,"column":2}},"loc":{"start":{"line":214,"column":26},"end":{"line":229,"column":2}},"line":214}},"f":{"0":2,"1":1,"2":4,"3":6,"4":1,"5":2,"6":1,"7":8}}
+,"/local/embruch/ragchat-api/controllers/User.js": {"path":"/local/embruch/ragchat-api/controllers/User.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":37}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":67}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":90}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":0}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":59}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":13}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":3}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":53}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":7}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":44}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":115}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":27}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":31}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":5}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":76}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":79}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":0}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":25}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":86}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":53}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":59}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":40}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":27}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":87}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":5}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":36}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":11}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":15}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":19}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":16}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":4}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":2}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":0}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":0}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":0}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":59}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":20}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":3}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":62}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":7}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":35}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":75}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":24}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":21}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":21}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":72}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":5}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":56}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":29}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":11}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":19}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":16}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":3}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":2}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":3,"9":3,"10":3,"11":3,"12":0,"13":0,"14":3,"15":3,"16":3,"17":3,"18":3,"19":1,"20":1,"21":1,"22":3,"23":0,"24":0,"25":1,"26":1,"27":1,"28":3,"29":2,"30":3,"31":3,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":2,"40":2,"41":2,"42":2,"43":2,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":2,"51":0,"52":0,"53":2},"branchMap":{"0":{"type":"branch","line":8,"loc":{"start":{"line":8,"column":26},"end":{"line":32,"column":2}},"locations":[{"start":{"line":8,"column":26},"end":{"line":32,"column":2}}]},"1":{"type":"branch","line":11,"loc":{"start":{"line":11,"column":52},"end":{"line":11,"column":98}},"locations":[{"start":{"line":11,"column":52},"end":{"line":11,"column":98}}]},"2":{"type":"branch","line":11,"loc":{"start":{"line":11,"column":99},"end":{"line":11,"column":105}},"locations":[{"start":{"line":11,"column":99},"end":{"line":11,"column":105}}]},"3":{"type":"branch","line":12,"loc":{"start":{"line":12,"column":26},"end":{"line":14,"column":5}},"locations":[{"start":{"line":12,"column":26},"end":{"line":14,"column":5}}]},"4":{"type":"branch","line":20,"loc":{"start":{"line":20,"column":-1},"end":{"line":23,"column":26}},"locations":[{"start":{"line":20,"column":-1},"end":{"line":23,"column":26}}]},"5":{"type":"branch","line":23,"loc":{"start":{"line":23,"column":26},"end":{"line":25,"column":5}},"locations":[{"start":{"line":23,"column":26},"end":{"line":25,"column":5}}]},"6":{"type":"branch","line":26,"loc":{"start":{"line":26,"column":-1},"end":{"line":29,"column":4}},"locations":[{"start":{"line":26,"column":-1},"end":{"line":29,"column":4}}]},"7":{"type":"branch","line":29,"loc":{"start":{"line":29,"column":4},"end":{"line":31,"column":3}},"locations":[{"start":{"line":29,"column":4},"end":{"line":31,"column":3}}]},"8":{"type":"branch","line":39,"loc":{"start":{"line":39,"column":35},"end":{"line":54,"column":2}},"locations":[{"start":{"line":39,"column":35},"end":{"line":54,"column":2}}]},"9":{"type":"branch","line":44,"loc":{"start":{"line":44,"column":20},"end":{"line":51,"column":4}},"locations":[{"start":{"line":44,"column":20},"end":{"line":51,"column":4}}]},"10":{"type":"branch","line":51,"loc":{"start":{"line":51,"column":4},"end":{"line":53,"column":3}},"locations":[{"start":{"line":51,"column":4},"end":{"line":53,"column":3}}]}},"b":{"0":[3],"1":[0],"2":[0],"3":[0],"4":[1],"5":[0],"6":[1],"7":[2],"8":[2],"9":[1],"10":[0]},"fnMap":{"0":{"name":"createUser","decl":{"start":{"line":8,"column":26},"end":{"line":32,"column":2}},"loc":{"start":{"line":8,"column":26},"end":{"line":32,"column":2}},"line":8},"1":{"name":"prefetchUserByEmail","decl":{"start":{"line":39,"column":35},"end":{"line":54,"column":2}},"loc":{"start":{"line":39,"column":35},"end":{"line":54,"column":2}},"line":39}},"f":{"0":3,"1":2}}
+,"/local/embruch/ragchat-api/models/Chat.js": {"path":"/local/embruch/ragchat-api/models/Chat.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":41}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":64}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":0}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":51}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":14}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":19}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":29}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":15}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":62}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":2}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":0}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":43}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":30}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":3}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":12}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":19}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":21}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":20}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":6}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":18}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":19}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":27}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":6}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":16}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":34}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":26}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":17}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":6}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":16}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":34}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":26}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":17}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":5}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":4}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":6}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":2}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":0}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":45}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":0}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":0}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":48}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":67}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":11}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":46}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":20}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":19}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":42}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":10}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":42}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":3}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":10}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":9}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":3}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":0}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":0}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":0}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":44}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":0}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":50}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":0}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":53}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":3}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":51}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":76}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":3}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":99}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":0}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":3}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":37}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":27}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":3}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":56}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":51}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":61}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":39}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":5}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":51}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":2}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":0}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":41}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":1,"53":1,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":1,"79":1},"branchMap":{},"b":{},"fnMap":{"0":{"name":"ChatSchema.methods.getConfidentialFields","decl":{"start":{"line":72,"column":43},"end":{"line":78,"column":2}},"loc":{"start":{"line":72,"column":43},"end":{"line":78,"column":2}},"line":72}},"f":{"0":0}}
+,"/local/embruch/ragchat-api/models/User.js": {"path":"/local/embruch/ragchat-api/models/User.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":41}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":28}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":64}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":0}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":0}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":51}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":14}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":19}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":31}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":15}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":62}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":2}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":0}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":43}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":30}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":3}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":15}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":19}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":23}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":6}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":11}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":19}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":19}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":6}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":12}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":19}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":21}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":21}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":22}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":19}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":6}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":15}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":19}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":24}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":19}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":6}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":25}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":19}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":29}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":6}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":15}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":20}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":25}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":20}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":6}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":11}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":19}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":20}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":16}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":6}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":19}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":19}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":29}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":19}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":6}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":16}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":34}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":26}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":17}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":6}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":16}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":34}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":26}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":17}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":5}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":4}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":6}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":2}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":0}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":45}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":11}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":51}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":109}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":6}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":0}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":48}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":67}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":11}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":46}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":20}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":19}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":42}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":10}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":42}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":3}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":0}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":18}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":36}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":97}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":35}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":3}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":10}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":9}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":3}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":0}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":0}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":0}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":44}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":86}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":51}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":54}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":4}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":0}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":50}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":103}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":45}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":55}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":4}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":0}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":53}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":17}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":46}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":63}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":5}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":0}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":0}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":3}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":51}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":76}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":3}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":99}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":0}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":3}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":37}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":27}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":3}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":56}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":51}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":61}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":39}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":5}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":51}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":2}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":0}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":41}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":1,"95":1,"96":1,"97":1,"98":1,"99":1,"100":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1,"108":1,"109":1,"110":1,"111":1,"112":1,"113":1,"114":1,"115":1,"116":1,"117":1,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1,"124":1,"125":1,"126":1,"127":1,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":1,"135":1},"branchMap":{},"b":{},"fnMap":{"0":{"name":"UserSchema.methods.getConfidentialFields","decl":{"start":{"line":128,"column":43},"end":{"line":134,"column":2}},"loc":{"start":{"line":128,"column":43},"end":{"line":134,"column":2}},"line":128}},"f":{"0":0}}
+,"/local/embruch/ragchat-api/routes/ai.js": {"path":"/local/embruch/ragchat-api/routes/ai.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":33}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":137}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":44}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":128}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":57}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":52}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":61}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":0}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":24}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":0}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":3}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":13}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":28}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":3}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":60}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":3}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":33}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":0}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":3}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":13}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":31}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":22}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":3}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":66}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":99}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":3}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":51}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":3}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":80}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":0}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":0}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":3}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":12}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":34}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":3}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":66}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":67}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":3}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":42}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":3}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":77}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":0}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":0}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":3}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":16}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":78}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":2}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":65}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":63}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":3}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":50}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":3}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":97}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":0}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":0}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":3}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":15}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":47}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":3}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":34}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":65}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":63}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":3}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":46}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":3}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":98}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":0}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":0}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":3}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":7}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":36}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":37}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":80}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":88}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":99}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":3}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":34}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":65}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":63}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":80}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":82}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":3}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":62}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":3}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":98}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":0}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":0}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":3}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":20}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":3}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":65}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":87}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":3}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":31}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":50}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":0}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":22}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1},"branchMap":{},"b":{},"fnMap":{},"f":{}}
+,"/local/embruch/ragchat-api/routes/auth.js": {"path":"/local/embruch/ragchat-api/routes/auth.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":33}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":154}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":61}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":57}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":169}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":88}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":0}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":24}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":0}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":3}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":23}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":2}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":55}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":2}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":88}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":3}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":28}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":38}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":22}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":23}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":2}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":0}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":0}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":3}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":23}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":2}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":59}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":54}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":2}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":55}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":3}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":29}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":38}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":25}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":26}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":21}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":2}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":0}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":0}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":3}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":8}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":47}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":40}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":2}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":56}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":51}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":2}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":50}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":3}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":21}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":24}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":7}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":2}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":0}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":0}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":3}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":12}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":74}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":3}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":78}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":2}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":43}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":3}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":15}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":18}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":2}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":0}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":3}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":9}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":87}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":2}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":46}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":3}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":18}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":8}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":2}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":0}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":0}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":3}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":25}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":2}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":62}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":2}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":46}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":3}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":30}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":39}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":22}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":2}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":0}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":0}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":3}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":17}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":2}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":71}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":59}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":59}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":3}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":54}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":3}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":31}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":39}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":22}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":15}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":2}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":0}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":0}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":0}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":22}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":1,"98":1,"99":1,"100":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1,"108":1},"branchMap":{},"b":{},"fnMap":{},"f":{}}
+,"/local/embruch/ragchat-api/routes/embeddings.js": {"path":"/local/embruch/ragchat-api/routes/embeddings.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":33}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":91}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":61}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":52}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":0}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":24}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":0}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":3}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":19}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":41}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":2}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":65}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":2}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":56}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":3}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":66}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":0}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":3}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":19}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":45}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":38}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":2}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":65}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":2}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":83}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":3}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":58}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":0}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":20}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":3}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":20}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":43}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":43}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":2}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":65}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":2}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":69}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":3}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":67}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":0}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":0}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":22}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1},"branchMap":{},"b":{},"fnMap":{},"f":{}}
+,"/local/embruch/ragchat-api/routes/users.js": {"path":"/local/embruch/ragchat-api/routes/users.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":33}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":52}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":63}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":64}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":57}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":0}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":0}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":24}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":0}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":3}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":13}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":2}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":70}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":57}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":70}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":67}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":92}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":2}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":85}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":3}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":80}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":0}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":0}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":22}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1},"branchMap":{},"b":{},"fnMap":{},"f":{}}
+,"/local/embruch/ragchat-api/utils/handleErrors.js": {"path":"/local/embruch/ragchat-api/utils/handleErrors.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":3}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":83}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":3}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":40}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":22}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":25}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":27}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":73}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":41}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":29}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":52}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":3}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":1}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":0}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":3}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":39}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":3}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":44}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":23}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":23}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":27}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":29}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":27}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":22}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":17}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":5}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":20}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":14}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":17}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":5}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":3}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":2}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":0}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":3}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":44}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":3}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":38}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":23}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":32}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":29}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":32}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":50}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":58}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":9}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":26}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":14}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":71}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":24}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":8}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":5}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":27}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":22}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":43}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":50}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":32}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":32}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":53}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":43}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":54}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":0}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":47}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":59}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":34}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":65}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":50}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":45}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":29}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":66}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":54}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":47}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":37}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":85}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":13}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":9}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":45}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":76}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":9}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":26}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":14}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":71}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":24}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":8}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":5}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":20}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":14}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":33}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":17}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":32}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":85}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":16}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":24}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":44}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":7}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":5}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":3}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":2}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":0}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":3}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":55}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":3}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":59}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":64}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":25}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":14}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":2}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":0}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":3}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":58}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":3}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":66}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":0}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":66}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":79}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":0}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":45}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":25}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":60}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":2}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":27,"6":27,"7":27,"8":27,"9":27,"10":27,"11":27,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":8,"19":8,"20":8,"21":8,"22":8,"23":8,"24":5,"25":5,"26":8,"27":8,"28":3,"29":3,"30":8,"31":8,"32":1,"33":1,"34":1,"35":1,"36":1,"37":27,"38":27,"39":27,"40":2,"41":2,"42":2,"43":2,"44":2,"45":2,"46":2,"47":2,"48":2,"49":2,"50":27,"51":27,"52":19,"53":19,"54":19,"55":19,"56":19,"57":45,"58":45,"59":45,"60":45,"61":45,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":45,"75":45,"76":19,"77":19,"78":19,"79":19,"80":19,"81":19,"82":19,"83":27,"84":27,"85":6,"86":6,"87":0,"88":0,"89":6,"90":6,"91":6,"92":6,"93":6,"94":27,"95":27,"96":1,"97":1,"98":1,"99":1,"100":1,"101":0,"102":0,"103":0,"104":0,"105":1,"106":1,"107":1,"108":1,"109":1,"110":27,"111":27,"112":27,"113":27,"114":27,"115":27,"116":27,"117":27},"branchMap":{"0":{"type":"branch","line":5,"loc":{"start":{"line":5,"column":2},"end":{"line":12,"column":3}},"locations":[{"start":{"line":5,"column":2},"end":{"line":12,"column":3}}]},"1":{"type":"branch","line":8,"loc":{"start":{"line":8,"column":39},"end":{"line":8,"column":72}},"locations":[{"start":{"line":8,"column":39},"end":{"line":8,"column":72}}]},"2":{"type":"branch","line":18,"loc":{"start":{"line":18,"column":32},"end":{"line":32,"column":2}},"locations":[{"start":{"line":18,"column":32},"end":{"line":32,"column":2}}]},"3":{"type":"branch","line":21,"loc":{"start":{"line":21,"column":4},"end":{"line":21,"column":27}},"locations":[{"start":{"line":21,"column":4},"end":{"line":21,"column":27}}]},"4":{"type":"branch","line":22,"loc":{"start":{"line":22,"column":4},"end":{"line":22,"column":29}},"locations":[{"start":{"line":22,"column":4},"end":{"line":22,"column":29}}]},"5":{"type":"branch","line":24,"loc":{"start":{"line":24,"column":4},"end":{"line":26,"column":5}},"locations":[{"start":{"line":24,"column":4},"end":{"line":26,"column":5}}]},"6":{"type":"branch","line":28,"loc":{"start":{"line":28,"column":4},"end":{"line":30,"column":5}},"locations":[{"start":{"line":28,"column":4},"end":{"line":30,"column":5}}]},"7":{"type":"branch","line":37,"loc":{"start":{"line":37,"column":26},"end":{"line":96,"column":2}},"locations":[{"start":{"line":37,"column":26},"end":{"line":96,"column":2}}]},"8":{"type":"branch","line":40,"loc":{"start":{"line":40,"column":4},"end":{"line":50,"column":5}},"locations":[{"start":{"line":40,"column":4},"end":{"line":50,"column":5}}]},"9":{"type":"branch","line":52,"loc":{"start":{"line":52,"column":4},"end":{"line":83,"column":5}},"locations":[{"start":{"line":52,"column":4},"end":{"line":83,"column":5}}]},"10":{"type":"branch","line":85,"loc":{"start":{"line":85,"column":4},"end":{"line":94,"column":5}},"locations":[{"start":{"line":85,"column":4},"end":{"line":94,"column":5}}]},"11":{"type":"branch","line":87,"loc":{"start":{"line":87,"column":8},"end":{"line":89,"column":85}},"locations":[{"start":{"line":87,"column":8},"end":{"line":89,"column":85}}]},"12":{"type":"branch","line":42,"loc":{"start":{"line":42,"column":40},"end":{"line":44,"column":7}},"locations":[{"start":{"line":42,"column":40},"end":{"line":44,"column":7}}]},"13":{"type":"branch","line":57,"loc":{"start":{"line":57,"column":43},"end":{"line":77,"column":7}},"locations":[{"start":{"line":57,"column":43},"end":{"line":77,"column":7}}]},"14":{"type":"branch","line":62,"loc":{"start":{"line":62,"column":58},"end":{"line":74,"column":9}},"locations":[{"start":{"line":62,"column":58},"end":{"line":74,"column":9}}]},"15":{"type":"branch","line":76,"loc":{"start":{"line":76,"column":36},"end":{"line":76,"column":76}},"locations":[{"start":{"line":76,"column":36},"end":{"line":76,"column":76}}]},"16":{"type":"branch","line":110,"loc":{"start":{"line":110,"column":38},"end":{"line":118,"column":2}},"locations":[{"start":{"line":110,"column":38},"end":{"line":118,"column":2}}]}},"b":{"0":[27],"1":[8],"2":[8],"3":[2],"4":[5],"5":[5],"6":[3],"7":[27],"8":[2],"9":[19],"10":[6],"11":[0],"12":[2],"13":[45],"14":[0],"15":[26],"16":[27]},"fnMap":{"0":{"name":"CustomError","decl":{"start":{"line":5,"column":2},"end":{"line":12,"column":3}},"loc":{"start":{"line":5,"column":2},"end":{"line":12,"column":3}},"line":5},"1":{"name":"generateErrorStatusCode","decl":{"start":{"line":18,"column":32},"end":{"line":32,"column":2}},"loc":{"start":{"line":18,"column":32},"end":{"line":32,"column":2}},"line":18},"2":{"name":"generateErrorBody","decl":{"start":{"line":37,"column":26},"end":{"line":96,"column":2}},"loc":{"start":{"line":37,"column":26},"end":{"line":96,"column":2}},"line":37},"3":{"name":"middlewareUnknownRoute","decl":{"start":{"line":101,"column":38},"end":{"line":105,"column":2}},"loc":{"start":{"line":101,"column":38},"end":{"line":105,"column":2}},"line":101},"4":{"name":"middlewareErrorHandler","decl":{"start":{"line":110,"column":38},"end":{"line":118,"column":2}},"loc":{"start":{"line":110,"column":38},"end":{"line":118,"column":2}},"line":110}},"f":{"0":27,"1":8,"2":27,"3":0,"4":27}}
+,"/local/embruch/ragchat-api/utils/handleSchemes.js": {"path":"/local/embruch/ragchat-api/utils/handleSchemes.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":0}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":3}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":77}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":2}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":44}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":2}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":49}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":3}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":49}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":50}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":52}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":61}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":39}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":5}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":48}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":51}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":2}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":0}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":0}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":3}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":66}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":2}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":45}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":47}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":2}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":45}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":3}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":58}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":51}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":58}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":23}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":39}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":25}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":5}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":49}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":16}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":2}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":0}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":3}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":50}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":2}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":44}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":2}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":49}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":3}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":37}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":41}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":2}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":0}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":3}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":37}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":58}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":2}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":44}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":56}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":2}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":85}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":3}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":57}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":48}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":64}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":52}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":36}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":5}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":29}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":16}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":2}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":3,"10":3,"11":3,"12":42,"13":3,"14":3,"15":3,"16":3,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":3,"29":3,"30":3,"31":3,"32":6,"33":3,"34":3,"35":3,"36":3,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":4,"47":4,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":1,"57":1,"58":1,"59":4,"60":4,"61":50,"62":13,"63":13,"64":4,"65":4,"66":4},"branchMap":{"0":{"type":"branch","line":9,"loc":{"start":{"line":9,"column":37},"end":{"line":17,"column":2}},"locations":[{"start":{"line":9,"column":37},"end":{"line":17,"column":2}}]},"1":{"type":"branch","line":12,"loc":{"start":{"line":12,"column":43},"end":{"line":14,"column":3}},"locations":[{"start":{"line":12,"column":43},"end":{"line":14,"column":3}}]},"2":{"type":"branch","line":16,"loc":{"start":{"line":16,"column":32},"end":{"line":16,"column":49}},"locations":[{"start":{"line":16,"column":32},"end":{"line":16,"column":49}}]},"3":{"type":"branch","line":28,"loc":{"start":{"line":28,"column":38},"end":{"line":37,"column":2}},"locations":[{"start":{"line":28,"column":38},"end":{"line":37,"column":2}}]},"4":{"type":"branch","line":32,"loc":{"start":{"line":32,"column":29},"end":{"line":34,"column":3}},"locations":[{"start":{"line":32,"column":29},"end":{"line":34,"column":3}}]},"5":{"type":"branch","line":46,"loc":{"start":{"line":46,"column":25},"end":{"line":48,"column":2}},"locations":[{"start":{"line":46,"column":25},"end":{"line":48,"column":2}}]},"6":{"type":"branch","line":59,"loc":{"start":{"line":59,"column":37},"end":{"line":67,"column":2}},"locations":[{"start":{"line":59,"column":37},"end":{"line":67,"column":2}}]},"7":{"type":"branch","line":61,"loc":{"start":{"line":61,"column":52},"end":{"line":65,"column":3}},"locations":[{"start":{"line":61,"column":52},"end":{"line":65,"column":3}}]},"8":{"type":"branch","line":62,"loc":{"start":{"line":62,"column":51},"end":{"line":64,"column":5}},"locations":[{"start":{"line":62,"column":51},"end":{"line":64,"column":5}}]},"9":{"type":"branch","line":65,"loc":{"start":{"line":65,"column":12},"end":{"line":65,"column":26}},"locations":[{"start":{"line":65,"column":12},"end":{"line":65,"column":26}}]}},"b":{"0":[3],"1":[42],"2":[6],"3":[3],"4":[6],"5":[4],"6":[4],"7":[50],"8":[13],"9":[50]},"fnMap":{"0":{"name":"getConfidentialFields","decl":{"start":{"line":9,"column":37},"end":{"line":17,"column":2}},"loc":{"start":{"line":9,"column":37},"end":{"line":17,"column":2}},"line":9},"1":{"name":"hideConfidentialFields","decl":{"start":{"line":28,"column":38},"end":{"line":37,"column":2}},"loc":{"start":{"line":28,"column":38},"end":{"line":37,"column":2}},"line":28},"2":{"name":"getAllFieldnames","decl":{"start":{"line":46,"column":25},"end":{"line":48,"column":2}},"loc":{"start":{"line":46,"column":25},"end":{"line":48,"column":2}},"line":46},"3":{"name":"prefillDocumentObject","decl":{"start":{"line":59,"column":37},"end":{"line":67,"column":2}},"loc":{"start":{"line":59,"column":37},"end":{"line":67,"column":2}},"line":59}},"f":{"0":3,"1":3,"2":4,"3":4}}
+,"/local/embruch/ragchat-api/utils/handleTokens.js": {"path":"/local/embruch/ragchat-api/utils/handleTokens.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":31}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":37}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":83}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":46}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":0}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":0}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":3}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":54}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":42}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":83}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":2}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":51}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":2}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":19}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":3}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":53}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":147}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":2}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":0}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":3}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":48}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":39}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":54}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":46}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":2}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":30}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":46}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":66}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":2}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":3}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":66}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":17}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":106}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":17}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":85}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":15}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":35}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":11}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":5}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":2}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":0}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":0}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":3}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":44}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":42}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":2}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":51}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":2}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":19}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":3}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":47}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":91}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":2}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":0}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":3}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":54}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":42}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":79}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":2}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":51}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":2}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":19}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":3}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":49}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":158}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":2}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":0}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":0}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":3}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":44}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":42}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":2}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":51}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":2}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":19}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":3}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":54}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":7}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":13}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":72}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":30}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":64}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":13}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":24}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":19}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":16}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":3}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":2}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":0}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":0}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":3}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":57}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":2}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":49}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":2}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":62}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":3}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":59}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":7}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":21}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":66}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":33}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":21}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":71}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":66}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":19}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":16}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":3}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":2}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":0}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":3}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":42}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":2}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":56}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":3}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":59}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":7}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":98}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":11}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":19}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":16}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":3}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":2}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":0}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":0}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":3}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":46}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":74}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":2}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":30}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":46}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":66}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":2}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":3}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":60}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":46}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":0}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":18}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":50}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":47}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":55}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":0}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":45}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":96}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":0}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":17}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":39}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":75}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":39}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":0}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":17}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":107}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":58}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":38}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":42}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":46}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":0}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":11}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":5}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":2}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":0}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":0}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":3}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":48}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":74}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":2}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":30}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":46}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":66}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":2}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":3}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":62}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":7}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":26}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":115}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":93}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":27}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":114}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":19}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":87}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":13}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":7}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":19}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":16}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":3}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":2}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":2,"17":2,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"51":2,"52":2,"53":1,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":0,"86":0,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":1,"98":5,"99":5,"100":5,"101":5,"102":5,"103":5,"104":5,"105":5,"106":3,"107":3,"108":5,"109":1,"110":1,"111":1,"112":1,"113":1,"114":1,"115":1,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":1,"124":1,"125":1,"126":1,"127":1,"128":1,"129":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":32,"136":32,"137":32,"138":32,"139":32,"140":32,"141":32,"142":32,"143":32,"144":26,"145":26,"146":26,"147":26,"148":26,"149":26,"150":26,"151":26,"152":20,"153":20,"154":20,"155":20,"156":20,"157":20,"158":26,"159":26,"160":1,"161":1,"162":1,"163":1,"164":1,"165":1,"166":1,"167":1,"168":1,"169":1,"170":1,"171":1,"172":3,"173":3,"174":3,"175":3,"176":3,"177":3,"178":3,"179":3,"180":1,"181":3,"182":3,"183":0,"184":0,"185":3},"branchMap":{"0":{"type":"branch","line":16,"loc":{"start":{"line":16,"column":39},"end":{"line":18,"column":2}},"locations":[{"start":{"line":16,"column":39},"end":{"line":18,"column":2}}]},"1":{"type":"branch","line":51,"loc":{"start":{"line":51,"column":33},"end":{"line":53,"column":2}},"locations":[{"start":{"line":51,"column":33},"end":{"line":53,"column":2}}]},"2":{"type":"branch","line":64,"loc":{"start":{"line":64,"column":35},"end":{"line":66,"column":2}},"locations":[{"start":{"line":64,"column":35},"end":{"line":66,"column":2}}]},"3":{"type":"branch","line":77,"loc":{"start":{"line":77,"column":34},"end":{"line":88,"column":2}},"locations":[{"start":{"line":77,"column":34},"end":{"line":88,"column":2}}]},"4":{"type":"branch","line":85,"loc":{"start":{"line":85,"column":4},"end":{"line":87,"column":3}},"locations":[{"start":{"line":85,"column":4},"end":{"line":87,"column":3}}]},"5":{"type":"branch","line":98,"loc":{"start":{"line":98,"column":34},"end":{"line":109,"column":2}},"locations":[{"start":{"line":98,"column":34},"end":{"line":109,"column":2}}]},"6":{"type":"branch","line":102,"loc":{"start":{"line":102,"column":20},"end":{"line":102,"column":33}},"locations":[{"start":{"line":102,"column":20},"end":{"line":102,"column":33}}]},"7":{"type":"branch","line":105,"loc":{"start":{"line":105,"column":17},"end":{"line":105,"column":44}},"locations":[{"start":{"line":105,"column":17},"end":{"line":105,"column":44}}]},"8":{"type":"branch","line":105,"loc":{"start":{"line":105,"column":45},"end":{"line":105,"column":56}},"locations":[{"start":{"line":105,"column":45},"end":{"line":105,"column":56}}]},"9":{"type":"branch","line":105,"loc":{"start":{"line":105,"column":57},"end":{"line":105,"column":64}},"locations":[{"start":{"line":105,"column":57},"end":{"line":105,"column":64}}]},"10":{"type":"branch","line":106,"loc":{"start":{"line":106,"column":4},"end":{"line":108,"column":3}},"locations":[{"start":{"line":106,"column":4},"end":{"line":108,"column":3}}]},"11":{"type":"branch","line":135,"loc":{"start":{"line":135,"column":33},"end":{"line":160,"column":2}},"locations":[{"start":{"line":135,"column":33},"end":{"line":160,"column":2}}]},"12":{"type":"branch","line":141,"loc":{"start":{"line":141,"column":27},"end":{"line":141,"column":54}},"locations":[{"start":{"line":141,"column":27},"end":{"line":141,"column":54}}]},"13":{"type":"branch","line":144,"loc":{"start":{"line":144,"column":14},"end":{"line":144,"column":96}},"locations":[{"start":{"line":144,"column":14},"end":{"line":144,"column":96}}]},"14":{"type":"branch","line":145,"loc":{"start":{"line":145,"column":-1},"end":{"line":160,"column":2}},"locations":[{"start":{"line":145,"column":-1},"end":{"line":160,"column":2}}]},"15":{"type":"branch","line":148,"loc":{"start":{"line":148,"column":48},"end":{"line":159,"column":3}},"locations":[{"start":{"line":148,"column":48},"end":{"line":159,"column":3}}]},"16":{"type":"branch","line":152,"loc":{"start":{"line":152,"column":15},"end":{"line":159,"column":2}},"locations":[{"start":{"line":152,"column":15},"end":{"line":159,"column":2}}]},"17":{"type":"branch","line":152,"loc":{"start":{"line":152,"column":15},"end":{"line":152,"column":107}},"locations":[{"start":{"line":152,"column":15},"end":{"line":152,"column":107}}]},"18":{"type":"branch","line":153,"loc":{"start":{"line":153,"column":-1},"end":{"line":159,"column":2}},"locations":[{"start":{"line":153,"column":-1},"end":{"line":159,"column":2}}]},"19":{"type":"branch","line":172,"loc":{"start":{"line":172,"column":35},"end":{"line":186,"column":2}},"locations":[{"start":{"line":172,"column":35},"end":{"line":186,"column":2}}]},"20":{"type":"branch","line":176,"loc":{"start":{"line":176,"column":23},"end":{"line":176,"column":93}},"locations":[{"start":{"line":176,"column":23},"end":{"line":176,"column":93}}]},"21":{"type":"branch","line":183,"loc":{"start":{"line":183,"column":4},"end":{"line":185,"column":3}},"locations":[{"start":{"line":183,"column":4},"end":{"line":185,"column":3}}]},"22":{"type":"branch","line":178,"loc":{"start":{"line":178,"column":87},"end":{"line":182,"column":5}},"locations":[{"start":{"line":178,"column":87},"end":{"line":182,"column":5}}]},"23":{"type":"branch","line":180,"loc":{"start":{"line":180,"column":17},"end":{"line":180,"column":87}},"locations":[{"start":{"line":180,"column":17},"end":{"line":180,"column":87}}]},"24":{"type":"branch","line":181,"loc":{"start":{"line":181,"column":-1},"end":{"line":182,"column":4}},"locations":[{"start":{"line":181,"column":-1},"end":{"line":182,"column":4}}]}},"b":{"0":[2],"1":[2],"2":[1],"3":[1],"4":[0],"5":[5],"6":[0],"7":[2],"8":[1],"9":[1],"10":[3],"11":[32],"12":[26],"13":[6],"14":[26],"15":[26],"16":[25],"17":[6],"18":[20],"19":[3],"20":[0],"21":[0],"22":[3],"23":[2],"24":[1]},"fnMap":{"0":{"name":"createVerificationToken","decl":{"start":{"line":16,"column":39},"end":{"line":18,"column":2}},"loc":{"start":{"line":16,"column":39},"end":{"line":18,"column":2}},"line":16},"1":{"name":"verifyVerificationToken","decl":{"start":{"line":31,"column":39},"end":{"line":40,"column":2}},"loc":{"start":{"line":31,"column":39},"end":{"line":40,"column":2}},"line":31},"2":{"name":"createAccessToken","decl":{"start":{"line":51,"column":33},"end":{"line":53,"column":2}},"loc":{"start":{"line":51,"column":33},"end":{"line":53,"column":2}},"line":51},"3":{"name":"createPasswordToken","decl":{"start":{"line":64,"column":35},"end":{"line":66,"column":2}},"loc":{"start":{"line":64,"column":35},"end":{"line":66,"column":2}},"line":64},"4":{"name":"createRefreshToken","decl":{"start":{"line":77,"column":34},"end":{"line":88,"column":2}},"loc":{"start":{"line":77,"column":34},"end":{"line":88,"column":2}},"line":77},"5":{"name":"verifyRefreshToken","decl":{"start":{"line":98,"column":34},"end":{"line":109,"column":2}},"loc":{"start":{"line":98,"column":34},"end":{"line":109,"column":2}},"line":98},"6":{"name":"deleteRefreshToken","decl":{"start":{"line":116,"column":34},"end":{"line":123,"column":2}},"loc":{"start":{"line":116,"column":34},"end":{"line":123,"column":2}},"line":116},"7":{"name":"verifyAccessToken","decl":{"start":{"line":135,"column":33},"end":{"line":160,"column":2}},"loc":{"start":{"line":135,"column":33},"end":{"line":160,"column":2}},"line":135},"8":{"name":"verifyPasswordToken","decl":{"start":{"line":172,"column":35},"end":{"line":186,"column":2}},"loc":{"start":{"line":172,"column":35},"end":{"line":186,"column":2}},"line":172}},"f":{"0":2,"1":0,"2":2,"3":1,"4":1,"5":5,"6":0,"7":32,"8":3}}
+,"/local/embruch/ragchat-api/utils/handleValidations.js": {"path":"/local/embruch/ragchat-api/utils/handleValidations.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":48}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":0}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":26}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":57}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":42}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":7}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":52}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":27}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":14}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":42}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":11}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":19}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":17}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":28}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":27}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":41}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":16}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":3}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":2}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":47,"5":47,"6":47,"7":47,"8":47,"9":47,"10":47,"11":47,"12":19,"13":19,"14":19,"15":19,"16":19,"17":19,"18":47},"branchMap":{"0":{"type":"branch","line":4,"loc":{"start":{"line":4,"column":24},"end":{"line":19,"column":2}},"locations":[{"start":{"line":4,"column":24},"end":{"line":19,"column":2}}]},"1":{"type":"branch","line":4,"loc":{"start":{"line":4,"column":36},"end":{"line":19,"column":2}},"locations":[{"start":{"line":4,"column":36},"end":{"line":19,"column":2}}]},"2":{"type":"branch","line":12,"loc":{"start":{"line":12,"column":4},"end":{"line":18,"column":3}},"locations":[{"start":{"line":12,"column":4},"end":{"line":18,"column":3}}]}},"b":{"0":[165],"1":[47],"2":[19]},"fnMap":{"0":{"name":"validate","decl":{"start":{"line":4,"column":24},"end":{"line":19,"column":2}},"loc":{"start":{"line":4,"column":24},"end":{"line":19,"column":2}},"line":4}},"f":{"0":165}}
+,"/local/embruch/ragchat-api/validationSchemes/AI.js": {"path":"/local/embruch/ragchat-api/validationSchemes/AI.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":24}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":0}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":13}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":41}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":21}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":3}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":0}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":12}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":40}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":27}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":3}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":0}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":16}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":44}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":27}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":33}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":3}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":0}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":15}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":43}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":27}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":3}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":0}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":7}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":36}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":27}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":27}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":39}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":3}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1},"branchMap":{},"b":{},"fnMap":{},"f":{}}
+,"/local/embruch/ragchat-api/validationSchemes/Auth.js": {"path":"/local/embruch/ragchat-api/validationSchemes/Auth.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":24}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":34}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":0}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":23}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":51}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":28}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":3}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":0}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":23}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":51}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":27}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":3}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":0}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":8}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":37}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":35}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":29}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":3}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":0}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":25}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":52}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":35}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":3}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":0}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":25}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":52}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":27}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":80}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":111}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":5}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":30}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":61}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":35}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":28}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":3}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1},"branchMap":{"0":{"type":"branch","line":28,"loc":{"start":{"line":28,"column":30},"end":{"line":28,"column":77}},"locations":[{"start":{"line":28,"column":30},"end":{"line":28,"column":77}}]},"1":{"type":"branch","line":32,"loc":{"start":{"line":32,"column":10},"end":{"line":32,"column":58}},"locations":[{"start":{"line":32,"column":10},"end":{"line":32,"column":58}}]}},"b":{"0":[5],"1":[4]},"fnMap":{"0":{"name":"__vite_ssr_import_0__.z.object.password.__vite_ssr_import_0__.z.string.refine.message","decl":{"start":{"line":28,"column":30},"end":{"line":28,"column":77}},"loc":{"start":{"line":28,"column":30},"end":{"line":28,"column":77}},"line":28},"1":{"name":"__vite_ssr_import_0__.z.object.refine.message","decl":{"start":{"line":32,"column":10},"end":{"line":32,"column":58}},"loc":{"start":{"line":32,"column":10},"end":{"line":32,"column":58}},"line":32}},"f":{"0":5,"1":4}}
+,"/local/embruch/ragchat-api/validationSchemes/User.js": {"path":"/local/embruch/ragchat-api/validationSchemes/User.js","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":24}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":34}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":0}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":10}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":42}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":26}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":30}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":28}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":80}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":111}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":5}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":30}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":61}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":35}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":28}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":3}}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1},"branchMap":{"0":{"type":"branch","line":9,"loc":{"start":{"line":9,"column":30},"end":{"line":9,"column":77}},"locations":[{"start":{"line":9,"column":30},"end":{"line":9,"column":77}}]},"1":{"type":"branch","line":13,"loc":{"start":{"line":13,"column":10},"end":{"line":13,"column":58}},"locations":[{"start":{"line":13,"column":10},"end":{"line":13,"column":58}}]}},"b":{"0":[7],"1":[6]},"fnMap":{"0":{"name":"__vite_ssr_import_0__.z.object.password.__vite_ssr_import_0__.z.string.refine.message","decl":{"start":{"line":9,"column":30},"end":{"line":9,"column":77}},"loc":{"start":{"line":9,"column":30},"end":{"line":9,"column":77}},"line":9},"1":{"name":"__vite_ssr_import_0__.z.object.refine.message","decl":{"start":{"line":13,"column":10},"end":{"line":13,"column":58}},"loc":{"start":{"line":13,"column":10},"end":{"line":13,"column":58}},"line":13}},"f":{"0":7,"1":6}}
 }
diff --git a/coverage/index.html b/coverage/index.html
index 97538fb..9fb0285 100644
--- a/coverage/index.html
+++ b/coverage/index.html
@@ -23,30 +23,30 @@
         <div class='clearfix'>
             
             <div class='fl pad1y space-right2'>
-                <span class="strong">70.2% </span>
+                <span class="strong">96.28% </span>
                 <span class="quiet">Statements</span>
-                <span class='fraction'>1633/2326</span>
+                <span class='fraction'>3214/3338</span>
             </div>
         
             
             <div class='fl pad1y space-right2'>
-                <span class="strong">80.15% </span>
+                <span class="strong">93.37% </span>
                 <span class="quiet">Branches</span>
-                <span class='fraction'>105/131</span>
+                <span class='fraction'>423/453</span>
             </div>
         
             
             <div class='fl pad1y space-right2'>
-                <span class="strong">52.63% </span>
+                <span class="strong">90.38% </span>
                 <span class="quiet">Functions</span>
-                <span class='fraction'>40/76</span>
+                <span class='fraction'>47/52</span>
             </div>
         
             
             <div class='fl pad1y space-right2'>
-                <span class="strong">70.2% </span>
+                <span class="strong">96.28% </span>
                 <span class="quiet">Lines</span>
-                <span class='fraction'>1633/2326</span>
+                <span class='fraction'>3214/3338</span>
             </div>
         
             
@@ -61,7 +61,7 @@
             </div>
         </template>
     </div>
-    <div class='status-line medium'></div>
+    <div class='status-line high'></div>
     <div class="pad1">
 <table class="coverage-summary">
 <thead>
@@ -79,33 +79,78 @@
 </tr>
 </thead>
 <tbody><tr>
-	<td class="file medium" data-value="ragchat-api"><a href="ragchat-api/index.html">ragchat-api</a></td>
-	<td data-value="58.67" class="pic medium">
-	<div class="chart"><div class="cover-fill" style="width: 58%"></div><div class="cover-empty" style="width: 42%"></div></div>
+	<td class="file high" data-value="ragchat-api"><a href="ragchat-api/index.html">ragchat-api</a></td>
+	<td data-value="87.5" class="pic high">
+	<div class="chart"><div class="cover-fill" style="width: 87%"></div><div class="cover-empty" style="width: 13%"></div></div>
 	</td>
-	<td data-value="58.67" class="pct medium">58.67%</td>
-	<td data-value="121" class="abs medium">71/121</td>
-	<td data-value="25" class="pct low">25%</td>
-	<td data-value="4" class="abs low">1/4</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="2" class="abs low">0/2</td>
-	<td data-value="58.67" class="pct medium">58.67%</td>
-	<td data-value="121" class="abs medium">71/121</td>
+	<td data-value="87.5" class="pct high">87.5%</td>
+	<td data-value="120" class="abs high">105/120</td>
+	<td data-value="60" class="pct medium">60%</td>
+	<td data-value="5" class="abs medium">3/5</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="87.5" class="pct high">87.5%</td>
+	<td data-value="120" class="abs high">105/120</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="ragchat-api/__tests__/ai"><a href="ragchat-api/__tests__/ai/index.html">ragchat-api/__tests__/ai</a></td>
+	<td data-value="99.77" class="pic high">
+	<div class="chart"><div class="cover-fill" style="width: 99%"></div><div class="cover-empty" style="width: 1%"></div></div>
+	</td>
+	<td data-value="99.77" class="pct high">99.77%</td>
+	<td data-value="881" class="abs high">879/881</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="156" class="abs high">156/156</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="6" class="abs high">6/6</td>
+	<td data-value="99.77" class="pct high">99.77%</td>
+	<td data-value="881" class="abs high">879/881</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="ragchat-api/__tests__/auth"><a href="ragchat-api/__tests__/auth/index.html">ragchat-api/__tests__/auth</a></td>
+	<td data-value="100" class="pic high">
+	<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
+	</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="728" class="abs high">728/728</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="131" class="abs high">131/131</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="728" class="abs high">728/728</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="ragchat-api/__tests__/users"><a href="ragchat-api/__tests__/users/index.html">ragchat-api/__tests__/users</a></td>
+	<td data-value="100" class="pic high">
+	<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
+	</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="177" class="abs high">177/177</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="30" class="abs high">30/30</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="177" class="abs high">177/177</td>
 	</tr>
 
 <tr>
-	<td class="file medium" data-value="ragchat-api/controllers"><a href="ragchat-api/controllers/index.html">ragchat-api/controllers</a></td>
-	<td data-value="63.79" class="pic medium">
-	<div class="chart"><div class="cover-fill" style="width: 63%"></div><div class="cover-empty" style="width: 37%"></div></div>
+	<td class="file high" data-value="ragchat-api/controllers"><a href="ragchat-api/controllers/index.html">ragchat-api/controllers</a></td>
+	<td data-value="92.61" class="pic high">
+	<div class="chart"><div class="cover-fill" style="width: 92%"></div><div class="cover-empty" style="width: 8%"></div></div>
 	</td>
-	<td data-value="63.79" class="pct medium">63.79%</td>
-	<td data-value="859" class="abs medium">548/859</td>
-	<td data-value="72.85" class="pct medium">72.85%</td>
-	<td data-value="70" class="abs medium">51/70</td>
-	<td data-value="60.6" class="pct medium">60.6%</td>
-	<td data-value="33" class="abs medium">20/33</td>
-	<td data-value="63.79" class="pct medium">63.79%</td>
-	<td data-value="859" class="abs medium">548/859</td>
+	<td data-value="92.61" class="pct high">92.61%</td>
+	<td data-value="474" class="abs high">439/474</td>
+	<td data-value="69.44" class="pct medium">69.44%</td>
+	<td data-value="72" class="abs medium">50/72</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="20" class="abs high">20/20</td>
+	<td data-value="92.61" class="pct high">92.61%</td>
+	<td data-value="474" class="abs high">439/474</td>
 	</tr>
 
 <tr>
@@ -129,28 +174,28 @@
 	<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
 	</td>
 	<td data-value="100" class="pct high">100%</td>
-	<td data-value="271" class="abs high">271/271</td>
+	<td data-value="272" class="abs high">272/272</td>
 	<td data-value="100" class="pct high">100%</td>
 	<td data-value="0" class="abs high">0/0</td>
 	<td data-value="100" class="pct high">100%</td>
 	<td data-value="0" class="abs high">0/0</td>
 	<td data-value="100" class="pct high">100%</td>
-	<td data-value="271" class="abs high">271/271</td>
+	<td data-value="272" class="abs high">272/272</td>
 	</tr>
 
 <tr>
-	<td class="file medium" data-value="ragchat-api/utils"><a href="ragchat-api/utils/index.html">ragchat-api/utils</a></td>
-	<td data-value="61.69" class="pic medium">
-	<div class="chart"><div class="cover-fill" style="width: 61%"></div><div class="cover-empty" style="width: 39%"></div></div>
+	<td class="file high" data-value="ragchat-api/utils"><a href="ragchat-api/utils/index.html">ragchat-api/utils</a></td>
+	<td data-value="90.25" class="pic high">
+	<div class="chart"><div class="cover-fill" style="width: 90%"></div><div class="cover-empty" style="width: 10%"></div></div>
 	</td>
-	<td data-value="61.69" class="pct medium">61.69%</td>
-	<td data-value="778" class="abs medium">480/778</td>
-	<td data-value="92.45" class="pct high">92.45%</td>
-	<td data-value="53" class="abs high">49/53</td>
-	<td data-value="45.71" class="pct low">45.71%</td>
-	<td data-value="35" class="abs low">16/35</td>
-	<td data-value="61.69" class="pct medium">61.69%</td>
-	<td data-value="778" class="abs medium">480/778</td>
+	<td data-value="90.25" class="pct high">90.25%</td>
+	<td data-value="390" class="abs high">352/390</td>
+	<td data-value="89.09" class="pct high">89.09%</td>
+	<td data-value="55" class="abs high">49/55</td>
+	<td data-value="84.21" class="pct high">84.21%</td>
+	<td data-value="19" class="abs high">16/19</td>
+	<td data-value="90.25" class="pct high">90.25%</td>
+	<td data-value="390" class="abs high">352/390</td>
 	</tr>
 
 <tr>
@@ -159,13 +204,13 @@
 	<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
 	</td>
 	<td data-value="100" class="pct high">100%</td>
-	<td data-value="81" class="abs high">81/81</td>
+	<td data-value="80" class="abs high">80/80</td>
 	<td data-value="100" class="pct high">100%</td>
 	<td data-value="4" class="abs high">4/4</td>
 	<td data-value="100" class="pct high">100%</td>
 	<td data-value="4" class="abs high">4/4</td>
 	<td data-value="100" class="pct high">100%</td>
-	<td data-value="81" class="abs high">81/81</td>
+	<td data-value="80" class="abs high">80/80</td>
 	</tr>
 
 </tbody>
@@ -176,7 +221,7 @@
             <div class='footer quiet pad2 space-top1 center small'>
                 Code coverage generated by
                 <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
-                at 2024-07-28T19:23:24.511Z
+                at 2024-08-07T15:59:44.935Z
             </div>
         <script src="prettify.js"></script>
         <script>
diff --git a/coverage/ragchat-api/__tests__/ai/chat.test.js.html b/coverage/ragchat-api/__tests__/ai/chat.test.js.html
new file mode 100644
index 0000000..0d622ec
--- /dev/null
+++ b/coverage/ragchat-api/__tests__/ai/chat.test.js.html
@@ -0,0 +1,958 @@
+
+<!doctype html>
+<html lang="en">
+
+<head>
+    <title>Code coverage report for ragchat-api/__tests__/ai/chat.test.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+    
+<body>
+<div class='wrapper'>
+    <div class='pad1'>
+        <h1><a href="../../../index.html">All files</a> / <a href="index.html">ragchat-api/__tests__/ai</a> chat.test.js</h1>
+        <div class='clearfix'>
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Statements</span>
+                <span class='fraction'>172/172</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Branches</span>
+                <span class='fraction'>32/32</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Functions</span>
+                <span class='fraction'>1/1</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Lines</span>
+                <span class='fraction'>172/172</span>
+            </div>
+        
+            
+        </div>
+        <p class="quiet">
+            Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
+        </p>
+        <template id="filterTemplate">
+            <div class="quiet">
+                Filter:
+                <input type="search" id="fileSearch">
+            </div>
+        </template>
+    </div>
+    <div class='status-line high'></div>
+    <pre><table class="coverage">
+<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
+<a name='L2'></a><a href='#L2'>2</a>
+<a name='L3'></a><a href='#L3'>3</a>
+<a name='L4'></a><a href='#L4'>4</a>
+<a name='L5'></a><a href='#L5'>5</a>
+<a name='L6'></a><a href='#L6'>6</a>
+<a name='L7'></a><a href='#L7'>7</a>
+<a name='L8'></a><a href='#L8'>8</a>
+<a name='L9'></a><a href='#L9'>9</a>
+<a name='L10'></a><a href='#L10'>10</a>
+<a name='L11'></a><a href='#L11'>11</a>
+<a name='L12'></a><a href='#L12'>12</a>
+<a name='L13'></a><a href='#L13'>13</a>
+<a name='L14'></a><a href='#L14'>14</a>
+<a name='L15'></a><a href='#L15'>15</a>
+<a name='L16'></a><a href='#L16'>16</a>
+<a name='L17'></a><a href='#L17'>17</a>
+<a name='L18'></a><a href='#L18'>18</a>
+<a name='L19'></a><a href='#L19'>19</a>
+<a name='L20'></a><a href='#L20'>20</a>
+<a name='L21'></a><a href='#L21'>21</a>
+<a name='L22'></a><a href='#L22'>22</a>
+<a name='L23'></a><a href='#L23'>23</a>
+<a name='L24'></a><a href='#L24'>24</a>
+<a name='L25'></a><a href='#L25'>25</a>
+<a name='L26'></a><a href='#L26'>26</a>
+<a name='L27'></a><a href='#L27'>27</a>
+<a name='L28'></a><a href='#L28'>28</a>
+<a name='L29'></a><a href='#L29'>29</a>
+<a name='L30'></a><a href='#L30'>30</a>
+<a name='L31'></a><a href='#L31'>31</a>
+<a name='L32'></a><a href='#L32'>32</a>
+<a name='L33'></a><a href='#L33'>33</a>
+<a name='L34'></a><a href='#L34'>34</a>
+<a name='L35'></a><a href='#L35'>35</a>
+<a name='L36'></a><a href='#L36'>36</a>
+<a name='L37'></a><a href='#L37'>37</a>
+<a name='L38'></a><a href='#L38'>38</a>
+<a name='L39'></a><a href='#L39'>39</a>
+<a name='L40'></a><a href='#L40'>40</a>
+<a name='L41'></a><a href='#L41'>41</a>
+<a name='L42'></a><a href='#L42'>42</a>
+<a name='L43'></a><a href='#L43'>43</a>
+<a name='L44'></a><a href='#L44'>44</a>
+<a name='L45'></a><a href='#L45'>45</a>
+<a name='L46'></a><a href='#L46'>46</a>
+<a name='L47'></a><a href='#L47'>47</a>
+<a name='L48'></a><a href='#L48'>48</a>
+<a name='L49'></a><a href='#L49'>49</a>
+<a name='L50'></a><a href='#L50'>50</a>
+<a name='L51'></a><a href='#L51'>51</a>
+<a name='L52'></a><a href='#L52'>52</a>
+<a name='L53'></a><a href='#L53'>53</a>
+<a name='L54'></a><a href='#L54'>54</a>
+<a name='L55'></a><a href='#L55'>55</a>
+<a name='L56'></a><a href='#L56'>56</a>
+<a name='L57'></a><a href='#L57'>57</a>
+<a name='L58'></a><a href='#L58'>58</a>
+<a name='L59'></a><a href='#L59'>59</a>
+<a name='L60'></a><a href='#L60'>60</a>
+<a name='L61'></a><a href='#L61'>61</a>
+<a name='L62'></a><a href='#L62'>62</a>
+<a name='L63'></a><a href='#L63'>63</a>
+<a name='L64'></a><a href='#L64'>64</a>
+<a name='L65'></a><a href='#L65'>65</a>
+<a name='L66'></a><a href='#L66'>66</a>
+<a name='L67'></a><a href='#L67'>67</a>
+<a name='L68'></a><a href='#L68'>68</a>
+<a name='L69'></a><a href='#L69'>69</a>
+<a name='L70'></a><a href='#L70'>70</a>
+<a name='L71'></a><a href='#L71'>71</a>
+<a name='L72'></a><a href='#L72'>72</a>
+<a name='L73'></a><a href='#L73'>73</a>
+<a name='L74'></a><a href='#L74'>74</a>
+<a name='L75'></a><a href='#L75'>75</a>
+<a name='L76'></a><a href='#L76'>76</a>
+<a name='L77'></a><a href='#L77'>77</a>
+<a name='L78'></a><a href='#L78'>78</a>
+<a name='L79'></a><a href='#L79'>79</a>
+<a name='L80'></a><a href='#L80'>80</a>
+<a name='L81'></a><a href='#L81'>81</a>
+<a name='L82'></a><a href='#L82'>82</a>
+<a name='L83'></a><a href='#L83'>83</a>
+<a name='L84'></a><a href='#L84'>84</a>
+<a name='L85'></a><a href='#L85'>85</a>
+<a name='L86'></a><a href='#L86'>86</a>
+<a name='L87'></a><a href='#L87'>87</a>
+<a name='L88'></a><a href='#L88'>88</a>
+<a name='L89'></a><a href='#L89'>89</a>
+<a name='L90'></a><a href='#L90'>90</a>
+<a name='L91'></a><a href='#L91'>91</a>
+<a name='L92'></a><a href='#L92'>92</a>
+<a name='L93'></a><a href='#L93'>93</a>
+<a name='L94'></a><a href='#L94'>94</a>
+<a name='L95'></a><a href='#L95'>95</a>
+<a name='L96'></a><a href='#L96'>96</a>
+<a name='L97'></a><a href='#L97'>97</a>
+<a name='L98'></a><a href='#L98'>98</a>
+<a name='L99'></a><a href='#L99'>99</a>
+<a name='L100'></a><a href='#L100'>100</a>
+<a name='L101'></a><a href='#L101'>101</a>
+<a name='L102'></a><a href='#L102'>102</a>
+<a name='L103'></a><a href='#L103'>103</a>
+<a name='L104'></a><a href='#L104'>104</a>
+<a name='L105'></a><a href='#L105'>105</a>
+<a name='L106'></a><a href='#L106'>106</a>
+<a name='L107'></a><a href='#L107'>107</a>
+<a name='L108'></a><a href='#L108'>108</a>
+<a name='L109'></a><a href='#L109'>109</a>
+<a name='L110'></a><a href='#L110'>110</a>
+<a name='L111'></a><a href='#L111'>111</a>
+<a name='L112'></a><a href='#L112'>112</a>
+<a name='L113'></a><a href='#L113'>113</a>
+<a name='L114'></a><a href='#L114'>114</a>
+<a name='L115'></a><a href='#L115'>115</a>
+<a name='L116'></a><a href='#L116'>116</a>
+<a name='L117'></a><a href='#L117'>117</a>
+<a name='L118'></a><a href='#L118'>118</a>
+<a name='L119'></a><a href='#L119'>119</a>
+<a name='L120'></a><a href='#L120'>120</a>
+<a name='L121'></a><a href='#L121'>121</a>
+<a name='L122'></a><a href='#L122'>122</a>
+<a name='L123'></a><a href='#L123'>123</a>
+<a name='L124'></a><a href='#L124'>124</a>
+<a name='L125'></a><a href='#L125'>125</a>
+<a name='L126'></a><a href='#L126'>126</a>
+<a name='L127'></a><a href='#L127'>127</a>
+<a name='L128'></a><a href='#L128'>128</a>
+<a name='L129'></a><a href='#L129'>129</a>
+<a name='L130'></a><a href='#L130'>130</a>
+<a name='L131'></a><a href='#L131'>131</a>
+<a name='L132'></a><a href='#L132'>132</a>
+<a name='L133'></a><a href='#L133'>133</a>
+<a name='L134'></a><a href='#L134'>134</a>
+<a name='L135'></a><a href='#L135'>135</a>
+<a name='L136'></a><a href='#L136'>136</a>
+<a name='L137'></a><a href='#L137'>137</a>
+<a name='L138'></a><a href='#L138'>138</a>
+<a name='L139'></a><a href='#L139'>139</a>
+<a name='L140'></a><a href='#L140'>140</a>
+<a name='L141'></a><a href='#L141'>141</a>
+<a name='L142'></a><a href='#L142'>142</a>
+<a name='L143'></a><a href='#L143'>143</a>
+<a name='L144'></a><a href='#L144'>144</a>
+<a name='L145'></a><a href='#L145'>145</a>
+<a name='L146'></a><a href='#L146'>146</a>
+<a name='L147'></a><a href='#L147'>147</a>
+<a name='L148'></a><a href='#L148'>148</a>
+<a name='L149'></a><a href='#L149'>149</a>
+<a name='L150'></a><a href='#L150'>150</a>
+<a name='L151'></a><a href='#L151'>151</a>
+<a name='L152'></a><a href='#L152'>152</a>
+<a name='L153'></a><a href='#L153'>153</a>
+<a name='L154'></a><a href='#L154'>154</a>
+<a name='L155'></a><a href='#L155'>155</a>
+<a name='L156'></a><a href='#L156'>156</a>
+<a name='L157'></a><a href='#L157'>157</a>
+<a name='L158'></a><a href='#L158'>158</a>
+<a name='L159'></a><a href='#L159'>159</a>
+<a name='L160'></a><a href='#L160'>160</a>
+<a name='L161'></a><a href='#L161'>161</a>
+<a name='L162'></a><a href='#L162'>162</a>
+<a name='L163'></a><a href='#L163'>163</a>
+<a name='L164'></a><a href='#L164'>164</a>
+<a name='L165'></a><a href='#L165'>165</a>
+<a name='L166'></a><a href='#L166'>166</a>
+<a name='L167'></a><a href='#L167'>167</a>
+<a name='L168'></a><a href='#L168'>168</a>
+<a name='L169'></a><a href='#L169'>169</a>
+<a name='L170'></a><a href='#L170'>170</a>
+<a name='L171'></a><a href='#L171'>171</a>
+<a name='L172'></a><a href='#L172'>172</a>
+<a name='L173'></a><a href='#L173'>173</a>
+<a name='L174'></a><a href='#L174'>174</a>
+<a name='L175'></a><a href='#L175'>175</a>
+<a name='L176'></a><a href='#L176'>176</a>
+<a name='L177'></a><a href='#L177'>177</a>
+<a name='L178'></a><a href='#L178'>178</a>
+<a name='L179'></a><a href='#L179'>179</a>
+<a name='L180'></a><a href='#L180'>180</a>
+<a name='L181'></a><a href='#L181'>181</a>
+<a name='L182'></a><a href='#L182'>182</a>
+<a name='L183'></a><a href='#L183'>183</a>
+<a name='L184'></a><a href='#L184'>184</a>
+<a name='L185'></a><a href='#L185'>185</a>
+<a name='L186'></a><a href='#L186'>186</a>
+<a name='L187'></a><a href='#L187'>187</a>
+<a name='L188'></a><a href='#L188'>188</a>
+<a name='L189'></a><a href='#L189'>189</a>
+<a name='L190'></a><a href='#L190'>190</a>
+<a name='L191'></a><a href='#L191'>191</a>
+<a name='L192'></a><a href='#L192'>192</a>
+<a name='L193'></a><a href='#L193'>193</a>
+<a name='L194'></a><a href='#L194'>194</a>
+<a name='L195'></a><a href='#L195'>195</a>
+<a name='L196'></a><a href='#L196'>196</a>
+<a name='L197'></a><a href='#L197'>197</a>
+<a name='L198'></a><a href='#L198'>198</a>
+<a name='L199'></a><a href='#L199'>199</a>
+<a name='L200'></a><a href='#L200'>200</a>
+<a name='L201'></a><a href='#L201'>201</a>
+<a name='L202'></a><a href='#L202'>202</a>
+<a name='L203'></a><a href='#L203'>203</a>
+<a name='L204'></a><a href='#L204'>204</a>
+<a name='L205'></a><a href='#L205'>205</a>
+<a name='L206'></a><a href='#L206'>206</a>
+<a name='L207'></a><a href='#L207'>207</a>
+<a name='L208'></a><a href='#L208'>208</a>
+<a name='L209'></a><a href='#L209'>209</a>
+<a name='L210'></a><a href='#L210'>210</a>
+<a name='L211'></a><a href='#L211'>211</a>
+<a name='L212'></a><a href='#L212'>212</a>
+<a name='L213'></a><a href='#L213'>213</a>
+<a name='L214'></a><a href='#L214'>214</a>
+<a name='L215'></a><a href='#L215'>215</a>
+<a name='L216'></a><a href='#L216'>216</a>
+<a name='L217'></a><a href='#L217'>217</a>
+<a name='L218'></a><a href='#L218'>218</a>
+<a name='L219'></a><a href='#L219'>219</a>
+<a name='L220'></a><a href='#L220'>220</a>
+<a name='L221'></a><a href='#L221'>221</a>
+<a name='L222'></a><a href='#L222'>222</a>
+<a name='L223'></a><a href='#L223'>223</a>
+<a name='L224'></a><a href='#L224'>224</a>
+<a name='L225'></a><a href='#L225'>225</a>
+<a name='L226'></a><a href='#L226'>226</a>
+<a name='L227'></a><a href='#L227'>227</a>
+<a name='L228'></a><a href='#L228'>228</a>
+<a name='L229'></a><a href='#L229'>229</a>
+<a name='L230'></a><a href='#L230'>230</a>
+<a name='L231'></a><a href='#L231'>231</a>
+<a name='L232'></a><a href='#L232'>232</a>
+<a name='L233'></a><a href='#L233'>233</a>
+<a name='L234'></a><a href='#L234'>234</a>
+<a name='L235'></a><a href='#L235'>235</a>
+<a name='L236'></a><a href='#L236'>236</a>
+<a name='L237'></a><a href='#L237'>237</a>
+<a name='L238'></a><a href='#L238'>238</a>
+<a name='L239'></a><a href='#L239'>239</a>
+<a name='L240'></a><a href='#L240'>240</a>
+<a name='L241'></a><a href='#L241'>241</a>
+<a name='L242'></a><a href='#L242'>242</a>
+<a name='L243'></a><a href='#L243'>243</a>
+<a name='L244'></a><a href='#L244'>244</a>
+<a name='L245'></a><a href='#L245'>245</a>
+<a name='L246'></a><a href='#L246'>246</a>
+<a name='L247'></a><a href='#L247'>247</a>
+<a name='L248'></a><a href='#L248'>248</a>
+<a name='L249'></a><a href='#L249'>249</a>
+<a name='L250'></a><a href='#L250'>250</a>
+<a name='L251'></a><a href='#L251'>251</a>
+<a name='L252'></a><a href='#L252'>252</a>
+<a name='L253'></a><a href='#L253'>253</a>
+<a name='L254'></a><a href='#L254'>254</a>
+<a name='L255'></a><a href='#L255'>255</a>
+<a name='L256'></a><a href='#L256'>256</a>
+<a name='L257'></a><a href='#L257'>257</a>
+<a name='L258'></a><a href='#L258'>258</a>
+<a name='L259'></a><a href='#L259'>259</a>
+<a name='L260'></a><a href='#L260'>260</a>
+<a name='L261'></a><a href='#L261'>261</a>
+<a name='L262'></a><a href='#L262'>262</a>
+<a name='L263'></a><a href='#L263'>263</a>
+<a name='L264'></a><a href='#L264'>264</a>
+<a name='L265'></a><a href='#L265'>265</a>
+<a name='L266'></a><a href='#L266'>266</a>
+<a name='L267'></a><a href='#L267'>267</a>
+<a name='L268'></a><a href='#L268'>268</a>
+<a name='L269'></a><a href='#L269'>269</a>
+<a name='L270'></a><a href='#L270'>270</a>
+<a name='L271'></a><a href='#L271'>271</a>
+<a name='L272'></a><a href='#L272'>272</a>
+<a name='L273'></a><a href='#L273'>273</a>
+<a name='L274'></a><a href='#L274'>274</a>
+<a name='L275'></a><a href='#L275'>275</a>
+<a name='L276'></a><a href='#L276'>276</a>
+<a name='L277'></a><a href='#L277'>277</a>
+<a name='L278'></a><a href='#L278'>278</a>
+<a name='L279'></a><a href='#L279'>279</a>
+<a name='L280'></a><a href='#L280'>280</a>
+<a name='L281'></a><a href='#L281'>281</a>
+<a name='L282'></a><a href='#L282'>282</a>
+<a name='L283'></a><a href='#L283'>283</a>
+<a name='L284'></a><a href='#L284'>284</a>
+<a name='L285'></a><a href='#L285'>285</a>
+<a name='L286'></a><a href='#L286'>286</a>
+<a name='L287'></a><a href='#L287'>287</a>
+<a name='L288'></a><a href='#L288'>288</a>
+<a name='L289'></a><a href='#L289'>289</a>
+<a name='L290'></a><a href='#L290'>290</a>
+<a name='L291'></a><a href='#L291'>291</a>
+<a name='L292'></a><a href='#L292'>292</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">5x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span></td><td class="text"><pre class="prettyprint lang-js">// import vitest, supertest &amp; app
+import { vi, beforeAll, beforeEach, describe, expect, expectTypeOf, test, it, afterEach } from 'vitest';
+import supertest from "supertest";
+import app from "../../app.js";
+import jwt from 'jsonwebtoken';
+&nbsp;
+// set route
+const ROUTE = '/ai/chat';
+// prepare response of each test
+let response;
+&nbsp;
+// ############################
+//  OBJECTS
+// ############################
+const mockedVals = vi.hoisted(() =&gt; {
+  return {
+    foundUser: {
+      _id: '66a29da2942b3eb',
+      username: 'snoopy',
+      name: 'My User',
+      email: 'user@mail.local',
+      verified: true,
+      role: 4,
+      createdAt: '2024-07 - 25T18: 46: 58.982Z',
+      updatedAt: '2024-07 - 25T18: 46: 58.982Z',
+      __v: 0,
+      fullname: '',
+      id: '66a29da2942b3ebcaf047f07'
+    },
+    foundModels: {
+      models: [
+        {
+          "name": "llama3:latest",
+          "model": "llama3:latest",
+          "modified_at": "2024-07-25T20:25:26.869024101+02:00",
+          "size": 4661224676,
+          "digest": "365c0bd3c000a25d28ddbf732fe1c6add414de7275464c4e4d1c3b5fcb5d8ad1",
+          "details": {
+            "parent_model": "",
+            "format": "gguf",
+            "family": "llama",
+            "families": [
+              "llama"
+            ],
+            "parameter_size": "8.0B",
+            "quantization_level": "Q4_0"
+          }
+        },
+        {
+          "name": "mxbai-embed-large:latest",
+          "model": "mxbai-embed-large:latest",
+          "modified_at": "2024-05-17T20:38:00.241769083+02:00",
+          "size": 669615493,
+          "digest": "468836162de7f81e041c43663fedbbba921dcea9b9fefea135685a39b2d83dd8",
+          "details": {
+            "parent_model": "",
+            "format": "gguf",
+            "family": "bert",
+            "families": [
+              "bert"
+            ],
+            "parameter_size": "334M",
+            "quantization_level": "F16"
+          }
+        }
+      ]
+    },
+    emptyChatRecord: {
+      title: 'When Sarcasm Becomes Sweet',
+      id: '66a69046251164018e7b1812',
+      createdAt: "2024-07 - 28T18: 39:02.388Z",
+      updatedAt: "2024-07 - 28T18: 39:02.388Z",
+      createdBy: '66a29da2942b3ebcaf047f07',
+      __v: 0
+    },
+    filledChatRecord: {
+      title: 'When Sarcasm Becomes Sweet',
+      id: '66a69046251164018e7b1812',
+      createdAt: "2024-07 - 28T18: 39:02.388Z",
+      updatedAt: "2024-07 - 28T18: 39:02.388Z",
+      createdBy: '66a29da2942b3ebcaf047f07',
+      __v: 0,
+      createdBy: "66a29da2942b3ebcaf047f07",
+      chatHistory: [
+        {
+          type: "human",
+          data: {
+            content: "When does mocking stops feeling like torture?",
+            additional_kwargs: {},
+            response_metadata: {}
+          }
+        },
+        {
+          type: "ai",
+          data: {
+            content: "It seems you're asking when the pain of mocking (in the context of software development) subsides. Well, with practice and experience, you'll find that your code becomes more robust, and the process of writing unit tests using mocking libraries becomes more natural. The initial discomfort will give way to a sense of confidence and efficiency as you master the art of mocking.",
+            source: "pretrained",
+            tool_calls: [],
+            invalid_tool_calls: [],
+            additional_kwargs: {},
+            response_metadata: {}
+          }
+        }
+      ]
+    },
+    answer: "It seems you're asking when the pain of mocking (in the context of software development) subsides. Well, with practice and experience, you'll find that your code becomes more robust, and the process of writing unit tests using mocking libraries becomes more natural. The initial discomfort will give way to a sense of confidence and efficiency as you master the art of mocking.",
+    validInput: {
+      model: 'llama3',
+      input: 'When does mocking stops feeling like torture?',
+      chatId: '66a2af22df510b35b401f5ba',
+    },
+    summaryContent: "Finding salvation: A path through mocking",
+  };
+});
+&nbsp;
+// ############################
+//  MOCKS
+// ############################
+import * as dbService from '../../utils/handleDB.js';
+// mock dbService
+vi.mock('../../utils/handleDB.js', async (importOriginal) =&gt; {
+  return {
+    ...await importOriginal(),
+    dbConnection: vi.fn(() =&gt; 'mocked'),
+    findOneRecord: vi.fn(() =&gt; mockedVals.foundUser),
+    findRecordByID: vi.fn(() =&gt; mockedVals.filledChatRecord),
+    createRecord: vi.fn(() =&gt; mockedVals.emptyChatRecord),
+  };
+});
+// import AI Service
+import * as aiService from '../../utils/handleAI.js';
+// mock aiService
+vi.mock('../../utils/handleAI.js', async (importOriginal) =&gt; {
+  return {
+    ...await importOriginal(),
+    aiGetModels: vi.fn(() =&gt; mockedVals.foundModels),
+    summarizeText: vi.fn(() =&gt; mockedVals.summaryContent),
+    chat: vi.fn().mockImplementation((req, res, next) =&gt; {
+      return res.json({ answer: mockedVals.answer, chat: mockedVals.filledChatRecord });
+    })
+  };
+});
+&nbsp;
+// ############################
+//  TESTS
+// ############################
+&nbsp;
+describe('ai chat with model', () =&gt; {
+  const _jwt = (id, role) =&gt; {
+    return jwt.sign({ id, role }, process.env.JWT_SECRET_KEY, { expiresIn: process.env.JWT_TTL });
+  };
+&nbsp;
+  describe('given a chatId was sended', () =&gt; {
+    beforeAll(async () =&gt; {
+&nbsp;
+      // dbService.findOneRecord.mockImplementationOnce(() =&gt; mockedVals.filledChatRecord);
+&nbsp;
+      response = await supertest(app)
+        .post(ROUTE)
+        .set('Authorization', `Bearer ${_jwt(mockedVals.foundUser.id, mockedVals.foundUser.role)}`)
+        .send(mockedVals.validInput);
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(200);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given invalid chatId sended', () =&gt; {
+    beforeAll(async () =&gt; {
+&nbsp;
+      dbService.findRecordByID.mockImplementationOnce(() =&gt; null);
+&nbsp;
+      response = await supertest(app)
+        .post(ROUTE)
+        .set('Authorization', `Bearer ${_jwt(mockedVals.foundUser.id, mockedVals.foundUser.role)}`)
+        .send(mockedVals.validInput);
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(404);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given no chatId sended', () =&gt; {
+    beforeAll(async () =&gt; {
+      const { chatId, ...input } = mockedVals.validInput;
+      response = await supertest(app)
+        .post(ROUTE)
+        .set('Authorization', `Bearer ${_jwt(mockedVals.foundUser.id, mockedVals.foundUser.role)}`)
+        .send(input);
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(200);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given no matching model found', () =&gt; {
+    beforeAll(async () =&gt; {
+      const input = { ...mockedVals.validInput, model: 'unknownModel' };
+&nbsp;
+      aiService.aiGetModels.mockImplementation(() =&gt; { return { models: [] }; });
+&nbsp;
+&nbsp;
+      response = await supertest(app)
+        .post(ROUTE)
+        .set('Authorization', `Bearer ${_jwt(mockedVals.foundUser.id, mockedVals.foundUser.role)}`)
+        .send(input);
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(500);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given required fields are missing', () =&gt; {
+    beforeAll(async () =&gt; {
+      const { model, ...input } = mockedVals.validInput;
+&nbsp;
+      response = await supertest(app)
+        .post(ROUTE)
+        .set('Authorization', `Bearer ${_jwt(mockedVals.foundUser.id, mockedVals.foundUser.role)}`)
+        .send(input);
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(400);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given no valid jwt sended', () =&gt; {
+    beforeAll(async () =&gt; {
+      response = await supertest(app)
+        .post(ROUTE)
+        .set('Authorization', `Bearer invalid`)
+        .send(mockedVals.validInput);
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(403);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given no jwt sended', () =&gt; {
+    beforeAll(async () =&gt; {
+      response = await supertest(app)
+        .post(ROUTE)
+        .send(mockedVals.validInput);
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(401);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+});</pre></td></tr></table></pre>
+
+                <div class='push'></div><!-- for sticky footer -->
+            </div><!-- /wrapper -->
+            <div class='footer quiet pad2 space-top1 center small'>
+                Code coverage generated by
+                <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
+                at 2024-08-07T15:59:44.935Z
+            </div>
+        <script src="../../../prettify.js"></script>
+        <script>
+            window.onload = function () {
+                prettyPrint();
+            };
+        </script>
+        <script src="../../../sorter.js"></script>
+        <script src="../../../block-navigation.js"></script>
+    </body>
+</html>
+    
\ No newline at end of file
diff --git a/coverage/ragchat-api/__tests__/ai/chats.test.js.html b/coverage/ragchat-api/__tests__/ai/chats.test.js.html
new file mode 100644
index 0000000..7fe5c77
--- /dev/null
+++ b/coverage/ragchat-api/__tests__/ai/chats.test.js.html
@@ -0,0 +1,700 @@
+
+<!doctype html>
+<html lang="en">
+
+<head>
+    <title>Code coverage report for ragchat-api/__tests__/ai/chats.test.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+    
+<body>
+<div class='wrapper'>
+    <div class='pad1'>
+        <h1><a href="../../../index.html">All files</a> / <a href="index.html">ragchat-api/__tests__/ai</a> chats.test.js</h1>
+        <div class='clearfix'>
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Statements</span>
+                <span class='fraction'>82/82</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Branches</span>
+                <span class='fraction'>14/14</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Functions</span>
+                <span class='fraction'>1/1</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Lines</span>
+                <span class='fraction'>82/82</span>
+            </div>
+        
+            
+        </div>
+        <p class="quiet">
+            Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
+        </p>
+        <template id="filterTemplate">
+            <div class="quiet">
+                Filter:
+                <input type="search" id="fileSearch">
+            </div>
+        </template>
+    </div>
+    <div class='status-line high'></div>
+    <pre><table class="coverage">
+<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
+<a name='L2'></a><a href='#L2'>2</a>
+<a name='L3'></a><a href='#L3'>3</a>
+<a name='L4'></a><a href='#L4'>4</a>
+<a name='L5'></a><a href='#L5'>5</a>
+<a name='L6'></a><a href='#L6'>6</a>
+<a name='L7'></a><a href='#L7'>7</a>
+<a name='L8'></a><a href='#L8'>8</a>
+<a name='L9'></a><a href='#L9'>9</a>
+<a name='L10'></a><a href='#L10'>10</a>
+<a name='L11'></a><a href='#L11'>11</a>
+<a name='L12'></a><a href='#L12'>12</a>
+<a name='L13'></a><a href='#L13'>13</a>
+<a name='L14'></a><a href='#L14'>14</a>
+<a name='L15'></a><a href='#L15'>15</a>
+<a name='L16'></a><a href='#L16'>16</a>
+<a name='L17'></a><a href='#L17'>17</a>
+<a name='L18'></a><a href='#L18'>18</a>
+<a name='L19'></a><a href='#L19'>19</a>
+<a name='L20'></a><a href='#L20'>20</a>
+<a name='L21'></a><a href='#L21'>21</a>
+<a name='L22'></a><a href='#L22'>22</a>
+<a name='L23'></a><a href='#L23'>23</a>
+<a name='L24'></a><a href='#L24'>24</a>
+<a name='L25'></a><a href='#L25'>25</a>
+<a name='L26'></a><a href='#L26'>26</a>
+<a name='L27'></a><a href='#L27'>27</a>
+<a name='L28'></a><a href='#L28'>28</a>
+<a name='L29'></a><a href='#L29'>29</a>
+<a name='L30'></a><a href='#L30'>30</a>
+<a name='L31'></a><a href='#L31'>31</a>
+<a name='L32'></a><a href='#L32'>32</a>
+<a name='L33'></a><a href='#L33'>33</a>
+<a name='L34'></a><a href='#L34'>34</a>
+<a name='L35'></a><a href='#L35'>35</a>
+<a name='L36'></a><a href='#L36'>36</a>
+<a name='L37'></a><a href='#L37'>37</a>
+<a name='L38'></a><a href='#L38'>38</a>
+<a name='L39'></a><a href='#L39'>39</a>
+<a name='L40'></a><a href='#L40'>40</a>
+<a name='L41'></a><a href='#L41'>41</a>
+<a name='L42'></a><a href='#L42'>42</a>
+<a name='L43'></a><a href='#L43'>43</a>
+<a name='L44'></a><a href='#L44'>44</a>
+<a name='L45'></a><a href='#L45'>45</a>
+<a name='L46'></a><a href='#L46'>46</a>
+<a name='L47'></a><a href='#L47'>47</a>
+<a name='L48'></a><a href='#L48'>48</a>
+<a name='L49'></a><a href='#L49'>49</a>
+<a name='L50'></a><a href='#L50'>50</a>
+<a name='L51'></a><a href='#L51'>51</a>
+<a name='L52'></a><a href='#L52'>52</a>
+<a name='L53'></a><a href='#L53'>53</a>
+<a name='L54'></a><a href='#L54'>54</a>
+<a name='L55'></a><a href='#L55'>55</a>
+<a name='L56'></a><a href='#L56'>56</a>
+<a name='L57'></a><a href='#L57'>57</a>
+<a name='L58'></a><a href='#L58'>58</a>
+<a name='L59'></a><a href='#L59'>59</a>
+<a name='L60'></a><a href='#L60'>60</a>
+<a name='L61'></a><a href='#L61'>61</a>
+<a name='L62'></a><a href='#L62'>62</a>
+<a name='L63'></a><a href='#L63'>63</a>
+<a name='L64'></a><a href='#L64'>64</a>
+<a name='L65'></a><a href='#L65'>65</a>
+<a name='L66'></a><a href='#L66'>66</a>
+<a name='L67'></a><a href='#L67'>67</a>
+<a name='L68'></a><a href='#L68'>68</a>
+<a name='L69'></a><a href='#L69'>69</a>
+<a name='L70'></a><a href='#L70'>70</a>
+<a name='L71'></a><a href='#L71'>71</a>
+<a name='L72'></a><a href='#L72'>72</a>
+<a name='L73'></a><a href='#L73'>73</a>
+<a name='L74'></a><a href='#L74'>74</a>
+<a name='L75'></a><a href='#L75'>75</a>
+<a name='L76'></a><a href='#L76'>76</a>
+<a name='L77'></a><a href='#L77'>77</a>
+<a name='L78'></a><a href='#L78'>78</a>
+<a name='L79'></a><a href='#L79'>79</a>
+<a name='L80'></a><a href='#L80'>80</a>
+<a name='L81'></a><a href='#L81'>81</a>
+<a name='L82'></a><a href='#L82'>82</a>
+<a name='L83'></a><a href='#L83'>83</a>
+<a name='L84'></a><a href='#L84'>84</a>
+<a name='L85'></a><a href='#L85'>85</a>
+<a name='L86'></a><a href='#L86'>86</a>
+<a name='L87'></a><a href='#L87'>87</a>
+<a name='L88'></a><a href='#L88'>88</a>
+<a name='L89'></a><a href='#L89'>89</a>
+<a name='L90'></a><a href='#L90'>90</a>
+<a name='L91'></a><a href='#L91'>91</a>
+<a name='L92'></a><a href='#L92'>92</a>
+<a name='L93'></a><a href='#L93'>93</a>
+<a name='L94'></a><a href='#L94'>94</a>
+<a name='L95'></a><a href='#L95'>95</a>
+<a name='L96'></a><a href='#L96'>96</a>
+<a name='L97'></a><a href='#L97'>97</a>
+<a name='L98'></a><a href='#L98'>98</a>
+<a name='L99'></a><a href='#L99'>99</a>
+<a name='L100'></a><a href='#L100'>100</a>
+<a name='L101'></a><a href='#L101'>101</a>
+<a name='L102'></a><a href='#L102'>102</a>
+<a name='L103'></a><a href='#L103'>103</a>
+<a name='L104'></a><a href='#L104'>104</a>
+<a name='L105'></a><a href='#L105'>105</a>
+<a name='L106'></a><a href='#L106'>106</a>
+<a name='L107'></a><a href='#L107'>107</a>
+<a name='L108'></a><a href='#L108'>108</a>
+<a name='L109'></a><a href='#L109'>109</a>
+<a name='L110'></a><a href='#L110'>110</a>
+<a name='L111'></a><a href='#L111'>111</a>
+<a name='L112'></a><a href='#L112'>112</a>
+<a name='L113'></a><a href='#L113'>113</a>
+<a name='L114'></a><a href='#L114'>114</a>
+<a name='L115'></a><a href='#L115'>115</a>
+<a name='L116'></a><a href='#L116'>116</a>
+<a name='L117'></a><a href='#L117'>117</a>
+<a name='L118'></a><a href='#L118'>118</a>
+<a name='L119'></a><a href='#L119'>119</a>
+<a name='L120'></a><a href='#L120'>120</a>
+<a name='L121'></a><a href='#L121'>121</a>
+<a name='L122'></a><a href='#L122'>122</a>
+<a name='L123'></a><a href='#L123'>123</a>
+<a name='L124'></a><a href='#L124'>124</a>
+<a name='L125'></a><a href='#L125'>125</a>
+<a name='L126'></a><a href='#L126'>126</a>
+<a name='L127'></a><a href='#L127'>127</a>
+<a name='L128'></a><a href='#L128'>128</a>
+<a name='L129'></a><a href='#L129'>129</a>
+<a name='L130'></a><a href='#L130'>130</a>
+<a name='L131'></a><a href='#L131'>131</a>
+<a name='L132'></a><a href='#L132'>132</a>
+<a name='L133'></a><a href='#L133'>133</a>
+<a name='L134'></a><a href='#L134'>134</a>
+<a name='L135'></a><a href='#L135'>135</a>
+<a name='L136'></a><a href='#L136'>136</a>
+<a name='L137'></a><a href='#L137'>137</a>
+<a name='L138'></a><a href='#L138'>138</a>
+<a name='L139'></a><a href='#L139'>139</a>
+<a name='L140'></a><a href='#L140'>140</a>
+<a name='L141'></a><a href='#L141'>141</a>
+<a name='L142'></a><a href='#L142'>142</a>
+<a name='L143'></a><a href='#L143'>143</a>
+<a name='L144'></a><a href='#L144'>144</a>
+<a name='L145'></a><a href='#L145'>145</a>
+<a name='L146'></a><a href='#L146'>146</a>
+<a name='L147'></a><a href='#L147'>147</a>
+<a name='L148'></a><a href='#L148'>148</a>
+<a name='L149'></a><a href='#L149'>149</a>
+<a name='L150'></a><a href='#L150'>150</a>
+<a name='L151'></a><a href='#L151'>151</a>
+<a name='L152'></a><a href='#L152'>152</a>
+<a name='L153'></a><a href='#L153'>153</a>
+<a name='L154'></a><a href='#L154'>154</a>
+<a name='L155'></a><a href='#L155'>155</a>
+<a name='L156'></a><a href='#L156'>156</a>
+<a name='L157'></a><a href='#L157'>157</a>
+<a name='L158'></a><a href='#L158'>158</a>
+<a name='L159'></a><a href='#L159'>159</a>
+<a name='L160'></a><a href='#L160'>160</a>
+<a name='L161'></a><a href='#L161'>161</a>
+<a name='L162'></a><a href='#L162'>162</a>
+<a name='L163'></a><a href='#L163'>163</a>
+<a name='L164'></a><a href='#L164'>164</a>
+<a name='L165'></a><a href='#L165'>165</a>
+<a name='L166'></a><a href='#L166'>166</a>
+<a name='L167'></a><a href='#L167'>167</a>
+<a name='L168'></a><a href='#L168'>168</a>
+<a name='L169'></a><a href='#L169'>169</a>
+<a name='L170'></a><a href='#L170'>170</a>
+<a name='L171'></a><a href='#L171'>171</a>
+<a name='L172'></a><a href='#L172'>172</a>
+<a name='L173'></a><a href='#L173'>173</a>
+<a name='L174'></a><a href='#L174'>174</a>
+<a name='L175'></a><a href='#L175'>175</a>
+<a name='L176'></a><a href='#L176'>176</a>
+<a name='L177'></a><a href='#L177'>177</a>
+<a name='L178'></a><a href='#L178'>178</a>
+<a name='L179'></a><a href='#L179'>179</a>
+<a name='L180'></a><a href='#L180'>180</a>
+<a name='L181'></a><a href='#L181'>181</a>
+<a name='L182'></a><a href='#L182'>182</a>
+<a name='L183'></a><a href='#L183'>183</a>
+<a name='L184'></a><a href='#L184'>184</a>
+<a name='L185'></a><a href='#L185'>185</a>
+<a name='L186'></a><a href='#L186'>186</a>
+<a name='L187'></a><a href='#L187'>187</a>
+<a name='L188'></a><a href='#L188'>188</a>
+<a name='L189'></a><a href='#L189'>189</a>
+<a name='L190'></a><a href='#L190'>190</a>
+<a name='L191'></a><a href='#L191'>191</a>
+<a name='L192'></a><a href='#L192'>192</a>
+<a name='L193'></a><a href='#L193'>193</a>
+<a name='L194'></a><a href='#L194'>194</a>
+<a name='L195'></a><a href='#L195'>195</a>
+<a name='L196'></a><a href='#L196'>196</a>
+<a name='L197'></a><a href='#L197'>197</a>
+<a name='L198'></a><a href='#L198'>198</a>
+<a name='L199'></a><a href='#L199'>199</a>
+<a name='L200'></a><a href='#L200'>200</a>
+<a name='L201'></a><a href='#L201'>201</a>
+<a name='L202'></a><a href='#L202'>202</a>
+<a name='L203'></a><a href='#L203'>203</a>
+<a name='L204'></a><a href='#L204'>204</a>
+<a name='L205'></a><a href='#L205'>205</a>
+<a name='L206'></a><a href='#L206'>206</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span></td><td class="text"><pre class="prettyprint lang-js">// import vitest, supertest &amp; app
+import { vi, beforeAll, beforeEach, describe, expect, expectTypeOf, test, it, afterEach } from 'vitest';
+import supertest from "supertest";
+import app from "../../app.js";
+import jwt from 'jsonwebtoken';
+&nbsp;
+// set route
+const ROUTE = '/ai/chats';
+// prepare response of each test
+let response;
+&nbsp;
+// ############################
+//  OBJECTS
+// ############################
+&nbsp;
+const mockedVals = vi.hoisted(() =&gt; {
+  return {
+    foundUser: {
+      _id: '66a29da2942b3eb',
+      username: 'snoopy',
+      name: 'My User',
+      email: 'user@mail.local',
+      verified: true,
+      role: 0,
+      createdAt: '2024-07 - 25T18: 46: 58.982Z',
+      updatedAt: '2024-07 - 25T18: 46: 58.982Z',
+      __v: 0,
+      fullname: '',
+      id: '66a29da2942b3ebcaf047f07'
+    },
+    foundChats: {
+      "chats": [
+        {
+          "chatHistory": [
+            {
+              "data": {
+                "additional_kwargs": {},
+                "content": "Under what path could members of the working group can find the exam git directory?",
+                "response_metadata": {}
+              },
+              "type": "human"
+            },
+            {
+              "data": {
+                "additional_kwargs": {},
+                "content": "Members of the working group can find the exam git directory under the following path:\n\n/home/samba/amd/AMD_Lehre/GCI_Grundlagen_Chemieinformatik",
+                "invalid_tool_calls": [],
+                "response_metadata": {},
+                "tool_calls": []
+              },
+              "type": "ai"
+            },
+            {
+              "data": {
+                "additional_kwargs": {},
+                "content": "What else can be found under that path?",
+                "response_metadata": {}
+              },
+              "type": "human"
+            },
+            {
+              "data": {
+                "additional_kwargs": {},
+                "content": "According to the context, members of the working group can also find past semester results under the same path.",
+                "invalid_tool_calls": [],
+                "response_metadata": {},
+                "tool_calls": []
+              },
+              "type": "ai"
+            }
+          ],
+          "collectionId": "fkhmqgmmxx7svya",
+          "collectionName": "chats",
+          "created": "2024-07-15 06:17:31.815Z",
+          "id": "vwbprn1sxo7qx9k",
+          "title": "\"Finding the Exam: A Path to Discovery\"",
+          "updated": "2024-07-15 13:12:50.915Z",
+          "user": "jr9mt8yvuri3sbd"
+        },
+        {
+          "chatHistory": [
+            {
+              "data": {
+                "additional_kwargs": {},
+                "content": "What's the diameter of the planet earth?",
+                "response_metadata": {}
+              },
+              "type": "human"
+            },
+            {
+              "data": {
+                "additional_kwargs": {},
+                "content": "The diameter of the Earth is approximately 12,742 kilometers (7,918 miles).",
+                "invalid_tool_calls": [],
+                "response_metadata": {},
+                "tool_calls": []
+              },
+              "type": "ai"
+            },
+            {
+              "data": {
+                "additional_kwargs": {},
+                "content": "and how far away is the moon?",
+                "response_metadata": {}
+              },
+              "type": "human"
+            },
+            {
+              "data": {
+                "additional_kwargs": {},
+                "content": "The average distance from the Earth to the Moon is approximately 384,400 kilometers (238,900 miles).",
+                "invalid_tool_calls": [],
+                "response_metadata": {},
+                "tool_calls": []
+              },
+              "type": "ai"
+            }
+          ],
+          "collectionId": "fkhmqgmmxx7svya",
+          "collectionName": "chats",
+          "created": "2024-07-08 11:46:22.267Z",
+          "id": "yc9vnbs4aj8iux2",
+          "title": "\n\"The Earth's Diameter: A Matter of Scale\"",
+          "updated": "2024-07-08 11:47:21.830Z",
+          "user": "jr9mt8yvuri3sbd"
+        }
+      ]
+    }
+  };
+});
+&nbsp;
+&nbsp;
+// ############################
+//  MOCKS
+// ############################
+import * as dbService from '../../utils/handleDB.js';
+// mock dbService
+vi.mock('../../utils/handleDB.js', async (importOriginal) =&gt; {
+  return {
+    ...await importOriginal(),
+    dbConnection: vi.fn(() =&gt; 'mocked'),
+    findOneRecord: vi.fn(() =&gt; mockedVals.foundUser),
+    findRecords: vi.fn(() =&gt; mockedVals.foundChats),
+  };
+});
+&nbsp;
+// ############################
+//  TESTS
+// ############################
+describe('ai get users chats', () =&gt; {
+  const _jwt = (id, role) =&gt; {
+    return jwt.sign({ id, role }, process.env.JWT_SECRET_KEY, { expiresIn: process.env.JWT_TTL });
+  };
+&nbsp;
+  describe('given the inputs are valid', () =&gt; {
+    beforeAll(async () =&gt; {
+&nbsp;
+      response = await supertest(app)
+        .get(ROUTE)
+        .set('Authorization', `Bearer ${_jwt(mockedVals.foundUser.id, mockedVals.foundUser.role)}`)
+        .send();
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(200);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given no valid jwt sended', () =&gt; {
+    beforeAll(async () =&gt; {
+      response = await supertest(app)
+        .get(ROUTE)
+        .set('Authorization', `Bearer invalid`)
+        .send();
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(403);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given no jwt sended', () =&gt; {
+    beforeAll(async () =&gt; {
+      response = await supertest(app)
+        .get(ROUTE)
+        .send();
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(401);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+});</pre></td></tr></table></pre>
+
+                <div class='push'></div><!-- for sticky footer -->
+            </div><!-- /wrapper -->
+            <div class='footer quiet pad2 space-top1 center small'>
+                Code coverage generated by
+                <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
+                at 2024-08-07T15:59:44.935Z
+            </div>
+        <script src="../../../prettify.js"></script>
+        <script>
+            window.onload = function () {
+                prettyPrint();
+            };
+        </script>
+        <script src="../../../sorter.js"></script>
+        <script src="../../../block-navigation.js"></script>
+    </body>
+</html>
+    
\ No newline at end of file
diff --git a/coverage/ragchat-api/__tests__/ai/delete.test.js.html b/coverage/ragchat-api/__tests__/ai/delete.test.js.html
new file mode 100644
index 0000000..526302f
--- /dev/null
+++ b/coverage/ragchat-api/__tests__/ai/delete.test.js.html
@@ -0,0 +1,646 @@
+
+<!doctype html>
+<html lang="en">
+
+<head>
+    <title>Code coverage report for ragchat-api/__tests__/ai/delete.test.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+    
+<body>
+<div class='wrapper'>
+    <div class='pad1'>
+        <h1><a href="../../../index.html">All files</a> / <a href="index.html">ragchat-api/__tests__/ai</a> delete.test.js</h1>
+        <div class='clearfix'>
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">99.35% </span>
+                <span class="quiet">Statements</span>
+                <span class='fraction'>153/154</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Branches</span>
+                <span class='fraction'>27/27</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Functions</span>
+                <span class='fraction'>1/1</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">99.35% </span>
+                <span class="quiet">Lines</span>
+                <span class='fraction'>153/154</span>
+            </div>
+        
+            
+        </div>
+        <p class="quiet">
+            Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
+        </p>
+        <template id="filterTemplate">
+            <div class="quiet">
+                Filter:
+                <input type="search" id="fileSearch">
+            </div>
+        </template>
+    </div>
+    <div class='status-line high'></div>
+    <pre><table class="coverage">
+<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
+<a name='L2'></a><a href='#L2'>2</a>
+<a name='L3'></a><a href='#L3'>3</a>
+<a name='L4'></a><a href='#L4'>4</a>
+<a name='L5'></a><a href='#L5'>5</a>
+<a name='L6'></a><a href='#L6'>6</a>
+<a name='L7'></a><a href='#L7'>7</a>
+<a name='L8'></a><a href='#L8'>8</a>
+<a name='L9'></a><a href='#L9'>9</a>
+<a name='L10'></a><a href='#L10'>10</a>
+<a name='L11'></a><a href='#L11'>11</a>
+<a name='L12'></a><a href='#L12'>12</a>
+<a name='L13'></a><a href='#L13'>13</a>
+<a name='L14'></a><a href='#L14'>14</a>
+<a name='L15'></a><a href='#L15'>15</a>
+<a name='L16'></a><a href='#L16'>16</a>
+<a name='L17'></a><a href='#L17'>17</a>
+<a name='L18'></a><a href='#L18'>18</a>
+<a name='L19'></a><a href='#L19'>19</a>
+<a name='L20'></a><a href='#L20'>20</a>
+<a name='L21'></a><a href='#L21'>21</a>
+<a name='L22'></a><a href='#L22'>22</a>
+<a name='L23'></a><a href='#L23'>23</a>
+<a name='L24'></a><a href='#L24'>24</a>
+<a name='L25'></a><a href='#L25'>25</a>
+<a name='L26'></a><a href='#L26'>26</a>
+<a name='L27'></a><a href='#L27'>27</a>
+<a name='L28'></a><a href='#L28'>28</a>
+<a name='L29'></a><a href='#L29'>29</a>
+<a name='L30'></a><a href='#L30'>30</a>
+<a name='L31'></a><a href='#L31'>31</a>
+<a name='L32'></a><a href='#L32'>32</a>
+<a name='L33'></a><a href='#L33'>33</a>
+<a name='L34'></a><a href='#L34'>34</a>
+<a name='L35'></a><a href='#L35'>35</a>
+<a name='L36'></a><a href='#L36'>36</a>
+<a name='L37'></a><a href='#L37'>37</a>
+<a name='L38'></a><a href='#L38'>38</a>
+<a name='L39'></a><a href='#L39'>39</a>
+<a name='L40'></a><a href='#L40'>40</a>
+<a name='L41'></a><a href='#L41'>41</a>
+<a name='L42'></a><a href='#L42'>42</a>
+<a name='L43'></a><a href='#L43'>43</a>
+<a name='L44'></a><a href='#L44'>44</a>
+<a name='L45'></a><a href='#L45'>45</a>
+<a name='L46'></a><a href='#L46'>46</a>
+<a name='L47'></a><a href='#L47'>47</a>
+<a name='L48'></a><a href='#L48'>48</a>
+<a name='L49'></a><a href='#L49'>49</a>
+<a name='L50'></a><a href='#L50'>50</a>
+<a name='L51'></a><a href='#L51'>51</a>
+<a name='L52'></a><a href='#L52'>52</a>
+<a name='L53'></a><a href='#L53'>53</a>
+<a name='L54'></a><a href='#L54'>54</a>
+<a name='L55'></a><a href='#L55'>55</a>
+<a name='L56'></a><a href='#L56'>56</a>
+<a name='L57'></a><a href='#L57'>57</a>
+<a name='L58'></a><a href='#L58'>58</a>
+<a name='L59'></a><a href='#L59'>59</a>
+<a name='L60'></a><a href='#L60'>60</a>
+<a name='L61'></a><a href='#L61'>61</a>
+<a name='L62'></a><a href='#L62'>62</a>
+<a name='L63'></a><a href='#L63'>63</a>
+<a name='L64'></a><a href='#L64'>64</a>
+<a name='L65'></a><a href='#L65'>65</a>
+<a name='L66'></a><a href='#L66'>66</a>
+<a name='L67'></a><a href='#L67'>67</a>
+<a name='L68'></a><a href='#L68'>68</a>
+<a name='L69'></a><a href='#L69'>69</a>
+<a name='L70'></a><a href='#L70'>70</a>
+<a name='L71'></a><a href='#L71'>71</a>
+<a name='L72'></a><a href='#L72'>72</a>
+<a name='L73'></a><a href='#L73'>73</a>
+<a name='L74'></a><a href='#L74'>74</a>
+<a name='L75'></a><a href='#L75'>75</a>
+<a name='L76'></a><a href='#L76'>76</a>
+<a name='L77'></a><a href='#L77'>77</a>
+<a name='L78'></a><a href='#L78'>78</a>
+<a name='L79'></a><a href='#L79'>79</a>
+<a name='L80'></a><a href='#L80'>80</a>
+<a name='L81'></a><a href='#L81'>81</a>
+<a name='L82'></a><a href='#L82'>82</a>
+<a name='L83'></a><a href='#L83'>83</a>
+<a name='L84'></a><a href='#L84'>84</a>
+<a name='L85'></a><a href='#L85'>85</a>
+<a name='L86'></a><a href='#L86'>86</a>
+<a name='L87'></a><a href='#L87'>87</a>
+<a name='L88'></a><a href='#L88'>88</a>
+<a name='L89'></a><a href='#L89'>89</a>
+<a name='L90'></a><a href='#L90'>90</a>
+<a name='L91'></a><a href='#L91'>91</a>
+<a name='L92'></a><a href='#L92'>92</a>
+<a name='L93'></a><a href='#L93'>93</a>
+<a name='L94'></a><a href='#L94'>94</a>
+<a name='L95'></a><a href='#L95'>95</a>
+<a name='L96'></a><a href='#L96'>96</a>
+<a name='L97'></a><a href='#L97'>97</a>
+<a name='L98'></a><a href='#L98'>98</a>
+<a name='L99'></a><a href='#L99'>99</a>
+<a name='L100'></a><a href='#L100'>100</a>
+<a name='L101'></a><a href='#L101'>101</a>
+<a name='L102'></a><a href='#L102'>102</a>
+<a name='L103'></a><a href='#L103'>103</a>
+<a name='L104'></a><a href='#L104'>104</a>
+<a name='L105'></a><a href='#L105'>105</a>
+<a name='L106'></a><a href='#L106'>106</a>
+<a name='L107'></a><a href='#L107'>107</a>
+<a name='L108'></a><a href='#L108'>108</a>
+<a name='L109'></a><a href='#L109'>109</a>
+<a name='L110'></a><a href='#L110'>110</a>
+<a name='L111'></a><a href='#L111'>111</a>
+<a name='L112'></a><a href='#L112'>112</a>
+<a name='L113'></a><a href='#L113'>113</a>
+<a name='L114'></a><a href='#L114'>114</a>
+<a name='L115'></a><a href='#L115'>115</a>
+<a name='L116'></a><a href='#L116'>116</a>
+<a name='L117'></a><a href='#L117'>117</a>
+<a name='L118'></a><a href='#L118'>118</a>
+<a name='L119'></a><a href='#L119'>119</a>
+<a name='L120'></a><a href='#L120'>120</a>
+<a name='L121'></a><a href='#L121'>121</a>
+<a name='L122'></a><a href='#L122'>122</a>
+<a name='L123'></a><a href='#L123'>123</a>
+<a name='L124'></a><a href='#L124'>124</a>
+<a name='L125'></a><a href='#L125'>125</a>
+<a name='L126'></a><a href='#L126'>126</a>
+<a name='L127'></a><a href='#L127'>127</a>
+<a name='L128'></a><a href='#L128'>128</a>
+<a name='L129'></a><a href='#L129'>129</a>
+<a name='L130'></a><a href='#L130'>130</a>
+<a name='L131'></a><a href='#L131'>131</a>
+<a name='L132'></a><a href='#L132'>132</a>
+<a name='L133'></a><a href='#L133'>133</a>
+<a name='L134'></a><a href='#L134'>134</a>
+<a name='L135'></a><a href='#L135'>135</a>
+<a name='L136'></a><a href='#L136'>136</a>
+<a name='L137'></a><a href='#L137'>137</a>
+<a name='L138'></a><a href='#L138'>138</a>
+<a name='L139'></a><a href='#L139'>139</a>
+<a name='L140'></a><a href='#L140'>140</a>
+<a name='L141'></a><a href='#L141'>141</a>
+<a name='L142'></a><a href='#L142'>142</a>
+<a name='L143'></a><a href='#L143'>143</a>
+<a name='L144'></a><a href='#L144'>144</a>
+<a name='L145'></a><a href='#L145'>145</a>
+<a name='L146'></a><a href='#L146'>146</a>
+<a name='L147'></a><a href='#L147'>147</a>
+<a name='L148'></a><a href='#L148'>148</a>
+<a name='L149'></a><a href='#L149'>149</a>
+<a name='L150'></a><a href='#L150'>150</a>
+<a name='L151'></a><a href='#L151'>151</a>
+<a name='L152'></a><a href='#L152'>152</a>
+<a name='L153'></a><a href='#L153'>153</a>
+<a name='L154'></a><a href='#L154'>154</a>
+<a name='L155'></a><a href='#L155'>155</a>
+<a name='L156'></a><a href='#L156'>156</a>
+<a name='L157'></a><a href='#L157'>157</a>
+<a name='L158'></a><a href='#L158'>158</a>
+<a name='L159'></a><a href='#L159'>159</a>
+<a name='L160'></a><a href='#L160'>160</a>
+<a name='L161'></a><a href='#L161'>161</a>
+<a name='L162'></a><a href='#L162'>162</a>
+<a name='L163'></a><a href='#L163'>163</a>
+<a name='L164'></a><a href='#L164'>164</a>
+<a name='L165'></a><a href='#L165'>165</a>
+<a name='L166'></a><a href='#L166'>166</a>
+<a name='L167'></a><a href='#L167'>167</a>
+<a name='L168'></a><a href='#L168'>168</a>
+<a name='L169'></a><a href='#L169'>169</a>
+<a name='L170'></a><a href='#L170'>170</a>
+<a name='L171'></a><a href='#L171'>171</a>
+<a name='L172'></a><a href='#L172'>172</a>
+<a name='L173'></a><a href='#L173'>173</a>
+<a name='L174'></a><a href='#L174'>174</a>
+<a name='L175'></a><a href='#L175'>175</a>
+<a name='L176'></a><a href='#L176'>176</a>
+<a name='L177'></a><a href='#L177'>177</a>
+<a name='L178'></a><a href='#L178'>178</a>
+<a name='L179'></a><a href='#L179'>179</a>
+<a name='L180'></a><a href='#L180'>180</a>
+<a name='L181'></a><a href='#L181'>181</a>
+<a name='L182'></a><a href='#L182'>182</a>
+<a name='L183'></a><a href='#L183'>183</a>
+<a name='L184'></a><a href='#L184'>184</a>
+<a name='L185'></a><a href='#L185'>185</a>
+<a name='L186'></a><a href='#L186'>186</a>
+<a name='L187'></a><a href='#L187'>187</a>
+<a name='L188'></a><a href='#L188'>188</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">4x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span></td><td class="text"><pre class="prettyprint lang-js">// import vitest, supertest &amp; app
+import { vi, beforeAll, beforeEach, describe, expect, expectTypeOf, test, it, afterEach } from 'vitest';
+import supertest from "supertest";
+import app from "../../app.js";
+import jwt from 'jsonwebtoken';
+&nbsp;
+// set route
+const ROUTE = '/ai/models';
+// prepare response of each test
+let response;
+&nbsp;
+// ############################
+//  OBJECTS
+// ############################
+const mockedVals = vi.hoisted(() =&gt; {
+  return {
+    foundUser: {
+      _id: '66a29da2942b3eb',
+      username: 'snoopy',
+      name: 'My User',
+      email: 'user@mail.local',
+      verified: true,
+      role: 4,
+      createdAt: '2024-07 - 25T18: 46: 58.982Z',
+      updatedAt: '2024-07 - 25T18: 46: 58.982Z',
+      __v: 0,
+      fullname: '',
+      id: '66a29da2942b3ebcaf047f07'
+    },
+    validInput: {
+      model: 'llama3'
+    }
+  };
+});
+&nbsp;
+// ############################
+//  MOCKS
+// ############################
+import * as dbService from '../../utils/handleDB.js';
+// mock dbService
+vi.mock('../../utils/handleDB.js', async (importOriginal) =&gt; {
+  return {
+    ...await importOriginal(),
+    dbConnection: vi.fn(() =&gt; 'mocked'),
+    findOneRecord: vi.fn(() =&gt; mockedVals.foundUser),
+  };
+});
+&nbsp;
+// import AI Service
+import * as aiService from '../../utils/handleAI.js';
+// mock aiService
+vi.mock('../../utils/handleAI.js', async (importOriginal) =&gt; {
+  return {
+    ...await importOriginal(),
+    aiDeleteModel: vi.fn().mockImplementation(() =&gt; { return { status: 'success' }; }),
+  };
+});
+&nbsp;
+// ############################
+//  TESTS
+// ############################
+&nbsp;
+describe('ai delete model', () =&gt; {
+  const _jwt = (id, role) =&gt; {
+    return jwt.sign({ id, role }, process.env.JWT_SECRET_KEY, { expiresIn: process.env.JWT_TTL });
+  };
+&nbsp;
+  describe('given the inputs are valid', async () =&gt; {
+    beforeAll(async () =&gt; {
+      response = await supertest(app)
+        .delete(ROUTE)
+        .set('Authorization', `Bearer ${_jwt(mockedVals.foundUser.id, mockedVals.foundUser.role)}`)
+        .send(mockedVals.validInput);
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(200);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given no matching model found', () =&gt; {
+    beforeAll(async () =&gt; {
+      const input = { ...mockedVals.validInput, model: 'unknownModel' };
+&nbsp;
+      let error = new Error("pull model manifest: file does not exist");
+      error.name = 'ResponseError';
+      error.status = 500;
+      aiService.aiDeleteModel.mockImplementation(() =&gt; { throw error; });
+&nbsp;
+      response = await supertest(app)
+        .delete(ROUTE)
+        .set('Authorization', `Bearer ${_jwt(mockedVals.foundUser.id, mockedVals.foundUser.role)}`)
+        .send(input);
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(500);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given required fields are missing', () =&gt; {
+    beforeAll(async () =&gt; {
+      const { model, ...input } = mockedVals.validInput;
+&nbsp;
+      response = await supertest(app)
+        .delete(ROUTE)
+        .set('Authorization', `Bearer ${_jwt(mockedVals.foundUser.id, mockedVals.foundUser.role)}`)
+        .send(input);
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(400);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given a user tries to access', () =&gt; {
+    beforeAll(async () =&gt; {
+&nbsp;
+      dbService.findOneRecord.mockImplementationOnce(async () =&gt; {
+<span class="cstat-no" title="statement not covered" >        return { ...mockedVals.foundUser, role: 0 };</span>
+      });
+&nbsp;
+      response = await supertest(app)
+        .delete(ROUTE)
+        .set('Authorization', `Bearer ${_jwt(mockedVals.foundUser.id, 0)}`)
+        .send(mockedVals.validInput);
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(403);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given no valid jwt sended', () =&gt; {
+    beforeAll(async () =&gt; {
+      response = await supertest(app)
+        .delete(ROUTE)
+        .set('Authorization', `Bearer invalid`)
+        .send(mockedVals.validInput);
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(403);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given no jwt sended', () =&gt; {
+    beforeAll(async () =&gt; {
+      response = await supertest(app)
+        .delete(ROUTE)
+        .send(mockedVals.validInput);
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(401);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+});</pre></td></tr></table></pre>
+
+                <div class='push'></div><!-- for sticky footer -->
+            </div><!-- /wrapper -->
+            <div class='footer quiet pad2 space-top1 center small'>
+                Code coverage generated by
+                <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
+                at 2024-08-07T15:59:44.935Z
+            </div>
+        <script src="../../../prettify.js"></script>
+        <script>
+            window.onload = function () {
+                prettyPrint();
+            };
+        </script>
+        <script src="../../../sorter.js"></script>
+        <script src="../../../block-navigation.js"></script>
+    </body>
+</html>
+    
\ No newline at end of file
diff --git a/coverage/ragchat-api/__tests__/ai/index.html b/coverage/ragchat-api/__tests__/ai/index.html
new file mode 100644
index 0000000..cb87865
--- /dev/null
+++ b/coverage/ragchat-api/__tests__/ai/index.html
@@ -0,0 +1,206 @@
+
+<!doctype html>
+<html lang="en">
+
+<head>
+    <title>Code coverage report for ragchat-api/__tests__/ai</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+    
+<body>
+<div class='wrapper'>
+    <div class='pad1'>
+        <h1><a href="../../../index.html">All files</a> ragchat-api/__tests__/ai</h1>
+        <div class='clearfix'>
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">99.77% </span>
+                <span class="quiet">Statements</span>
+                <span class='fraction'>879/881</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Branches</span>
+                <span class='fraction'>156/156</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Functions</span>
+                <span class='fraction'>6/6</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">99.77% </span>
+                <span class="quiet">Lines</span>
+                <span class='fraction'>879/881</span>
+            </div>
+        
+            
+        </div>
+        <p class="quiet">
+            Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
+        </p>
+        <template id="filterTemplate">
+            <div class="quiet">
+                Filter:
+                <input type="search" id="fileSearch">
+            </div>
+        </template>
+    </div>
+    <div class='status-line high'></div>
+    <div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file high" data-value="chat.test.js"><a href="chat.test.js.html">chat.test.js</a></td>
+	<td data-value="100" class="pic high">
+	<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
+	</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="172" class="abs high">172/172</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="32" class="abs high">32/32</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="172" class="abs high">172/172</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="chats.test.js"><a href="chats.test.js.html">chats.test.js</a></td>
+	<td data-value="100" class="pic high">
+	<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
+	</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="82" class="abs high">82/82</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="14" class="abs high">14/14</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="82" class="abs high">82/82</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="delete.test.js"><a href="delete.test.js.html">delete.test.js</a></td>
+	<td data-value="99.35" class="pic high">
+	<div class="chart"><div class="cover-fill" style="width: 99%"></div><div class="cover-empty" style="width: 1%"></div></div>
+	</td>
+	<td data-value="99.35" class="pct high">99.35%</td>
+	<td data-value="154" class="abs high">153/154</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="27" class="abs high">27/27</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="99.35" class="pct high">99.35%</td>
+	<td data-value="154" class="abs high">153/154</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="model.test.js"><a href="model.test.js.html">model.test.js</a></td>
+	<td data-value="100" class="pic high">
+	<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
+	</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="135" class="abs high">135/135</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="23" class="abs high">23/23</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="135" class="abs high">135/135</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="models.test.js"><a href="models.test.js.html">models.test.js</a></td>
+	<td data-value="100" class="pic high">
+	<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
+	</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="128" class="abs high">128/128</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="23" class="abs high">23/23</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="128" class="abs high">128/128</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="pull.test.js"><a href="pull.test.js.html">pull.test.js</a></td>
+	<td data-value="99.34" class="pic high">
+	<div class="chart"><div class="cover-fill" style="width: 99%"></div><div class="cover-empty" style="width: 1%"></div></div>
+	</td>
+	<td data-value="99.34" class="pct high">99.34%</td>
+	<td data-value="153" class="abs high">152/153</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="27" class="abs high">27/27</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="99.34" class="pct high">99.34%</td>
+	<td data-value="153" class="abs high">152/153</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="status.test.js"><a href="status.test.js.html">status.test.js</a></td>
+	<td data-value="100" class="pic high">
+	<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
+	</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="57" class="abs high">57/57</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="10" class="abs high">10/10</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="57" class="abs high">57/57</td>
+	</tr>
+
+</tbody>
+</table>
+</div>
+                <div class='push'></div><!-- for sticky footer -->
+            </div><!-- /wrapper -->
+            <div class='footer quiet pad2 space-top1 center small'>
+                Code coverage generated by
+                <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
+                at 2024-08-07T15:59:44.935Z
+            </div>
+        <script src="../../../prettify.js"></script>
+        <script>
+            window.onload = function () {
+                prettyPrint();
+            };
+        </script>
+        <script src="../../../sorter.js"></script>
+        <script src="../../../block-navigation.js"></script>
+    </body>
+</html>
+    
\ No newline at end of file
diff --git a/coverage/ragchat-api/__tests__/ai/model.test.js.html b/coverage/ragchat-api/__tests__/ai/model.test.js.html
new file mode 100644
index 0000000..3f26ae9
--- /dev/null
+++ b/coverage/ragchat-api/__tests__/ai/model.test.js.html
@@ -0,0 +1,637 @@
+
+<!doctype html>
+<html lang="en">
+
+<head>
+    <title>Code coverage report for ragchat-api/__tests__/ai/model.test.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+    
+<body>
+<div class='wrapper'>
+    <div class='pad1'>
+        <h1><a href="../../../index.html">All files</a> / <a href="index.html">ragchat-api/__tests__/ai</a> model.test.js</h1>
+        <div class='clearfix'>
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Statements</span>
+                <span class='fraction'>135/135</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Branches</span>
+                <span class='fraction'>23/23</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Functions</span>
+                <span class='fraction'>1/1</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Lines</span>
+                <span class='fraction'>135/135</span>
+            </div>
+        
+            
+        </div>
+        <p class="quiet">
+            Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
+        </p>
+        <template id="filterTemplate">
+            <div class="quiet">
+                Filter:
+                <input type="search" id="fileSearch">
+            </div>
+        </template>
+    </div>
+    <div class='status-line high'></div>
+    <pre><table class="coverage">
+<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
+<a name='L2'></a><a href='#L2'>2</a>
+<a name='L3'></a><a href='#L3'>3</a>
+<a name='L4'></a><a href='#L4'>4</a>
+<a name='L5'></a><a href='#L5'>5</a>
+<a name='L6'></a><a href='#L6'>6</a>
+<a name='L7'></a><a href='#L7'>7</a>
+<a name='L8'></a><a href='#L8'>8</a>
+<a name='L9'></a><a href='#L9'>9</a>
+<a name='L10'></a><a href='#L10'>10</a>
+<a name='L11'></a><a href='#L11'>11</a>
+<a name='L12'></a><a href='#L12'>12</a>
+<a name='L13'></a><a href='#L13'>13</a>
+<a name='L14'></a><a href='#L14'>14</a>
+<a name='L15'></a><a href='#L15'>15</a>
+<a name='L16'></a><a href='#L16'>16</a>
+<a name='L17'></a><a href='#L17'>17</a>
+<a name='L18'></a><a href='#L18'>18</a>
+<a name='L19'></a><a href='#L19'>19</a>
+<a name='L20'></a><a href='#L20'>20</a>
+<a name='L21'></a><a href='#L21'>21</a>
+<a name='L22'></a><a href='#L22'>22</a>
+<a name='L23'></a><a href='#L23'>23</a>
+<a name='L24'></a><a href='#L24'>24</a>
+<a name='L25'></a><a href='#L25'>25</a>
+<a name='L26'></a><a href='#L26'>26</a>
+<a name='L27'></a><a href='#L27'>27</a>
+<a name='L28'></a><a href='#L28'>28</a>
+<a name='L29'></a><a href='#L29'>29</a>
+<a name='L30'></a><a href='#L30'>30</a>
+<a name='L31'></a><a href='#L31'>31</a>
+<a name='L32'></a><a href='#L32'>32</a>
+<a name='L33'></a><a href='#L33'>33</a>
+<a name='L34'></a><a href='#L34'>34</a>
+<a name='L35'></a><a href='#L35'>35</a>
+<a name='L36'></a><a href='#L36'>36</a>
+<a name='L37'></a><a href='#L37'>37</a>
+<a name='L38'></a><a href='#L38'>38</a>
+<a name='L39'></a><a href='#L39'>39</a>
+<a name='L40'></a><a href='#L40'>40</a>
+<a name='L41'></a><a href='#L41'>41</a>
+<a name='L42'></a><a href='#L42'>42</a>
+<a name='L43'></a><a href='#L43'>43</a>
+<a name='L44'></a><a href='#L44'>44</a>
+<a name='L45'></a><a href='#L45'>45</a>
+<a name='L46'></a><a href='#L46'>46</a>
+<a name='L47'></a><a href='#L47'>47</a>
+<a name='L48'></a><a href='#L48'>48</a>
+<a name='L49'></a><a href='#L49'>49</a>
+<a name='L50'></a><a href='#L50'>50</a>
+<a name='L51'></a><a href='#L51'>51</a>
+<a name='L52'></a><a href='#L52'>52</a>
+<a name='L53'></a><a href='#L53'>53</a>
+<a name='L54'></a><a href='#L54'>54</a>
+<a name='L55'></a><a href='#L55'>55</a>
+<a name='L56'></a><a href='#L56'>56</a>
+<a name='L57'></a><a href='#L57'>57</a>
+<a name='L58'></a><a href='#L58'>58</a>
+<a name='L59'></a><a href='#L59'>59</a>
+<a name='L60'></a><a href='#L60'>60</a>
+<a name='L61'></a><a href='#L61'>61</a>
+<a name='L62'></a><a href='#L62'>62</a>
+<a name='L63'></a><a href='#L63'>63</a>
+<a name='L64'></a><a href='#L64'>64</a>
+<a name='L65'></a><a href='#L65'>65</a>
+<a name='L66'></a><a href='#L66'>66</a>
+<a name='L67'></a><a href='#L67'>67</a>
+<a name='L68'></a><a href='#L68'>68</a>
+<a name='L69'></a><a href='#L69'>69</a>
+<a name='L70'></a><a href='#L70'>70</a>
+<a name='L71'></a><a href='#L71'>71</a>
+<a name='L72'></a><a href='#L72'>72</a>
+<a name='L73'></a><a href='#L73'>73</a>
+<a name='L74'></a><a href='#L74'>74</a>
+<a name='L75'></a><a href='#L75'>75</a>
+<a name='L76'></a><a href='#L76'>76</a>
+<a name='L77'></a><a href='#L77'>77</a>
+<a name='L78'></a><a href='#L78'>78</a>
+<a name='L79'></a><a href='#L79'>79</a>
+<a name='L80'></a><a href='#L80'>80</a>
+<a name='L81'></a><a href='#L81'>81</a>
+<a name='L82'></a><a href='#L82'>82</a>
+<a name='L83'></a><a href='#L83'>83</a>
+<a name='L84'></a><a href='#L84'>84</a>
+<a name='L85'></a><a href='#L85'>85</a>
+<a name='L86'></a><a href='#L86'>86</a>
+<a name='L87'></a><a href='#L87'>87</a>
+<a name='L88'></a><a href='#L88'>88</a>
+<a name='L89'></a><a href='#L89'>89</a>
+<a name='L90'></a><a href='#L90'>90</a>
+<a name='L91'></a><a href='#L91'>91</a>
+<a name='L92'></a><a href='#L92'>92</a>
+<a name='L93'></a><a href='#L93'>93</a>
+<a name='L94'></a><a href='#L94'>94</a>
+<a name='L95'></a><a href='#L95'>95</a>
+<a name='L96'></a><a href='#L96'>96</a>
+<a name='L97'></a><a href='#L97'>97</a>
+<a name='L98'></a><a href='#L98'>98</a>
+<a name='L99'></a><a href='#L99'>99</a>
+<a name='L100'></a><a href='#L100'>100</a>
+<a name='L101'></a><a href='#L101'>101</a>
+<a name='L102'></a><a href='#L102'>102</a>
+<a name='L103'></a><a href='#L103'>103</a>
+<a name='L104'></a><a href='#L104'>104</a>
+<a name='L105'></a><a href='#L105'>105</a>
+<a name='L106'></a><a href='#L106'>106</a>
+<a name='L107'></a><a href='#L107'>107</a>
+<a name='L108'></a><a href='#L108'>108</a>
+<a name='L109'></a><a href='#L109'>109</a>
+<a name='L110'></a><a href='#L110'>110</a>
+<a name='L111'></a><a href='#L111'>111</a>
+<a name='L112'></a><a href='#L112'>112</a>
+<a name='L113'></a><a href='#L113'>113</a>
+<a name='L114'></a><a href='#L114'>114</a>
+<a name='L115'></a><a href='#L115'>115</a>
+<a name='L116'></a><a href='#L116'>116</a>
+<a name='L117'></a><a href='#L117'>117</a>
+<a name='L118'></a><a href='#L118'>118</a>
+<a name='L119'></a><a href='#L119'>119</a>
+<a name='L120'></a><a href='#L120'>120</a>
+<a name='L121'></a><a href='#L121'>121</a>
+<a name='L122'></a><a href='#L122'>122</a>
+<a name='L123'></a><a href='#L123'>123</a>
+<a name='L124'></a><a href='#L124'>124</a>
+<a name='L125'></a><a href='#L125'>125</a>
+<a name='L126'></a><a href='#L126'>126</a>
+<a name='L127'></a><a href='#L127'>127</a>
+<a name='L128'></a><a href='#L128'>128</a>
+<a name='L129'></a><a href='#L129'>129</a>
+<a name='L130'></a><a href='#L130'>130</a>
+<a name='L131'></a><a href='#L131'>131</a>
+<a name='L132'></a><a href='#L132'>132</a>
+<a name='L133'></a><a href='#L133'>133</a>
+<a name='L134'></a><a href='#L134'>134</a>
+<a name='L135'></a><a href='#L135'>135</a>
+<a name='L136'></a><a href='#L136'>136</a>
+<a name='L137'></a><a href='#L137'>137</a>
+<a name='L138'></a><a href='#L138'>138</a>
+<a name='L139'></a><a href='#L139'>139</a>
+<a name='L140'></a><a href='#L140'>140</a>
+<a name='L141'></a><a href='#L141'>141</a>
+<a name='L142'></a><a href='#L142'>142</a>
+<a name='L143'></a><a href='#L143'>143</a>
+<a name='L144'></a><a href='#L144'>144</a>
+<a name='L145'></a><a href='#L145'>145</a>
+<a name='L146'></a><a href='#L146'>146</a>
+<a name='L147'></a><a href='#L147'>147</a>
+<a name='L148'></a><a href='#L148'>148</a>
+<a name='L149'></a><a href='#L149'>149</a>
+<a name='L150'></a><a href='#L150'>150</a>
+<a name='L151'></a><a href='#L151'>151</a>
+<a name='L152'></a><a href='#L152'>152</a>
+<a name='L153'></a><a href='#L153'>153</a>
+<a name='L154'></a><a href='#L154'>154</a>
+<a name='L155'></a><a href='#L155'>155</a>
+<a name='L156'></a><a href='#L156'>156</a>
+<a name='L157'></a><a href='#L157'>157</a>
+<a name='L158'></a><a href='#L158'>158</a>
+<a name='L159'></a><a href='#L159'>159</a>
+<a name='L160'></a><a href='#L160'>160</a>
+<a name='L161'></a><a href='#L161'>161</a>
+<a name='L162'></a><a href='#L162'>162</a>
+<a name='L163'></a><a href='#L163'>163</a>
+<a name='L164'></a><a href='#L164'>164</a>
+<a name='L165'></a><a href='#L165'>165</a>
+<a name='L166'></a><a href='#L166'>166</a>
+<a name='L167'></a><a href='#L167'>167</a>
+<a name='L168'></a><a href='#L168'>168</a>
+<a name='L169'></a><a href='#L169'>169</a>
+<a name='L170'></a><a href='#L170'>170</a>
+<a name='L171'></a><a href='#L171'>171</a>
+<a name='L172'></a><a href='#L172'>172</a>
+<a name='L173'></a><a href='#L173'>173</a>
+<a name='L174'></a><a href='#L174'>174</a>
+<a name='L175'></a><a href='#L175'>175</a>
+<a name='L176'></a><a href='#L176'>176</a>
+<a name='L177'></a><a href='#L177'>177</a>
+<a name='L178'></a><a href='#L178'>178</a>
+<a name='L179'></a><a href='#L179'>179</a>
+<a name='L180'></a><a href='#L180'>180</a>
+<a name='L181'></a><a href='#L181'>181</a>
+<a name='L182'></a><a href='#L182'>182</a>
+<a name='L183'></a><a href='#L183'>183</a>
+<a name='L184'></a><a href='#L184'>184</a>
+<a name='L185'></a><a href='#L185'>185</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">3x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span></td><td class="text"><pre class="prettyprint lang-js">// import vitest, supertest &amp; app
+import { vi, beforeAll, beforeEach, describe, expect, expectTypeOf, test, it, afterEach } from 'vitest';
+import supertest from "supertest";
+import app from "../../app.js";
+import jwt from 'jsonwebtoken';
+&nbsp;
+// set route
+const ROUTE = '/ai/model';
+// prepare response of each test
+let response;
+&nbsp;
+// ############################
+//  OBJECTS
+// ############################
+&nbsp;
+&nbsp;
+const mockedVals = vi.hoisted(() =&gt; {
+  return {
+    foundUser: {
+      _id: '66a29da2942b3eb',
+      username: 'snoopy',
+      name: 'My User',
+      email: 'user@mail.local',
+      verified: true,
+      role: 0,
+      createdAt: '2024-07 - 25T18: 46: 58.982Z',
+      updatedAt: '2024-07 - 25T18: 46: 58.982Z',
+      __v: 0,
+      fullname: '',
+      id: '66a29da2942b3ebcaf047f07'
+    },
+    foundModel: {
+      "details": {
+        "families": [
+          "llama",
+        ],
+        "family": "llama",
+        "format": "gguf",
+        "parameter_size": "8.0B",
+        "parent_model": "",
+        "quantization_level": "Q4_0",
+      },
+      "license": "someTexts",
+      "modelfile": "someTexts",
+      "parameters": "someTexts",
+      "template": "someTexts"
+    },
+    validInput: {
+      model: 'llama3'
+    }
+  };
+});
+&nbsp;
+// ############################
+//  MOCKS
+// ############################
+import * as dbService from '../../utils/handleDB.js';
+// mock dbService
+vi.mock('../../utils/handleDB.js', async (importOriginal) =&gt; {
+  return {
+    ...await importOriginal(),
+    dbConnection: vi.fn(() =&gt; 'mocked'),
+    findOneRecord: vi.fn(() =&gt; mockedVals.foundUser),
+  };
+});
+&nbsp;
+// mock aiService
+import * as aiService from '../../utils/handleAI.js';
+vi.mock('../../utils/handleAI.js', async (importOriginal) =&gt; {
+  return {
+    ...await importOriginal(),
+    aiGetModel: vi.fn(() =&gt; mockedVals.foundModel)
+  };
+});
+&nbsp;
+// ############################
+//  TESTS
+// ############################
+&nbsp;
+&nbsp;
+describe('ai model', () =&gt; {
+  const _jwt = () =&gt; {
+    return jwt.sign({ id: mockedVals.foundUser.id, role: mockedVals.foundUser.role }, process.env.JWT_SECRET_KEY, { expiresIn: process.env.JWT_TTL });
+  };
+&nbsp;
+  describe('given the inputs are valid', () =&gt; {
+    beforeAll(async () =&gt; {
+      response = await supertest(app)
+        .post(ROUTE)
+        .set('Authorization', `Bearer ${_jwt()}`)
+        .send(mockedVals.validInput);
+    });
+    it('should return a proper status code', () =&gt; {
+      expect(response.status).toBe(200);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot({
+        license: expect.any(String),
+        modelfile: expect.any(String),
+        parameters: expect.any(String),
+        template: expect.any(String),
+      });
+    });
+  });
+&nbsp;
+&nbsp;
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given no matching model found', () =&gt; {
+    beforeAll(async () =&gt; {
+      let error = new Error("model 'xxx' not found");
+      error.name = 'ResponseError';
+      error.status = 400;
+      aiService.aiGetModel.mockImplementation(() =&gt; { throw error; });
+&nbsp;
+      response = await supertest(app)
+        .post(ROUTE)
+        .set('Authorization', `Bearer ${_jwt()}`)
+        .send({ model: 'xxx' });
+    });
+    it('should return a proper status code', () =&gt; {
+      expect(response.status).toBe(500);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given required fields are missing', () =&gt; {
+    beforeAll(async () =&gt; {
+      const { model, ...input } = mockedVals.validInput;
+&nbsp;
+      response = await supertest(app)
+        .post(ROUTE)
+        .set('Authorization', `Bearer ${_jwt()}`)
+        .send(input);
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(400);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given no valid jwt sended', () =&gt; {
+    beforeAll(async () =&gt; {
+      response = await supertest(app)
+        .post(ROUTE)
+        .set('Authorization', `Bearer invalid`)
+        .send(mockedVals.validInput);
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(403);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given no jwt sended', () =&gt; {
+    beforeAll(async () =&gt; {
+      response = await supertest(app)
+        .post(ROUTE)
+        .send(mockedVals.validInput);
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(401);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+});</pre></td></tr></table></pre>
+
+                <div class='push'></div><!-- for sticky footer -->
+            </div><!-- /wrapper -->
+            <div class='footer quiet pad2 space-top1 center small'>
+                Code coverage generated by
+                <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
+                at 2024-08-07T15:59:44.935Z
+            </div>
+        <script src="../../../prettify.js"></script>
+        <script>
+            window.onload = function () {
+                prettyPrint();
+            };
+        </script>
+        <script src="../../../sorter.js"></script>
+        <script src="../../../block-navigation.js"></script>
+    </body>
+</html>
+    
\ No newline at end of file
diff --git a/coverage/ragchat-api/__tests__/ai/models.test.js.html b/coverage/ragchat-api/__tests__/ai/models.test.js.html
new file mode 100644
index 0000000..136ca15
--- /dev/null
+++ b/coverage/ragchat-api/__tests__/ai/models.test.js.html
@@ -0,0 +1,931 @@
+
+<!doctype html>
+<html lang="en">
+
+<head>
+    <title>Code coverage report for ragchat-api/__tests__/ai/models.test.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+    
+<body>
+<div class='wrapper'>
+    <div class='pad1'>
+        <h1><a href="../../../index.html">All files</a> / <a href="index.html">ragchat-api/__tests__/ai</a> models.test.js</h1>
+        <div class='clearfix'>
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Statements</span>
+                <span class='fraction'>128/128</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Branches</span>
+                <span class='fraction'>23/23</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Functions</span>
+                <span class='fraction'>1/1</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Lines</span>
+                <span class='fraction'>128/128</span>
+            </div>
+        
+            
+        </div>
+        <p class="quiet">
+            Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
+        </p>
+        <template id="filterTemplate">
+            <div class="quiet">
+                Filter:
+                <input type="search" id="fileSearch">
+            </div>
+        </template>
+    </div>
+    <div class='status-line high'></div>
+    <pre><table class="coverage">
+<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
+<a name='L2'></a><a href='#L2'>2</a>
+<a name='L3'></a><a href='#L3'>3</a>
+<a name='L4'></a><a href='#L4'>4</a>
+<a name='L5'></a><a href='#L5'>5</a>
+<a name='L6'></a><a href='#L6'>6</a>
+<a name='L7'></a><a href='#L7'>7</a>
+<a name='L8'></a><a href='#L8'>8</a>
+<a name='L9'></a><a href='#L9'>9</a>
+<a name='L10'></a><a href='#L10'>10</a>
+<a name='L11'></a><a href='#L11'>11</a>
+<a name='L12'></a><a href='#L12'>12</a>
+<a name='L13'></a><a href='#L13'>13</a>
+<a name='L14'></a><a href='#L14'>14</a>
+<a name='L15'></a><a href='#L15'>15</a>
+<a name='L16'></a><a href='#L16'>16</a>
+<a name='L17'></a><a href='#L17'>17</a>
+<a name='L18'></a><a href='#L18'>18</a>
+<a name='L19'></a><a href='#L19'>19</a>
+<a name='L20'></a><a href='#L20'>20</a>
+<a name='L21'></a><a href='#L21'>21</a>
+<a name='L22'></a><a href='#L22'>22</a>
+<a name='L23'></a><a href='#L23'>23</a>
+<a name='L24'></a><a href='#L24'>24</a>
+<a name='L25'></a><a href='#L25'>25</a>
+<a name='L26'></a><a href='#L26'>26</a>
+<a name='L27'></a><a href='#L27'>27</a>
+<a name='L28'></a><a href='#L28'>28</a>
+<a name='L29'></a><a href='#L29'>29</a>
+<a name='L30'></a><a href='#L30'>30</a>
+<a name='L31'></a><a href='#L31'>31</a>
+<a name='L32'></a><a href='#L32'>32</a>
+<a name='L33'></a><a href='#L33'>33</a>
+<a name='L34'></a><a href='#L34'>34</a>
+<a name='L35'></a><a href='#L35'>35</a>
+<a name='L36'></a><a href='#L36'>36</a>
+<a name='L37'></a><a href='#L37'>37</a>
+<a name='L38'></a><a href='#L38'>38</a>
+<a name='L39'></a><a href='#L39'>39</a>
+<a name='L40'></a><a href='#L40'>40</a>
+<a name='L41'></a><a href='#L41'>41</a>
+<a name='L42'></a><a href='#L42'>42</a>
+<a name='L43'></a><a href='#L43'>43</a>
+<a name='L44'></a><a href='#L44'>44</a>
+<a name='L45'></a><a href='#L45'>45</a>
+<a name='L46'></a><a href='#L46'>46</a>
+<a name='L47'></a><a href='#L47'>47</a>
+<a name='L48'></a><a href='#L48'>48</a>
+<a name='L49'></a><a href='#L49'>49</a>
+<a name='L50'></a><a href='#L50'>50</a>
+<a name='L51'></a><a href='#L51'>51</a>
+<a name='L52'></a><a href='#L52'>52</a>
+<a name='L53'></a><a href='#L53'>53</a>
+<a name='L54'></a><a href='#L54'>54</a>
+<a name='L55'></a><a href='#L55'>55</a>
+<a name='L56'></a><a href='#L56'>56</a>
+<a name='L57'></a><a href='#L57'>57</a>
+<a name='L58'></a><a href='#L58'>58</a>
+<a name='L59'></a><a href='#L59'>59</a>
+<a name='L60'></a><a href='#L60'>60</a>
+<a name='L61'></a><a href='#L61'>61</a>
+<a name='L62'></a><a href='#L62'>62</a>
+<a name='L63'></a><a href='#L63'>63</a>
+<a name='L64'></a><a href='#L64'>64</a>
+<a name='L65'></a><a href='#L65'>65</a>
+<a name='L66'></a><a href='#L66'>66</a>
+<a name='L67'></a><a href='#L67'>67</a>
+<a name='L68'></a><a href='#L68'>68</a>
+<a name='L69'></a><a href='#L69'>69</a>
+<a name='L70'></a><a href='#L70'>70</a>
+<a name='L71'></a><a href='#L71'>71</a>
+<a name='L72'></a><a href='#L72'>72</a>
+<a name='L73'></a><a href='#L73'>73</a>
+<a name='L74'></a><a href='#L74'>74</a>
+<a name='L75'></a><a href='#L75'>75</a>
+<a name='L76'></a><a href='#L76'>76</a>
+<a name='L77'></a><a href='#L77'>77</a>
+<a name='L78'></a><a href='#L78'>78</a>
+<a name='L79'></a><a href='#L79'>79</a>
+<a name='L80'></a><a href='#L80'>80</a>
+<a name='L81'></a><a href='#L81'>81</a>
+<a name='L82'></a><a href='#L82'>82</a>
+<a name='L83'></a><a href='#L83'>83</a>
+<a name='L84'></a><a href='#L84'>84</a>
+<a name='L85'></a><a href='#L85'>85</a>
+<a name='L86'></a><a href='#L86'>86</a>
+<a name='L87'></a><a href='#L87'>87</a>
+<a name='L88'></a><a href='#L88'>88</a>
+<a name='L89'></a><a href='#L89'>89</a>
+<a name='L90'></a><a href='#L90'>90</a>
+<a name='L91'></a><a href='#L91'>91</a>
+<a name='L92'></a><a href='#L92'>92</a>
+<a name='L93'></a><a href='#L93'>93</a>
+<a name='L94'></a><a href='#L94'>94</a>
+<a name='L95'></a><a href='#L95'>95</a>
+<a name='L96'></a><a href='#L96'>96</a>
+<a name='L97'></a><a href='#L97'>97</a>
+<a name='L98'></a><a href='#L98'>98</a>
+<a name='L99'></a><a href='#L99'>99</a>
+<a name='L100'></a><a href='#L100'>100</a>
+<a name='L101'></a><a href='#L101'>101</a>
+<a name='L102'></a><a href='#L102'>102</a>
+<a name='L103'></a><a href='#L103'>103</a>
+<a name='L104'></a><a href='#L104'>104</a>
+<a name='L105'></a><a href='#L105'>105</a>
+<a name='L106'></a><a href='#L106'>106</a>
+<a name='L107'></a><a href='#L107'>107</a>
+<a name='L108'></a><a href='#L108'>108</a>
+<a name='L109'></a><a href='#L109'>109</a>
+<a name='L110'></a><a href='#L110'>110</a>
+<a name='L111'></a><a href='#L111'>111</a>
+<a name='L112'></a><a href='#L112'>112</a>
+<a name='L113'></a><a href='#L113'>113</a>
+<a name='L114'></a><a href='#L114'>114</a>
+<a name='L115'></a><a href='#L115'>115</a>
+<a name='L116'></a><a href='#L116'>116</a>
+<a name='L117'></a><a href='#L117'>117</a>
+<a name='L118'></a><a href='#L118'>118</a>
+<a name='L119'></a><a href='#L119'>119</a>
+<a name='L120'></a><a href='#L120'>120</a>
+<a name='L121'></a><a href='#L121'>121</a>
+<a name='L122'></a><a href='#L122'>122</a>
+<a name='L123'></a><a href='#L123'>123</a>
+<a name='L124'></a><a href='#L124'>124</a>
+<a name='L125'></a><a href='#L125'>125</a>
+<a name='L126'></a><a href='#L126'>126</a>
+<a name='L127'></a><a href='#L127'>127</a>
+<a name='L128'></a><a href='#L128'>128</a>
+<a name='L129'></a><a href='#L129'>129</a>
+<a name='L130'></a><a href='#L130'>130</a>
+<a name='L131'></a><a href='#L131'>131</a>
+<a name='L132'></a><a href='#L132'>132</a>
+<a name='L133'></a><a href='#L133'>133</a>
+<a name='L134'></a><a href='#L134'>134</a>
+<a name='L135'></a><a href='#L135'>135</a>
+<a name='L136'></a><a href='#L136'>136</a>
+<a name='L137'></a><a href='#L137'>137</a>
+<a name='L138'></a><a href='#L138'>138</a>
+<a name='L139'></a><a href='#L139'>139</a>
+<a name='L140'></a><a href='#L140'>140</a>
+<a name='L141'></a><a href='#L141'>141</a>
+<a name='L142'></a><a href='#L142'>142</a>
+<a name='L143'></a><a href='#L143'>143</a>
+<a name='L144'></a><a href='#L144'>144</a>
+<a name='L145'></a><a href='#L145'>145</a>
+<a name='L146'></a><a href='#L146'>146</a>
+<a name='L147'></a><a href='#L147'>147</a>
+<a name='L148'></a><a href='#L148'>148</a>
+<a name='L149'></a><a href='#L149'>149</a>
+<a name='L150'></a><a href='#L150'>150</a>
+<a name='L151'></a><a href='#L151'>151</a>
+<a name='L152'></a><a href='#L152'>152</a>
+<a name='L153'></a><a href='#L153'>153</a>
+<a name='L154'></a><a href='#L154'>154</a>
+<a name='L155'></a><a href='#L155'>155</a>
+<a name='L156'></a><a href='#L156'>156</a>
+<a name='L157'></a><a href='#L157'>157</a>
+<a name='L158'></a><a href='#L158'>158</a>
+<a name='L159'></a><a href='#L159'>159</a>
+<a name='L160'></a><a href='#L160'>160</a>
+<a name='L161'></a><a href='#L161'>161</a>
+<a name='L162'></a><a href='#L162'>162</a>
+<a name='L163'></a><a href='#L163'>163</a>
+<a name='L164'></a><a href='#L164'>164</a>
+<a name='L165'></a><a href='#L165'>165</a>
+<a name='L166'></a><a href='#L166'>166</a>
+<a name='L167'></a><a href='#L167'>167</a>
+<a name='L168'></a><a href='#L168'>168</a>
+<a name='L169'></a><a href='#L169'>169</a>
+<a name='L170'></a><a href='#L170'>170</a>
+<a name='L171'></a><a href='#L171'>171</a>
+<a name='L172'></a><a href='#L172'>172</a>
+<a name='L173'></a><a href='#L173'>173</a>
+<a name='L174'></a><a href='#L174'>174</a>
+<a name='L175'></a><a href='#L175'>175</a>
+<a name='L176'></a><a href='#L176'>176</a>
+<a name='L177'></a><a href='#L177'>177</a>
+<a name='L178'></a><a href='#L178'>178</a>
+<a name='L179'></a><a href='#L179'>179</a>
+<a name='L180'></a><a href='#L180'>180</a>
+<a name='L181'></a><a href='#L181'>181</a>
+<a name='L182'></a><a href='#L182'>182</a>
+<a name='L183'></a><a href='#L183'>183</a>
+<a name='L184'></a><a href='#L184'>184</a>
+<a name='L185'></a><a href='#L185'>185</a>
+<a name='L186'></a><a href='#L186'>186</a>
+<a name='L187'></a><a href='#L187'>187</a>
+<a name='L188'></a><a href='#L188'>188</a>
+<a name='L189'></a><a href='#L189'>189</a>
+<a name='L190'></a><a href='#L190'>190</a>
+<a name='L191'></a><a href='#L191'>191</a>
+<a name='L192'></a><a href='#L192'>192</a>
+<a name='L193'></a><a href='#L193'>193</a>
+<a name='L194'></a><a href='#L194'>194</a>
+<a name='L195'></a><a href='#L195'>195</a>
+<a name='L196'></a><a href='#L196'>196</a>
+<a name='L197'></a><a href='#L197'>197</a>
+<a name='L198'></a><a href='#L198'>198</a>
+<a name='L199'></a><a href='#L199'>199</a>
+<a name='L200'></a><a href='#L200'>200</a>
+<a name='L201'></a><a href='#L201'>201</a>
+<a name='L202'></a><a href='#L202'>202</a>
+<a name='L203'></a><a href='#L203'>203</a>
+<a name='L204'></a><a href='#L204'>204</a>
+<a name='L205'></a><a href='#L205'>205</a>
+<a name='L206'></a><a href='#L206'>206</a>
+<a name='L207'></a><a href='#L207'>207</a>
+<a name='L208'></a><a href='#L208'>208</a>
+<a name='L209'></a><a href='#L209'>209</a>
+<a name='L210'></a><a href='#L210'>210</a>
+<a name='L211'></a><a href='#L211'>211</a>
+<a name='L212'></a><a href='#L212'>212</a>
+<a name='L213'></a><a href='#L213'>213</a>
+<a name='L214'></a><a href='#L214'>214</a>
+<a name='L215'></a><a href='#L215'>215</a>
+<a name='L216'></a><a href='#L216'>216</a>
+<a name='L217'></a><a href='#L217'>217</a>
+<a name='L218'></a><a href='#L218'>218</a>
+<a name='L219'></a><a href='#L219'>219</a>
+<a name='L220'></a><a href='#L220'>220</a>
+<a name='L221'></a><a href='#L221'>221</a>
+<a name='L222'></a><a href='#L222'>222</a>
+<a name='L223'></a><a href='#L223'>223</a>
+<a name='L224'></a><a href='#L224'>224</a>
+<a name='L225'></a><a href='#L225'>225</a>
+<a name='L226'></a><a href='#L226'>226</a>
+<a name='L227'></a><a href='#L227'>227</a>
+<a name='L228'></a><a href='#L228'>228</a>
+<a name='L229'></a><a href='#L229'>229</a>
+<a name='L230'></a><a href='#L230'>230</a>
+<a name='L231'></a><a href='#L231'>231</a>
+<a name='L232'></a><a href='#L232'>232</a>
+<a name='L233'></a><a href='#L233'>233</a>
+<a name='L234'></a><a href='#L234'>234</a>
+<a name='L235'></a><a href='#L235'>235</a>
+<a name='L236'></a><a href='#L236'>236</a>
+<a name='L237'></a><a href='#L237'>237</a>
+<a name='L238'></a><a href='#L238'>238</a>
+<a name='L239'></a><a href='#L239'>239</a>
+<a name='L240'></a><a href='#L240'>240</a>
+<a name='L241'></a><a href='#L241'>241</a>
+<a name='L242'></a><a href='#L242'>242</a>
+<a name='L243'></a><a href='#L243'>243</a>
+<a name='L244'></a><a href='#L244'>244</a>
+<a name='L245'></a><a href='#L245'>245</a>
+<a name='L246'></a><a href='#L246'>246</a>
+<a name='L247'></a><a href='#L247'>247</a>
+<a name='L248'></a><a href='#L248'>248</a>
+<a name='L249'></a><a href='#L249'>249</a>
+<a name='L250'></a><a href='#L250'>250</a>
+<a name='L251'></a><a href='#L251'>251</a>
+<a name='L252'></a><a href='#L252'>252</a>
+<a name='L253'></a><a href='#L253'>253</a>
+<a name='L254'></a><a href='#L254'>254</a>
+<a name='L255'></a><a href='#L255'>255</a>
+<a name='L256'></a><a href='#L256'>256</a>
+<a name='L257'></a><a href='#L257'>257</a>
+<a name='L258'></a><a href='#L258'>258</a>
+<a name='L259'></a><a href='#L259'>259</a>
+<a name='L260'></a><a href='#L260'>260</a>
+<a name='L261'></a><a href='#L261'>261</a>
+<a name='L262'></a><a href='#L262'>262</a>
+<a name='L263'></a><a href='#L263'>263</a>
+<a name='L264'></a><a href='#L264'>264</a>
+<a name='L265'></a><a href='#L265'>265</a>
+<a name='L266'></a><a href='#L266'>266</a>
+<a name='L267'></a><a href='#L267'>267</a>
+<a name='L268'></a><a href='#L268'>268</a>
+<a name='L269'></a><a href='#L269'>269</a>
+<a name='L270'></a><a href='#L270'>270</a>
+<a name='L271'></a><a href='#L271'>271</a>
+<a name='L272'></a><a href='#L272'>272</a>
+<a name='L273'></a><a href='#L273'>273</a>
+<a name='L274'></a><a href='#L274'>274</a>
+<a name='L275'></a><a href='#L275'>275</a>
+<a name='L276'></a><a href='#L276'>276</a>
+<a name='L277'></a><a href='#L277'>277</a>
+<a name='L278'></a><a href='#L278'>278</a>
+<a name='L279'></a><a href='#L279'>279</a>
+<a name='L280'></a><a href='#L280'>280</a>
+<a name='L281'></a><a href='#L281'>281</a>
+<a name='L282'></a><a href='#L282'>282</a>
+<a name='L283'></a><a href='#L283'>283</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">3x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span></td><td class="text"><pre class="prettyprint lang-js">// import vitest, supertest &amp; app
+import { vi, beforeAll, beforeEach, describe, expect, expectTypeOf, test, it, afterEach } from 'vitest';
+import supertest from "supertest";
+import app from "../../app.js";
+import jwt from 'jsonwebtoken';
+&nbsp;
+// set route
+const ROUTE = '/ai/models';
+// prepare response of each test
+let response;
+&nbsp;
+// ############################
+//  OBJECTS
+// ############################
+const mockedVals = vi.hoisted(() =&gt; {
+  return {
+    foundUser: {
+      _id: '66a29da2942b3eb',
+      username: 'snoopy',
+      name: 'My User',
+      email: 'user@mail.local',
+      verified: true,
+      role: 0,
+      createdAt: '2024-07 - 25T18: 46: 58.982Z',
+      updatedAt: '2024-07 - 25T18: 46: 58.982Z',
+      __v: 0,
+      fullname: '',
+      id: '66a29da2942b3ebcaf047f07'
+    },
+    foundModels: {
+      models: [
+        {
+          "name": "llama3:latest",
+          "model": "llama3:latest",
+          "modified_at": "2024-07-25T20:25:26.869024101+02:00",
+          "size": 4661224676,
+          "digest": "365c0bd3c000a25d28ddbf732fe1c6add414de7275464c4e4d1c3b5fcb5d8ad1",
+          "details": {
+            "parent_model": "",
+            "format": "gguf",
+            "family": "llama",
+            "families": [
+              "llama"
+            ],
+            "parameter_size": "8.0B",
+            "quantization_level": "Q4_0"
+          }
+        },
+        {
+          "name": "orca2:13b",
+          "model": "orca2:13b",
+          "modified_at": "2024-06-15T16:53:37.368220025+02:00",
+          "size": 7365868139,
+          "digest": "a8dcfac3ac32d06f6241896d56928ac7b1d7a6e7f5dcc6b2aec69f2194a9f091",
+          "details": {
+            "parent_model": "",
+            "format": "gguf",
+            "family": "llama",
+            "families": null,
+            "parameter_size": "13B",
+            "quantization_level": "Q4_0"
+          }
+        },
+        {
+          "name": "llama2:13b",
+          "model": "llama2:13b",
+          "modified_at": "2024-06-15T16:39:07.956494263+02:00",
+          "size": 7366821294,
+          "digest": "d475bf4c50bc4d29f333023e38cd56535039eec11052204e5304c8773cc8416c",
+          "details": {
+            "parent_model": "",
+            "format": "gguf",
+            "family": "llama",
+            "families": [
+              "llama"
+            ],
+            "parameter_size": "13B",
+            "quantization_level": "Q4_0"
+          }
+        },
+        {
+          "name": "starling-lm:latest",
+          "model": "starling-lm:latest",
+          "modified_at": "2024-06-15T16:12:29.439449821+02:00",
+          "size": 4108940286,
+          "digest": "39153f619be614bf1b8b91cf31afe53ec107d70b6b7bb4118aa52bccc107ca7e",
+          "details": {
+            "parent_model": "",
+            "format": "gguf",
+            "family": "llama",
+            "families": [
+              "llama"
+            ],
+            "parameter_size": "7B",
+            "quantization_level": "Q4_0"
+          }
+        },
+        {
+          "name": "llama2:latest",
+          "model": "llama2:latest",
+          "modified_at": "2024-06-13T11:00:05.975159345+02:00",
+          "size": 3826793677,
+          "digest": "78e26419b4469263f75331927a00a0284ef6544c1975b826b15abdaef17bb962",
+          "details": {
+            "parent_model": "",
+            "format": "gguf",
+            "family": "llama",
+            "families": [
+              "llama"
+            ],
+            "parameter_size": "7B",
+            "quantization_level": "Q4_0"
+          }
+        },
+        {
+          "name": "mistral:latest",
+          "model": "mistral:latest",
+          "modified_at": "2024-06-13T11:00:05.455160458+02:00",
+          "size": 4113301090,
+          "digest": "2ae6f6dd7a3dd734790bbbf58b8909a606e0e7e97e94b7604e0aa7ae4490e6d8",
+          "details": {
+            "parent_model": "",
+            "format": "gguf",
+            "family": "llama",
+            "families": [
+              "llama"
+            ],
+            "parameter_size": "7.2B",
+            "quantization_level": "Q4_0"
+          }
+        },
+        {
+          "name": "mxbai-embed-large:latest",
+          "model": "mxbai-embed-large:latest",
+          "modified_at": "2024-05-17T20:38:00.241769083+02:00",
+          "size": 669615493,
+          "digest": "468836162de7f81e041c43663fedbbba921dcea9b9fefea135685a39b2d83dd8",
+          "details": {
+            "parent_model": "",
+            "format": "gguf",
+            "family": "bert",
+            "families": [
+              "bert"
+            ],
+            "parameter_size": "334M",
+            "quantization_level": "F16"
+          }
+        }
+      ]
+    },
+    validInput: {
+      filter: 'llama'
+    }
+  };
+});
+&nbsp;
+// ############################
+//  MOCKS
+// ############################
+// import Database Service
+import * as dbService from '../../utils/handleDB.js';
+// mock dbService
+vi.mock('../../utils/handleDB.js', async (importOriginal) =&gt; {
+  return {
+    ...await importOriginal(),
+    dbConnection: vi.fn(() =&gt; 'mocked'),
+    findOneRecord: vi.fn(() =&gt; mockedVals.foundUser),
+  };
+});
+&nbsp;
+// mock aiService
+import * as aiService from '../../utils/handleAI.js';
+vi.mock('../../utils/handleAI.js', async (importOriginal) =&gt; {
+  return {
+    ...await importOriginal(),
+    aiGetModels: vi.fn(() =&gt; mockedVals.foundModels)
+  };
+});
+&nbsp;
+// ############################
+//  TESTS
+// ############################
+&nbsp;
+describe('ai models', () =&gt; {
+  const _jwt = () =&gt; {
+    return jwt.sign({ id: mockedVals.foundUser.id, role: mockedVals.foundUser.role }, process.env.JWT_SECRET_KEY, { expiresIn: process.env.JWT_TTL });
+  };
+&nbsp;
+  describe('given the inputs are valid', () =&gt; {
+    beforeAll(async () =&gt; {
+      response = await supertest(app)
+        .post(ROUTE)
+        .set('Authorization', `Bearer ${_jwt()}`)
+        .send(mockedVals.validInput);
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(200);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given no matching model found', () =&gt; {
+    beforeAll(async () =&gt; {
+      const input = { ...mockedVals.validInput, model: 'unknownModel' };
+&nbsp;
+      aiService.aiGetModels.mockImplementation(() =&gt; { return { models: [] }; });
+&nbsp;
+&nbsp;
+      response = await supertest(app)
+        .post(ROUTE)
+        .set('Authorization', `Bearer ${_jwt(mockedVals.foundUser.id, mockedVals.foundUser.role)}`)
+        .send(input);
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(200);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given required fields are missing', () =&gt; {
+    beforeAll(async () =&gt; {
+      const { filter, ...input } = mockedVals.validInput;
+&nbsp;
+      response = await supertest(app)
+        .post(ROUTE)
+        .set('Authorization', `Bearer ${_jwt()}`)
+        .send(input);
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(400);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given no valid jwt sended', () =&gt; {
+    beforeAll(async () =&gt; {
+      response = await supertest(app)
+        .post(ROUTE)
+        .set('Authorization', `Bearer invalid`)
+        .send(mockedVals.validInput);
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(403);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given no jwt sended', () =&gt; {
+    beforeAll(async () =&gt; {
+      response = await supertest(app)
+        .post(ROUTE)
+        .send(mockedVals.validInput);
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(401);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+});</pre></td></tr></table></pre>
+
+                <div class='push'></div><!-- for sticky footer -->
+            </div><!-- /wrapper -->
+            <div class='footer quiet pad2 space-top1 center small'>
+                Code coverage generated by
+                <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
+                at 2024-08-07T15:59:44.935Z
+            </div>
+        <script src="../../../prettify.js"></script>
+        <script>
+            window.onload = function () {
+                prettyPrint();
+            };
+        </script>
+        <script src="../../../sorter.js"></script>
+        <script src="../../../block-navigation.js"></script>
+    </body>
+</html>
+    
\ No newline at end of file
diff --git a/coverage/ragchat-api/__tests__/ai/pull.test.js.html b/coverage/ragchat-api/__tests__/ai/pull.test.js.html
new file mode 100644
index 0000000..01e02c7
--- /dev/null
+++ b/coverage/ragchat-api/__tests__/ai/pull.test.js.html
@@ -0,0 +1,1006 @@
+
+<!doctype html>
+<html lang="en">
+
+<head>
+    <title>Code coverage report for ragchat-api/__tests__/ai/pull.test.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+    
+<body>
+<div class='wrapper'>
+    <div class='pad1'>
+        <h1><a href="../../../index.html">All files</a> / <a href="index.html">ragchat-api/__tests__/ai</a> pull.test.js</h1>
+        <div class='clearfix'>
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">99.34% </span>
+                <span class="quiet">Statements</span>
+                <span class='fraction'>152/153</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Branches</span>
+                <span class='fraction'>27/27</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Functions</span>
+                <span class='fraction'>1/1</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">99.34% </span>
+                <span class="quiet">Lines</span>
+                <span class='fraction'>152/153</span>
+            </div>
+        
+            
+        </div>
+        <p class="quiet">
+            Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
+        </p>
+        <template id="filterTemplate">
+            <div class="quiet">
+                Filter:
+                <input type="search" id="fileSearch">
+            </div>
+        </template>
+    </div>
+    <div class='status-line high'></div>
+    <pre><table class="coverage">
+<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
+<a name='L2'></a><a href='#L2'>2</a>
+<a name='L3'></a><a href='#L3'>3</a>
+<a name='L4'></a><a href='#L4'>4</a>
+<a name='L5'></a><a href='#L5'>5</a>
+<a name='L6'></a><a href='#L6'>6</a>
+<a name='L7'></a><a href='#L7'>7</a>
+<a name='L8'></a><a href='#L8'>8</a>
+<a name='L9'></a><a href='#L9'>9</a>
+<a name='L10'></a><a href='#L10'>10</a>
+<a name='L11'></a><a href='#L11'>11</a>
+<a name='L12'></a><a href='#L12'>12</a>
+<a name='L13'></a><a href='#L13'>13</a>
+<a name='L14'></a><a href='#L14'>14</a>
+<a name='L15'></a><a href='#L15'>15</a>
+<a name='L16'></a><a href='#L16'>16</a>
+<a name='L17'></a><a href='#L17'>17</a>
+<a name='L18'></a><a href='#L18'>18</a>
+<a name='L19'></a><a href='#L19'>19</a>
+<a name='L20'></a><a href='#L20'>20</a>
+<a name='L21'></a><a href='#L21'>21</a>
+<a name='L22'></a><a href='#L22'>22</a>
+<a name='L23'></a><a href='#L23'>23</a>
+<a name='L24'></a><a href='#L24'>24</a>
+<a name='L25'></a><a href='#L25'>25</a>
+<a name='L26'></a><a href='#L26'>26</a>
+<a name='L27'></a><a href='#L27'>27</a>
+<a name='L28'></a><a href='#L28'>28</a>
+<a name='L29'></a><a href='#L29'>29</a>
+<a name='L30'></a><a href='#L30'>30</a>
+<a name='L31'></a><a href='#L31'>31</a>
+<a name='L32'></a><a href='#L32'>32</a>
+<a name='L33'></a><a href='#L33'>33</a>
+<a name='L34'></a><a href='#L34'>34</a>
+<a name='L35'></a><a href='#L35'>35</a>
+<a name='L36'></a><a href='#L36'>36</a>
+<a name='L37'></a><a href='#L37'>37</a>
+<a name='L38'></a><a href='#L38'>38</a>
+<a name='L39'></a><a href='#L39'>39</a>
+<a name='L40'></a><a href='#L40'>40</a>
+<a name='L41'></a><a href='#L41'>41</a>
+<a name='L42'></a><a href='#L42'>42</a>
+<a name='L43'></a><a href='#L43'>43</a>
+<a name='L44'></a><a href='#L44'>44</a>
+<a name='L45'></a><a href='#L45'>45</a>
+<a name='L46'></a><a href='#L46'>46</a>
+<a name='L47'></a><a href='#L47'>47</a>
+<a name='L48'></a><a href='#L48'>48</a>
+<a name='L49'></a><a href='#L49'>49</a>
+<a name='L50'></a><a href='#L50'>50</a>
+<a name='L51'></a><a href='#L51'>51</a>
+<a name='L52'></a><a href='#L52'>52</a>
+<a name='L53'></a><a href='#L53'>53</a>
+<a name='L54'></a><a href='#L54'>54</a>
+<a name='L55'></a><a href='#L55'>55</a>
+<a name='L56'></a><a href='#L56'>56</a>
+<a name='L57'></a><a href='#L57'>57</a>
+<a name='L58'></a><a href='#L58'>58</a>
+<a name='L59'></a><a href='#L59'>59</a>
+<a name='L60'></a><a href='#L60'>60</a>
+<a name='L61'></a><a href='#L61'>61</a>
+<a name='L62'></a><a href='#L62'>62</a>
+<a name='L63'></a><a href='#L63'>63</a>
+<a name='L64'></a><a href='#L64'>64</a>
+<a name='L65'></a><a href='#L65'>65</a>
+<a name='L66'></a><a href='#L66'>66</a>
+<a name='L67'></a><a href='#L67'>67</a>
+<a name='L68'></a><a href='#L68'>68</a>
+<a name='L69'></a><a href='#L69'>69</a>
+<a name='L70'></a><a href='#L70'>70</a>
+<a name='L71'></a><a href='#L71'>71</a>
+<a name='L72'></a><a href='#L72'>72</a>
+<a name='L73'></a><a href='#L73'>73</a>
+<a name='L74'></a><a href='#L74'>74</a>
+<a name='L75'></a><a href='#L75'>75</a>
+<a name='L76'></a><a href='#L76'>76</a>
+<a name='L77'></a><a href='#L77'>77</a>
+<a name='L78'></a><a href='#L78'>78</a>
+<a name='L79'></a><a href='#L79'>79</a>
+<a name='L80'></a><a href='#L80'>80</a>
+<a name='L81'></a><a href='#L81'>81</a>
+<a name='L82'></a><a href='#L82'>82</a>
+<a name='L83'></a><a href='#L83'>83</a>
+<a name='L84'></a><a href='#L84'>84</a>
+<a name='L85'></a><a href='#L85'>85</a>
+<a name='L86'></a><a href='#L86'>86</a>
+<a name='L87'></a><a href='#L87'>87</a>
+<a name='L88'></a><a href='#L88'>88</a>
+<a name='L89'></a><a href='#L89'>89</a>
+<a name='L90'></a><a href='#L90'>90</a>
+<a name='L91'></a><a href='#L91'>91</a>
+<a name='L92'></a><a href='#L92'>92</a>
+<a name='L93'></a><a href='#L93'>93</a>
+<a name='L94'></a><a href='#L94'>94</a>
+<a name='L95'></a><a href='#L95'>95</a>
+<a name='L96'></a><a href='#L96'>96</a>
+<a name='L97'></a><a href='#L97'>97</a>
+<a name='L98'></a><a href='#L98'>98</a>
+<a name='L99'></a><a href='#L99'>99</a>
+<a name='L100'></a><a href='#L100'>100</a>
+<a name='L101'></a><a href='#L101'>101</a>
+<a name='L102'></a><a href='#L102'>102</a>
+<a name='L103'></a><a href='#L103'>103</a>
+<a name='L104'></a><a href='#L104'>104</a>
+<a name='L105'></a><a href='#L105'>105</a>
+<a name='L106'></a><a href='#L106'>106</a>
+<a name='L107'></a><a href='#L107'>107</a>
+<a name='L108'></a><a href='#L108'>108</a>
+<a name='L109'></a><a href='#L109'>109</a>
+<a name='L110'></a><a href='#L110'>110</a>
+<a name='L111'></a><a href='#L111'>111</a>
+<a name='L112'></a><a href='#L112'>112</a>
+<a name='L113'></a><a href='#L113'>113</a>
+<a name='L114'></a><a href='#L114'>114</a>
+<a name='L115'></a><a href='#L115'>115</a>
+<a name='L116'></a><a href='#L116'>116</a>
+<a name='L117'></a><a href='#L117'>117</a>
+<a name='L118'></a><a href='#L118'>118</a>
+<a name='L119'></a><a href='#L119'>119</a>
+<a name='L120'></a><a href='#L120'>120</a>
+<a name='L121'></a><a href='#L121'>121</a>
+<a name='L122'></a><a href='#L122'>122</a>
+<a name='L123'></a><a href='#L123'>123</a>
+<a name='L124'></a><a href='#L124'>124</a>
+<a name='L125'></a><a href='#L125'>125</a>
+<a name='L126'></a><a href='#L126'>126</a>
+<a name='L127'></a><a href='#L127'>127</a>
+<a name='L128'></a><a href='#L128'>128</a>
+<a name='L129'></a><a href='#L129'>129</a>
+<a name='L130'></a><a href='#L130'>130</a>
+<a name='L131'></a><a href='#L131'>131</a>
+<a name='L132'></a><a href='#L132'>132</a>
+<a name='L133'></a><a href='#L133'>133</a>
+<a name='L134'></a><a href='#L134'>134</a>
+<a name='L135'></a><a href='#L135'>135</a>
+<a name='L136'></a><a href='#L136'>136</a>
+<a name='L137'></a><a href='#L137'>137</a>
+<a name='L138'></a><a href='#L138'>138</a>
+<a name='L139'></a><a href='#L139'>139</a>
+<a name='L140'></a><a href='#L140'>140</a>
+<a name='L141'></a><a href='#L141'>141</a>
+<a name='L142'></a><a href='#L142'>142</a>
+<a name='L143'></a><a href='#L143'>143</a>
+<a name='L144'></a><a href='#L144'>144</a>
+<a name='L145'></a><a href='#L145'>145</a>
+<a name='L146'></a><a href='#L146'>146</a>
+<a name='L147'></a><a href='#L147'>147</a>
+<a name='L148'></a><a href='#L148'>148</a>
+<a name='L149'></a><a href='#L149'>149</a>
+<a name='L150'></a><a href='#L150'>150</a>
+<a name='L151'></a><a href='#L151'>151</a>
+<a name='L152'></a><a href='#L152'>152</a>
+<a name='L153'></a><a href='#L153'>153</a>
+<a name='L154'></a><a href='#L154'>154</a>
+<a name='L155'></a><a href='#L155'>155</a>
+<a name='L156'></a><a href='#L156'>156</a>
+<a name='L157'></a><a href='#L157'>157</a>
+<a name='L158'></a><a href='#L158'>158</a>
+<a name='L159'></a><a href='#L159'>159</a>
+<a name='L160'></a><a href='#L160'>160</a>
+<a name='L161'></a><a href='#L161'>161</a>
+<a name='L162'></a><a href='#L162'>162</a>
+<a name='L163'></a><a href='#L163'>163</a>
+<a name='L164'></a><a href='#L164'>164</a>
+<a name='L165'></a><a href='#L165'>165</a>
+<a name='L166'></a><a href='#L166'>166</a>
+<a name='L167'></a><a href='#L167'>167</a>
+<a name='L168'></a><a href='#L168'>168</a>
+<a name='L169'></a><a href='#L169'>169</a>
+<a name='L170'></a><a href='#L170'>170</a>
+<a name='L171'></a><a href='#L171'>171</a>
+<a name='L172'></a><a href='#L172'>172</a>
+<a name='L173'></a><a href='#L173'>173</a>
+<a name='L174'></a><a href='#L174'>174</a>
+<a name='L175'></a><a href='#L175'>175</a>
+<a name='L176'></a><a href='#L176'>176</a>
+<a name='L177'></a><a href='#L177'>177</a>
+<a name='L178'></a><a href='#L178'>178</a>
+<a name='L179'></a><a href='#L179'>179</a>
+<a name='L180'></a><a href='#L180'>180</a>
+<a name='L181'></a><a href='#L181'>181</a>
+<a name='L182'></a><a href='#L182'>182</a>
+<a name='L183'></a><a href='#L183'>183</a>
+<a name='L184'></a><a href='#L184'>184</a>
+<a name='L185'></a><a href='#L185'>185</a>
+<a name='L186'></a><a href='#L186'>186</a>
+<a name='L187'></a><a href='#L187'>187</a>
+<a name='L188'></a><a href='#L188'>188</a>
+<a name='L189'></a><a href='#L189'>189</a>
+<a name='L190'></a><a href='#L190'>190</a>
+<a name='L191'></a><a href='#L191'>191</a>
+<a name='L192'></a><a href='#L192'>192</a>
+<a name='L193'></a><a href='#L193'>193</a>
+<a name='L194'></a><a href='#L194'>194</a>
+<a name='L195'></a><a href='#L195'>195</a>
+<a name='L196'></a><a href='#L196'>196</a>
+<a name='L197'></a><a href='#L197'>197</a>
+<a name='L198'></a><a href='#L198'>198</a>
+<a name='L199'></a><a href='#L199'>199</a>
+<a name='L200'></a><a href='#L200'>200</a>
+<a name='L201'></a><a href='#L201'>201</a>
+<a name='L202'></a><a href='#L202'>202</a>
+<a name='L203'></a><a href='#L203'>203</a>
+<a name='L204'></a><a href='#L204'>204</a>
+<a name='L205'></a><a href='#L205'>205</a>
+<a name='L206'></a><a href='#L206'>206</a>
+<a name='L207'></a><a href='#L207'>207</a>
+<a name='L208'></a><a href='#L208'>208</a>
+<a name='L209'></a><a href='#L209'>209</a>
+<a name='L210'></a><a href='#L210'>210</a>
+<a name='L211'></a><a href='#L211'>211</a>
+<a name='L212'></a><a href='#L212'>212</a>
+<a name='L213'></a><a href='#L213'>213</a>
+<a name='L214'></a><a href='#L214'>214</a>
+<a name='L215'></a><a href='#L215'>215</a>
+<a name='L216'></a><a href='#L216'>216</a>
+<a name='L217'></a><a href='#L217'>217</a>
+<a name='L218'></a><a href='#L218'>218</a>
+<a name='L219'></a><a href='#L219'>219</a>
+<a name='L220'></a><a href='#L220'>220</a>
+<a name='L221'></a><a href='#L221'>221</a>
+<a name='L222'></a><a href='#L222'>222</a>
+<a name='L223'></a><a href='#L223'>223</a>
+<a name='L224'></a><a href='#L224'>224</a>
+<a name='L225'></a><a href='#L225'>225</a>
+<a name='L226'></a><a href='#L226'>226</a>
+<a name='L227'></a><a href='#L227'>227</a>
+<a name='L228'></a><a href='#L228'>228</a>
+<a name='L229'></a><a href='#L229'>229</a>
+<a name='L230'></a><a href='#L230'>230</a>
+<a name='L231'></a><a href='#L231'>231</a>
+<a name='L232'></a><a href='#L232'>232</a>
+<a name='L233'></a><a href='#L233'>233</a>
+<a name='L234'></a><a href='#L234'>234</a>
+<a name='L235'></a><a href='#L235'>235</a>
+<a name='L236'></a><a href='#L236'>236</a>
+<a name='L237'></a><a href='#L237'>237</a>
+<a name='L238'></a><a href='#L238'>238</a>
+<a name='L239'></a><a href='#L239'>239</a>
+<a name='L240'></a><a href='#L240'>240</a>
+<a name='L241'></a><a href='#L241'>241</a>
+<a name='L242'></a><a href='#L242'>242</a>
+<a name='L243'></a><a href='#L243'>243</a>
+<a name='L244'></a><a href='#L244'>244</a>
+<a name='L245'></a><a href='#L245'>245</a>
+<a name='L246'></a><a href='#L246'>246</a>
+<a name='L247'></a><a href='#L247'>247</a>
+<a name='L248'></a><a href='#L248'>248</a>
+<a name='L249'></a><a href='#L249'>249</a>
+<a name='L250'></a><a href='#L250'>250</a>
+<a name='L251'></a><a href='#L251'>251</a>
+<a name='L252'></a><a href='#L252'>252</a>
+<a name='L253'></a><a href='#L253'>253</a>
+<a name='L254'></a><a href='#L254'>254</a>
+<a name='L255'></a><a href='#L255'>255</a>
+<a name='L256'></a><a href='#L256'>256</a>
+<a name='L257'></a><a href='#L257'>257</a>
+<a name='L258'></a><a href='#L258'>258</a>
+<a name='L259'></a><a href='#L259'>259</a>
+<a name='L260'></a><a href='#L260'>260</a>
+<a name='L261'></a><a href='#L261'>261</a>
+<a name='L262'></a><a href='#L262'>262</a>
+<a name='L263'></a><a href='#L263'>263</a>
+<a name='L264'></a><a href='#L264'>264</a>
+<a name='L265'></a><a href='#L265'>265</a>
+<a name='L266'></a><a href='#L266'>266</a>
+<a name='L267'></a><a href='#L267'>267</a>
+<a name='L268'></a><a href='#L268'>268</a>
+<a name='L269'></a><a href='#L269'>269</a>
+<a name='L270'></a><a href='#L270'>270</a>
+<a name='L271'></a><a href='#L271'>271</a>
+<a name='L272'></a><a href='#L272'>272</a>
+<a name='L273'></a><a href='#L273'>273</a>
+<a name='L274'></a><a href='#L274'>274</a>
+<a name='L275'></a><a href='#L275'>275</a>
+<a name='L276'></a><a href='#L276'>276</a>
+<a name='L277'></a><a href='#L277'>277</a>
+<a name='L278'></a><a href='#L278'>278</a>
+<a name='L279'></a><a href='#L279'>279</a>
+<a name='L280'></a><a href='#L280'>280</a>
+<a name='L281'></a><a href='#L281'>281</a>
+<a name='L282'></a><a href='#L282'>282</a>
+<a name='L283'></a><a href='#L283'>283</a>
+<a name='L284'></a><a href='#L284'>284</a>
+<a name='L285'></a><a href='#L285'>285</a>
+<a name='L286'></a><a href='#L286'>286</a>
+<a name='L287'></a><a href='#L287'>287</a>
+<a name='L288'></a><a href='#L288'>288</a>
+<a name='L289'></a><a href='#L289'>289</a>
+<a name='L290'></a><a href='#L290'>290</a>
+<a name='L291'></a><a href='#L291'>291</a>
+<a name='L292'></a><a href='#L292'>292</a>
+<a name='L293'></a><a href='#L293'>293</a>
+<a name='L294'></a><a href='#L294'>294</a>
+<a name='L295'></a><a href='#L295'>295</a>
+<a name='L296'></a><a href='#L296'>296</a>
+<a name='L297'></a><a href='#L297'>297</a>
+<a name='L298'></a><a href='#L298'>298</a>
+<a name='L299'></a><a href='#L299'>299</a>
+<a name='L300'></a><a href='#L300'>300</a>
+<a name='L301'></a><a href='#L301'>301</a>
+<a name='L302'></a><a href='#L302'>302</a>
+<a name='L303'></a><a href='#L303'>303</a>
+<a name='L304'></a><a href='#L304'>304</a>
+<a name='L305'></a><a href='#L305'>305</a>
+<a name='L306'></a><a href='#L306'>306</a>
+<a name='L307'></a><a href='#L307'>307</a>
+<a name='L308'></a><a href='#L308'>308</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">4x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span></td><td class="text"><pre class="prettyprint lang-js">// import vitest, supertest &amp; app
+import { vi, beforeAll, beforeEach, describe, expect, expectTypeOf, test, it, afterEach } from 'vitest';
+import supertest from "supertest";
+import app from "../../app.js";
+import jwt from 'jsonwebtoken';
+&nbsp;
+// set route
+const ROUTE = '/ai/models';
+// prepare response of each test
+let response;
+&nbsp;
+// ############################
+//  OBJECTS
+// ############################
+const mockedVals = vi.hoisted(() =&gt; {
+  return {
+    foundUser: {
+      _id: '66a29da2942b3eb',
+      username: 'snoopy',
+      name: 'My User',
+      email: 'user@mail.local',
+      verified: true,
+      role: 4,
+      createdAt: '2024-07 - 25T18: 46: 58.982Z',
+      updatedAt: '2024-07 - 25T18: 46: 58.982Z',
+      __v: 0,
+      fullname: '',
+      id: '66a29da2942b3ebcaf047f07'
+    },
+    foundModels: {
+      models: [
+        {
+          "name": "llama3:latest",
+          "model": "llama3:latest",
+          "modified_at": "2024-07-25T20:25:26.869024101+02:00",
+          "size": 4661224676,
+          "digest": "365c0bd3c000a25d28ddbf732fe1c6add414de7275464c4e4d1c3b5fcb5d8ad1",
+          "details": {
+            "parent_model": "",
+            "format": "gguf",
+            "family": "llama",
+            "families": [
+              "llama"
+            ],
+            "parameter_size": "8.0B",
+            "quantization_level": "Q4_0"
+          }
+        },
+        {
+          "name": "orca2:13b",
+          "model": "orca2:13b",
+          "modified_at": "2024-06-15T16:53:37.368220025+02:00",
+          "size": 7365868139,
+          "digest": "a8dcfac3ac32d06f6241896d56928ac7b1d7a6e7f5dcc6b2aec69f2194a9f091",
+          "details": {
+            "parent_model": "",
+            "format": "gguf",
+            "family": "llama",
+            "families": null,
+            "parameter_size": "13B",
+            "quantization_level": "Q4_0"
+          }
+        },
+        {
+          "name": "llama2:13b",
+          "model": "llama2:13b",
+          "modified_at": "2024-06-15T16:39:07.956494263+02:00",
+          "size": 7366821294,
+          "digest": "d475bf4c50bc4d29f333023e38cd56535039eec11052204e5304c8773cc8416c",
+          "details": {
+            "parent_model": "",
+            "format": "gguf",
+            "family": "llama",
+            "families": [
+              "llama"
+            ],
+            "parameter_size": "13B",
+            "quantization_level": "Q4_0"
+          }
+        },
+        {
+          "name": "starling-lm:latest",
+          "model": "starling-lm:latest",
+          "modified_at": "2024-06-15T16:12:29.439449821+02:00",
+          "size": 4108940286,
+          "digest": "39153f619be614bf1b8b91cf31afe53ec107d70b6b7bb4118aa52bccc107ca7e",
+          "details": {
+            "parent_model": "",
+            "format": "gguf",
+            "family": "llama",
+            "families": [
+              "llama"
+            ],
+            "parameter_size": "7B",
+            "quantization_level": "Q4_0"
+          }
+        },
+        {
+          "name": "llama2:latest",
+          "model": "llama2:latest",
+          "modified_at": "2024-06-13T11:00:05.975159345+02:00",
+          "size": 3826793677,
+          "digest": "78e26419b4469263f75331927a00a0284ef6544c1975b826b15abdaef17bb962",
+          "details": {
+            "parent_model": "",
+            "format": "gguf",
+            "family": "llama",
+            "families": [
+              "llama"
+            ],
+            "parameter_size": "7B",
+            "quantization_level": "Q4_0"
+          }
+        },
+        {
+          "name": "mistral:latest",
+          "model": "mistral:latest",
+          "modified_at": "2024-06-13T11:00:05.455160458+02:00",
+          "size": 4113301090,
+          "digest": "2ae6f6dd7a3dd734790bbbf58b8909a606e0e7e97e94b7604e0aa7ae4490e6d8",
+          "details": {
+            "parent_model": "",
+            "format": "gguf",
+            "family": "llama",
+            "families": [
+              "llama"
+            ],
+            "parameter_size": "7.2B",
+            "quantization_level": "Q4_0"
+          }
+        },
+        {
+          "name": "mxbai-embed-large:latest",
+          "model": "mxbai-embed-large:latest",
+          "modified_at": "2024-05-17T20:38:00.241769083+02:00",
+          "size": 669615493,
+          "digest": "468836162de7f81e041c43663fedbbba921dcea9b9fefea135685a39b2d83dd8",
+          "details": {
+            "parent_model": "",
+            "format": "gguf",
+            "family": "bert",
+            "families": [
+              "bert"
+            ],
+            "parameter_size": "334M",
+            "quantization_level": "F16"
+          }
+        }
+      ]
+    },
+    validInput: {
+      model: 'llama3'
+    }
+  };
+});
+&nbsp;
+// ############################
+//  MOCKS
+// ############################
+import * as dbService from '../../utils/handleDB.js';
+// mock dbService
+vi.mock('../../utils/handleDB.js', async (importOriginal) =&gt; {
+  return {
+    ...await importOriginal(),
+    dbConnection: vi.fn(() =&gt; 'mocked'),
+    findOneRecord: vi.fn(() =&gt; mockedVals.foundUser),
+  };
+});
+&nbsp;
+// import AI Service
+import * as aiService from '../../utils/handleAI.js';
+// mock aiService
+vi.mock('../../utils/handleAI.js', async (importOriginal) =&gt; {
+  return {
+    ...await importOriginal(),
+    aiInstallModel: vi.fn().mockImplementation(() =&gt; { return { status: 'success' }; }),
+  };
+});
+&nbsp;
+// ############################
+//  TESTS
+// ############################
+&nbsp;
+describe('ai pull model', () =&gt; {
+  const _jwt = (id, role) =&gt; {
+    return jwt.sign({ id, role }, process.env.JWT_SECRET_KEY, { expiresIn: process.env.JWT_TTL });
+  };
+&nbsp;
+  describe('given the inputs are valid', async () =&gt; {
+    beforeAll(async () =&gt; {
+      response = await supertest(app)
+        .put(ROUTE)
+        .set('Authorization', `Bearer ${_jwt(mockedVals.foundUser.id, mockedVals.foundUser.role)}`)
+        .send(mockedVals.validInput);
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(200);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given no matching model found', () =&gt; {
+    beforeAll(async () =&gt; {
+      const input = { ...mockedVals.validInput, model: 'unknownModel' };
+&nbsp;
+      let error = new Error("pull model manifest: file does not exist");
+      error.name = 'ResponseError';
+      error.status = 500;
+      aiService.aiInstallModel.mockImplementation(() =&gt; { throw error; });
+&nbsp;
+      response = await supertest(app)
+        .put(ROUTE)
+        .set('Authorization', `Bearer ${_jwt(mockedVals.foundUser.id, mockedVals.foundUser.role)}`)
+        .send(input);
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(500);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given required fields are missing', () =&gt; {
+    beforeAll(async () =&gt; {
+      const { model, ...input } = mockedVals.validInput;
+&nbsp;
+      response = await supertest(app)
+        .put(ROUTE)
+        .set('Authorization', `Bearer ${_jwt(mockedVals.foundUser.id, mockedVals.foundUser.role)}`)
+        .send(input);
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(400);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given a user tries to access', () =&gt; {
+    beforeAll(async () =&gt; {
+&nbsp;
+      dbService.findOneRecord.mockImplementationOnce(async () =&gt; {
+<span class="cstat-no" title="statement not covered" >        return { ...mockedVals.foundUser, role: 0 };</span>
+      });
+&nbsp;
+      response = await supertest(app)
+        .put(ROUTE)
+        .set('Authorization', `Bearer ${_jwt(mockedVals.foundUser.id, 0)}`)
+        .send(mockedVals.validInput);
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(403);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given no valid jwt sended', () =&gt; {
+    beforeAll(async () =&gt; {
+      response = await supertest(app)
+        .put(ROUTE)
+        .set('Authorization', `Bearer invalid`)
+        .send(mockedVals.validInput);
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(403);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given no jwt sended', () =&gt; {
+    beforeAll(async () =&gt; {
+      response = await supertest(app)
+        .put(ROUTE)
+        .send(mockedVals.validInput);
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(401);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+});</pre></td></tr></table></pre>
+
+                <div class='push'></div><!-- for sticky footer -->
+            </div><!-- /wrapper -->
+            <div class='footer quiet pad2 space-top1 center small'>
+                Code coverage generated by
+                <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
+                at 2024-08-07T15:59:44.935Z
+            </div>
+        <script src="../../../prettify.js"></script>
+        <script>
+            window.onload = function () {
+                prettyPrint();
+            };
+        </script>
+        <script src="../../../sorter.js"></script>
+        <script src="../../../block-navigation.js"></script>
+    </body>
+</html>
+    
\ No newline at end of file
diff --git a/coverage/ragchat-api/__tests__/ai/status.test.js.html b/coverage/ragchat-api/__tests__/ai/status.test.js.html
new file mode 100644
index 0000000..5bf4b69
--- /dev/null
+++ b/coverage/ragchat-api/__tests__/ai/status.test.js.html
@@ -0,0 +1,346 @@
+
+<!doctype html>
+<html lang="en">
+
+<head>
+    <title>Code coverage report for ragchat-api/__tests__/ai/status.test.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+    
+<body>
+<div class='wrapper'>
+    <div class='pad1'>
+        <h1><a href="../../../index.html">All files</a> / <a href="index.html">ragchat-api/__tests__/ai</a> status.test.js</h1>
+        <div class='clearfix'>
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Statements</span>
+                <span class='fraction'>57/57</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Branches</span>
+                <span class='fraction'>10/10</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Functions</span>
+                <span class='fraction'>0/0</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Lines</span>
+                <span class='fraction'>57/57</span>
+            </div>
+        
+            
+        </div>
+        <p class="quiet">
+            Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
+        </p>
+        <template id="filterTemplate">
+            <div class="quiet">
+                Filter:
+                <input type="search" id="fileSearch">
+            </div>
+        </template>
+    </div>
+    <div class='status-line high'></div>
+    <pre><table class="coverage">
+<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
+<a name='L2'></a><a href='#L2'>2</a>
+<a name='L3'></a><a href='#L3'>3</a>
+<a name='L4'></a><a href='#L4'>4</a>
+<a name='L5'></a><a href='#L5'>5</a>
+<a name='L6'></a><a href='#L6'>6</a>
+<a name='L7'></a><a href='#L7'>7</a>
+<a name='L8'></a><a href='#L8'>8</a>
+<a name='L9'></a><a href='#L9'>9</a>
+<a name='L10'></a><a href='#L10'>10</a>
+<a name='L11'></a><a href='#L11'>11</a>
+<a name='L12'></a><a href='#L12'>12</a>
+<a name='L13'></a><a href='#L13'>13</a>
+<a name='L14'></a><a href='#L14'>14</a>
+<a name='L15'></a><a href='#L15'>15</a>
+<a name='L16'></a><a href='#L16'>16</a>
+<a name='L17'></a><a href='#L17'>17</a>
+<a name='L18'></a><a href='#L18'>18</a>
+<a name='L19'></a><a href='#L19'>19</a>
+<a name='L20'></a><a href='#L20'>20</a>
+<a name='L21'></a><a href='#L21'>21</a>
+<a name='L22'></a><a href='#L22'>22</a>
+<a name='L23'></a><a href='#L23'>23</a>
+<a name='L24'></a><a href='#L24'>24</a>
+<a name='L25'></a><a href='#L25'>25</a>
+<a name='L26'></a><a href='#L26'>26</a>
+<a name='L27'></a><a href='#L27'>27</a>
+<a name='L28'></a><a href='#L28'>28</a>
+<a name='L29'></a><a href='#L29'>29</a>
+<a name='L30'></a><a href='#L30'>30</a>
+<a name='L31'></a><a href='#L31'>31</a>
+<a name='L32'></a><a href='#L32'>32</a>
+<a name='L33'></a><a href='#L33'>33</a>
+<a name='L34'></a><a href='#L34'>34</a>
+<a name='L35'></a><a href='#L35'>35</a>
+<a name='L36'></a><a href='#L36'>36</a>
+<a name='L37'></a><a href='#L37'>37</a>
+<a name='L38'></a><a href='#L38'>38</a>
+<a name='L39'></a><a href='#L39'>39</a>
+<a name='L40'></a><a href='#L40'>40</a>
+<a name='L41'></a><a href='#L41'>41</a>
+<a name='L42'></a><a href='#L42'>42</a>
+<a name='L43'></a><a href='#L43'>43</a>
+<a name='L44'></a><a href='#L44'>44</a>
+<a name='L45'></a><a href='#L45'>45</a>
+<a name='L46'></a><a href='#L46'>46</a>
+<a name='L47'></a><a href='#L47'>47</a>
+<a name='L48'></a><a href='#L48'>48</a>
+<a name='L49'></a><a href='#L49'>49</a>
+<a name='L50'></a><a href='#L50'>50</a>
+<a name='L51'></a><a href='#L51'>51</a>
+<a name='L52'></a><a href='#L52'>52</a>
+<a name='L53'></a><a href='#L53'>53</a>
+<a name='L54'></a><a href='#L54'>54</a>
+<a name='L55'></a><a href='#L55'>55</a>
+<a name='L56'></a><a href='#L56'>56</a>
+<a name='L57'></a><a href='#L57'>57</a>
+<a name='L58'></a><a href='#L58'>58</a>
+<a name='L59'></a><a href='#L59'>59</a>
+<a name='L60'></a><a href='#L60'>60</a>
+<a name='L61'></a><a href='#L61'>61</a>
+<a name='L62'></a><a href='#L62'>62</a>
+<a name='L63'></a><a href='#L63'>63</a>
+<a name='L64'></a><a href='#L64'>64</a>
+<a name='L65'></a><a href='#L65'>65</a>
+<a name='L66'></a><a href='#L66'>66</a>
+<a name='L67'></a><a href='#L67'>67</a>
+<a name='L68'></a><a href='#L68'>68</a>
+<a name='L69'></a><a href='#L69'>69</a>
+<a name='L70'></a><a href='#L70'>70</a>
+<a name='L71'></a><a href='#L71'>71</a>
+<a name='L72'></a><a href='#L72'>72</a>
+<a name='L73'></a><a href='#L73'>73</a>
+<a name='L74'></a><a href='#L74'>74</a>
+<a name='L75'></a><a href='#L75'>75</a>
+<a name='L76'></a><a href='#L76'>76</a>
+<a name='L77'></a><a href='#L77'>77</a>
+<a name='L78'></a><a href='#L78'>78</a>
+<a name='L79'></a><a href='#L79'>79</a>
+<a name='L80'></a><a href='#L80'>80</a>
+<a name='L81'></a><a href='#L81'>81</a>
+<a name='L82'></a><a href='#L82'>82</a>
+<a name='L83'></a><a href='#L83'>83</a>
+<a name='L84'></a><a href='#L84'>84</a>
+<a name='L85'></a><a href='#L85'>85</a>
+<a name='L86'></a><a href='#L86'>86</a>
+<a name='L87'></a><a href='#L87'>87</a>
+<a name='L88'></a><a href='#L88'>88</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span></td><td class="text"><pre class="prettyprint lang-js">// import vitest, supertest &amp; app
+import { vi, beforeAll, beforeEach, describe, expect, expectTypeOf, test, it, afterEach } from 'vitest';
+import supertest from "supertest";
+import app from "../../app.js";
+&nbsp;
+// set route
+const ROUTE = '/ai/status';
+// prepare response of each test
+let response;
+&nbsp;
+// ############################
+//  OBJECTS
+// ############################
+const mockedVals = vi.hoisted(() =&gt; {
+  return {
+    foundUser: {
+      _id: '66a29da2942b3eb',
+      username: 'snoopy',
+      name: 'My User',
+      email: 'user@mail.local',
+      verified: true,
+      role: 0,
+      createdAt: '2024-07 - 25T18: 46: 58.982Z',
+      updatedAt: '2024-07 - 25T18: 46: 58.982Z',
+      __v: 0,
+      fullname: '',
+      id: '66a29da2942b3ebcaf047f07'
+    }
+  };
+});
+&nbsp;
+// ############################
+//  MOCKS
+// ############################
+// import Database Service
+import * as dbService from '../../utils/handleDB.js';
+// mock dbService
+vi.mock('../../utils/handleDB.js', async (importOriginal) =&gt; {
+  return {
+    ...await importOriginal(),
+    dbConnection: vi.fn(() =&gt; 'mocked'),
+    findOneRecord: vi.fn(() =&gt; mockedVals.foundUser),
+  };
+});
+// import AI Service
+import * as aiService from '../../utils/handleAI.js';
+// mock aiService
+vi.mock('../../utils/handleAI.js', async (importOriginal) =&gt; {
+  return {
+    ...await importOriginal(),
+    aiIsRunning: vi.fn(() =&gt; true)
+  };
+});
+&nbsp;
+// ############################
+//  TESTS
+// ############################
+&nbsp;
+describe('ai status', () =&gt; {
+  describe('given ai is running', () =&gt; {
+    beforeAll(async () =&gt; {
+      response = await supertest(app)
+        .get(ROUTE);
+    });
+&nbsp;
+    it('should return a proper status code', () =&gt; {
+      expect(response.status).toBe(200);
+    }); it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given ai is not running', () =&gt; {
+    beforeAll(async () =&gt; {
+      aiService.aiIsRunning.mockImplementation(() =&gt; false);
+      response = await supertest(app)
+        .get(ROUTE);
+    });
+    it('should return a proper status code', () =&gt; {
+      expect(response.status).toBe(404);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+});</pre></td></tr></table></pre>
+
+                <div class='push'></div><!-- for sticky footer -->
+            </div><!-- /wrapper -->
+            <div class='footer quiet pad2 space-top1 center small'>
+                Code coverage generated by
+                <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
+                at 2024-08-07T15:59:44.935Z
+            </div>
+        <script src="../../../prettify.js"></script>
+        <script>
+            window.onload = function () {
+                prettyPrint();
+            };
+        </script>
+        <script src="../../../sorter.js"></script>
+        <script src="../../../block-navigation.js"></script>
+    </body>
+</html>
+    
\ No newline at end of file
diff --git a/coverage/ragchat-api/__tests__/auth/confirmpasswordreset.test.js.html b/coverage/ragchat-api/__tests__/auth/confirmpasswordreset.test.js.html
new file mode 100644
index 0000000..9f39f5e
--- /dev/null
+++ b/coverage/ragchat-api/__tests__/auth/confirmpasswordreset.test.js.html
@@ -0,0 +1,628 @@
+
+<!doctype html>
+<html lang="en">
+
+<head>
+    <title>Code coverage report for ragchat-api/__tests__/auth/confirmpasswordreset.test.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+    
+<body>
+<div class='wrapper'>
+    <div class='pad1'>
+        <h1><a href="../../../index.html">All files</a> / <a href="index.html">ragchat-api/__tests__/auth</a> confirmpasswordreset.test.js</h1>
+        <div class='clearfix'>
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Statements</span>
+                <span class='fraction'>144/144</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Branches</span>
+                <span class='fraction'>25/25</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Functions</span>
+                <span class='fraction'>0/0</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Lines</span>
+                <span class='fraction'>144/144</span>
+            </div>
+        
+            
+        </div>
+        <p class="quiet">
+            Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
+        </p>
+        <template id="filterTemplate">
+            <div class="quiet">
+                Filter:
+                <input type="search" id="fileSearch">
+            </div>
+        </template>
+    </div>
+    <div class='status-line high'></div>
+    <pre><table class="coverage">
+<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
+<a name='L2'></a><a href='#L2'>2</a>
+<a name='L3'></a><a href='#L3'>3</a>
+<a name='L4'></a><a href='#L4'>4</a>
+<a name='L5'></a><a href='#L5'>5</a>
+<a name='L6'></a><a href='#L6'>6</a>
+<a name='L7'></a><a href='#L7'>7</a>
+<a name='L8'></a><a href='#L8'>8</a>
+<a name='L9'></a><a href='#L9'>9</a>
+<a name='L10'></a><a href='#L10'>10</a>
+<a name='L11'></a><a href='#L11'>11</a>
+<a name='L12'></a><a href='#L12'>12</a>
+<a name='L13'></a><a href='#L13'>13</a>
+<a name='L14'></a><a href='#L14'>14</a>
+<a name='L15'></a><a href='#L15'>15</a>
+<a name='L16'></a><a href='#L16'>16</a>
+<a name='L17'></a><a href='#L17'>17</a>
+<a name='L18'></a><a href='#L18'>18</a>
+<a name='L19'></a><a href='#L19'>19</a>
+<a name='L20'></a><a href='#L20'>20</a>
+<a name='L21'></a><a href='#L21'>21</a>
+<a name='L22'></a><a href='#L22'>22</a>
+<a name='L23'></a><a href='#L23'>23</a>
+<a name='L24'></a><a href='#L24'>24</a>
+<a name='L25'></a><a href='#L25'>25</a>
+<a name='L26'></a><a href='#L26'>26</a>
+<a name='L27'></a><a href='#L27'>27</a>
+<a name='L28'></a><a href='#L28'>28</a>
+<a name='L29'></a><a href='#L29'>29</a>
+<a name='L30'></a><a href='#L30'>30</a>
+<a name='L31'></a><a href='#L31'>31</a>
+<a name='L32'></a><a href='#L32'>32</a>
+<a name='L33'></a><a href='#L33'>33</a>
+<a name='L34'></a><a href='#L34'>34</a>
+<a name='L35'></a><a href='#L35'>35</a>
+<a name='L36'></a><a href='#L36'>36</a>
+<a name='L37'></a><a href='#L37'>37</a>
+<a name='L38'></a><a href='#L38'>38</a>
+<a name='L39'></a><a href='#L39'>39</a>
+<a name='L40'></a><a href='#L40'>40</a>
+<a name='L41'></a><a href='#L41'>41</a>
+<a name='L42'></a><a href='#L42'>42</a>
+<a name='L43'></a><a href='#L43'>43</a>
+<a name='L44'></a><a href='#L44'>44</a>
+<a name='L45'></a><a href='#L45'>45</a>
+<a name='L46'></a><a href='#L46'>46</a>
+<a name='L47'></a><a href='#L47'>47</a>
+<a name='L48'></a><a href='#L48'>48</a>
+<a name='L49'></a><a href='#L49'>49</a>
+<a name='L50'></a><a href='#L50'>50</a>
+<a name='L51'></a><a href='#L51'>51</a>
+<a name='L52'></a><a href='#L52'>52</a>
+<a name='L53'></a><a href='#L53'>53</a>
+<a name='L54'></a><a href='#L54'>54</a>
+<a name='L55'></a><a href='#L55'>55</a>
+<a name='L56'></a><a href='#L56'>56</a>
+<a name='L57'></a><a href='#L57'>57</a>
+<a name='L58'></a><a href='#L58'>58</a>
+<a name='L59'></a><a href='#L59'>59</a>
+<a name='L60'></a><a href='#L60'>60</a>
+<a name='L61'></a><a href='#L61'>61</a>
+<a name='L62'></a><a href='#L62'>62</a>
+<a name='L63'></a><a href='#L63'>63</a>
+<a name='L64'></a><a href='#L64'>64</a>
+<a name='L65'></a><a href='#L65'>65</a>
+<a name='L66'></a><a href='#L66'>66</a>
+<a name='L67'></a><a href='#L67'>67</a>
+<a name='L68'></a><a href='#L68'>68</a>
+<a name='L69'></a><a href='#L69'>69</a>
+<a name='L70'></a><a href='#L70'>70</a>
+<a name='L71'></a><a href='#L71'>71</a>
+<a name='L72'></a><a href='#L72'>72</a>
+<a name='L73'></a><a href='#L73'>73</a>
+<a name='L74'></a><a href='#L74'>74</a>
+<a name='L75'></a><a href='#L75'>75</a>
+<a name='L76'></a><a href='#L76'>76</a>
+<a name='L77'></a><a href='#L77'>77</a>
+<a name='L78'></a><a href='#L78'>78</a>
+<a name='L79'></a><a href='#L79'>79</a>
+<a name='L80'></a><a href='#L80'>80</a>
+<a name='L81'></a><a href='#L81'>81</a>
+<a name='L82'></a><a href='#L82'>82</a>
+<a name='L83'></a><a href='#L83'>83</a>
+<a name='L84'></a><a href='#L84'>84</a>
+<a name='L85'></a><a href='#L85'>85</a>
+<a name='L86'></a><a href='#L86'>86</a>
+<a name='L87'></a><a href='#L87'>87</a>
+<a name='L88'></a><a href='#L88'>88</a>
+<a name='L89'></a><a href='#L89'>89</a>
+<a name='L90'></a><a href='#L90'>90</a>
+<a name='L91'></a><a href='#L91'>91</a>
+<a name='L92'></a><a href='#L92'>92</a>
+<a name='L93'></a><a href='#L93'>93</a>
+<a name='L94'></a><a href='#L94'>94</a>
+<a name='L95'></a><a href='#L95'>95</a>
+<a name='L96'></a><a href='#L96'>96</a>
+<a name='L97'></a><a href='#L97'>97</a>
+<a name='L98'></a><a href='#L98'>98</a>
+<a name='L99'></a><a href='#L99'>99</a>
+<a name='L100'></a><a href='#L100'>100</a>
+<a name='L101'></a><a href='#L101'>101</a>
+<a name='L102'></a><a href='#L102'>102</a>
+<a name='L103'></a><a href='#L103'>103</a>
+<a name='L104'></a><a href='#L104'>104</a>
+<a name='L105'></a><a href='#L105'>105</a>
+<a name='L106'></a><a href='#L106'>106</a>
+<a name='L107'></a><a href='#L107'>107</a>
+<a name='L108'></a><a href='#L108'>108</a>
+<a name='L109'></a><a href='#L109'>109</a>
+<a name='L110'></a><a href='#L110'>110</a>
+<a name='L111'></a><a href='#L111'>111</a>
+<a name='L112'></a><a href='#L112'>112</a>
+<a name='L113'></a><a href='#L113'>113</a>
+<a name='L114'></a><a href='#L114'>114</a>
+<a name='L115'></a><a href='#L115'>115</a>
+<a name='L116'></a><a href='#L116'>116</a>
+<a name='L117'></a><a href='#L117'>117</a>
+<a name='L118'></a><a href='#L118'>118</a>
+<a name='L119'></a><a href='#L119'>119</a>
+<a name='L120'></a><a href='#L120'>120</a>
+<a name='L121'></a><a href='#L121'>121</a>
+<a name='L122'></a><a href='#L122'>122</a>
+<a name='L123'></a><a href='#L123'>123</a>
+<a name='L124'></a><a href='#L124'>124</a>
+<a name='L125'></a><a href='#L125'>125</a>
+<a name='L126'></a><a href='#L126'>126</a>
+<a name='L127'></a><a href='#L127'>127</a>
+<a name='L128'></a><a href='#L128'>128</a>
+<a name='L129'></a><a href='#L129'>129</a>
+<a name='L130'></a><a href='#L130'>130</a>
+<a name='L131'></a><a href='#L131'>131</a>
+<a name='L132'></a><a href='#L132'>132</a>
+<a name='L133'></a><a href='#L133'>133</a>
+<a name='L134'></a><a href='#L134'>134</a>
+<a name='L135'></a><a href='#L135'>135</a>
+<a name='L136'></a><a href='#L136'>136</a>
+<a name='L137'></a><a href='#L137'>137</a>
+<a name='L138'></a><a href='#L138'>138</a>
+<a name='L139'></a><a href='#L139'>139</a>
+<a name='L140'></a><a href='#L140'>140</a>
+<a name='L141'></a><a href='#L141'>141</a>
+<a name='L142'></a><a href='#L142'>142</a>
+<a name='L143'></a><a href='#L143'>143</a>
+<a name='L144'></a><a href='#L144'>144</a>
+<a name='L145'></a><a href='#L145'>145</a>
+<a name='L146'></a><a href='#L146'>146</a>
+<a name='L147'></a><a href='#L147'>147</a>
+<a name='L148'></a><a href='#L148'>148</a>
+<a name='L149'></a><a href='#L149'>149</a>
+<a name='L150'></a><a href='#L150'>150</a>
+<a name='L151'></a><a href='#L151'>151</a>
+<a name='L152'></a><a href='#L152'>152</a>
+<a name='L153'></a><a href='#L153'>153</a>
+<a name='L154'></a><a href='#L154'>154</a>
+<a name='L155'></a><a href='#L155'>155</a>
+<a name='L156'></a><a href='#L156'>156</a>
+<a name='L157'></a><a href='#L157'>157</a>
+<a name='L158'></a><a href='#L158'>158</a>
+<a name='L159'></a><a href='#L159'>159</a>
+<a name='L160'></a><a href='#L160'>160</a>
+<a name='L161'></a><a href='#L161'>161</a>
+<a name='L162'></a><a href='#L162'>162</a>
+<a name='L163'></a><a href='#L163'>163</a>
+<a name='L164'></a><a href='#L164'>164</a>
+<a name='L165'></a><a href='#L165'>165</a>
+<a name='L166'></a><a href='#L166'>166</a>
+<a name='L167'></a><a href='#L167'>167</a>
+<a name='L168'></a><a href='#L168'>168</a>
+<a name='L169'></a><a href='#L169'>169</a>
+<a name='L170'></a><a href='#L170'>170</a>
+<a name='L171'></a><a href='#L171'>171</a>
+<a name='L172'></a><a href='#L172'>172</a>
+<a name='L173'></a><a href='#L173'>173</a>
+<a name='L174'></a><a href='#L174'>174</a>
+<a name='L175'></a><a href='#L175'>175</a>
+<a name='L176'></a><a href='#L176'>176</a>
+<a name='L177'></a><a href='#L177'>177</a>
+<a name='L178'></a><a href='#L178'>178</a>
+<a name='L179'></a><a href='#L179'>179</a>
+<a name='L180'></a><a href='#L180'>180</a>
+<a name='L181'></a><a href='#L181'>181</a>
+<a name='L182'></a><a href='#L182'>182</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span></td><td class="text"><pre class="prettyprint lang-js">// import vitest, supertest &amp; app
+import { vi, beforeAll, beforeEach, describe, expect, expectTypeOf, test, it, afterEach } from 'vitest';
+import supertest from "supertest";
+import app from "../../app.js";
+import jwt from 'jsonwebtoken';
+&nbsp;
+// set route
+const ROUTE = '/auth/password-reset';
+// prepare response of each test
+let response;
+&nbsp;
+// ############################
+//  OBJECTS
+// ############################
+const mockedVals = vi.hoisted(() =&gt; {
+  return {
+    foundUser: {
+      _id: '66a29da2942b3eb',
+      username: 'snoopy',
+      name: 'My User',
+      email: 'user@mail.local',
+      verified: true,
+      role: 0,
+      createdAt: '2024-07 - 25T18: 46: 58.982Z',
+      updatedAt: '2024-07 - 25T18: 46: 58.982Z',
+      __v: 0,
+      password: 'StrongPass1!',
+      resetPasswordToken: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY2MOCKED',
+      id: '66a29da2942b3ebcaf047f07'
+    },
+    validInput: {
+      token: 'invalidToken',
+      password: 'SuperPW123!',
+      confirmPassword: 'SuperPW123!'
+    }
+  };
+});
+&nbsp;
+// ############################
+//  MOCKS
+// ############################
+// import Database Service
+import * as dbService from '../../utils/handleDB.js';
+// mock dbService
+vi.mock('../../utils/handleDB.js', async (importOriginal) =&gt; {
+  return {
+    ...await importOriginal(),
+    dbConnection: vi.fn(() =&gt; 'mocked'),
+    findOneRecord: vi.fn(() =&gt; mockedVals.foundUser),
+    updateOneRecord: vi.fn(() =&gt; mockedVals.foundUser)
+  };
+});
+&nbsp;
+// import Token Service
+import * as tokenService from '../../utils/handleTokens.js';
+// mock dbService
+vi.mock('../../utils/handleTokens.js', async (importOriginal) =&gt; {
+  return {
+    ...await importOriginal(),
+    verifyVerificationToken: vi.fn((req, res, next) =&gt; next()),
+  };
+});
+&nbsp;
+// ############################
+//  TESTS
+// ############################
+describe('user confirm password reset', () =&gt; {
+&nbsp;
+  describe('given the inputs are correct', async () =&gt; {
+    const token = jwt.sign({ id: mockedVals.foundUser.id, email: mockedVals.foundUser.email }, process.env.PASSWORD_TOKEN_KEY + mockedVals.foundUser.password, { expiresIn: process.env.PASSWORD_TOKEN_TTL });
+&nbsp;
+    // set response by running route
+    beforeAll(async () =&gt; {
+&nbsp;
+      const input = { ...mockedVals.validInput, token };
+&nbsp;
+      response = await supertest(app)
+        .patch(ROUTE)
+        .send(input);
+    });
+&nbsp;
+    it('should return a proper status code', () =&gt; {
+      expect(response.status).toBe(200);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+&nbsp;
+  // ############################
+  describe('given refresh token is malformed', () =&gt; {
+    const input = { ...mockedVals.validInput, token: 'malformed-Token' };
+&nbsp;
+    beforeAll(async () =&gt; {
+      response = await supertest(app)
+        .patch(ROUTE)
+        .send(input);
+    });
+    it('should return a proper status code', () =&gt; {
+      expect(response.status).toBe(498);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given token is invalid', () =&gt; {
+    beforeAll(async () =&gt; {
+&nbsp;
+      const input = { ...mockedVals.validInput, token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY2YTNkYTViYTEwNjUzMmNhZTEyYTYwOSIsImlhdCI6MTcyMjA5ODM3OX0.7Pq8F2zSDwuEzlCQX3vMZAw9D43N6dSViCyVPZ_s_Zs' };
+&nbsp;
+      response = await supertest(app)
+        .patch(ROUTE)
+        .send(input);
+    });
+    it('should return a proper status code', () =&gt; {
+      expect(response.status).toBe(498);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given required fields are missing', () =&gt; {
+    beforeAll(async () =&gt; {
+      const { confirmPassword, ...input } = mockedVals.validInput;
+&nbsp;
+      response = await supertest(app)
+        .patch(ROUTE)
+        .send(input);
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(400);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given the password and confirmPassword do not match', () =&gt; {
+    beforeAll(async () =&gt; {
+      const input = { ...mockedVals.validInput, confirmPassword: 'StrongPass2!' };
+&nbsp;
+      response = await supertest(app)
+        .patch(ROUTE)
+        .send(input);
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(400);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('the request body is empty', () =&gt; {
+    beforeAll(async () =&gt; {
+      response = await supertest(app)
+        .patch(ROUTE)
+        .send();
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(400);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+});</pre></td></tr></table></pre>
+
+                <div class='push'></div><!-- for sticky footer -->
+            </div><!-- /wrapper -->
+            <div class='footer quiet pad2 space-top1 center small'>
+                Code coverage generated by
+                <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
+                at 2024-08-07T15:59:44.935Z
+            </div>
+        <script src="../../../prettify.js"></script>
+        <script>
+            window.onload = function () {
+                prettyPrint();
+            };
+        </script>
+        <script src="../../../sorter.js"></script>
+        <script src="../../../block-navigation.js"></script>
+    </body>
+</html>
+    
\ No newline at end of file
diff --git a/coverage/ragchat-api/__tests__/auth/confirmverification.test.js.html b/coverage/ragchat-api/__tests__/auth/confirmverification.test.js.html
new file mode 100644
index 0000000..f1e9a3e
--- /dev/null
+++ b/coverage/ragchat-api/__tests__/auth/confirmverification.test.js.html
@@ -0,0 +1,481 @@
+
+<!doctype html>
+<html lang="en">
+
+<head>
+    <title>Code coverage report for ragchat-api/__tests__/auth/confirmverification.test.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+    
+<body>
+<div class='wrapper'>
+    <div class='pad1'>
+        <h1><a href="../../../index.html">All files</a> / <a href="index.html">ragchat-api/__tests__/auth</a> confirmverification.test.js</h1>
+        <div class='clearfix'>
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Statements</span>
+                <span class='fraction'>88/88</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Branches</span>
+                <span class='fraction'>14/14</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Functions</span>
+                <span class='fraction'>0/0</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Lines</span>
+                <span class='fraction'>88/88</span>
+            </div>
+        
+            
+        </div>
+        <p class="quiet">
+            Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
+        </p>
+        <template id="filterTemplate">
+            <div class="quiet">
+                Filter:
+                <input type="search" id="fileSearch">
+            </div>
+        </template>
+    </div>
+    <div class='status-line high'></div>
+    <pre><table class="coverage">
+<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
+<a name='L2'></a><a href='#L2'>2</a>
+<a name='L3'></a><a href='#L3'>3</a>
+<a name='L4'></a><a href='#L4'>4</a>
+<a name='L5'></a><a href='#L5'>5</a>
+<a name='L6'></a><a href='#L6'>6</a>
+<a name='L7'></a><a href='#L7'>7</a>
+<a name='L8'></a><a href='#L8'>8</a>
+<a name='L9'></a><a href='#L9'>9</a>
+<a name='L10'></a><a href='#L10'>10</a>
+<a name='L11'></a><a href='#L11'>11</a>
+<a name='L12'></a><a href='#L12'>12</a>
+<a name='L13'></a><a href='#L13'>13</a>
+<a name='L14'></a><a href='#L14'>14</a>
+<a name='L15'></a><a href='#L15'>15</a>
+<a name='L16'></a><a href='#L16'>16</a>
+<a name='L17'></a><a href='#L17'>17</a>
+<a name='L18'></a><a href='#L18'>18</a>
+<a name='L19'></a><a href='#L19'>19</a>
+<a name='L20'></a><a href='#L20'>20</a>
+<a name='L21'></a><a href='#L21'>21</a>
+<a name='L22'></a><a href='#L22'>22</a>
+<a name='L23'></a><a href='#L23'>23</a>
+<a name='L24'></a><a href='#L24'>24</a>
+<a name='L25'></a><a href='#L25'>25</a>
+<a name='L26'></a><a href='#L26'>26</a>
+<a name='L27'></a><a href='#L27'>27</a>
+<a name='L28'></a><a href='#L28'>28</a>
+<a name='L29'></a><a href='#L29'>29</a>
+<a name='L30'></a><a href='#L30'>30</a>
+<a name='L31'></a><a href='#L31'>31</a>
+<a name='L32'></a><a href='#L32'>32</a>
+<a name='L33'></a><a href='#L33'>33</a>
+<a name='L34'></a><a href='#L34'>34</a>
+<a name='L35'></a><a href='#L35'>35</a>
+<a name='L36'></a><a href='#L36'>36</a>
+<a name='L37'></a><a href='#L37'>37</a>
+<a name='L38'></a><a href='#L38'>38</a>
+<a name='L39'></a><a href='#L39'>39</a>
+<a name='L40'></a><a href='#L40'>40</a>
+<a name='L41'></a><a href='#L41'>41</a>
+<a name='L42'></a><a href='#L42'>42</a>
+<a name='L43'></a><a href='#L43'>43</a>
+<a name='L44'></a><a href='#L44'>44</a>
+<a name='L45'></a><a href='#L45'>45</a>
+<a name='L46'></a><a href='#L46'>46</a>
+<a name='L47'></a><a href='#L47'>47</a>
+<a name='L48'></a><a href='#L48'>48</a>
+<a name='L49'></a><a href='#L49'>49</a>
+<a name='L50'></a><a href='#L50'>50</a>
+<a name='L51'></a><a href='#L51'>51</a>
+<a name='L52'></a><a href='#L52'>52</a>
+<a name='L53'></a><a href='#L53'>53</a>
+<a name='L54'></a><a href='#L54'>54</a>
+<a name='L55'></a><a href='#L55'>55</a>
+<a name='L56'></a><a href='#L56'>56</a>
+<a name='L57'></a><a href='#L57'>57</a>
+<a name='L58'></a><a href='#L58'>58</a>
+<a name='L59'></a><a href='#L59'>59</a>
+<a name='L60'></a><a href='#L60'>60</a>
+<a name='L61'></a><a href='#L61'>61</a>
+<a name='L62'></a><a href='#L62'>62</a>
+<a name='L63'></a><a href='#L63'>63</a>
+<a name='L64'></a><a href='#L64'>64</a>
+<a name='L65'></a><a href='#L65'>65</a>
+<a name='L66'></a><a href='#L66'>66</a>
+<a name='L67'></a><a href='#L67'>67</a>
+<a name='L68'></a><a href='#L68'>68</a>
+<a name='L69'></a><a href='#L69'>69</a>
+<a name='L70'></a><a href='#L70'>70</a>
+<a name='L71'></a><a href='#L71'>71</a>
+<a name='L72'></a><a href='#L72'>72</a>
+<a name='L73'></a><a href='#L73'>73</a>
+<a name='L74'></a><a href='#L74'>74</a>
+<a name='L75'></a><a href='#L75'>75</a>
+<a name='L76'></a><a href='#L76'>76</a>
+<a name='L77'></a><a href='#L77'>77</a>
+<a name='L78'></a><a href='#L78'>78</a>
+<a name='L79'></a><a href='#L79'>79</a>
+<a name='L80'></a><a href='#L80'>80</a>
+<a name='L81'></a><a href='#L81'>81</a>
+<a name='L82'></a><a href='#L82'>82</a>
+<a name='L83'></a><a href='#L83'>83</a>
+<a name='L84'></a><a href='#L84'>84</a>
+<a name='L85'></a><a href='#L85'>85</a>
+<a name='L86'></a><a href='#L86'>86</a>
+<a name='L87'></a><a href='#L87'>87</a>
+<a name='L88'></a><a href='#L88'>88</a>
+<a name='L89'></a><a href='#L89'>89</a>
+<a name='L90'></a><a href='#L90'>90</a>
+<a name='L91'></a><a href='#L91'>91</a>
+<a name='L92'></a><a href='#L92'>92</a>
+<a name='L93'></a><a href='#L93'>93</a>
+<a name='L94'></a><a href='#L94'>94</a>
+<a name='L95'></a><a href='#L95'>95</a>
+<a name='L96'></a><a href='#L96'>96</a>
+<a name='L97'></a><a href='#L97'>97</a>
+<a name='L98'></a><a href='#L98'>98</a>
+<a name='L99'></a><a href='#L99'>99</a>
+<a name='L100'></a><a href='#L100'>100</a>
+<a name='L101'></a><a href='#L101'>101</a>
+<a name='L102'></a><a href='#L102'>102</a>
+<a name='L103'></a><a href='#L103'>103</a>
+<a name='L104'></a><a href='#L104'>104</a>
+<a name='L105'></a><a href='#L105'>105</a>
+<a name='L106'></a><a href='#L106'>106</a>
+<a name='L107'></a><a href='#L107'>107</a>
+<a name='L108'></a><a href='#L108'>108</a>
+<a name='L109'></a><a href='#L109'>109</a>
+<a name='L110'></a><a href='#L110'>110</a>
+<a name='L111'></a><a href='#L111'>111</a>
+<a name='L112'></a><a href='#L112'>112</a>
+<a name='L113'></a><a href='#L113'>113</a>
+<a name='L114'></a><a href='#L114'>114</a>
+<a name='L115'></a><a href='#L115'>115</a>
+<a name='L116'></a><a href='#L116'>116</a>
+<a name='L117'></a><a href='#L117'>117</a>
+<a name='L118'></a><a href='#L118'>118</a>
+<a name='L119'></a><a href='#L119'>119</a>
+<a name='L120'></a><a href='#L120'>120</a>
+<a name='L121'></a><a href='#L121'>121</a>
+<a name='L122'></a><a href='#L122'>122</a>
+<a name='L123'></a><a href='#L123'>123</a>
+<a name='L124'></a><a href='#L124'>124</a>
+<a name='L125'></a><a href='#L125'>125</a>
+<a name='L126'></a><a href='#L126'>126</a>
+<a name='L127'></a><a href='#L127'>127</a>
+<a name='L128'></a><a href='#L128'>128</a>
+<a name='L129'></a><a href='#L129'>129</a>
+<a name='L130'></a><a href='#L130'>130</a>
+<a name='L131'></a><a href='#L131'>131</a>
+<a name='L132'></a><a href='#L132'>132</a>
+<a name='L133'></a><a href='#L133'>133</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span></td><td class="text"><pre class="prettyprint lang-js">&nbsp;
+// import vitest, supertest &amp; app
+import { vi, beforeAll, beforeEach, describe, expect, expectTypeOf, test, it, afterEach } from 'vitest';
+import supertest from "supertest";
+import app from "../../app.js";
+&nbsp;
+// set route
+const ROUTE = '/auth/verification';
+// prepare response of each test
+let response;
+&nbsp;
+// ############################
+//  OBJECTS
+// ############################
+const mockedVals = vi.hoisted(() =&gt; {
+  return {
+    foundUser: {
+      _id: '66a29da2942b3eb',
+      username: 'snoopy',
+      name: 'My User',
+      email: 'user@mail.local',
+      verified: true,
+      role: 0,
+      createdAt: '2024-07 - 25T18: 46: 58.982Z',
+      updatedAt: '2024-07 - 25T18: 46: 58.982Z',
+      __v: 0,
+      id: '66a29da2942b3ebcaf047f07'
+    },
+    validInput: {
+      token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbGIBBERISHTl9.lxQ5ZqO8qWJt15bbnSa4wrPQ02_7fvY4CgN1ZRM'
+    },
+    jwtPayload: {
+      "id": "66a29da2942b3ebcaf047f07",
+      "email": "user@mail.local",
+      "iat": 1722018249,
+      "exp": 1722021849
+    },
+    jwtError: {
+      "name": "TokenExpiredError",
+      "message": "jwt expired",
+      "expiredAt": "2024-07-26T18:18:19.000Z"
+    }
+  };
+});
+&nbsp;
+// ############################
+//  MOCKS
+// ############################
+// import Database Service
+import * as dbService from '../../utils/handleDB.js';
+// mock dbService
+vi.mock('../../utils/handleDB.js', async (importOriginal) =&gt; {
+  return {
+    ...await importOriginal(),
+    dbConnection: vi.fn(() =&gt; 'mocked'),
+    findOneRecord: vi.fn(() =&gt; mockedVals.foundUser),
+    findOneAndUpdate: vi.fn(() =&gt; mockedVals.foundUser)
+  };
+});
+// import Token Service
+import * as tokenService from '../../utils/handleTokens.js';
+// mock dbService
+vi.mock('../../utils/handleTokens.js', async (importOriginal) =&gt; {
+  return {
+    ...await importOriginal(),
+    verifyVerificationToken: vi.fn((req, res, next) =&gt; next()),
+  };
+});
+&nbsp;
+&nbsp;
+// ############################
+//  TESTS
+// ############################
+describe('user verify registration token', () =&gt; {
+&nbsp;
+&nbsp;
+  describe('given the inputs are valid', async () =&gt; {
+    // set response by running route
+    beforeAll(async () =&gt; {
+      response = await supertest(app)
+        .patch(ROUTE)
+        .send(mockedVals.validInput);
+    });
+    it('should return a proper status code', () =&gt; {
+      expect(response.status).toBe(200);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given the token is invalid', async () =&gt; {
+    // set response by running route
+    beforeAll(async () =&gt; {
+      tokenService.verifyVerificationToken.mockImplementation((req, res, next) =&gt; {
+        return res.status(498).json({ message: 'Token is no longer valid.' });
+      });
+&nbsp;
+      const input = { ...mockedVals.validInput, token: 'invalid-token' };
+&nbsp;
+      response = await supertest(app)
+        .patch(ROUTE)
+        .send(input);
+    });
+&nbsp;
+    it('should return a proper status code', () =&gt; {
+      expect(response.status).toBe(498);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given the request body is empty', async () =&gt; {
+    // set response by running route
+    beforeAll(async () =&gt; {
+      response = await supertest(app)
+        .patch(ROUTE)
+        .send();
+    });
+    it('should return a proper status code', () =&gt; {
+      expect(response.status).toBe(400);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+});</pre></td></tr></table></pre>
+
+                <div class='push'></div><!-- for sticky footer -->
+            </div><!-- /wrapper -->
+            <div class='footer quiet pad2 space-top1 center small'>
+                Code coverage generated by
+                <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
+                at 2024-08-07T15:59:44.935Z
+            </div>
+        <script src="../../../prettify.js"></script>
+        <script>
+            window.onload = function () {
+                prettyPrint();
+            };
+        </script>
+        <script src="../../../sorter.js"></script>
+        <script src="../../../block-navigation.js"></script>
+    </body>
+</html>
+    
\ No newline at end of file
diff --git a/coverage/ragchat-api/__tests__/auth/index.html b/coverage/ragchat-api/__tests__/auth/index.html
new file mode 100644
index 0000000..a20d832
--- /dev/null
+++ b/coverage/ragchat-api/__tests__/auth/index.html
@@ -0,0 +1,206 @@
+
+<!doctype html>
+<html lang="en">
+
+<head>
+    <title>Code coverage report for ragchat-api/__tests__/auth</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+    
+<body>
+<div class='wrapper'>
+    <div class='pad1'>
+        <h1><a href="../../../index.html">All files</a> ragchat-api/__tests__/auth</h1>
+        <div class='clearfix'>
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Statements</span>
+                <span class='fraction'>728/728</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Branches</span>
+                <span class='fraction'>131/131</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Functions</span>
+                <span class='fraction'>1/1</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Lines</span>
+                <span class='fraction'>728/728</span>
+            </div>
+        
+            
+        </div>
+        <p class="quiet">
+            Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
+        </p>
+        <template id="filterTemplate">
+            <div class="quiet">
+                Filter:
+                <input type="search" id="fileSearch">
+            </div>
+        </template>
+    </div>
+    <div class='status-line high'></div>
+    <div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file high" data-value="confirmpasswordreset.test.js"><a href="confirmpasswordreset.test.js.html">confirmpasswordreset.test.js</a></td>
+	<td data-value="100" class="pic high">
+	<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
+	</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="144" class="abs high">144/144</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="25" class="abs high">25/25</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="144" class="abs high">144/144</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="confirmverification.test.js"><a href="confirmverification.test.js.html">confirmverification.test.js</a></td>
+	<td data-value="100" class="pic high">
+	<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
+	</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="88" class="abs high">88/88</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="14" class="abs high">14/14</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="88" class="abs high">88/88</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="login.test.js"><a href="login.test.js.html">login.test.js</a></td>
+	<td data-value="100" class="pic high">
+	<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
+	</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="138" class="abs high">138/138</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="26" class="abs high">26/26</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="1" class="abs high">1/1</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="138" class="abs high">138/138</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="logout.test.js"><a href="logout.test.js.html">logout.test.js</a></td>
+	<td data-value="100" class="pic high">
+	<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
+	</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="70" class="abs high">70/70</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="13" class="abs high">13/13</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="70" class="abs high">70/70</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="refreshjwt.test.js"><a href="refreshjwt.test.js.html">refreshjwt.test.js</a></td>
+	<td data-value="100" class="pic high">
+	<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
+	</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="95" class="abs high">95/95</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="17" class="abs high">17/17</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="95" class="abs high">95/95</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="requestpasswordreset.test.js"><a href="requestpasswordreset.test.js.html">requestpasswordreset.test.js</a></td>
+	<td data-value="100" class="pic high">
+	<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
+	</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="96" class="abs high">96/96</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="18" class="abs high">18/18</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="96" class="abs high">96/96</td>
+	</tr>
+
+<tr>
+	<td class="file high" data-value="requestverification.test.js"><a href="requestverification.test.js.html">requestverification.test.js</a></td>
+	<td data-value="100" class="pic high">
+	<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
+	</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="97" class="abs high">97/97</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="18" class="abs high">18/18</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="97" class="abs high">97/97</td>
+	</tr>
+
+</tbody>
+</table>
+</div>
+                <div class='push'></div><!-- for sticky footer -->
+            </div><!-- /wrapper -->
+            <div class='footer quiet pad2 space-top1 center small'>
+                Code coverage generated by
+                <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
+                at 2024-08-07T15:59:44.935Z
+            </div>
+        <script src="../../../prettify.js"></script>
+        <script>
+            window.onload = function () {
+                prettyPrint();
+            };
+        </script>
+        <script src="../../../sorter.js"></script>
+        <script src="../../../block-navigation.js"></script>
+    </body>
+</html>
+    
\ No newline at end of file
diff --git a/coverage/ragchat-api/__tests__/auth/login.test.js.html b/coverage/ragchat-api/__tests__/auth/login.test.js.html
new file mode 100644
index 0000000..2f7dcb8
--- /dev/null
+++ b/coverage/ragchat-api/__tests__/auth/login.test.js.html
@@ -0,0 +1,589 @@
+
+<!doctype html>
+<html lang="en">
+
+<head>
+    <title>Code coverage report for ragchat-api/__tests__/auth/login.test.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+    
+<body>
+<div class='wrapper'>
+    <div class='pad1'>
+        <h1><a href="../../../index.html">All files</a> / <a href="index.html">ragchat-api/__tests__/auth</a> login.test.js</h1>
+        <div class='clearfix'>
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Statements</span>
+                <span class='fraction'>138/138</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Branches</span>
+                <span class='fraction'>26/26</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Functions</span>
+                <span class='fraction'>1/1</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Lines</span>
+                <span class='fraction'>138/138</span>
+            </div>
+        
+            
+        </div>
+        <p class="quiet">
+            Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
+        </p>
+        <template id="filterTemplate">
+            <div class="quiet">
+                Filter:
+                <input type="search" id="fileSearch">
+            </div>
+        </template>
+    </div>
+    <div class='status-line high'></div>
+    <pre><table class="coverage">
+<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
+<a name='L2'></a><a href='#L2'>2</a>
+<a name='L3'></a><a href='#L3'>3</a>
+<a name='L4'></a><a href='#L4'>4</a>
+<a name='L5'></a><a href='#L5'>5</a>
+<a name='L6'></a><a href='#L6'>6</a>
+<a name='L7'></a><a href='#L7'>7</a>
+<a name='L8'></a><a href='#L8'>8</a>
+<a name='L9'></a><a href='#L9'>9</a>
+<a name='L10'></a><a href='#L10'>10</a>
+<a name='L11'></a><a href='#L11'>11</a>
+<a name='L12'></a><a href='#L12'>12</a>
+<a name='L13'></a><a href='#L13'>13</a>
+<a name='L14'></a><a href='#L14'>14</a>
+<a name='L15'></a><a href='#L15'>15</a>
+<a name='L16'></a><a href='#L16'>16</a>
+<a name='L17'></a><a href='#L17'>17</a>
+<a name='L18'></a><a href='#L18'>18</a>
+<a name='L19'></a><a href='#L19'>19</a>
+<a name='L20'></a><a href='#L20'>20</a>
+<a name='L21'></a><a href='#L21'>21</a>
+<a name='L22'></a><a href='#L22'>22</a>
+<a name='L23'></a><a href='#L23'>23</a>
+<a name='L24'></a><a href='#L24'>24</a>
+<a name='L25'></a><a href='#L25'>25</a>
+<a name='L26'></a><a href='#L26'>26</a>
+<a name='L27'></a><a href='#L27'>27</a>
+<a name='L28'></a><a href='#L28'>28</a>
+<a name='L29'></a><a href='#L29'>29</a>
+<a name='L30'></a><a href='#L30'>30</a>
+<a name='L31'></a><a href='#L31'>31</a>
+<a name='L32'></a><a href='#L32'>32</a>
+<a name='L33'></a><a href='#L33'>33</a>
+<a name='L34'></a><a href='#L34'>34</a>
+<a name='L35'></a><a href='#L35'>35</a>
+<a name='L36'></a><a href='#L36'>36</a>
+<a name='L37'></a><a href='#L37'>37</a>
+<a name='L38'></a><a href='#L38'>38</a>
+<a name='L39'></a><a href='#L39'>39</a>
+<a name='L40'></a><a href='#L40'>40</a>
+<a name='L41'></a><a href='#L41'>41</a>
+<a name='L42'></a><a href='#L42'>42</a>
+<a name='L43'></a><a href='#L43'>43</a>
+<a name='L44'></a><a href='#L44'>44</a>
+<a name='L45'></a><a href='#L45'>45</a>
+<a name='L46'></a><a href='#L46'>46</a>
+<a name='L47'></a><a href='#L47'>47</a>
+<a name='L48'></a><a href='#L48'>48</a>
+<a name='L49'></a><a href='#L49'>49</a>
+<a name='L50'></a><a href='#L50'>50</a>
+<a name='L51'></a><a href='#L51'>51</a>
+<a name='L52'></a><a href='#L52'>52</a>
+<a name='L53'></a><a href='#L53'>53</a>
+<a name='L54'></a><a href='#L54'>54</a>
+<a name='L55'></a><a href='#L55'>55</a>
+<a name='L56'></a><a href='#L56'>56</a>
+<a name='L57'></a><a href='#L57'>57</a>
+<a name='L58'></a><a href='#L58'>58</a>
+<a name='L59'></a><a href='#L59'>59</a>
+<a name='L60'></a><a href='#L60'>60</a>
+<a name='L61'></a><a href='#L61'>61</a>
+<a name='L62'></a><a href='#L62'>62</a>
+<a name='L63'></a><a href='#L63'>63</a>
+<a name='L64'></a><a href='#L64'>64</a>
+<a name='L65'></a><a href='#L65'>65</a>
+<a name='L66'></a><a href='#L66'>66</a>
+<a name='L67'></a><a href='#L67'>67</a>
+<a name='L68'></a><a href='#L68'>68</a>
+<a name='L69'></a><a href='#L69'>69</a>
+<a name='L70'></a><a href='#L70'>70</a>
+<a name='L71'></a><a href='#L71'>71</a>
+<a name='L72'></a><a href='#L72'>72</a>
+<a name='L73'></a><a href='#L73'>73</a>
+<a name='L74'></a><a href='#L74'>74</a>
+<a name='L75'></a><a href='#L75'>75</a>
+<a name='L76'></a><a href='#L76'>76</a>
+<a name='L77'></a><a href='#L77'>77</a>
+<a name='L78'></a><a href='#L78'>78</a>
+<a name='L79'></a><a href='#L79'>79</a>
+<a name='L80'></a><a href='#L80'>80</a>
+<a name='L81'></a><a href='#L81'>81</a>
+<a name='L82'></a><a href='#L82'>82</a>
+<a name='L83'></a><a href='#L83'>83</a>
+<a name='L84'></a><a href='#L84'>84</a>
+<a name='L85'></a><a href='#L85'>85</a>
+<a name='L86'></a><a href='#L86'>86</a>
+<a name='L87'></a><a href='#L87'>87</a>
+<a name='L88'></a><a href='#L88'>88</a>
+<a name='L89'></a><a href='#L89'>89</a>
+<a name='L90'></a><a href='#L90'>90</a>
+<a name='L91'></a><a href='#L91'>91</a>
+<a name='L92'></a><a href='#L92'>92</a>
+<a name='L93'></a><a href='#L93'>93</a>
+<a name='L94'></a><a href='#L94'>94</a>
+<a name='L95'></a><a href='#L95'>95</a>
+<a name='L96'></a><a href='#L96'>96</a>
+<a name='L97'></a><a href='#L97'>97</a>
+<a name='L98'></a><a href='#L98'>98</a>
+<a name='L99'></a><a href='#L99'>99</a>
+<a name='L100'></a><a href='#L100'>100</a>
+<a name='L101'></a><a href='#L101'>101</a>
+<a name='L102'></a><a href='#L102'>102</a>
+<a name='L103'></a><a href='#L103'>103</a>
+<a name='L104'></a><a href='#L104'>104</a>
+<a name='L105'></a><a href='#L105'>105</a>
+<a name='L106'></a><a href='#L106'>106</a>
+<a name='L107'></a><a href='#L107'>107</a>
+<a name='L108'></a><a href='#L108'>108</a>
+<a name='L109'></a><a href='#L109'>109</a>
+<a name='L110'></a><a href='#L110'>110</a>
+<a name='L111'></a><a href='#L111'>111</a>
+<a name='L112'></a><a href='#L112'>112</a>
+<a name='L113'></a><a href='#L113'>113</a>
+<a name='L114'></a><a href='#L114'>114</a>
+<a name='L115'></a><a href='#L115'>115</a>
+<a name='L116'></a><a href='#L116'>116</a>
+<a name='L117'></a><a href='#L117'>117</a>
+<a name='L118'></a><a href='#L118'>118</a>
+<a name='L119'></a><a href='#L119'>119</a>
+<a name='L120'></a><a href='#L120'>120</a>
+<a name='L121'></a><a href='#L121'>121</a>
+<a name='L122'></a><a href='#L122'>122</a>
+<a name='L123'></a><a href='#L123'>123</a>
+<a name='L124'></a><a href='#L124'>124</a>
+<a name='L125'></a><a href='#L125'>125</a>
+<a name='L126'></a><a href='#L126'>126</a>
+<a name='L127'></a><a href='#L127'>127</a>
+<a name='L128'></a><a href='#L128'>128</a>
+<a name='L129'></a><a href='#L129'>129</a>
+<a name='L130'></a><a href='#L130'>130</a>
+<a name='L131'></a><a href='#L131'>131</a>
+<a name='L132'></a><a href='#L132'>132</a>
+<a name='L133'></a><a href='#L133'>133</a>
+<a name='L134'></a><a href='#L134'>134</a>
+<a name='L135'></a><a href='#L135'>135</a>
+<a name='L136'></a><a href='#L136'>136</a>
+<a name='L137'></a><a href='#L137'>137</a>
+<a name='L138'></a><a href='#L138'>138</a>
+<a name='L139'></a><a href='#L139'>139</a>
+<a name='L140'></a><a href='#L140'>140</a>
+<a name='L141'></a><a href='#L141'>141</a>
+<a name='L142'></a><a href='#L142'>142</a>
+<a name='L143'></a><a href='#L143'>143</a>
+<a name='L144'></a><a href='#L144'>144</a>
+<a name='L145'></a><a href='#L145'>145</a>
+<a name='L146'></a><a href='#L146'>146</a>
+<a name='L147'></a><a href='#L147'>147</a>
+<a name='L148'></a><a href='#L148'>148</a>
+<a name='L149'></a><a href='#L149'>149</a>
+<a name='L150'></a><a href='#L150'>150</a>
+<a name='L151'></a><a href='#L151'>151</a>
+<a name='L152'></a><a href='#L152'>152</a>
+<a name='L153'></a><a href='#L153'>153</a>
+<a name='L154'></a><a href='#L154'>154</a>
+<a name='L155'></a><a href='#L155'>155</a>
+<a name='L156'></a><a href='#L156'>156</a>
+<a name='L157'></a><a href='#L157'>157</a>
+<a name='L158'></a><a href='#L158'>158</a>
+<a name='L159'></a><a href='#L159'>159</a>
+<a name='L160'></a><a href='#L160'>160</a>
+<a name='L161'></a><a href='#L161'>161</a>
+<a name='L162'></a><a href='#L162'>162</a>
+<a name='L163'></a><a href='#L163'>163</a>
+<a name='L164'></a><a href='#L164'>164</a>
+<a name='L165'></a><a href='#L165'>165</a>
+<a name='L166'></a><a href='#L166'>166</a>
+<a name='L167'></a><a href='#L167'>167</a>
+<a name='L168'></a><a href='#L168'>168</a>
+<a name='L169'></a><a href='#L169'>169</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">3x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span></td><td class="text"><pre class="prettyprint lang-js">// import vitest, supertest &amp; app
+import { vi, beforeAll, beforeEach, describe, expect, expectTypeOf, test, it, afterEach } from 'vitest';
+import supertest from "supertest";
+import app from "../../app.js";
+import bcrypt from 'bcrypt';
+&nbsp;
+// set route
+const ROUTE = '/auth/login';
+// prepare response of each test
+let response;
+&nbsp;
+// ############################
+//  OBJECTS
+// ############################
+const mockedVals = vi.hoisted(() =&gt; {
+  return {
+    foundUser: {
+      _id: '66a29da2942b3eb',
+      username: 'snoopy',
+      name: 'My User',
+      email: 'user@mail.local',
+      verified: true,
+      role: 0,
+      createdAt: '2024-07 - 25T18: 46: 58.982Z',
+      updatedAt: '2024-07 - 25T18: 46: 58.982Z',
+      __v: 0,
+      password: 'StrongPass1!',
+      // password,
+      id: '66a29da2942b3ebcaf047f07'
+    },
+    validInput: {
+      email: 'user@mail.local',
+      password: 'StrongPass1!'
+    }
+  };
+});
+&nbsp;
+// ############################
+//  MOCKS
+// ############################
+// import Database Service
+import * as dbService from '../../utils/handleDB.js';
+// mock dbService
+vi.mock('../../utils/handleDB.js', async (importOriginal) =&gt; {
+  return {
+    ...await importOriginal(),
+    dbConnection: vi.fn(() =&gt; 'mocked'),
+    findOneRecord: vi.fn(() =&gt; mockedVals.foundUser),
+    findByIdAndUpdate: vi.fn(() =&gt; { return { ...mockedVals.foundUser, refreshToken: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY2MOCKED' }; })
+  };
+});
+&nbsp;
+// ############################
+//  TESTS
+// ############################
+describe('user login', async () =&gt; {
+  // prepare a hash function with current .env bcrypt settings
+  const _hashPw = async () =&gt; {
+    return await bcrypt.hash(mockedVals.foundUser.password, Number(process.env.BCRYPT_STRENGTH));
+  };
+&nbsp;
+  describe('given the inputs are valid', () =&gt; {
+    beforeAll(async () =&gt; {
+      //  hash password
+      dbService.findOneRecord.mockImplementationOnce(async () =&gt; {
+        return { ...mockedVals.foundUser, password: await _hashPw() };
+      });
+&nbsp;
+      // set response by running route
+      response = await supertest(app)
+        .post(ROUTE)
+        .send(mockedVals.validInput);
+    });
+&nbsp;
+    it('should return a proper status code', () =&gt; {
+      expect(response.status).toBe(200);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot({
+        accessToken: expect.any(String),
+      });
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given email and password are valid, but accout is unverified', () =&gt; {
+&nbsp;
+    beforeAll(async () =&gt; {
+      //  hash password &amp; unverify user
+      dbService.findOneRecord.mockImplementationOnce(async () =&gt; {
+        return { ...mockedVals.foundUser, verified: false, password: await _hashPw() };
+      });
+&nbsp;
+      // set response by running route
+      response = await supertest(app)
+        .post(ROUTE)
+        .send(mockedVals.validInput);
+    });
+&nbsp;
+    it('should return a proper status code', () =&gt; {
+      expect(response.status).toBe(401);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given the password is wrong', async () =&gt; {
+    // set response by running route
+    beforeAll(async () =&gt; {
+&nbsp;
+      //  hash password
+      dbService.findOneRecord.mockImplementationOnce(async () =&gt; {
+        return { ...mockedVals.foundUser, password: await _hashPw() };
+      });
+&nbsp;
+      const input = { ...mockedVals.validInput, password: 'invalid-password' };
+&nbsp;
+      response = await supertest(app)
+        .post(ROUTE)
+        .send(input);
+    });
+    it('should return a proper status code', () =&gt; {
+      expect(response.status).toBe(401);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given the email is unknown', async () =&gt; {
+    // set response by running route
+    beforeAll(async () =&gt; {
+      dbService.findOneRecord.mockImplementationOnce(() =&gt; null);
+&nbsp;
+      response = await supertest(app)
+        .post(ROUTE)
+        .send(mockedVals.validInput);
+    });
+    it('should return a proper status code', () =&gt; {
+      expect(response.status).toBe(401);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given the request body is empty', async () =&gt; {
+    // set response by running route
+    beforeAll(async () =&gt; {
+      response = await supertest(app)
+        .post(ROUTE)
+        .send();
+    });
+    it('should return a proper status code', () =&gt; {
+      expect(response.status).toBe(400);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+});</pre></td></tr></table></pre>
+
+                <div class='push'></div><!-- for sticky footer -->
+            </div><!-- /wrapper -->
+            <div class='footer quiet pad2 space-top1 center small'>
+                Code coverage generated by
+                <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
+                at 2024-08-07T15:59:44.935Z
+            </div>
+        <script src="../../../prettify.js"></script>
+        <script>
+            window.onload = function () {
+                prettyPrint();
+            };
+        </script>
+        <script src="../../../sorter.js"></script>
+        <script src="../../../block-navigation.js"></script>
+    </body>
+</html>
+    
\ No newline at end of file
diff --git a/coverage/ragchat-api/__tests__/auth/logout.test.js.html b/coverage/ragchat-api/__tests__/auth/logout.test.js.html
new file mode 100644
index 0000000..d02a064
--- /dev/null
+++ b/coverage/ragchat-api/__tests__/auth/logout.test.js.html
@@ -0,0 +1,367 @@
+
+<!doctype html>
+<html lang="en">
+
+<head>
+    <title>Code coverage report for ragchat-api/__tests__/auth/logout.test.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+    
+<body>
+<div class='wrapper'>
+    <div class='pad1'>
+        <h1><a href="../../../index.html">All files</a> / <a href="index.html">ragchat-api/__tests__/auth</a> logout.test.js</h1>
+        <div class='clearfix'>
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Statements</span>
+                <span class='fraction'>70/70</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Branches</span>
+                <span class='fraction'>13/13</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Functions</span>
+                <span class='fraction'>0/0</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Lines</span>
+                <span class='fraction'>70/70</span>
+            </div>
+        
+            
+        </div>
+        <p class="quiet">
+            Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
+        </p>
+        <template id="filterTemplate">
+            <div class="quiet">
+                Filter:
+                <input type="search" id="fileSearch">
+            </div>
+        </template>
+    </div>
+    <div class='status-line high'></div>
+    <pre><table class="coverage">
+<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
+<a name='L2'></a><a href='#L2'>2</a>
+<a name='L3'></a><a href='#L3'>3</a>
+<a name='L4'></a><a href='#L4'>4</a>
+<a name='L5'></a><a href='#L5'>5</a>
+<a name='L6'></a><a href='#L6'>6</a>
+<a name='L7'></a><a href='#L7'>7</a>
+<a name='L8'></a><a href='#L8'>8</a>
+<a name='L9'></a><a href='#L9'>9</a>
+<a name='L10'></a><a href='#L10'>10</a>
+<a name='L11'></a><a href='#L11'>11</a>
+<a name='L12'></a><a href='#L12'>12</a>
+<a name='L13'></a><a href='#L13'>13</a>
+<a name='L14'></a><a href='#L14'>14</a>
+<a name='L15'></a><a href='#L15'>15</a>
+<a name='L16'></a><a href='#L16'>16</a>
+<a name='L17'></a><a href='#L17'>17</a>
+<a name='L18'></a><a href='#L18'>18</a>
+<a name='L19'></a><a href='#L19'>19</a>
+<a name='L20'></a><a href='#L20'>20</a>
+<a name='L21'></a><a href='#L21'>21</a>
+<a name='L22'></a><a href='#L22'>22</a>
+<a name='L23'></a><a href='#L23'>23</a>
+<a name='L24'></a><a href='#L24'>24</a>
+<a name='L25'></a><a href='#L25'>25</a>
+<a name='L26'></a><a href='#L26'>26</a>
+<a name='L27'></a><a href='#L27'>27</a>
+<a name='L28'></a><a href='#L28'>28</a>
+<a name='L29'></a><a href='#L29'>29</a>
+<a name='L30'></a><a href='#L30'>30</a>
+<a name='L31'></a><a href='#L31'>31</a>
+<a name='L32'></a><a href='#L32'>32</a>
+<a name='L33'></a><a href='#L33'>33</a>
+<a name='L34'></a><a href='#L34'>34</a>
+<a name='L35'></a><a href='#L35'>35</a>
+<a name='L36'></a><a href='#L36'>36</a>
+<a name='L37'></a><a href='#L37'>37</a>
+<a name='L38'></a><a href='#L38'>38</a>
+<a name='L39'></a><a href='#L39'>39</a>
+<a name='L40'></a><a href='#L40'>40</a>
+<a name='L41'></a><a href='#L41'>41</a>
+<a name='L42'></a><a href='#L42'>42</a>
+<a name='L43'></a><a href='#L43'>43</a>
+<a name='L44'></a><a href='#L44'>44</a>
+<a name='L45'></a><a href='#L45'>45</a>
+<a name='L46'></a><a href='#L46'>46</a>
+<a name='L47'></a><a href='#L47'>47</a>
+<a name='L48'></a><a href='#L48'>48</a>
+<a name='L49'></a><a href='#L49'>49</a>
+<a name='L50'></a><a href='#L50'>50</a>
+<a name='L51'></a><a href='#L51'>51</a>
+<a name='L52'></a><a href='#L52'>52</a>
+<a name='L53'></a><a href='#L53'>53</a>
+<a name='L54'></a><a href='#L54'>54</a>
+<a name='L55'></a><a href='#L55'>55</a>
+<a name='L56'></a><a href='#L56'>56</a>
+<a name='L57'></a><a href='#L57'>57</a>
+<a name='L58'></a><a href='#L58'>58</a>
+<a name='L59'></a><a href='#L59'>59</a>
+<a name='L60'></a><a href='#L60'>60</a>
+<a name='L61'></a><a href='#L61'>61</a>
+<a name='L62'></a><a href='#L62'>62</a>
+<a name='L63'></a><a href='#L63'>63</a>
+<a name='L64'></a><a href='#L64'>64</a>
+<a name='L65'></a><a href='#L65'>65</a>
+<a name='L66'></a><a href='#L66'>66</a>
+<a name='L67'></a><a href='#L67'>67</a>
+<a name='L68'></a><a href='#L68'>68</a>
+<a name='L69'></a><a href='#L69'>69</a>
+<a name='L70'></a><a href='#L70'>70</a>
+<a name='L71'></a><a href='#L71'>71</a>
+<a name='L72'></a><a href='#L72'>72</a>
+<a name='L73'></a><a href='#L73'>73</a>
+<a name='L74'></a><a href='#L74'>74</a>
+<a name='L75'></a><a href='#L75'>75</a>
+<a name='L76'></a><a href='#L76'>76</a>
+<a name='L77'></a><a href='#L77'>77</a>
+<a name='L78'></a><a href='#L78'>78</a>
+<a name='L79'></a><a href='#L79'>79</a>
+<a name='L80'></a><a href='#L80'>80</a>
+<a name='L81'></a><a href='#L81'>81</a>
+<a name='L82'></a><a href='#L82'>82</a>
+<a name='L83'></a><a href='#L83'>83</a>
+<a name='L84'></a><a href='#L84'>84</a>
+<a name='L85'></a><a href='#L85'>85</a>
+<a name='L86'></a><a href='#L86'>86</a>
+<a name='L87'></a><a href='#L87'>87</a>
+<a name='L88'></a><a href='#L88'>88</a>
+<a name='L89'></a><a href='#L89'>89</a>
+<a name='L90'></a><a href='#L90'>90</a>
+<a name='L91'></a><a href='#L91'>91</a>
+<a name='L92'></a><a href='#L92'>92</a>
+<a name='L93'></a><a href='#L93'>93</a>
+<a name='L94'></a><a href='#L94'>94</a>
+<a name='L95'></a><a href='#L95'>95</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span></td><td class="text"><pre class="prettyprint lang-js">// import vitest, supertest &amp; app
+import { vi, beforeAll, beforeEach, describe, expect, expectTypeOf, test, it, afterEach } from 'vitest';
+import supertest from "supertest";
+import app from "../../app.js";
+// set route
+const ROUTE = '/auth';
+// prepare response of each test
+let response;
+&nbsp;
+// ############################
+//  OBJECTS
+// ############################
+const mockedVals = vi.hoisted(() =&gt; {
+  return {
+    foundUser: {
+      _id: '66a29da2942b3eb',
+      username: 'snoopy',
+      name: 'My User',
+      email: 'user@mail.local',
+      verified: true,
+      role: 0,
+      createdAt: '2024-07 - 25T18: 46: 58.982Z',
+      updatedAt: '2024-07 - 25T18: 46: 58.982Z',
+      __v: 0,
+      password: 'StrongPass1!',
+      // password,
+      id: '66a29da2942b3ebcaf047f07'
+    }
+  };
+});
+// ############################
+//  MOCKS
+// ############################
+// import Database Service
+import * as dbService from '../../utils/handleDB.js';
+// mock dbService
+vi.mock('../../utils/handleDB.js', async (importOriginal) =&gt; {
+  return {
+    ...await importOriginal(),
+    dbConnection: vi.fn(() =&gt; 'mocked'),
+    findOneRecord: vi.fn(() =&gt; mockedVals.foundUser),
+    findOneAndUpdate: vi.fn(() =&gt; mockedVals.foundUser),
+  };
+});
+&nbsp;
+// ############################
+//  TESTS
+// ############################
+describe('user logout', () =&gt; {
+  // ############################
+  describe('given refresh token is valid', () =&gt; {
+    beforeAll(async () =&gt; {
+      response = await supertest(app)
+        .get(ROUTE)
+        .set('Cookie', 'refreshToken=valid');
+    });
+    it('should return a proper status code', () =&gt; {
+      expect(response.status).toBe(400);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given refresh token is invalid', () =&gt; {
+    beforeAll(async () =&gt; {
+      response = await supertest(app)
+        .get(ROUTE)
+        .set('Cookie', 'refreshToken=invalid');
+    });
+    it('should return a proper status code', () =&gt; {
+      expect(response.status).toBe(400);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given no cookie was send', () =&gt; {
+    beforeAll(async () =&gt; {
+      response = await supertest(app)
+        .delete(ROUTE);
+    });
+    it('should return a proper status code', () =&gt; {
+      expect(response.status).toBe(200);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+});</pre></td></tr></table></pre>
+
+                <div class='push'></div><!-- for sticky footer -->
+            </div><!-- /wrapper -->
+            <div class='footer quiet pad2 space-top1 center small'>
+                Code coverage generated by
+                <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
+                at 2024-08-07T15:59:44.935Z
+            </div>
+        <script src="../../../prettify.js"></script>
+        <script>
+            window.onload = function () {
+                prettyPrint();
+            };
+        </script>
+        <script src="../../../sorter.js"></script>
+        <script src="../../../block-navigation.js"></script>
+    </body>
+</html>
+    
\ No newline at end of file
diff --git a/coverage/ragchat-api/__tests__/auth/refreshjwt.test.js.html b/coverage/ragchat-api/__tests__/auth/refreshjwt.test.js.html
new file mode 100644
index 0000000..3f6d349
--- /dev/null
+++ b/coverage/ragchat-api/__tests__/auth/refreshjwt.test.js.html
@@ -0,0 +1,448 @@
+
+<!doctype html>
+<html lang="en">
+
+<head>
+    <title>Code coverage report for ragchat-api/__tests__/auth/refreshjwt.test.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+    
+<body>
+<div class='wrapper'>
+    <div class='pad1'>
+        <h1><a href="../../../index.html">All files</a> / <a href="index.html">ragchat-api/__tests__/auth</a> refreshjwt.test.js</h1>
+        <div class='clearfix'>
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Statements</span>
+                <span class='fraction'>95/95</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Branches</span>
+                <span class='fraction'>17/17</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Functions</span>
+                <span class='fraction'>0/0</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Lines</span>
+                <span class='fraction'>95/95</span>
+            </div>
+        
+            
+        </div>
+        <p class="quiet">
+            Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
+        </p>
+        <template id="filterTemplate">
+            <div class="quiet">
+                Filter:
+                <input type="search" id="fileSearch">
+            </div>
+        </template>
+    </div>
+    <div class='status-line high'></div>
+    <pre><table class="coverage">
+<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
+<a name='L2'></a><a href='#L2'>2</a>
+<a name='L3'></a><a href='#L3'>3</a>
+<a name='L4'></a><a href='#L4'>4</a>
+<a name='L5'></a><a href='#L5'>5</a>
+<a name='L6'></a><a href='#L6'>6</a>
+<a name='L7'></a><a href='#L7'>7</a>
+<a name='L8'></a><a href='#L8'>8</a>
+<a name='L9'></a><a href='#L9'>9</a>
+<a name='L10'></a><a href='#L10'>10</a>
+<a name='L11'></a><a href='#L11'>11</a>
+<a name='L12'></a><a href='#L12'>12</a>
+<a name='L13'></a><a href='#L13'>13</a>
+<a name='L14'></a><a href='#L14'>14</a>
+<a name='L15'></a><a href='#L15'>15</a>
+<a name='L16'></a><a href='#L16'>16</a>
+<a name='L17'></a><a href='#L17'>17</a>
+<a name='L18'></a><a href='#L18'>18</a>
+<a name='L19'></a><a href='#L19'>19</a>
+<a name='L20'></a><a href='#L20'>20</a>
+<a name='L21'></a><a href='#L21'>21</a>
+<a name='L22'></a><a href='#L22'>22</a>
+<a name='L23'></a><a href='#L23'>23</a>
+<a name='L24'></a><a href='#L24'>24</a>
+<a name='L25'></a><a href='#L25'>25</a>
+<a name='L26'></a><a href='#L26'>26</a>
+<a name='L27'></a><a href='#L27'>27</a>
+<a name='L28'></a><a href='#L28'>28</a>
+<a name='L29'></a><a href='#L29'>29</a>
+<a name='L30'></a><a href='#L30'>30</a>
+<a name='L31'></a><a href='#L31'>31</a>
+<a name='L32'></a><a href='#L32'>32</a>
+<a name='L33'></a><a href='#L33'>33</a>
+<a name='L34'></a><a href='#L34'>34</a>
+<a name='L35'></a><a href='#L35'>35</a>
+<a name='L36'></a><a href='#L36'>36</a>
+<a name='L37'></a><a href='#L37'>37</a>
+<a name='L38'></a><a href='#L38'>38</a>
+<a name='L39'></a><a href='#L39'>39</a>
+<a name='L40'></a><a href='#L40'>40</a>
+<a name='L41'></a><a href='#L41'>41</a>
+<a name='L42'></a><a href='#L42'>42</a>
+<a name='L43'></a><a href='#L43'>43</a>
+<a name='L44'></a><a href='#L44'>44</a>
+<a name='L45'></a><a href='#L45'>45</a>
+<a name='L46'></a><a href='#L46'>46</a>
+<a name='L47'></a><a href='#L47'>47</a>
+<a name='L48'></a><a href='#L48'>48</a>
+<a name='L49'></a><a href='#L49'>49</a>
+<a name='L50'></a><a href='#L50'>50</a>
+<a name='L51'></a><a href='#L51'>51</a>
+<a name='L52'></a><a href='#L52'>52</a>
+<a name='L53'></a><a href='#L53'>53</a>
+<a name='L54'></a><a href='#L54'>54</a>
+<a name='L55'></a><a href='#L55'>55</a>
+<a name='L56'></a><a href='#L56'>56</a>
+<a name='L57'></a><a href='#L57'>57</a>
+<a name='L58'></a><a href='#L58'>58</a>
+<a name='L59'></a><a href='#L59'>59</a>
+<a name='L60'></a><a href='#L60'>60</a>
+<a name='L61'></a><a href='#L61'>61</a>
+<a name='L62'></a><a href='#L62'>62</a>
+<a name='L63'></a><a href='#L63'>63</a>
+<a name='L64'></a><a href='#L64'>64</a>
+<a name='L65'></a><a href='#L65'>65</a>
+<a name='L66'></a><a href='#L66'>66</a>
+<a name='L67'></a><a href='#L67'>67</a>
+<a name='L68'></a><a href='#L68'>68</a>
+<a name='L69'></a><a href='#L69'>69</a>
+<a name='L70'></a><a href='#L70'>70</a>
+<a name='L71'></a><a href='#L71'>71</a>
+<a name='L72'></a><a href='#L72'>72</a>
+<a name='L73'></a><a href='#L73'>73</a>
+<a name='L74'></a><a href='#L74'>74</a>
+<a name='L75'></a><a href='#L75'>75</a>
+<a name='L76'></a><a href='#L76'>76</a>
+<a name='L77'></a><a href='#L77'>77</a>
+<a name='L78'></a><a href='#L78'>78</a>
+<a name='L79'></a><a href='#L79'>79</a>
+<a name='L80'></a><a href='#L80'>80</a>
+<a name='L81'></a><a href='#L81'>81</a>
+<a name='L82'></a><a href='#L82'>82</a>
+<a name='L83'></a><a href='#L83'>83</a>
+<a name='L84'></a><a href='#L84'>84</a>
+<a name='L85'></a><a href='#L85'>85</a>
+<a name='L86'></a><a href='#L86'>86</a>
+<a name='L87'></a><a href='#L87'>87</a>
+<a name='L88'></a><a href='#L88'>88</a>
+<a name='L89'></a><a href='#L89'>89</a>
+<a name='L90'></a><a href='#L90'>90</a>
+<a name='L91'></a><a href='#L91'>91</a>
+<a name='L92'></a><a href='#L92'>92</a>
+<a name='L93'></a><a href='#L93'>93</a>
+<a name='L94'></a><a href='#L94'>94</a>
+<a name='L95'></a><a href='#L95'>95</a>
+<a name='L96'></a><a href='#L96'>96</a>
+<a name='L97'></a><a href='#L97'>97</a>
+<a name='L98'></a><a href='#L98'>98</a>
+<a name='L99'></a><a href='#L99'>99</a>
+<a name='L100'></a><a href='#L100'>100</a>
+<a name='L101'></a><a href='#L101'>101</a>
+<a name='L102'></a><a href='#L102'>102</a>
+<a name='L103'></a><a href='#L103'>103</a>
+<a name='L104'></a><a href='#L104'>104</a>
+<a name='L105'></a><a href='#L105'>105</a>
+<a name='L106'></a><a href='#L106'>106</a>
+<a name='L107'></a><a href='#L107'>107</a>
+<a name='L108'></a><a href='#L108'>108</a>
+<a name='L109'></a><a href='#L109'>109</a>
+<a name='L110'></a><a href='#L110'>110</a>
+<a name='L111'></a><a href='#L111'>111</a>
+<a name='L112'></a><a href='#L112'>112</a>
+<a name='L113'></a><a href='#L113'>113</a>
+<a name='L114'></a><a href='#L114'>114</a>
+<a name='L115'></a><a href='#L115'>115</a>
+<a name='L116'></a><a href='#L116'>116</a>
+<a name='L117'></a><a href='#L117'>117</a>
+<a name='L118'></a><a href='#L118'>118</a>
+<a name='L119'></a><a href='#L119'>119</a>
+<a name='L120'></a><a href='#L120'>120</a>
+<a name='L121'></a><a href='#L121'>121</a>
+<a name='L122'></a><a href='#L122'>122</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span></td><td class="text"><pre class="prettyprint lang-js">// import vitest, supertest &amp; app
+import { vi, beforeAll, beforeEach, describe, expect, expectTypeOf, test, it, afterEach } from 'vitest';
+import supertest from "supertest";
+import app from "../../app.js";
+import jwt from 'jsonwebtoken';
+&nbsp;
+// set route
+const ROUTE = '/auth';
+// prepare response of each test
+let response;
+&nbsp;
+// ############################
+//  OBJECTS
+// ############################
+const mockedVals = vi.hoisted(() =&gt; {
+  return {
+    foundUser: {
+      _id: '66a29da2942b3eb',
+      username: 'snoopy',
+      name: 'My User',
+      email: 'user@mail.local',
+      verified: true,
+      role: 0,
+      createdAt: '2024-07 - 25T18: 46: 58.982Z',
+      updatedAt: '2024-07 - 25T18: 46: 58.982Z',
+      __v: 0,
+      password: 'StrongPass1!',
+      // password,
+      id: '66a29da2942b3ebcaf047f07'
+    }
+  };
+});
+&nbsp;
+// ############################
+//  MOCKS
+// ############################
+// import Database Service
+import * as dbService from '../../utils/handleDB.js';
+// mock dbService
+vi.mock('../../utils/handleDB.js', async (importOriginal) =&gt; {
+  return {
+    ...await importOriginal(),
+    dbConnection: vi.fn(() =&gt; 'mocked'),
+    findOneRecord: vi.fn(() =&gt; mockedVals.foundUser),
+    findByIdAndUpdate: vi.fn(() =&gt; { return { ...mockedVals.foundUser, refreshToken: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY2MOCKED' }; })
+  };
+});
+&nbsp;
+// ############################
+//  TESTS
+// ############################
+&nbsp;
+describe('refresh JWT', () =&gt; {
+&nbsp;
+&nbsp;
+  describe('given authtoken is valid', () =&gt; {
+    beforeAll(async () =&gt; {
+      const refreshToken = jwt.sign({ id: mockedVals.foundUser.id }, process.env.JWT_REFRESH_KEY);
+      // console.log('refreshToken', refreshToken);
+      response = await supertest(app)
+        .get(ROUTE)
+        .set('Cookie', `refreshToken=${refreshToken}`);
+    });
+    it('should return a proper status code', () =&gt; {
+      expect(response.status).toBe(200);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot({
+        accessToken: expect.any(String),
+      });
+    });
+  });
+&nbsp;
+  // ############################
+  describe('given refresh token is malformed', () =&gt; {
+    beforeAll(async () =&gt; {
+      response = await supertest(app)
+        .get(ROUTE)
+        .set('Cookie', 'refreshToken=invalid');
+    });
+    it('should return a proper status code', () =&gt; {
+      expect(response.status).toBe(400);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given refresh token is invalid', () =&gt; {
+    beforeAll(async () =&gt; {
+      // const refreshToken = jwt.sign({ id: mockedVals.foundUser.id }, process.env.JWT_REFRESH_KEY);
+      // console.log('refreshToken', refreshToken);
+      response = await supertest(app)
+        .get(ROUTE)
+        .set('Cookie', 'refreshToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY2YTNkYTViYTEwNjUzMmNhZTEyYTYwOSIsImlhdCI6MTcyMjA5ODM3OX0.7Pq8F2zSDwuEzlCQX3vMZAw9D43N6dSViCyVPZ_s_Zs');
+    });
+    it('should return a proper status code', () =&gt; {
+      expect(response.status).toBe(403);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given refresh token is missing', () =&gt; {
+    beforeAll(async () =&gt; {
+&nbsp;
+      response = await supertest(app)
+        .get(ROUTE);
+    });
+    it('should return a proper status code', () =&gt; {
+      expect(response.status).toBe(401);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+});</pre></td></tr></table></pre>
+
+                <div class='push'></div><!-- for sticky footer -->
+            </div><!-- /wrapper -->
+            <div class='footer quiet pad2 space-top1 center small'>
+                Code coverage generated by
+                <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
+                at 2024-08-07T15:59:44.935Z
+            </div>
+        <script src="../../../prettify.js"></script>
+        <script>
+            window.onload = function () {
+                prettyPrint();
+            };
+        </script>
+        <script src="../../../sorter.js"></script>
+        <script src="../../../block-navigation.js"></script>
+    </body>
+</html>
+    
\ No newline at end of file
diff --git a/coverage/ragchat-api/__tests__/auth/requestpasswordreset.test.js.html b/coverage/ragchat-api/__tests__/auth/requestpasswordreset.test.js.html
new file mode 100644
index 0000000..de89fb8
--- /dev/null
+++ b/coverage/ragchat-api/__tests__/auth/requestpasswordreset.test.js.html
@@ -0,0 +1,472 @@
+
+<!doctype html>
+<html lang="en">
+
+<head>
+    <title>Code coverage report for ragchat-api/__tests__/auth/requestpasswordreset.test.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+    
+<body>
+<div class='wrapper'>
+    <div class='pad1'>
+        <h1><a href="../../../index.html">All files</a> / <a href="index.html">ragchat-api/__tests__/auth</a> requestpasswordreset.test.js</h1>
+        <div class='clearfix'>
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Statements</span>
+                <span class='fraction'>96/96</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Branches</span>
+                <span class='fraction'>18/18</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Functions</span>
+                <span class='fraction'>0/0</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Lines</span>
+                <span class='fraction'>96/96</span>
+            </div>
+        
+            
+        </div>
+        <p class="quiet">
+            Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
+        </p>
+        <template id="filterTemplate">
+            <div class="quiet">
+                Filter:
+                <input type="search" id="fileSearch">
+            </div>
+        </template>
+    </div>
+    <div class='status-line high'></div>
+    <pre><table class="coverage">
+<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
+<a name='L2'></a><a href='#L2'>2</a>
+<a name='L3'></a><a href='#L3'>3</a>
+<a name='L4'></a><a href='#L4'>4</a>
+<a name='L5'></a><a href='#L5'>5</a>
+<a name='L6'></a><a href='#L6'>6</a>
+<a name='L7'></a><a href='#L7'>7</a>
+<a name='L8'></a><a href='#L8'>8</a>
+<a name='L9'></a><a href='#L9'>9</a>
+<a name='L10'></a><a href='#L10'>10</a>
+<a name='L11'></a><a href='#L11'>11</a>
+<a name='L12'></a><a href='#L12'>12</a>
+<a name='L13'></a><a href='#L13'>13</a>
+<a name='L14'></a><a href='#L14'>14</a>
+<a name='L15'></a><a href='#L15'>15</a>
+<a name='L16'></a><a href='#L16'>16</a>
+<a name='L17'></a><a href='#L17'>17</a>
+<a name='L18'></a><a href='#L18'>18</a>
+<a name='L19'></a><a href='#L19'>19</a>
+<a name='L20'></a><a href='#L20'>20</a>
+<a name='L21'></a><a href='#L21'>21</a>
+<a name='L22'></a><a href='#L22'>22</a>
+<a name='L23'></a><a href='#L23'>23</a>
+<a name='L24'></a><a href='#L24'>24</a>
+<a name='L25'></a><a href='#L25'>25</a>
+<a name='L26'></a><a href='#L26'>26</a>
+<a name='L27'></a><a href='#L27'>27</a>
+<a name='L28'></a><a href='#L28'>28</a>
+<a name='L29'></a><a href='#L29'>29</a>
+<a name='L30'></a><a href='#L30'>30</a>
+<a name='L31'></a><a href='#L31'>31</a>
+<a name='L32'></a><a href='#L32'>32</a>
+<a name='L33'></a><a href='#L33'>33</a>
+<a name='L34'></a><a href='#L34'>34</a>
+<a name='L35'></a><a href='#L35'>35</a>
+<a name='L36'></a><a href='#L36'>36</a>
+<a name='L37'></a><a href='#L37'>37</a>
+<a name='L38'></a><a href='#L38'>38</a>
+<a name='L39'></a><a href='#L39'>39</a>
+<a name='L40'></a><a href='#L40'>40</a>
+<a name='L41'></a><a href='#L41'>41</a>
+<a name='L42'></a><a href='#L42'>42</a>
+<a name='L43'></a><a href='#L43'>43</a>
+<a name='L44'></a><a href='#L44'>44</a>
+<a name='L45'></a><a href='#L45'>45</a>
+<a name='L46'></a><a href='#L46'>46</a>
+<a name='L47'></a><a href='#L47'>47</a>
+<a name='L48'></a><a href='#L48'>48</a>
+<a name='L49'></a><a href='#L49'>49</a>
+<a name='L50'></a><a href='#L50'>50</a>
+<a name='L51'></a><a href='#L51'>51</a>
+<a name='L52'></a><a href='#L52'>52</a>
+<a name='L53'></a><a href='#L53'>53</a>
+<a name='L54'></a><a href='#L54'>54</a>
+<a name='L55'></a><a href='#L55'>55</a>
+<a name='L56'></a><a href='#L56'>56</a>
+<a name='L57'></a><a href='#L57'>57</a>
+<a name='L58'></a><a href='#L58'>58</a>
+<a name='L59'></a><a href='#L59'>59</a>
+<a name='L60'></a><a href='#L60'>60</a>
+<a name='L61'></a><a href='#L61'>61</a>
+<a name='L62'></a><a href='#L62'>62</a>
+<a name='L63'></a><a href='#L63'>63</a>
+<a name='L64'></a><a href='#L64'>64</a>
+<a name='L65'></a><a href='#L65'>65</a>
+<a name='L66'></a><a href='#L66'>66</a>
+<a name='L67'></a><a href='#L67'>67</a>
+<a name='L68'></a><a href='#L68'>68</a>
+<a name='L69'></a><a href='#L69'>69</a>
+<a name='L70'></a><a href='#L70'>70</a>
+<a name='L71'></a><a href='#L71'>71</a>
+<a name='L72'></a><a href='#L72'>72</a>
+<a name='L73'></a><a href='#L73'>73</a>
+<a name='L74'></a><a href='#L74'>74</a>
+<a name='L75'></a><a href='#L75'>75</a>
+<a name='L76'></a><a href='#L76'>76</a>
+<a name='L77'></a><a href='#L77'>77</a>
+<a name='L78'></a><a href='#L78'>78</a>
+<a name='L79'></a><a href='#L79'>79</a>
+<a name='L80'></a><a href='#L80'>80</a>
+<a name='L81'></a><a href='#L81'>81</a>
+<a name='L82'></a><a href='#L82'>82</a>
+<a name='L83'></a><a href='#L83'>83</a>
+<a name='L84'></a><a href='#L84'>84</a>
+<a name='L85'></a><a href='#L85'>85</a>
+<a name='L86'></a><a href='#L86'>86</a>
+<a name='L87'></a><a href='#L87'>87</a>
+<a name='L88'></a><a href='#L88'>88</a>
+<a name='L89'></a><a href='#L89'>89</a>
+<a name='L90'></a><a href='#L90'>90</a>
+<a name='L91'></a><a href='#L91'>91</a>
+<a name='L92'></a><a href='#L92'>92</a>
+<a name='L93'></a><a href='#L93'>93</a>
+<a name='L94'></a><a href='#L94'>94</a>
+<a name='L95'></a><a href='#L95'>95</a>
+<a name='L96'></a><a href='#L96'>96</a>
+<a name='L97'></a><a href='#L97'>97</a>
+<a name='L98'></a><a href='#L98'>98</a>
+<a name='L99'></a><a href='#L99'>99</a>
+<a name='L100'></a><a href='#L100'>100</a>
+<a name='L101'></a><a href='#L101'>101</a>
+<a name='L102'></a><a href='#L102'>102</a>
+<a name='L103'></a><a href='#L103'>103</a>
+<a name='L104'></a><a href='#L104'>104</a>
+<a name='L105'></a><a href='#L105'>105</a>
+<a name='L106'></a><a href='#L106'>106</a>
+<a name='L107'></a><a href='#L107'>107</a>
+<a name='L108'></a><a href='#L108'>108</a>
+<a name='L109'></a><a href='#L109'>109</a>
+<a name='L110'></a><a href='#L110'>110</a>
+<a name='L111'></a><a href='#L111'>111</a>
+<a name='L112'></a><a href='#L112'>112</a>
+<a name='L113'></a><a href='#L113'>113</a>
+<a name='L114'></a><a href='#L114'>114</a>
+<a name='L115'></a><a href='#L115'>115</a>
+<a name='L116'></a><a href='#L116'>116</a>
+<a name='L117'></a><a href='#L117'>117</a>
+<a name='L118'></a><a href='#L118'>118</a>
+<a name='L119'></a><a href='#L119'>119</a>
+<a name='L120'></a><a href='#L120'>120</a>
+<a name='L121'></a><a href='#L121'>121</a>
+<a name='L122'></a><a href='#L122'>122</a>
+<a name='L123'></a><a href='#L123'>123</a>
+<a name='L124'></a><a href='#L124'>124</a>
+<a name='L125'></a><a href='#L125'>125</a>
+<a name='L126'></a><a href='#L126'>126</a>
+<a name='L127'></a><a href='#L127'>127</a>
+<a name='L128'></a><a href='#L128'>128</a>
+<a name='L129'></a><a href='#L129'>129</a>
+<a name='L130'></a><a href='#L130'>130</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span></td><td class="text"><pre class="prettyprint lang-js">// import vitest, supertest &amp; app
+import { vi, beforeAll, beforeEach, describe, expect, expectTypeOf, test, it, afterEach } from 'vitest';
+import supertest from "supertest";
+import app from "../../app.js";
+// set route
+const ROUTE = '/auth/password-reset';
+// prepare response of each test
+let response;
+&nbsp;
+// ############################
+//  OBJECTS
+// ############################
+const mockedVals = vi.hoisted(() =&gt; {
+  return {
+    foundUser: {
+      _id: '66a29da2942b3eb',
+      username: 'snoopy',
+      name: 'My User',
+      email: 'user@mail.local',
+      verified: true,
+      role: 0,
+      createdAt: '2024-07 - 25T18: 46: 58.982Z',
+      updatedAt: '2024-07 - 25T18: 46: 58.982Z',
+      __v: 0,
+      password: 'StrongPass1!',
+      id: '66a29da2942b3ebcaf047f07'
+    },
+    validInput: {
+      email: 'user@mail.local'
+    }
+  };
+});
+&nbsp;
+// ############################
+//  MOCKS
+// ############################
+// import Database Service
+import * as dbService from '../../utils/handleDB.js';
+// mock dbService
+vi.mock('../../utils/handleDB.js', async (importOriginal) =&gt; {
+  return {
+    ...await importOriginal(),
+    dbConnection: vi.fn(() =&gt; 'mocked'),
+    findOneRecord: vi.fn(() =&gt; mockedVals.foundUser),
+    updateOneRecord: vi.fn(() =&gt; { return { ...mockedVals.foundUser, resetPasswordToken: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY2MOCKED' }; })
+  };
+});
+// mock mailer
+vi.mock('../../utils/handleMailer.js', async (importOriginal) =&gt; {
+  return {
+    ...await importOriginal(),
+    sendEmail: vi.fn(() =&gt; 'mocked')
+  };
+});
+&nbsp;
+// ############################
+//  TESTS
+// ############################
+describe('user request password reset', () =&gt; {
+  describe('given the inputs are valid', async () =&gt; {
+    // set response by running route
+    beforeAll(async () =&gt; {
+      response = await supertest(app)
+        .post(ROUTE)
+        .send(mockedVals.validInput);
+    });
+    it('should return a proper status code', () =&gt; {
+      expect(response.status).toBe(200);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given the email is unknown', async () =&gt; {
+    // set response by running route
+    beforeAll(async () =&gt; {
+      dbService.findOneRecord.mockImplementationOnce(() =&gt; null);
+&nbsp;
+      response = await supertest(app)
+        .post(ROUTE)
+        .send(mockedVals.validInput);
+    });
+    it('should return a proper status code', () =&gt; {
+      expect(response.status).toBe(200);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given the email format is invalid', () =&gt; {
+    beforeAll(async () =&gt; {
+      const input = { ...mockedVals.validInput, email: 'invalid-email-format' };
+&nbsp;
+      response = await supertest(app)
+        .post(ROUTE)
+        .send(input);
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(400);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('the request body is empty', () =&gt; {
+    beforeAll(async () =&gt; {
+      response = await supertest(app)
+        .post(ROUTE)
+        .send();
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(400);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+});</pre></td></tr></table></pre>
+
+                <div class='push'></div><!-- for sticky footer -->
+            </div><!-- /wrapper -->
+            <div class='footer quiet pad2 space-top1 center small'>
+                Code coverage generated by
+                <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
+                at 2024-08-07T15:59:44.935Z
+            </div>
+        <script src="../../../prettify.js"></script>
+        <script>
+            window.onload = function () {
+                prettyPrint();
+            };
+        </script>
+        <script src="../../../sorter.js"></script>
+        <script src="../../../block-navigation.js"></script>
+    </body>
+</html>
+    
\ No newline at end of file
diff --git a/coverage/ragchat-api/__tests__/auth/requestverification.test.js.html b/coverage/ragchat-api/__tests__/auth/requestverification.test.js.html
new file mode 100644
index 0000000..0f486ab
--- /dev/null
+++ b/coverage/ragchat-api/__tests__/auth/requestverification.test.js.html
@@ -0,0 +1,469 @@
+
+<!doctype html>
+<html lang="en">
+
+<head>
+    <title>Code coverage report for ragchat-api/__tests__/auth/requestverification.test.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+    
+<body>
+<div class='wrapper'>
+    <div class='pad1'>
+        <h1><a href="../../../index.html">All files</a> / <a href="index.html">ragchat-api/__tests__/auth</a> requestverification.test.js</h1>
+        <div class='clearfix'>
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Statements</span>
+                <span class='fraction'>97/97</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Branches</span>
+                <span class='fraction'>18/18</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Functions</span>
+                <span class='fraction'>0/0</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Lines</span>
+                <span class='fraction'>97/97</span>
+            </div>
+        
+            
+        </div>
+        <p class="quiet">
+            Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
+        </p>
+        <template id="filterTemplate">
+            <div class="quiet">
+                Filter:
+                <input type="search" id="fileSearch">
+            </div>
+        </template>
+    </div>
+    <div class='status-line high'></div>
+    <pre><table class="coverage">
+<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
+<a name='L2'></a><a href='#L2'>2</a>
+<a name='L3'></a><a href='#L3'>3</a>
+<a name='L4'></a><a href='#L4'>4</a>
+<a name='L5'></a><a href='#L5'>5</a>
+<a name='L6'></a><a href='#L6'>6</a>
+<a name='L7'></a><a href='#L7'>7</a>
+<a name='L8'></a><a href='#L8'>8</a>
+<a name='L9'></a><a href='#L9'>9</a>
+<a name='L10'></a><a href='#L10'>10</a>
+<a name='L11'></a><a href='#L11'>11</a>
+<a name='L12'></a><a href='#L12'>12</a>
+<a name='L13'></a><a href='#L13'>13</a>
+<a name='L14'></a><a href='#L14'>14</a>
+<a name='L15'></a><a href='#L15'>15</a>
+<a name='L16'></a><a href='#L16'>16</a>
+<a name='L17'></a><a href='#L17'>17</a>
+<a name='L18'></a><a href='#L18'>18</a>
+<a name='L19'></a><a href='#L19'>19</a>
+<a name='L20'></a><a href='#L20'>20</a>
+<a name='L21'></a><a href='#L21'>21</a>
+<a name='L22'></a><a href='#L22'>22</a>
+<a name='L23'></a><a href='#L23'>23</a>
+<a name='L24'></a><a href='#L24'>24</a>
+<a name='L25'></a><a href='#L25'>25</a>
+<a name='L26'></a><a href='#L26'>26</a>
+<a name='L27'></a><a href='#L27'>27</a>
+<a name='L28'></a><a href='#L28'>28</a>
+<a name='L29'></a><a href='#L29'>29</a>
+<a name='L30'></a><a href='#L30'>30</a>
+<a name='L31'></a><a href='#L31'>31</a>
+<a name='L32'></a><a href='#L32'>32</a>
+<a name='L33'></a><a href='#L33'>33</a>
+<a name='L34'></a><a href='#L34'>34</a>
+<a name='L35'></a><a href='#L35'>35</a>
+<a name='L36'></a><a href='#L36'>36</a>
+<a name='L37'></a><a href='#L37'>37</a>
+<a name='L38'></a><a href='#L38'>38</a>
+<a name='L39'></a><a href='#L39'>39</a>
+<a name='L40'></a><a href='#L40'>40</a>
+<a name='L41'></a><a href='#L41'>41</a>
+<a name='L42'></a><a href='#L42'>42</a>
+<a name='L43'></a><a href='#L43'>43</a>
+<a name='L44'></a><a href='#L44'>44</a>
+<a name='L45'></a><a href='#L45'>45</a>
+<a name='L46'></a><a href='#L46'>46</a>
+<a name='L47'></a><a href='#L47'>47</a>
+<a name='L48'></a><a href='#L48'>48</a>
+<a name='L49'></a><a href='#L49'>49</a>
+<a name='L50'></a><a href='#L50'>50</a>
+<a name='L51'></a><a href='#L51'>51</a>
+<a name='L52'></a><a href='#L52'>52</a>
+<a name='L53'></a><a href='#L53'>53</a>
+<a name='L54'></a><a href='#L54'>54</a>
+<a name='L55'></a><a href='#L55'>55</a>
+<a name='L56'></a><a href='#L56'>56</a>
+<a name='L57'></a><a href='#L57'>57</a>
+<a name='L58'></a><a href='#L58'>58</a>
+<a name='L59'></a><a href='#L59'>59</a>
+<a name='L60'></a><a href='#L60'>60</a>
+<a name='L61'></a><a href='#L61'>61</a>
+<a name='L62'></a><a href='#L62'>62</a>
+<a name='L63'></a><a href='#L63'>63</a>
+<a name='L64'></a><a href='#L64'>64</a>
+<a name='L65'></a><a href='#L65'>65</a>
+<a name='L66'></a><a href='#L66'>66</a>
+<a name='L67'></a><a href='#L67'>67</a>
+<a name='L68'></a><a href='#L68'>68</a>
+<a name='L69'></a><a href='#L69'>69</a>
+<a name='L70'></a><a href='#L70'>70</a>
+<a name='L71'></a><a href='#L71'>71</a>
+<a name='L72'></a><a href='#L72'>72</a>
+<a name='L73'></a><a href='#L73'>73</a>
+<a name='L74'></a><a href='#L74'>74</a>
+<a name='L75'></a><a href='#L75'>75</a>
+<a name='L76'></a><a href='#L76'>76</a>
+<a name='L77'></a><a href='#L77'>77</a>
+<a name='L78'></a><a href='#L78'>78</a>
+<a name='L79'></a><a href='#L79'>79</a>
+<a name='L80'></a><a href='#L80'>80</a>
+<a name='L81'></a><a href='#L81'>81</a>
+<a name='L82'></a><a href='#L82'>82</a>
+<a name='L83'></a><a href='#L83'>83</a>
+<a name='L84'></a><a href='#L84'>84</a>
+<a name='L85'></a><a href='#L85'>85</a>
+<a name='L86'></a><a href='#L86'>86</a>
+<a name='L87'></a><a href='#L87'>87</a>
+<a name='L88'></a><a href='#L88'>88</a>
+<a name='L89'></a><a href='#L89'>89</a>
+<a name='L90'></a><a href='#L90'>90</a>
+<a name='L91'></a><a href='#L91'>91</a>
+<a name='L92'></a><a href='#L92'>92</a>
+<a name='L93'></a><a href='#L93'>93</a>
+<a name='L94'></a><a href='#L94'>94</a>
+<a name='L95'></a><a href='#L95'>95</a>
+<a name='L96'></a><a href='#L96'>96</a>
+<a name='L97'></a><a href='#L97'>97</a>
+<a name='L98'></a><a href='#L98'>98</a>
+<a name='L99'></a><a href='#L99'>99</a>
+<a name='L100'></a><a href='#L100'>100</a>
+<a name='L101'></a><a href='#L101'>101</a>
+<a name='L102'></a><a href='#L102'>102</a>
+<a name='L103'></a><a href='#L103'>103</a>
+<a name='L104'></a><a href='#L104'>104</a>
+<a name='L105'></a><a href='#L105'>105</a>
+<a name='L106'></a><a href='#L106'>106</a>
+<a name='L107'></a><a href='#L107'>107</a>
+<a name='L108'></a><a href='#L108'>108</a>
+<a name='L109'></a><a href='#L109'>109</a>
+<a name='L110'></a><a href='#L110'>110</a>
+<a name='L111'></a><a href='#L111'>111</a>
+<a name='L112'></a><a href='#L112'>112</a>
+<a name='L113'></a><a href='#L113'>113</a>
+<a name='L114'></a><a href='#L114'>114</a>
+<a name='L115'></a><a href='#L115'>115</a>
+<a name='L116'></a><a href='#L116'>116</a>
+<a name='L117'></a><a href='#L117'>117</a>
+<a name='L118'></a><a href='#L118'>118</a>
+<a name='L119'></a><a href='#L119'>119</a>
+<a name='L120'></a><a href='#L120'>120</a>
+<a name='L121'></a><a href='#L121'>121</a>
+<a name='L122'></a><a href='#L122'>122</a>
+<a name='L123'></a><a href='#L123'>123</a>
+<a name='L124'></a><a href='#L124'>124</a>
+<a name='L125'></a><a href='#L125'>125</a>
+<a name='L126'></a><a href='#L126'>126</a>
+<a name='L127'></a><a href='#L127'>127</a>
+<a name='L128'></a><a href='#L128'>128</a>
+<a name='L129'></a><a href='#L129'>129</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span></td><td class="text"><pre class="prettyprint lang-js">// import vitest, supertest &amp; app
+import { vi, beforeAll, beforeEach, describe, expect, expectTypeOf, test, it, afterEach } from 'vitest';
+import supertest from "supertest";
+import app from "../../app.js";
+// set route
+const ROUTE = '/auth/verification';
+// prepare response of each test
+let response;
+&nbsp;
+// ############################
+//  OBJECTS
+// ############################
+const mockedVals = vi.hoisted(() =&gt; {
+  return {
+    foundUser: {
+      _id: '66a29da2942b3eb',
+      username: 'snoopy',
+      name: 'My User',
+      email: 'user@mail.local',
+      verified: true,
+      role: 0,
+      createdAt: '2024-07 - 25T18: 46: 58.982Z',
+      updatedAt: '2024-07 - 25T18: 46: 58.982Z',
+      __v: 0,
+      id: '66a29da2942b3ebcaf047f07'
+    },
+    validInput: {
+      email: 'user@mail.local'
+    }
+  };
+});
+&nbsp;
+// ############################
+//  MOCKS
+// ############################
+// import Database Service
+import * as dbService from '../../utils/handleDB.js';
+// mock dbService
+vi.mock('../../utils/handleDB.js', async (importOriginal) =&gt; {
+  return {
+    ...await importOriginal(),
+    dbConnection: vi.fn(() =&gt; 'mocked'),
+    findOneRecord: vi.fn(() =&gt; mockedVals.foundUser),
+  };
+});
+// mock mailer
+vi.mock('../../utils/handleMailer.js', async (importOriginal) =&gt; {
+  return {
+    ...await importOriginal(),
+    sendEmail: vi.fn(() =&gt; 'mocked')
+  };
+});
+&nbsp;
+// ############################
+//  TESTS
+// ############################
+describe('user send registration token', () =&gt; {
+  describe('given the inputs are valid', async () =&gt; {
+    // set response by running route
+    beforeAll(async () =&gt; {
+      response = await supertest(app)
+        .post(ROUTE)
+        .send(mockedVals.validInput);
+    });
+    it('should return a proper status code', () =&gt; {
+      expect(response.status).toBe(201);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given the email is unknown', async () =&gt; {
+    // set response by running route
+    beforeAll(async ({ expect, task }) =&gt; {
+      dbService.findOneRecord.mockImplementationOnce(() =&gt; null);
+&nbsp;
+      response = await supertest(app)
+        .post(ROUTE)
+        .send(mockedVals.validInput);
+    });
+    it('should return a proper status code', () =&gt; {
+      expect(response.status).toBe(404);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given the email format is invalid', () =&gt; {
+    beforeAll(async () =&gt; {
+      const input = { ...mockedVals.validInput, email: 'invalid-email-format' };
+&nbsp;
+      response = await supertest(app)
+        .post(ROUTE)
+        .send(input);
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(400);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('the request body is empty', () =&gt; {
+    beforeAll(async () =&gt; {
+      response = await supertest(app)
+        .post(ROUTE)
+        .send();
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(400);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+});</pre></td></tr></table></pre>
+
+                <div class='push'></div><!-- for sticky footer -->
+            </div><!-- /wrapper -->
+            <div class='footer quiet pad2 space-top1 center small'>
+                Code coverage generated by
+                <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
+                at 2024-08-07T15:59:44.935Z
+            </div>
+        <script src="../../../prettify.js"></script>
+        <script>
+            window.onload = function () {
+                prettyPrint();
+            };
+        </script>
+        <script src="../../../sorter.js"></script>
+        <script src="../../../block-navigation.js"></script>
+    </body>
+</html>
+    
\ No newline at end of file
diff --git a/coverage/ragchat-api/__tests__/users/index.html b/coverage/ragchat-api/__tests__/users/index.html
new file mode 100644
index 0000000..4f0ad37
--- /dev/null
+++ b/coverage/ragchat-api/__tests__/users/index.html
@@ -0,0 +1,116 @@
+
+<!doctype html>
+<html lang="en">
+
+<head>
+    <title>Code coverage report for ragchat-api/__tests__/users</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+    
+<body>
+<div class='wrapper'>
+    <div class='pad1'>
+        <h1><a href="../../../index.html">All files</a> ragchat-api/__tests__/users</h1>
+        <div class='clearfix'>
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Statements</span>
+                <span class='fraction'>177/177</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Branches</span>
+                <span class='fraction'>30/30</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Functions</span>
+                <span class='fraction'>0/0</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Lines</span>
+                <span class='fraction'>177/177</span>
+            </div>
+        
+            
+        </div>
+        <p class="quiet">
+            Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
+        </p>
+        <template id="filterTemplate">
+            <div class="quiet">
+                Filter:
+                <input type="search" id="fileSearch">
+            </div>
+        </template>
+    </div>
+    <div class='status-line high'></div>
+    <div class="pad1">
+<table class="coverage-summary">
+<thead>
+<tr>
+   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
+   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
+   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
+   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
+   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
+   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
+   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
+   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
+</tr>
+</thead>
+<tbody><tr>
+	<td class="file high" data-value="signup.test.js"><a href="signup.test.js.html">signup.test.js</a></td>
+	<td data-value="100" class="pic high">
+	<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
+	</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="177" class="abs high">177/177</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="30" class="abs high">30/30</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="0" class="abs high">0/0</td>
+	<td data-value="100" class="pct high">100%</td>
+	<td data-value="177" class="abs high">177/177</td>
+	</tr>
+
+</tbody>
+</table>
+</div>
+                <div class='push'></div><!-- for sticky footer -->
+            </div><!-- /wrapper -->
+            <div class='footer quiet pad2 space-top1 center small'>
+                Code coverage generated by
+                <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
+                at 2024-08-07T15:59:44.935Z
+            </div>
+        <script src="../../../prettify.js"></script>
+        <script>
+            window.onload = function () {
+                prettyPrint();
+            };
+        </script>
+        <script src="../../../sorter.js"></script>
+        <script src="../../../block-navigation.js"></script>
+    </body>
+</html>
+    
\ No newline at end of file
diff --git a/coverage/ragchat-api/__tests__/users/signup.test.js.html b/coverage/ragchat-api/__tests__/users/signup.test.js.html
new file mode 100644
index 0000000..f024bd3
--- /dev/null
+++ b/coverage/ragchat-api/__tests__/users/signup.test.js.html
@@ -0,0 +1,736 @@
+
+<!doctype html>
+<html lang="en">
+
+<head>
+    <title>Code coverage report for ragchat-api/__tests__/users/signup.test.js</title>
+    <meta charset="utf-8" />
+    <link rel="stylesheet" href="../../../prettify.css" />
+    <link rel="stylesheet" href="../../../base.css" />
+    <link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <style type='text/css'>
+        .coverage-summary .sorter {
+            background-image: url(../../../sort-arrow-sprite.png);
+        }
+    </style>
+</head>
+    
+<body>
+<div class='wrapper'>
+    <div class='pad1'>
+        <h1><a href="../../../index.html">All files</a> / <a href="index.html">ragchat-api/__tests__/users</a> signup.test.js</h1>
+        <div class='clearfix'>
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Statements</span>
+                <span class='fraction'>177/177</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Branches</span>
+                <span class='fraction'>30/30</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Functions</span>
+                <span class='fraction'>0/0</span>
+            </div>
+        
+            
+            <div class='fl pad1y space-right2'>
+                <span class="strong">100% </span>
+                <span class="quiet">Lines</span>
+                <span class='fraction'>177/177</span>
+            </div>
+        
+            
+        </div>
+        <p class="quiet">
+            Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
+        </p>
+        <template id="filterTemplate">
+            <div class="quiet">
+                Filter:
+                <input type="search" id="fileSearch">
+            </div>
+        </template>
+    </div>
+    <div class='status-line high'></div>
+    <pre><table class="coverage">
+<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
+<a name='L2'></a><a href='#L2'>2</a>
+<a name='L3'></a><a href='#L3'>3</a>
+<a name='L4'></a><a href='#L4'>4</a>
+<a name='L5'></a><a href='#L5'>5</a>
+<a name='L6'></a><a href='#L6'>6</a>
+<a name='L7'></a><a href='#L7'>7</a>
+<a name='L8'></a><a href='#L8'>8</a>
+<a name='L9'></a><a href='#L9'>9</a>
+<a name='L10'></a><a href='#L10'>10</a>
+<a name='L11'></a><a href='#L11'>11</a>
+<a name='L12'></a><a href='#L12'>12</a>
+<a name='L13'></a><a href='#L13'>13</a>
+<a name='L14'></a><a href='#L14'>14</a>
+<a name='L15'></a><a href='#L15'>15</a>
+<a name='L16'></a><a href='#L16'>16</a>
+<a name='L17'></a><a href='#L17'>17</a>
+<a name='L18'></a><a href='#L18'>18</a>
+<a name='L19'></a><a href='#L19'>19</a>
+<a name='L20'></a><a href='#L20'>20</a>
+<a name='L21'></a><a href='#L21'>21</a>
+<a name='L22'></a><a href='#L22'>22</a>
+<a name='L23'></a><a href='#L23'>23</a>
+<a name='L24'></a><a href='#L24'>24</a>
+<a name='L25'></a><a href='#L25'>25</a>
+<a name='L26'></a><a href='#L26'>26</a>
+<a name='L27'></a><a href='#L27'>27</a>
+<a name='L28'></a><a href='#L28'>28</a>
+<a name='L29'></a><a href='#L29'>29</a>
+<a name='L30'></a><a href='#L30'>30</a>
+<a name='L31'></a><a href='#L31'>31</a>
+<a name='L32'></a><a href='#L32'>32</a>
+<a name='L33'></a><a href='#L33'>33</a>
+<a name='L34'></a><a href='#L34'>34</a>
+<a name='L35'></a><a href='#L35'>35</a>
+<a name='L36'></a><a href='#L36'>36</a>
+<a name='L37'></a><a href='#L37'>37</a>
+<a name='L38'></a><a href='#L38'>38</a>
+<a name='L39'></a><a href='#L39'>39</a>
+<a name='L40'></a><a href='#L40'>40</a>
+<a name='L41'></a><a href='#L41'>41</a>
+<a name='L42'></a><a href='#L42'>42</a>
+<a name='L43'></a><a href='#L43'>43</a>
+<a name='L44'></a><a href='#L44'>44</a>
+<a name='L45'></a><a href='#L45'>45</a>
+<a name='L46'></a><a href='#L46'>46</a>
+<a name='L47'></a><a href='#L47'>47</a>
+<a name='L48'></a><a href='#L48'>48</a>
+<a name='L49'></a><a href='#L49'>49</a>
+<a name='L50'></a><a href='#L50'>50</a>
+<a name='L51'></a><a href='#L51'>51</a>
+<a name='L52'></a><a href='#L52'>52</a>
+<a name='L53'></a><a href='#L53'>53</a>
+<a name='L54'></a><a href='#L54'>54</a>
+<a name='L55'></a><a href='#L55'>55</a>
+<a name='L56'></a><a href='#L56'>56</a>
+<a name='L57'></a><a href='#L57'>57</a>
+<a name='L58'></a><a href='#L58'>58</a>
+<a name='L59'></a><a href='#L59'>59</a>
+<a name='L60'></a><a href='#L60'>60</a>
+<a name='L61'></a><a href='#L61'>61</a>
+<a name='L62'></a><a href='#L62'>62</a>
+<a name='L63'></a><a href='#L63'>63</a>
+<a name='L64'></a><a href='#L64'>64</a>
+<a name='L65'></a><a href='#L65'>65</a>
+<a name='L66'></a><a href='#L66'>66</a>
+<a name='L67'></a><a href='#L67'>67</a>
+<a name='L68'></a><a href='#L68'>68</a>
+<a name='L69'></a><a href='#L69'>69</a>
+<a name='L70'></a><a href='#L70'>70</a>
+<a name='L71'></a><a href='#L71'>71</a>
+<a name='L72'></a><a href='#L72'>72</a>
+<a name='L73'></a><a href='#L73'>73</a>
+<a name='L74'></a><a href='#L74'>74</a>
+<a name='L75'></a><a href='#L75'>75</a>
+<a name='L76'></a><a href='#L76'>76</a>
+<a name='L77'></a><a href='#L77'>77</a>
+<a name='L78'></a><a href='#L78'>78</a>
+<a name='L79'></a><a href='#L79'>79</a>
+<a name='L80'></a><a href='#L80'>80</a>
+<a name='L81'></a><a href='#L81'>81</a>
+<a name='L82'></a><a href='#L82'>82</a>
+<a name='L83'></a><a href='#L83'>83</a>
+<a name='L84'></a><a href='#L84'>84</a>
+<a name='L85'></a><a href='#L85'>85</a>
+<a name='L86'></a><a href='#L86'>86</a>
+<a name='L87'></a><a href='#L87'>87</a>
+<a name='L88'></a><a href='#L88'>88</a>
+<a name='L89'></a><a href='#L89'>89</a>
+<a name='L90'></a><a href='#L90'>90</a>
+<a name='L91'></a><a href='#L91'>91</a>
+<a name='L92'></a><a href='#L92'>92</a>
+<a name='L93'></a><a href='#L93'>93</a>
+<a name='L94'></a><a href='#L94'>94</a>
+<a name='L95'></a><a href='#L95'>95</a>
+<a name='L96'></a><a href='#L96'>96</a>
+<a name='L97'></a><a href='#L97'>97</a>
+<a name='L98'></a><a href='#L98'>98</a>
+<a name='L99'></a><a href='#L99'>99</a>
+<a name='L100'></a><a href='#L100'>100</a>
+<a name='L101'></a><a href='#L101'>101</a>
+<a name='L102'></a><a href='#L102'>102</a>
+<a name='L103'></a><a href='#L103'>103</a>
+<a name='L104'></a><a href='#L104'>104</a>
+<a name='L105'></a><a href='#L105'>105</a>
+<a name='L106'></a><a href='#L106'>106</a>
+<a name='L107'></a><a href='#L107'>107</a>
+<a name='L108'></a><a href='#L108'>108</a>
+<a name='L109'></a><a href='#L109'>109</a>
+<a name='L110'></a><a href='#L110'>110</a>
+<a name='L111'></a><a href='#L111'>111</a>
+<a name='L112'></a><a href='#L112'>112</a>
+<a name='L113'></a><a href='#L113'>113</a>
+<a name='L114'></a><a href='#L114'>114</a>
+<a name='L115'></a><a href='#L115'>115</a>
+<a name='L116'></a><a href='#L116'>116</a>
+<a name='L117'></a><a href='#L117'>117</a>
+<a name='L118'></a><a href='#L118'>118</a>
+<a name='L119'></a><a href='#L119'>119</a>
+<a name='L120'></a><a href='#L120'>120</a>
+<a name='L121'></a><a href='#L121'>121</a>
+<a name='L122'></a><a href='#L122'>122</a>
+<a name='L123'></a><a href='#L123'>123</a>
+<a name='L124'></a><a href='#L124'>124</a>
+<a name='L125'></a><a href='#L125'>125</a>
+<a name='L126'></a><a href='#L126'>126</a>
+<a name='L127'></a><a href='#L127'>127</a>
+<a name='L128'></a><a href='#L128'>128</a>
+<a name='L129'></a><a href='#L129'>129</a>
+<a name='L130'></a><a href='#L130'>130</a>
+<a name='L131'></a><a href='#L131'>131</a>
+<a name='L132'></a><a href='#L132'>132</a>
+<a name='L133'></a><a href='#L133'>133</a>
+<a name='L134'></a><a href='#L134'>134</a>
+<a name='L135'></a><a href='#L135'>135</a>
+<a name='L136'></a><a href='#L136'>136</a>
+<a name='L137'></a><a href='#L137'>137</a>
+<a name='L138'></a><a href='#L138'>138</a>
+<a name='L139'></a><a href='#L139'>139</a>
+<a name='L140'></a><a href='#L140'>140</a>
+<a name='L141'></a><a href='#L141'>141</a>
+<a name='L142'></a><a href='#L142'>142</a>
+<a name='L143'></a><a href='#L143'>143</a>
+<a name='L144'></a><a href='#L144'>144</a>
+<a name='L145'></a><a href='#L145'>145</a>
+<a name='L146'></a><a href='#L146'>146</a>
+<a name='L147'></a><a href='#L147'>147</a>
+<a name='L148'></a><a href='#L148'>148</a>
+<a name='L149'></a><a href='#L149'>149</a>
+<a name='L150'></a><a href='#L150'>150</a>
+<a name='L151'></a><a href='#L151'>151</a>
+<a name='L152'></a><a href='#L152'>152</a>
+<a name='L153'></a><a href='#L153'>153</a>
+<a name='L154'></a><a href='#L154'>154</a>
+<a name='L155'></a><a href='#L155'>155</a>
+<a name='L156'></a><a href='#L156'>156</a>
+<a name='L157'></a><a href='#L157'>157</a>
+<a name='L158'></a><a href='#L158'>158</a>
+<a name='L159'></a><a href='#L159'>159</a>
+<a name='L160'></a><a href='#L160'>160</a>
+<a name='L161'></a><a href='#L161'>161</a>
+<a name='L162'></a><a href='#L162'>162</a>
+<a name='L163'></a><a href='#L163'>163</a>
+<a name='L164'></a><a href='#L164'>164</a>
+<a name='L165'></a><a href='#L165'>165</a>
+<a name='L166'></a><a href='#L166'>166</a>
+<a name='L167'></a><a href='#L167'>167</a>
+<a name='L168'></a><a href='#L168'>168</a>
+<a name='L169'></a><a href='#L169'>169</a>
+<a name='L170'></a><a href='#L170'>170</a>
+<a name='L171'></a><a href='#L171'>171</a>
+<a name='L172'></a><a href='#L172'>172</a>
+<a name='L173'></a><a href='#L173'>173</a>
+<a name='L174'></a><a href='#L174'>174</a>
+<a name='L175'></a><a href='#L175'>175</a>
+<a name='L176'></a><a href='#L176'>176</a>
+<a name='L177'></a><a href='#L177'>177</a>
+<a name='L178'></a><a href='#L178'>178</a>
+<a name='L179'></a><a href='#L179'>179</a>
+<a name='L180'></a><a href='#L180'>180</a>
+<a name='L181'></a><a href='#L181'>181</a>
+<a name='L182'></a><a href='#L182'>182</a>
+<a name='L183'></a><a href='#L183'>183</a>
+<a name='L184'></a><a href='#L184'>184</a>
+<a name='L185'></a><a href='#L185'>185</a>
+<a name='L186'></a><a href='#L186'>186</a>
+<a name='L187'></a><a href='#L187'>187</a>
+<a name='L188'></a><a href='#L188'>188</a>
+<a name='L189'></a><a href='#L189'>189</a>
+<a name='L190'></a><a href='#L190'>190</a>
+<a name='L191'></a><a href='#L191'>191</a>
+<a name='L192'></a><a href='#L192'>192</a>
+<a name='L193'></a><a href='#L193'>193</a>
+<a name='L194'></a><a href='#L194'>194</a>
+<a name='L195'></a><a href='#L195'>195</a>
+<a name='L196'></a><a href='#L196'>196</a>
+<a name='L197'></a><a href='#L197'>197</a>
+<a name='L198'></a><a href='#L198'>198</a>
+<a name='L199'></a><a href='#L199'>199</a>
+<a name='L200'></a><a href='#L200'>200</a>
+<a name='L201'></a><a href='#L201'>201</a>
+<a name='L202'></a><a href='#L202'>202</a>
+<a name='L203'></a><a href='#L203'>203</a>
+<a name='L204'></a><a href='#L204'>204</a>
+<a name='L205'></a><a href='#L205'>205</a>
+<a name='L206'></a><a href='#L206'>206</a>
+<a name='L207'></a><a href='#L207'>207</a>
+<a name='L208'></a><a href='#L208'>208</a>
+<a name='L209'></a><a href='#L209'>209</a>
+<a name='L210'></a><a href='#L210'>210</a>
+<a name='L211'></a><a href='#L211'>211</a>
+<a name='L212'></a><a href='#L212'>212</a>
+<a name='L213'></a><a href='#L213'>213</a>
+<a name='L214'></a><a href='#L214'>214</a>
+<a name='L215'></a><a href='#L215'>215</a>
+<a name='L216'></a><a href='#L216'>216</a>
+<a name='L217'></a><a href='#L217'>217</a>
+<a name='L218'></a><a href='#L218'>218</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-neutral">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span></td><td class="text"><pre class="prettyprint lang-js">// import vitest, supertest &amp; app
+import { vi, beforeAll, beforeEach, describe, expect, expectTypeOf, test, it, afterEach } from 'vitest';
+import supertest from "supertest";
+import app from "../../app.js";
+&nbsp;
+// set route
+const ROUTE = '/users';
+// prepare response of each test
+let response;
+&nbsp;
+// ############################
+//  OBJECTS
+// ############################
+const mockedVals = vi.hoisted(() =&gt; {
+  return {
+    foundUser: {
+      _doc: {
+        _id: '66a29da2942b3eb',
+        username: 'snoopy',
+        name: 'My User',
+        email: 'user@mail.local',
+        verified: true,
+        role: 0,
+        createdAt: '2024-07 - 25T18: 46: 58.982Z',
+        updatedAt: '2024-07 - 25T18: 46: 58.982Z',
+        __v: 0,
+        fullname: '',
+        id: '66a29da2942b3ebcaf047f07'
+      }
+    },
+    validInput: {
+      name: 'My User',
+      username: 'snoopy',
+      email: 'user@mail.local',
+      password: 'StrongPass1!',
+      confirmPassword: 'StrongPass1!'
+    }
+  };
+});
+&nbsp;
+// ############################
+//  MOCKS
+// ############################
+// import Database Service
+import * as dbService from '../../utils/handleDB.js';
+// mock dbService
+vi.mock('../../utils/handleDB.js', async (importOriginal) =&gt; {
+  return {
+    ...await importOriginal(),
+    dbConnection: vi.fn(() =&gt; 'mocked'),
+    findOneRecord: vi.fn(() =&gt; mockedVals.foundUser),
+    createRecord: vi.fn(() =&gt; mockedVals.foundUser)
+  };
+});
+// mock mailer
+vi.mock('../../utils/handleMailer.js', async (importOriginal) =&gt; {
+  return {
+    ...await importOriginal(),
+    sendEmail: vi.fn(() =&gt; 'mocked')
+  };
+});
+&nbsp;
+// ############################
+//  TESTS
+// ############################
+describe('user registration', () =&gt; {
+  describe('given the inputs are valid', async () =&gt; {
+    // set response by running route
+    beforeAll(async () =&gt; {
+      response = await supertest(app)
+        .post(ROUTE)
+        .send(mockedVals.validInput);
+    });
+&nbsp;
+    it('should return a proper status code', () =&gt; {
+      expect(response.status).toBe(201);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('the request body is empty', () =&gt; {
+    beforeAll(async () =&gt; {
+      response = await supertest(app)
+        .post(ROUTE)
+        .send();
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(400);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given the password and confirmPassword do not match', () =&gt; {
+    beforeAll(async () =&gt; {
+      const input = { ...mockedVals.validInput, confirmPassword: 'StrongPass2!' };
+&nbsp;
+      response = await supertest(app)
+        .post(ROUTE)
+        .send(input);
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(400);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given required fields are missing', () =&gt; {
+    beforeAll(async () =&gt; {
+      const { email, ...input } = mockedVals.validInput;
+&nbsp;
+      response = await supertest(app)
+        .post(ROUTE)
+        .send(input);
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(400);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given the email format is invalid', () =&gt; {
+    beforeAll(async () =&gt; {
+      const input = { ...mockedVals.validInput, email: 'invalid-email-format' };
+&nbsp;
+      response = await supertest(app)
+        .post(ROUTE)
+        .send(input);
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(400);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given the password does not meet strength requirements', () =&gt; {
+    beforeAll(async () =&gt; {
+      const input = { ...mockedVals.validInput, password: 'weakpass', confirmPassword: 'weakpass' };
+&nbsp;
+      response = await supertest(app)
+        .post(ROUTE)
+        .send(input);
+    });
+&nbsp;
+    it('should return a proper status code status', () =&gt; {
+      expect(response.status).toBe(400);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+  // ############################
+&nbsp;
+  describe('given signing up with duplicate email or username', () =&gt; {
+    // set response by running route
+    beforeEach(async () =&gt; {
+      let error = new Error('Error: User validation failed: email: Record with this email already exists.');
+&nbsp;
+      error = {
+        "errors": {
+          "email": {
+            "name": "ValidatorError",
+            "message": "Record with this email already exists.",
+            "properties": {
+              "message": "Record with this email already exists.",
+              "type": "unique",
+              "path": "email",
+              "value":
+                "user@mail.local"
+            },
+            "kind": "unique",
+            "path": "email",
+            "value": "user@mail.local"
+          }
+        },
+        "_message": "User validation failed",
+        "name": "ValidationError",
+        "message": "User validation failed: email: Record with this email already exists."
+      };
+      dbService.createRecord.mockImplementation(() =&gt; { throw error; });
+&nbsp;
+      response = await supertest(app)
+        .post(ROUTE)
+        .send(mockedVals.validInput);
+    });
+    it('should return a proper status code', () =&gt; {
+      expect(response.status).toBe(400);
+    });
+    it('should respond with a proper body', () =&gt; {
+      expect(response.body).toMatchSnapshot();
+    });
+  });
+&nbsp;
+});</pre></td></tr></table></pre>
+
+                <div class='push'></div><!-- for sticky footer -->
+            </div><!-- /wrapper -->
+            <div class='footer quiet pad2 space-top1 center small'>
+                Code coverage generated by
+                <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
+                at 2024-08-07T15:59:44.935Z
+            </div>
+        <script src="../../../prettify.js"></script>
+        <script>
+            window.onload = function () {
+                prettyPrint();
+            };
+        </script>
+        <script src="../../../sorter.js"></script>
+        <script src="../../../block-navigation.js"></script>
+    </body>
+</html>
+    
\ No newline at end of file
diff --git a/coverage/ragchat-api/app.js.html b/coverage/ragchat-api/app.js.html
index 279c34e..5209722 100644
--- a/coverage/ragchat-api/app.js.html
+++ b/coverage/ragchat-api/app.js.html
@@ -23,16 +23,16 @@
         <div class='clearfix'>
             
             <div class='fl pad1y space-right2'>
-                <span class="strong">87.65% </span>
+                <span class="strong">87.5% </span>
                 <span class="quiet">Statements</span>
-                <span class='fraction'>71/81</span>
+                <span class='fraction'>105/120</span>
             </div>
         
             
             <div class='fl pad1y space-right2'>
-                <span class="strong">50% </span>
+                <span class="strong">60% </span>
                 <span class="quiet">Branches</span>
-                <span class='fraction'>1/2</span>
+                <span class='fraction'>3/5</span>
             </div>
         
             
@@ -44,9 +44,9 @@
         
             
             <div class='fl pad1y space-right2'>
-                <span class="strong">87.65% </span>
+                <span class="strong">87.5% </span>
                 <span class="quiet">Lines</span>
-                <span class='fraction'>71/81</span>
+                <span class='fraction'>105/120</span>
             </div>
         
             
@@ -143,9 +143,87 @@
 <a name='L78'></a><a href='#L78'>78</a>
 <a name='L79'></a><a href='#L79'>79</a>
 <a name='L80'></a><a href='#L80'>80</a>
-<a name='L81'></a><a href='#L81'>81</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
+<a name='L81'></a><a href='#L81'>81</a>
+<a name='L82'></a><a href='#L82'>82</a>
+<a name='L83'></a><a href='#L83'>83</a>
+<a name='L84'></a><a href='#L84'>84</a>
+<a name='L85'></a><a href='#L85'>85</a>
+<a name='L86'></a><a href='#L86'>86</a>
+<a name='L87'></a><a href='#L87'>87</a>
+<a name='L88'></a><a href='#L88'>88</a>
+<a name='L89'></a><a href='#L89'>89</a>
+<a name='L90'></a><a href='#L90'>90</a>
+<a name='L91'></a><a href='#L91'>91</a>
+<a name='L92'></a><a href='#L92'>92</a>
+<a name='L93'></a><a href='#L93'>93</a>
+<a name='L94'></a><a href='#L94'>94</a>
+<a name='L95'></a><a href='#L95'>95</a>
+<a name='L96'></a><a href='#L96'>96</a>
+<a name='L97'></a><a href='#L97'>97</a>
+<a name='L98'></a><a href='#L98'>98</a>
+<a name='L99'></a><a href='#L99'>99</a>
+<a name='L100'></a><a href='#L100'>100</a>
+<a name='L101'></a><a href='#L101'>101</a>
+<a name='L102'></a><a href='#L102'>102</a>
+<a name='L103'></a><a href='#L103'>103</a>
+<a name='L104'></a><a href='#L104'>104</a>
+<a name='L105'></a><a href='#L105'>105</a>
+<a name='L106'></a><a href='#L106'>106</a>
+<a name='L107'></a><a href='#L107'>107</a>
+<a name='L108'></a><a href='#L108'>108</a>
+<a name='L109'></a><a href='#L109'>109</a>
+<a name='L110'></a><a href='#L110'>110</a>
+<a name='L111'></a><a href='#L111'>111</a>
+<a name='L112'></a><a href='#L112'>112</a>
+<a name='L113'></a><a href='#L113'>113</a>
+<a name='L114'></a><a href='#L114'>114</a>
+<a name='L115'></a><a href='#L115'>115</a>
+<a name='L116'></a><a href='#L116'>116</a>
+<a name='L117'></a><a href='#L117'>117</a>
+<a name='L118'></a><a href='#L118'>118</a>
+<a name='L119'></a><a href='#L119'>119</a>
+<a name='L120'></a><a href='#L120'>120</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">66x</span>
+<span class="cline-any cline-yes">228x</span>
+<span class="cline-any cline-yes">228x</span>
+<span class="cline-any cline-yes">228x</span>
+<span class="cline-any cline-yes">96x</span>
+<span class="cline-any cline-yes">96x</span>
+<span class="cline-any cline-yes">96x</span>
+<span class="cline-any cline-yes">96x</span>
+<span class="cline-any cline-yes">96x</span>
+<span class="cline-any cline-yes">96x</span>
+<span class="cline-any cline-yes">96x</span>
+<span class="cline-any cline-yes">96x</span>
+<span class="cline-any cline-yes">96x</span>
+<span class="cline-any cline-yes">96x</span>
+<span class="cline-any cline-yes">96x</span>
+<span class="cline-any cline-yes">96x</span>
+<span class="cline-any cline-yes">96x</span>
+<span class="cline-any cline-yes">96x</span>
+<span class="cline-any cline-yes">228x</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-yes">228x</span>
+<span class="cline-any cline-yes">228x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
@@ -188,8 +266,8 @@
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">45x</span>
-<span class="cline-any cline-yes">45x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
@@ -229,6 +307,45 @@ import cors from 'cors';
 import { createRecord, dbConnection, findOneRecord } from './utils/handleDB.js';
 import { middlewareErrorHandler, middlewareUnknownRoute } from './utils/handleErrors.js';
 &nbsp;
+/**
+ * start a performance observer
+ * watches for performance.mark entries
+ * 
+ * each entry must follow the naming convention:
+ * performance.mark('&lt;arbitaryName&gt;:start');
+ * performance.mark('&lt;arbitaryName&gt;:end');
+ * 
+ */
+const observer = new PerformanceObserver((list, observer) =&gt; {
+  for (const entry of list.getEntries()) {
+    try {
+      // check if mark is an endpoint
+      if (entry.name.endsWith(':end')) {
+        // define names, based on entry name
+        const measurementName = entry.name.replace(':end', '');
+        const startName = `${measurementName}:start`;
+        // calculate
+        const measurement = performance.measure(measurementName, startName, entry.name);
+        // log
+        if (process.env.DEBUG_PERFORMANCE === 'true') {
+          console.info({ name: measurement.name, duration: `${measurement.duration} ms` });
+        }
+&nbsp;
+        // clear
+        performance.clearMarks(entry.name);
+        performance.clearMarks(startName);
+      }
+    } <span class="branch-0 cbranch-no" title="branch not covered" >catch (error) {</span>
+<span class="cstat-no" title="statement not covered" >      // log</span>
+<span class="cstat-no" title="statement not covered" >      console.error(error.message);</span>
+<span class="cstat-no" title="statement not covered" >      // clear</span>
+<span class="cstat-no" title="statement not covered" >      performance.clearMarks(entry.name);</span>
+<span class="cstat-no" title="statement not covered" >    }</span>
+    // observer.disconnect();
+  }
+});
+observer.observe({ entryTypes: ['mark'] });
+&nbsp;
 /**
  * establish DB connection
  */
@@ -310,7 +427,7 @@ export default app;</pre></td></tr></table></pre>
             <div class='footer quiet pad2 space-top1 center small'>
                 Code coverage generated by
                 <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
-                at 2024-07-28T19:23:24.511Z
+                at 2024-08-07T15:59:44.935Z
             </div>
         <script src="../prettify.js"></script>
         <script>
diff --git a/coverage/ragchat-api/controllers/AI.js.html b/coverage/ragchat-api/controllers/AI.js.html
index 62f4f96..233cda3 100644
--- a/coverage/ragchat-api/controllers/AI.js.html
+++ b/coverage/ragchat-api/controllers/AI.js.html
@@ -23,9 +23,9 @@
         <div class='clearfix'>
             
             <div class='fl pad1y space-right2'>
-                <span class="strong">92.7% </span>
+                <span class="strong">92.67% </span>
                 <span class="quiet">Statements</span>
-                <span class='fraction'>178/192</span>
+                <span class='fraction'>177/191</span>
             </div>
         
             
@@ -44,9 +44,9 @@
         
             
             <div class='fl pad1y space-right2'>
-                <span class="strong">92.7% </span>
+                <span class="strong">92.67% </span>
                 <span class="quiet">Lines</span>
-                <span class='fraction'>178/192</span>
+                <span class='fraction'>177/191</span>
             </div>
         
             
@@ -257,8 +257,9 @@
 <a name='L192'></a><a href='#L192'>192</a>
 <a name='L193'></a><a href='#L193'>193</a>
 <a name='L194'></a><a href='#L194'>194</a>
-<a name='L195'></a><a href='#L195'>195</a>
-<a name='L196'></a><a href='#L196'>196</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">15x</span>
+<a name='L195'></a><a href='#L195'>195</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">15x</span>
+<span class="cline-any cline-yes">15x</span>
+<span class="cline-any cline-yes">15x</span>
 <span class="cline-any cline-yes">15x</span>
 <span class="cline-any cline-yes">15x</span>
 <span class="cline-any cline-yes">15x</span>
@@ -319,6 +320,8 @@
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">2x</span>
 <span class="cline-any cline-yes">15x</span>
 <span class="cline-any cline-yes">15x</span>
@@ -348,6 +351,7 @@
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-no">&nbsp;</span>
 <span class="cline-any cline-no">&nbsp;</span>
 <span class="cline-any cline-yes">1x</span>
@@ -356,7 +360,6 @@
 <span class="cline-any cline-yes">2x</span>
 <span class="cline-any cline-yes">2x</span>
 <span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">2x</span>
 <span class="cline-any cline-yes">3x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
@@ -367,10 +370,6 @@
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">3x</span>
 <span class="cline-any cline-no">&nbsp;</span>
 <span class="cline-any cline-no">&nbsp;</span>
@@ -407,11 +406,6 @@
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-no">&nbsp;</span>
 <span class="cline-any cline-no">&nbsp;</span>
 <span class="cline-any cline-yes">1x</span>
@@ -422,6 +416,7 @@
 <span class="cline-any cline-yes">15x</span>
 <span class="cline-any cline-yes">15x</span>
 <span class="cline-any cline-yes">4x</span>
+<span class="cline-any cline-yes">4x</span>
 <span class="cline-any cline-no">&nbsp;</span>
 <span class="cline-any cline-no">&nbsp;</span>
 <span class="cline-any cline-yes">4x</span>
@@ -431,25 +426,28 @@
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">3x</span>
 <span class="cline-any cline-yes">3x</span>
+<span class="cline-any cline-yes">3x</span>
 <span class="cline-any cline-yes">15x</span>
 <span class="cline-any cline-yes">15x</span>
 <span class="cline-any cline-yes">15x</span>
 <span class="cline-any cline-yes">15x</span>
 <span class="cline-any cline-yes">15x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">6x</span>
+<span class="cline-any cline-yes">7x</span>
+<span class="cline-any cline-yes">7x</span>
+<span class="cline-any cline-yes">7x</span>
+<span class="cline-any cline-yes">7x</span>
+<span class="cline-any cline-yes">7x</span>
+<span class="cline-any cline-yes">7x</span>
+<span class="cline-any cline-yes">7x</span>
+<span class="cline-any cline-yes">7x</span>
+<span class="cline-any cline-yes">7x</span>
+<span class="cline-any cline-yes">7x</span>
+<span class="cline-any cline-yes">7x</span>
+<span class="cline-any cline-yes">7x</span>
+<span class="cline-any cline-yes">7x</span>
 <span class="cline-any cline-no">&nbsp;</span>
 <span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-yes">6x</span>
+<span class="cline-any cline-yes">7x</span>
 <span class="cline-any cline-neutral">&nbsp;</span>
 <span class="cline-any cline-neutral">&nbsp;</span>
 <span class="cline-any cline-neutral">&nbsp;</span>
@@ -457,8 +455,10 @@
 import Chat from "../models/Chat.js";
 import { aiDeleteModel, aiGetModels, aiGetModel, aiInstallModel, aiIsRunning, summarizeText } from "../utils/handleAI.js";
 import { mapStoredMessagesToChatMessages } from "@langchain/core/messages";
-import { createRecord, findOneRecord, findRecords } from '../utils/handleDB.js';
+import { createRecord, findOneRecord, findRecordByID, findRecords } from '../utils/handleDB.js';
 import { prefillDocumentObject } from '../utils/handleSchemes.js';
+import { performance } from "node:perf_hooks";
+&nbsp;
 &nbsp;
 &nbsp;
 &nbsp;
@@ -510,7 +510,9 @@ export const getModel = async (req, res, next) =&gt; {
 export const installModel = async (req, res, next) =&gt; {
   try {
     const response = await aiInstallModel(req.body.model);
-    return res.json(response);
+    const model = await aiFilterModelsByName(req.body.model);
+&nbsp;
+    return res.json({ message: response.message, model });
   } catch (error) {
     next(error);
   }
@@ -540,6 +542,7 @@ export const getChat = async (req, res, next) =&gt; {
     try {
       // create chat and remember ID
       req.body.chatId = await createChat(req.body.model, req.body.input);
+&nbsp;
       // return
       return next();
     } <span class="branch-0 cbranch-no" title="branch not covered" >catch (error) {</span>
@@ -550,21 +553,16 @@ export const getChat = async (req, res, next) =&gt; {
   // IF CHATID GIVEN
   try {
     // fetch chat record
-    const record = await findOneRecord(Chat, { id: req.body.chatId });
-&nbsp;
+    const record = await findRecordByID(Chat, req.body.chatId);
     if (!record) {
       return res.status(404).json({ message: `No chat history with ID ${req.body.chatId} found.` });
     }
-    console.log("🚀 ~ getChat ~ record SIC:", record);
-&nbsp;
-&nbsp;
     // remember chat history
     // cite: https://js.langchain.com/v0.1/docs/modules/memory/chat_messages/custom/
+    performance.mark('mapStoredMessagesToChatMessages:start');
     req.body.chatHistory = mapStoredMessagesToChatMessages(record.chatHistory);
-&nbsp;
-    console.log("🚀 ~ getChat ~ req.body.chatHistory:", req.body.chatHistory);
-&nbsp;
-&nbsp;
+    performance.mark('mapStoredMessagesToChatMessages:end');
+    // go on
     next();
   } <span class="branch-0 cbranch-no" title="branch not covered" >catch (error) {</span>
 <span class="cstat-no" title="statement not covered" >    next(error);</span>
@@ -593,18 +591,13 @@ export const getChats = async (req, res, next) =&gt; {
 */
 export const createChat = async (model, input) =&gt; {
   try {
+    performance.mark('create_chat:start');
     // create chat title
     const title = await summarizeText(model, input);
-&nbsp;
-    console.log("🚀 ~ createChat ~ title:", title);
-&nbsp;
     // create record
     const record = await createRecord(Chat, prefillDocumentObject(Chat, { title }));
-&nbsp;
-    console.log("🚀 ~ createChat ~ record:", record);
-&nbsp;
-&nbsp;
     // return record id
+    performance.mark('create_chat:end');
     return record.id;
   } <span class="branch-0 cbranch-no" title="branch not covered" >catch (error) {</span>
 <span class="cstat-no" title="statement not covered" >    throw error;</span>
@@ -616,6 +609,7 @@ export const createChat = async (model, input) =&gt; {
  * CHECK IF REQUESTED MODEL IS AVAILABLE
  */
 export const checkRequestedModel = async (req, res, next) =&gt; {
+  performance.mark('checkRequestedModel:start');
   if (!req.body.model) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
 <span class="cstat-no" title="statement not covered" >    return res.status(500).json({ error: `No chat model requested.` });</span>
 <span class="cstat-no" title="statement not covered" >  }</span>
@@ -624,6 +618,7 @@ export const checkRequestedModel = async (req, res, next) =&gt; {
   if (!models.length) {
     return res.status(500).json({ error: `Chat model ${req.body.model} not found.` });
   }
+  performance.mark('checkRequestedModel:end');
   next();
 };
 &nbsp;
@@ -632,6 +627,7 @@ export const checkRequestedModel = async (req, res, next) =&gt; {
  */
 export const aiFilterModelsByName = async (strFilter = '') =&gt; {
   try {
+    performance.mark('aiFilterModelsByName:start');
     // fetch all available models
     const avail = await aiGetModels();
 &nbsp;
@@ -640,6 +636,7 @@ export const aiFilterModelsByName = async (strFilter = '') =&gt; {
     // set regex query
     const regex = new RegExp(strFilter, 'i');
     // filter models by regex query
+    performance.mark('aiFilterModelsByName:end');
     return avail.models.filter((model) =&gt; regex.test(model.name));
   } <span class="branch-0 cbranch-no" title="branch not covered" >catch (error) {</span>
 <span class="cstat-no" title="statement not covered" >    throw error;</span>
@@ -655,7 +652,7 @@ export const aiFilterModelsByName = async (strFilter = '') =&gt; {
             <div class='footer quiet pad2 space-top1 center small'>
                 Code coverage generated by
                 <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
-                at 2024-07-28T19:23:24.511Z
+                at 2024-08-07T15:59:44.935Z
             </div>
         <script src="../../prettify.js"></script>
         <script>
diff --git a/coverage/ragchat-api/controllers/Auth.js.html b/coverage/ragchat-api/controllers/Auth.js.html
index 850b2ad..9874cfa 100644
--- a/coverage/ragchat-api/controllers/Auth.js.html
+++ b/coverage/ragchat-api/controllers/Auth.js.html
@@ -23,9 +23,9 @@
         <div class='clearfix'>
             
             <div class='fl pad1y space-right2'>
-                <span class="strong">93.08% </span>
+                <span class="strong">93.44% </span>
                 <span class="quiet">Statements</span>
-                <span class='fraction'>202/217</span>
+                <span class='fraction'>214/229</span>
             </div>
         
             
@@ -44,9 +44,9 @@
         
             
             <div class='fl pad1y space-right2'>
-                <span class="strong">93.08% </span>
+                <span class="strong">93.44% </span>
                 <span class="quiet">Lines</span>
-                <span class='fraction'>202/217</span>
+                <span class='fraction'>214/229</span>
             </div>
         
             
@@ -281,7 +281,19 @@
 <a name='L216'></a><a href='#L216'>216</a>
 <a name='L217'></a><a href='#L217'>217</a>
 <a name='L218'></a><a href='#L218'>218</a>
-<a name='L219'></a><a href='#L219'>219</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
+<a name='L219'></a><a href='#L219'>219</a>
+<a name='L220'></a><a href='#L220'>220</a>
+<a name='L221'></a><a href='#L221'>221</a>
+<a name='L222'></a><a href='#L222'>222</a>
+<a name='L223'></a><a href='#L223'>223</a>
+<a name='L224'></a><a href='#L224'>224</a>
+<a name='L225'></a><a href='#L225'>225</a>
+<a name='L226'></a><a href='#L226'>226</a>
+<a name='L227'></a><a href='#L227'>227</a>
+<a name='L228'></a><a href='#L228'>228</a>
+<a name='L229'></a><a href='#L229'>229</a>
+<a name='L230'></a><a href='#L230'>230</a>
+<a name='L231'></a><a href='#L231'>231</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
@@ -306,6 +318,8 @@
 <span class="cline-any cline-yes">2x</span>
 <span class="cline-any cline-yes">2x</span>
 <span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
 <span class="cline-any cline-no">&nbsp;</span>
 <span class="cline-any cline-no">&nbsp;</span>
 <span class="cline-any cline-yes">2x</span>
@@ -322,6 +336,7 @@
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-no">&nbsp;</span>
 <span class="cline-any cline-no">&nbsp;</span>
 <span class="cline-any cline-yes">1x</span>
@@ -343,7 +358,6 @@
 <span class="cline-any cline-yes">4x</span>
 <span class="cline-any cline-yes">4x</span>
 <span class="cline-any cline-yes">4x</span>
-<span class="cline-any cline-yes">4x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">3x</span>
@@ -353,6 +367,7 @@
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">2x</span>
 <span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
 <span class="cline-any cline-yes">4x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
@@ -371,6 +386,11 @@
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">4x</span>
 <span class="cline-any cline-no">&nbsp;</span>
 <span class="cline-any cline-no">&nbsp;</span>
@@ -414,6 +434,7 @@
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-no">&nbsp;</span>
 <span class="cline-any cline-no">&nbsp;</span>
 <span class="cline-any cline-yes">1x</span>
@@ -424,6 +445,8 @@
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">2x</span>
 <span class="cline-any cline-yes">2x</span>
 <span class="cline-any cline-yes">2x</span>
@@ -448,6 +471,7 @@
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-no">&nbsp;</span>
 <span class="cline-any cline-no">&nbsp;</span>
 <span class="cline-any cline-yes">1x</span>
@@ -501,7 +525,7 @@
 <span class="cline-any cline-neutral">&nbsp;</span>
 <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { createAccessToken, createPasswordToken, createRefreshToken, createVerificationToken, deleteRefreshToken, verifyRefreshToken } from "../utils/handleTokens.js";
 import { sendEmail } from "../utils/handleMailer.js";
-import { findOneRecord, updateOneRecord } from "../utils/handleDB.js";
+import { findOneAndUpdate, findOneRecord, updateOneRecord } from "../utils/handleDB.js";
 import User from "../models/User.js";
 import bcrypt from 'bcrypt';
 import { hideConfidentialFields } from "../utils/handleSchemes.js";
@@ -516,8 +540,10 @@ export const sendVerificationEmail = async (req, res, next) =&gt; {
 &nbsp;
     let subject = "[RagChat] Account Verification";
     let to = req.document.email;
-    let link = `${process.env.FRONTEND_URL}/verification/${verificationToken}`;
-    let html = `&lt;p&gt;Hi&lt;p&gt;&lt;br&gt;&lt;p&gt;Please click on the following &lt;a href="${link}"&gt;link&lt;/a&gt; to process the password reset. This Token is valid for ${process.env.PASSWORD_TOKEN_TTL}.&lt;/p&gt;
+    let link = `${process.env.FRONTEND_URL}/signup/${verificationToken}`;
+    let html = `&lt;p&gt;Hi&lt;p&gt;&lt;br&gt;&lt;p&gt;Please click on the following &lt;a href="${link}"&gt;link&lt;/a&gt; to process the password reset. 
+    This Token is valid for ${process.env.PASSWORD_TOKEN_TTL}.&lt;/p&gt;
+    &lt;p&gt;${link}&lt;/p&gt;
     &lt;p&gt;${verificationToken}&lt;/p&gt;
          &lt;br&gt;&lt;p&gt;If you did not request this, please ignore this email.&lt;/p&gt;`;
     await sendEmail({ to, subject, html });
@@ -534,8 +560,9 @@ export const sendVerificationEmail = async (req, res, next) =&gt; {
  */
 export const confirmVerification = async (req, res, next) =&gt; {
   try {
-    req.document.verified = true;
-    const updatedUser = await updateOneRecord(req.document);
+    // req.document.verified = true;
+    // const updatedUser = await updateOneRecord(req.document);
+    const updatedUser = await findOneAndUpdate(User, { email: req.body.email }, { verified: true });
     // remember document but remove confidential info
     const document = hideConfidentialFields(User, updatedUser);
     return res.json({ message: 'Account successfully verified. You can now login.' });
@@ -556,9 +583,8 @@ export const login = async (req, res, next) =&gt; {
   // check credentials
   try {
     // search for matching document
+    performance.mark('login:start');
     foundUser = await findOneRecord(User, { email: req.body.email }, '+password');
-&nbsp;
-    // console.log("🚀 ~ login ~ passwords:", req.body.password, foundUser.password);
 &nbsp;
     // wrong login name
     if (!foundUser) {
@@ -571,16 +597,22 @@ export const login = async (req, res, next) =&gt; {
     }
 &nbsp;
     // check for correct password
+    performance.mark('bcryptComparePassword:start');
     if (await bcrypt.compare(req.body.password, foundUser.password)) {
+      performance.mark('bcryptComparePassword:end');
       // remember document but remove confidential info
-      // res.json({ message: foundUser._doc });
       const user = hideConfidentialFields(User, foundUser);
 &nbsp;
       // create jsonwebtoken
+      performance.mark('createAccessToken:start');
       const accessToken = createAccessToken({ id: user._id, role: user.role });
+      performance.mark('createAccessToken:end');
+      performance.mark('createRefreshToken:start');
       const refreshToken = await createRefreshToken({ id: user._id });
+      performance.mark('createRefreshToken:end');
       if (refreshToken == null) <span class="branch-0 cbranch-no" title="branch not covered" >return res.status(500).json({ message: 'Error creating refresh token' });</span>
 &nbsp;
+      performance.mark('login:end');
       // success
       return res
         .cookie('refreshToken', refreshToken, { httpOnly: true, sameSite: 'none', secure: true })
@@ -628,12 +660,15 @@ export const renewAccessToken = async (req, res, next) =&gt; {
 export const logout = async (req, res, next) =&gt; {
   try {
     // delete 
+    console.log("🚀 ~ logout ~ req.cookies.refreshToken:", req.cookies.refreshToken);
     if (req.cookies.refreshToken) <span class="branch-0 cbranch-no" title="branch not covered" >await deleteRefreshToken(req.cookies.refreshToken);</span>
     // return msg
     return res.status(200).json({ message: 'See you soon.' });
   } <span class="branch-0 cbranch-no" title="branch not covered" >catch (error) {</span>
 <span class="cstat-no" title="statement not covered" >    next(error);</span>
 <span class="cstat-no" title="statement not covered" >  }</span>
+&nbsp;
+&nbsp;
 };
 &nbsp;
 &nbsp;
@@ -659,8 +694,9 @@ export const requestPasswordReset = async (req, res, next) =&gt; {
       try {
         let subject = "Password Reset Token";
         let to = foundUser.email;
-        let link = `${process.env.FRONTEND_URL}/reset_password/${passwordToken}/${foundUser._id}`;
+        let link = `${process.env.FRONTEND_URL}/reset_password/${passwordToken}`;
         let html = `&lt;p&gt;Hi&lt;p&gt;&lt;br&gt;&lt;p&gt;Please click on the following &lt;a href="${link}"&gt;link&lt;/a&gt; to process the password reset. This Token is valid for ${process.env.PASSWORD_TOKEN_TTL}.&lt;/p&gt;
+        &lt;p&gt;${link}&lt;/p&gt;
         &lt;p&gt;${passwordToken}&lt;/p&gt;
          &lt;br&gt;&lt;p&gt;If you did not request this, please ignore this email.&lt;/p&gt;`;
         await sendEmail({ to, subject, html });
@@ -724,7 +760,7 @@ export const gateKeeper = async (req, res, next) =&gt; {
             <div class='footer quiet pad2 space-top1 center small'>
                 Code coverage generated by
                 <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
-                at 2024-07-28T19:23:24.511Z
+                at 2024-08-07T15:59:44.935Z
             </div>
         <script src="../../prettify.js"></script>
         <script>
diff --git a/coverage/ragchat-api/controllers/Embeddings.js.html b/coverage/ragchat-api/controllers/Embeddings.js.html
deleted file mode 100644
index 48cff11..0000000
--- a/coverage/ragchat-api/controllers/Embeddings.js.html
+++ /dev/null
@@ -1,1318 +0,0 @@
-
-<!doctype html>
-<html lang="en">
-
-<head>
-    <title>Code coverage report for ragchat-api/controllers/Embeddings.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
-    <meta name="viewport" content="width=device-width, initial-scale=1" />
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-    
-<body>
-<div class='wrapper'>
-    <div class='pad1'>
-        <h1><a href="../../index.html">All files</a> / <a href="index.html">ragchat-api/controllers</a> Embeddings.js</h1>
-        <div class='clearfix'>
-            
-            <div class='fl pad1y space-right2'>
-                <span class="strong">31.54% </span>
-                <span class="quiet">Statements</span>
-                <span class='fraction'>129/409</span>
-            </div>
-        
-            
-            <div class='fl pad1y space-right2'>
-                <span class="strong">0% </span>
-                <span class="quiet">Branches</span>
-                <span class='fraction'>0/1</span>
-            </div>
-        
-            
-            <div class='fl pad1y space-right2'>
-                <span class="strong">0% </span>
-                <span class="quiet">Functions</span>
-                <span class='fraction'>0/13</span>
-            </div>
-        
-            
-            <div class='fl pad1y space-right2'>
-                <span class="strong">31.54% </span>
-                <span class="quiet">Lines</span>
-                <span class='fraction'>129/409</span>
-            </div>
-        
-            
-        </div>
-        <p class="quiet">
-            Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
-        </p>
-        <template id="filterTemplate">
-            <div class="quiet">
-                Filter:
-                <input type="search" id="fileSearch">
-            </div>
-        </template>
-    </div>
-    <div class='status-line low'></div>
-    <pre><table class="coverage">
-<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
-<a name='L2'></a><a href='#L2'>2</a>
-<a name='L3'></a><a href='#L3'>3</a>
-<a name='L4'></a><a href='#L4'>4</a>
-<a name='L5'></a><a href='#L5'>5</a>
-<a name='L6'></a><a href='#L6'>6</a>
-<a name='L7'></a><a href='#L7'>7</a>
-<a name='L8'></a><a href='#L8'>8</a>
-<a name='L9'></a><a href='#L9'>9</a>
-<a name='L10'></a><a href='#L10'>10</a>
-<a name='L11'></a><a href='#L11'>11</a>
-<a name='L12'></a><a href='#L12'>12</a>
-<a name='L13'></a><a href='#L13'>13</a>
-<a name='L14'></a><a href='#L14'>14</a>
-<a name='L15'></a><a href='#L15'>15</a>
-<a name='L16'></a><a href='#L16'>16</a>
-<a name='L17'></a><a href='#L17'>17</a>
-<a name='L18'></a><a href='#L18'>18</a>
-<a name='L19'></a><a href='#L19'>19</a>
-<a name='L20'></a><a href='#L20'>20</a>
-<a name='L21'></a><a href='#L21'>21</a>
-<a name='L22'></a><a href='#L22'>22</a>
-<a name='L23'></a><a href='#L23'>23</a>
-<a name='L24'></a><a href='#L24'>24</a>
-<a name='L25'></a><a href='#L25'>25</a>
-<a name='L26'></a><a href='#L26'>26</a>
-<a name='L27'></a><a href='#L27'>27</a>
-<a name='L28'></a><a href='#L28'>28</a>
-<a name='L29'></a><a href='#L29'>29</a>
-<a name='L30'></a><a href='#L30'>30</a>
-<a name='L31'></a><a href='#L31'>31</a>
-<a name='L32'></a><a href='#L32'>32</a>
-<a name='L33'></a><a href='#L33'>33</a>
-<a name='L34'></a><a href='#L34'>34</a>
-<a name='L35'></a><a href='#L35'>35</a>
-<a name='L36'></a><a href='#L36'>36</a>
-<a name='L37'></a><a href='#L37'>37</a>
-<a name='L38'></a><a href='#L38'>38</a>
-<a name='L39'></a><a href='#L39'>39</a>
-<a name='L40'></a><a href='#L40'>40</a>
-<a name='L41'></a><a href='#L41'>41</a>
-<a name='L42'></a><a href='#L42'>42</a>
-<a name='L43'></a><a href='#L43'>43</a>
-<a name='L44'></a><a href='#L44'>44</a>
-<a name='L45'></a><a href='#L45'>45</a>
-<a name='L46'></a><a href='#L46'>46</a>
-<a name='L47'></a><a href='#L47'>47</a>
-<a name='L48'></a><a href='#L48'>48</a>
-<a name='L49'></a><a href='#L49'>49</a>
-<a name='L50'></a><a href='#L50'>50</a>
-<a name='L51'></a><a href='#L51'>51</a>
-<a name='L52'></a><a href='#L52'>52</a>
-<a name='L53'></a><a href='#L53'>53</a>
-<a name='L54'></a><a href='#L54'>54</a>
-<a name='L55'></a><a href='#L55'>55</a>
-<a name='L56'></a><a href='#L56'>56</a>
-<a name='L57'></a><a href='#L57'>57</a>
-<a name='L58'></a><a href='#L58'>58</a>
-<a name='L59'></a><a href='#L59'>59</a>
-<a name='L60'></a><a href='#L60'>60</a>
-<a name='L61'></a><a href='#L61'>61</a>
-<a name='L62'></a><a href='#L62'>62</a>
-<a name='L63'></a><a href='#L63'>63</a>
-<a name='L64'></a><a href='#L64'>64</a>
-<a name='L65'></a><a href='#L65'>65</a>
-<a name='L66'></a><a href='#L66'>66</a>
-<a name='L67'></a><a href='#L67'>67</a>
-<a name='L68'></a><a href='#L68'>68</a>
-<a name='L69'></a><a href='#L69'>69</a>
-<a name='L70'></a><a href='#L70'>70</a>
-<a name='L71'></a><a href='#L71'>71</a>
-<a name='L72'></a><a href='#L72'>72</a>
-<a name='L73'></a><a href='#L73'>73</a>
-<a name='L74'></a><a href='#L74'>74</a>
-<a name='L75'></a><a href='#L75'>75</a>
-<a name='L76'></a><a href='#L76'>76</a>
-<a name='L77'></a><a href='#L77'>77</a>
-<a name='L78'></a><a href='#L78'>78</a>
-<a name='L79'></a><a href='#L79'>79</a>
-<a name='L80'></a><a href='#L80'>80</a>
-<a name='L81'></a><a href='#L81'>81</a>
-<a name='L82'></a><a href='#L82'>82</a>
-<a name='L83'></a><a href='#L83'>83</a>
-<a name='L84'></a><a href='#L84'>84</a>
-<a name='L85'></a><a href='#L85'>85</a>
-<a name='L86'></a><a href='#L86'>86</a>
-<a name='L87'></a><a href='#L87'>87</a>
-<a name='L88'></a><a href='#L88'>88</a>
-<a name='L89'></a><a href='#L89'>89</a>
-<a name='L90'></a><a href='#L90'>90</a>
-<a name='L91'></a><a href='#L91'>91</a>
-<a name='L92'></a><a href='#L92'>92</a>
-<a name='L93'></a><a href='#L93'>93</a>
-<a name='L94'></a><a href='#L94'>94</a>
-<a name='L95'></a><a href='#L95'>95</a>
-<a name='L96'></a><a href='#L96'>96</a>
-<a name='L97'></a><a href='#L97'>97</a>
-<a name='L98'></a><a href='#L98'>98</a>
-<a name='L99'></a><a href='#L99'>99</a>
-<a name='L100'></a><a href='#L100'>100</a>
-<a name='L101'></a><a href='#L101'>101</a>
-<a name='L102'></a><a href='#L102'>102</a>
-<a name='L103'></a><a href='#L103'>103</a>
-<a name='L104'></a><a href='#L104'>104</a>
-<a name='L105'></a><a href='#L105'>105</a>
-<a name='L106'></a><a href='#L106'>106</a>
-<a name='L107'></a><a href='#L107'>107</a>
-<a name='L108'></a><a href='#L108'>108</a>
-<a name='L109'></a><a href='#L109'>109</a>
-<a name='L110'></a><a href='#L110'>110</a>
-<a name='L111'></a><a href='#L111'>111</a>
-<a name='L112'></a><a href='#L112'>112</a>
-<a name='L113'></a><a href='#L113'>113</a>
-<a name='L114'></a><a href='#L114'>114</a>
-<a name='L115'></a><a href='#L115'>115</a>
-<a name='L116'></a><a href='#L116'>116</a>
-<a name='L117'></a><a href='#L117'>117</a>
-<a name='L118'></a><a href='#L118'>118</a>
-<a name='L119'></a><a href='#L119'>119</a>
-<a name='L120'></a><a href='#L120'>120</a>
-<a name='L121'></a><a href='#L121'>121</a>
-<a name='L122'></a><a href='#L122'>122</a>
-<a name='L123'></a><a href='#L123'>123</a>
-<a name='L124'></a><a href='#L124'>124</a>
-<a name='L125'></a><a href='#L125'>125</a>
-<a name='L126'></a><a href='#L126'>126</a>
-<a name='L127'></a><a href='#L127'>127</a>
-<a name='L128'></a><a href='#L128'>128</a>
-<a name='L129'></a><a href='#L129'>129</a>
-<a name='L130'></a><a href='#L130'>130</a>
-<a name='L131'></a><a href='#L131'>131</a>
-<a name='L132'></a><a href='#L132'>132</a>
-<a name='L133'></a><a href='#L133'>133</a>
-<a name='L134'></a><a href='#L134'>134</a>
-<a name='L135'></a><a href='#L135'>135</a>
-<a name='L136'></a><a href='#L136'>136</a>
-<a name='L137'></a><a href='#L137'>137</a>
-<a name='L138'></a><a href='#L138'>138</a>
-<a name='L139'></a><a href='#L139'>139</a>
-<a name='L140'></a><a href='#L140'>140</a>
-<a name='L141'></a><a href='#L141'>141</a>
-<a name='L142'></a><a href='#L142'>142</a>
-<a name='L143'></a><a href='#L143'>143</a>
-<a name='L144'></a><a href='#L144'>144</a>
-<a name='L145'></a><a href='#L145'>145</a>
-<a name='L146'></a><a href='#L146'>146</a>
-<a name='L147'></a><a href='#L147'>147</a>
-<a name='L148'></a><a href='#L148'>148</a>
-<a name='L149'></a><a href='#L149'>149</a>
-<a name='L150'></a><a href='#L150'>150</a>
-<a name='L151'></a><a href='#L151'>151</a>
-<a name='L152'></a><a href='#L152'>152</a>
-<a name='L153'></a><a href='#L153'>153</a>
-<a name='L154'></a><a href='#L154'>154</a>
-<a name='L155'></a><a href='#L155'>155</a>
-<a name='L156'></a><a href='#L156'>156</a>
-<a name='L157'></a><a href='#L157'>157</a>
-<a name='L158'></a><a href='#L158'>158</a>
-<a name='L159'></a><a href='#L159'>159</a>
-<a name='L160'></a><a href='#L160'>160</a>
-<a name='L161'></a><a href='#L161'>161</a>
-<a name='L162'></a><a href='#L162'>162</a>
-<a name='L163'></a><a href='#L163'>163</a>
-<a name='L164'></a><a href='#L164'>164</a>
-<a name='L165'></a><a href='#L165'>165</a>
-<a name='L166'></a><a href='#L166'>166</a>
-<a name='L167'></a><a href='#L167'>167</a>
-<a name='L168'></a><a href='#L168'>168</a>
-<a name='L169'></a><a href='#L169'>169</a>
-<a name='L170'></a><a href='#L170'>170</a>
-<a name='L171'></a><a href='#L171'>171</a>
-<a name='L172'></a><a href='#L172'>172</a>
-<a name='L173'></a><a href='#L173'>173</a>
-<a name='L174'></a><a href='#L174'>174</a>
-<a name='L175'></a><a href='#L175'>175</a>
-<a name='L176'></a><a href='#L176'>176</a>
-<a name='L177'></a><a href='#L177'>177</a>
-<a name='L178'></a><a href='#L178'>178</a>
-<a name='L179'></a><a href='#L179'>179</a>
-<a name='L180'></a><a href='#L180'>180</a>
-<a name='L181'></a><a href='#L181'>181</a>
-<a name='L182'></a><a href='#L182'>182</a>
-<a name='L183'></a><a href='#L183'>183</a>
-<a name='L184'></a><a href='#L184'>184</a>
-<a name='L185'></a><a href='#L185'>185</a>
-<a name='L186'></a><a href='#L186'>186</a>
-<a name='L187'></a><a href='#L187'>187</a>
-<a name='L188'></a><a href='#L188'>188</a>
-<a name='L189'></a><a href='#L189'>189</a>
-<a name='L190'></a><a href='#L190'>190</a>
-<a name='L191'></a><a href='#L191'>191</a>
-<a name='L192'></a><a href='#L192'>192</a>
-<a name='L193'></a><a href='#L193'>193</a>
-<a name='L194'></a><a href='#L194'>194</a>
-<a name='L195'></a><a href='#L195'>195</a>
-<a name='L196'></a><a href='#L196'>196</a>
-<a name='L197'></a><a href='#L197'>197</a>
-<a name='L198'></a><a href='#L198'>198</a>
-<a name='L199'></a><a href='#L199'>199</a>
-<a name='L200'></a><a href='#L200'>200</a>
-<a name='L201'></a><a href='#L201'>201</a>
-<a name='L202'></a><a href='#L202'>202</a>
-<a name='L203'></a><a href='#L203'>203</a>
-<a name='L204'></a><a href='#L204'>204</a>
-<a name='L205'></a><a href='#L205'>205</a>
-<a name='L206'></a><a href='#L206'>206</a>
-<a name='L207'></a><a href='#L207'>207</a>
-<a name='L208'></a><a href='#L208'>208</a>
-<a name='L209'></a><a href='#L209'>209</a>
-<a name='L210'></a><a href='#L210'>210</a>
-<a name='L211'></a><a href='#L211'>211</a>
-<a name='L212'></a><a href='#L212'>212</a>
-<a name='L213'></a><a href='#L213'>213</a>
-<a name='L214'></a><a href='#L214'>214</a>
-<a name='L215'></a><a href='#L215'>215</a>
-<a name='L216'></a><a href='#L216'>216</a>
-<a name='L217'></a><a href='#L217'>217</a>
-<a name='L218'></a><a href='#L218'>218</a>
-<a name='L219'></a><a href='#L219'>219</a>
-<a name='L220'></a><a href='#L220'>220</a>
-<a name='L221'></a><a href='#L221'>221</a>
-<a name='L222'></a><a href='#L222'>222</a>
-<a name='L223'></a><a href='#L223'>223</a>
-<a name='L224'></a><a href='#L224'>224</a>
-<a name='L225'></a><a href='#L225'>225</a>
-<a name='L226'></a><a href='#L226'>226</a>
-<a name='L227'></a><a href='#L227'>227</a>
-<a name='L228'></a><a href='#L228'>228</a>
-<a name='L229'></a><a href='#L229'>229</a>
-<a name='L230'></a><a href='#L230'>230</a>
-<a name='L231'></a><a href='#L231'>231</a>
-<a name='L232'></a><a href='#L232'>232</a>
-<a name='L233'></a><a href='#L233'>233</a>
-<a name='L234'></a><a href='#L234'>234</a>
-<a name='L235'></a><a href='#L235'>235</a>
-<a name='L236'></a><a href='#L236'>236</a>
-<a name='L237'></a><a href='#L237'>237</a>
-<a name='L238'></a><a href='#L238'>238</a>
-<a name='L239'></a><a href='#L239'>239</a>
-<a name='L240'></a><a href='#L240'>240</a>
-<a name='L241'></a><a href='#L241'>241</a>
-<a name='L242'></a><a href='#L242'>242</a>
-<a name='L243'></a><a href='#L243'>243</a>
-<a name='L244'></a><a href='#L244'>244</a>
-<a name='L245'></a><a href='#L245'>245</a>
-<a name='L246'></a><a href='#L246'>246</a>
-<a name='L247'></a><a href='#L247'>247</a>
-<a name='L248'></a><a href='#L248'>248</a>
-<a name='L249'></a><a href='#L249'>249</a>
-<a name='L250'></a><a href='#L250'>250</a>
-<a name='L251'></a><a href='#L251'>251</a>
-<a name='L252'></a><a href='#L252'>252</a>
-<a name='L253'></a><a href='#L253'>253</a>
-<a name='L254'></a><a href='#L254'>254</a>
-<a name='L255'></a><a href='#L255'>255</a>
-<a name='L256'></a><a href='#L256'>256</a>
-<a name='L257'></a><a href='#L257'>257</a>
-<a name='L258'></a><a href='#L258'>258</a>
-<a name='L259'></a><a href='#L259'>259</a>
-<a name='L260'></a><a href='#L260'>260</a>
-<a name='L261'></a><a href='#L261'>261</a>
-<a name='L262'></a><a href='#L262'>262</a>
-<a name='L263'></a><a href='#L263'>263</a>
-<a name='L264'></a><a href='#L264'>264</a>
-<a name='L265'></a><a href='#L265'>265</a>
-<a name='L266'></a><a href='#L266'>266</a>
-<a name='L267'></a><a href='#L267'>267</a>
-<a name='L268'></a><a href='#L268'>268</a>
-<a name='L269'></a><a href='#L269'>269</a>
-<a name='L270'></a><a href='#L270'>270</a>
-<a name='L271'></a><a href='#L271'>271</a>
-<a name='L272'></a><a href='#L272'>272</a>
-<a name='L273'></a><a href='#L273'>273</a>
-<a name='L274'></a><a href='#L274'>274</a>
-<a name='L275'></a><a href='#L275'>275</a>
-<a name='L276'></a><a href='#L276'>276</a>
-<a name='L277'></a><a href='#L277'>277</a>
-<a name='L278'></a><a href='#L278'>278</a>
-<a name='L279'></a><a href='#L279'>279</a>
-<a name='L280'></a><a href='#L280'>280</a>
-<a name='L281'></a><a href='#L281'>281</a>
-<a name='L282'></a><a href='#L282'>282</a>
-<a name='L283'></a><a href='#L283'>283</a>
-<a name='L284'></a><a href='#L284'>284</a>
-<a name='L285'></a><a href='#L285'>285</a>
-<a name='L286'></a><a href='#L286'>286</a>
-<a name='L287'></a><a href='#L287'>287</a>
-<a name='L288'></a><a href='#L288'>288</a>
-<a name='L289'></a><a href='#L289'>289</a>
-<a name='L290'></a><a href='#L290'>290</a>
-<a name='L291'></a><a href='#L291'>291</a>
-<a name='L292'></a><a href='#L292'>292</a>
-<a name='L293'></a><a href='#L293'>293</a>
-<a name='L294'></a><a href='#L294'>294</a>
-<a name='L295'></a><a href='#L295'>295</a>
-<a name='L296'></a><a href='#L296'>296</a>
-<a name='L297'></a><a href='#L297'>297</a>
-<a name='L298'></a><a href='#L298'>298</a>
-<a name='L299'></a><a href='#L299'>299</a>
-<a name='L300'></a><a href='#L300'>300</a>
-<a name='L301'></a><a href='#L301'>301</a>
-<a name='L302'></a><a href='#L302'>302</a>
-<a name='L303'></a><a href='#L303'>303</a>
-<a name='L304'></a><a href='#L304'>304</a>
-<a name='L305'></a><a href='#L305'>305</a>
-<a name='L306'></a><a href='#L306'>306</a>
-<a name='L307'></a><a href='#L307'>307</a>
-<a name='L308'></a><a href='#L308'>308</a>
-<a name='L309'></a><a href='#L309'>309</a>
-<a name='L310'></a><a href='#L310'>310</a>
-<a name='L311'></a><a href='#L311'>311</a>
-<a name='L312'></a><a href='#L312'>312</a>
-<a name='L313'></a><a href='#L313'>313</a>
-<a name='L314'></a><a href='#L314'>314</a>
-<a name='L315'></a><a href='#L315'>315</a>
-<a name='L316'></a><a href='#L316'>316</a>
-<a name='L317'></a><a href='#L317'>317</a>
-<a name='L318'></a><a href='#L318'>318</a>
-<a name='L319'></a><a href='#L319'>319</a>
-<a name='L320'></a><a href='#L320'>320</a>
-<a name='L321'></a><a href='#L321'>321</a>
-<a name='L322'></a><a href='#L322'>322</a>
-<a name='L323'></a><a href='#L323'>323</a>
-<a name='L324'></a><a href='#L324'>324</a>
-<a name='L325'></a><a href='#L325'>325</a>
-<a name='L326'></a><a href='#L326'>326</a>
-<a name='L327'></a><a href='#L327'>327</a>
-<a name='L328'></a><a href='#L328'>328</a>
-<a name='L329'></a><a href='#L329'>329</a>
-<a name='L330'></a><a href='#L330'>330</a>
-<a name='L331'></a><a href='#L331'>331</a>
-<a name='L332'></a><a href='#L332'>332</a>
-<a name='L333'></a><a href='#L333'>333</a>
-<a name='L334'></a><a href='#L334'>334</a>
-<a name='L335'></a><a href='#L335'>335</a>
-<a name='L336'></a><a href='#L336'>336</a>
-<a name='L337'></a><a href='#L337'>337</a>
-<a name='L338'></a><a href='#L338'>338</a>
-<a name='L339'></a><a href='#L339'>339</a>
-<a name='L340'></a><a href='#L340'>340</a>
-<a name='L341'></a><a href='#L341'>341</a>
-<a name='L342'></a><a href='#L342'>342</a>
-<a name='L343'></a><a href='#L343'>343</a>
-<a name='L344'></a><a href='#L344'>344</a>
-<a name='L345'></a><a href='#L345'>345</a>
-<a name='L346'></a><a href='#L346'>346</a>
-<a name='L347'></a><a href='#L347'>347</a>
-<a name='L348'></a><a href='#L348'>348</a>
-<a name='L349'></a><a href='#L349'>349</a>
-<a name='L350'></a><a href='#L350'>350</a>
-<a name='L351'></a><a href='#L351'>351</a>
-<a name='L352'></a><a href='#L352'>352</a>
-<a name='L353'></a><a href='#L353'>353</a>
-<a name='L354'></a><a href='#L354'>354</a>
-<a name='L355'></a><a href='#L355'>355</a>
-<a name='L356'></a><a href='#L356'>356</a>
-<a name='L357'></a><a href='#L357'>357</a>
-<a name='L358'></a><a href='#L358'>358</a>
-<a name='L359'></a><a href='#L359'>359</a>
-<a name='L360'></a><a href='#L360'>360</a>
-<a name='L361'></a><a href='#L361'>361</a>
-<a name='L362'></a><a href='#L362'>362</a>
-<a name='L363'></a><a href='#L363'>363</a>
-<a name='L364'></a><a href='#L364'>364</a>
-<a name='L365'></a><a href='#L365'>365</a>
-<a name='L366'></a><a href='#L366'>366</a>
-<a name='L367'></a><a href='#L367'>367</a>
-<a name='L368'></a><a href='#L368'>368</a>
-<a name='L369'></a><a href='#L369'>369</a>
-<a name='L370'></a><a href='#L370'>370</a>
-<a name='L371'></a><a href='#L371'>371</a>
-<a name='L372'></a><a href='#L372'>372</a>
-<a name='L373'></a><a href='#L373'>373</a>
-<a name='L374'></a><a href='#L374'>374</a>
-<a name='L375'></a><a href='#L375'>375</a>
-<a name='L376'></a><a href='#L376'>376</a>
-<a name='L377'></a><a href='#L377'>377</a>
-<a name='L378'></a><a href='#L378'>378</a>
-<a name='L379'></a><a href='#L379'>379</a>
-<a name='L380'></a><a href='#L380'>380</a>
-<a name='L381'></a><a href='#L381'>381</a>
-<a name='L382'></a><a href='#L382'>382</a>
-<a name='L383'></a><a href='#L383'>383</a>
-<a name='L384'></a><a href='#L384'>384</a>
-<a name='L385'></a><a href='#L385'>385</a>
-<a name='L386'></a><a href='#L386'>386</a>
-<a name='L387'></a><a href='#L387'>387</a>
-<a name='L388'></a><a href='#L388'>388</a>
-<a name='L389'></a><a href='#L389'>389</a>
-<a name='L390'></a><a href='#L390'>390</a>
-<a name='L391'></a><a href='#L391'>391</a>
-<a name='L392'></a><a href='#L392'>392</a>
-<a name='L393'></a><a href='#L393'>393</a>
-<a name='L394'></a><a href='#L394'>394</a>
-<a name='L395'></a><a href='#L395'>395</a>
-<a name='L396'></a><a href='#L396'>396</a>
-<a name='L397'></a><a href='#L397'>397</a>
-<a name='L398'></a><a href='#L398'>398</a>
-<a name='L399'></a><a href='#L399'>399</a>
-<a name='L400'></a><a href='#L400'>400</a>
-<a name='L401'></a><a href='#L401'>401</a>
-<a name='L402'></a><a href='#L402'>402</a>
-<a name='L403'></a><a href='#L403'>403</a>
-<a name='L404'></a><a href='#L404'>404</a>
-<a name='L405'></a><a href='#L405'>405</a>
-<a name='L406'></a><a href='#L406'>406</a>
-<a name='L407'></a><a href='#L407'>407</a>
-<a name='L408'></a><a href='#L408'>408</a>
-<a name='L409'></a><a href='#L409'>409</a>
-<a name='L410'></a><a href='#L410'>410</a>
-<a name='L411'></a><a href='#L411'>411</a>
-<a name='L412'></a><a href='#L412'>412</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-neutral">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">&nbsp;
-import { Ollama } from 'ollama';
-import { aiFilterModelsByName } from "../controllers/AI.js";
-import { ChromaClient } from "chromadb";
-// embeddings
-import { Chroma } from "@langchain/community/vectorstores/chroma";
-import { OllamaEmbeddings } from "@langchain/community/embeddings/ollama";
-import { RecursiveCharacterTextSplitter } from "langchain/text_splitter";
-// loaders - https://js.langchain.com/v0.1/docs/modules/data_connection/document_loaders/
-import { DirectoryLoader } from "langchain/document_loaders/fs/directory";
-import {
-  JSONLoader,
-  JSONLinesLoader,
-} from "langchain/document_loaders/fs/json";
-import { TextLoader } from "langchain/document_loaders/fs/text";
-import { CSVLoader } from "@langchain/community/document_loaders/fs/csv";
-import fs from 'fs';
-import path from 'path';
-import { PDFLoader } from '@langchain/community/document_loaders/fs/pdf';
-import { MultiFileLoader } from "langchain/document_loaders/fs/multi_file";
-&nbsp;
-&nbsp;
-// PROVIDE OLLAMA CONNECTION
-export const ollama = new Ollama({ host: process.env.AI_API_URL });
-// PROVIDE CHROMA-DB CONNECTION
-const chroma = new ChromaClient({ path: process.env.VECTOR_API_URL });
-// PROVIDE OLLAMA EMBEDDER
-export const embeddings = new OllamaEmbeddings({
-  baseUrl: process.env['AI_API_URL'],
-  model: process.env['RAG_MODEL_NAME'],
-  maxConcurrency: 5,
-});
-// PROVIDE UNIFIED  CHROMA VECTORSTORE SETTINGS
-export const chromaVSsettings = {
-  collectionName: process.env['VECTOR_COLLECTION_NAME'],
-  url: process.env['VECTOR_API_URL'],
-  collectionMetadata: {
-    "hnsw:space": "cosine"
-  }
-};
-// PROVIDE VECTOR STORE CONNECTION
-// predefine vectorStoreConnection in global scope
-let vectorStoreConnection;
-try {
-  // check if cectorDB is reachable
-  await chroma.heartbeat();
-  // create connection
-  vectorStoreConnection = await Chroma.fromExistingCollection(embeddings, chromaVSsettings);
-} <span class="branch-0 cbranch-no" title="branch not covered" >catch (error) {</span>
-<span class="cstat-no" title="statement not covered" >  // throw error if connection can't be established</span>
-<span class="cstat-no" title="statement not covered" >  throw new Error(`Error creating VectorDB connection on ${process.env['VECTOR_API_URL']}`);</span>
-<span class="cstat-no" title="statement not covered" >}</span>
-// export vectorStoreConnection
-export default vectorStoreConnection;
-// PROVIDE RETRIEVER
-export const retriever = vectorStoreConnection.asRetriever();
-&nbsp;
-&nbsp;
-&nbsp;
-/** *******************************************************
- * REMOVE VECTOR DB
- */
-export const removeVectorDb = <span class="fstat-no" title="function not covered" >async (req, res, next) =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >  // check if vDB is running</span>
-<span class="cstat-no" title="statement not covered" >  const vectorDBrunning = await isVectorDbAvailable();</span>
-<span class="cstat-no" title="statement not covered" >  // exit if not running</span>
-<span class="cstat-no" title="statement not covered" >  if (!vectorDBrunning) {</span>
-<span class="cstat-no" title="statement not covered" >    return res.status(404).json({ vectorDBrunning });</span>
-<span class="cstat-no" title="statement not covered" >  }</span>
-<span class="cstat-no" title="statement not covered" >  // exit if collection don't exist</span>
-<span class="cstat-no" title="statement not covered" >  if (! await isCollectionAvailable()) {</span>
-<span class="cstat-no" title="statement not covered" >    return res.status(404).json({ error: `VectorDB collection ${process.env['VECTOR_COLLECTION_NAME']} not found.` });</span>
-<span class="cstat-no" title="statement not covered" >  }</span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" >  // delete collection</span>
-<span class="cstat-no" title="statement not covered" >  await chroma.deleteCollection(</span>
-<span class="cstat-no" title="statement not covered" >    { name: process.env['VECTOR_COLLECTION_NAME'] }</span>
-<span class="cstat-no" title="statement not covered" >  );</span>
-<span class="cstat-no" title="statement not covered" >  return res.json({ 'message': 'VectorDB removed.' });</span>
-<span class="cstat-no" title="statement not covered" >};</span>
-&nbsp;
-&nbsp;
-/** *******************************************************
- * CHECK STATUS OF VECTOR DB
- */
-export const getStatus = <span class="fstat-no" title="function not covered" >async (req, res, next) =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >  // check if vDB is running</span>
-<span class="cstat-no" title="statement not covered" >  const vectorDBrunning = await isVectorDbAvailable();</span>
-<span class="cstat-no" title="statement not covered" >  // exit if not running</span>
-<span class="cstat-no" title="statement not covered" >  if (!vectorDBrunning) {</span>
-<span class="cstat-no" title="statement not covered" >    return res.status(404).json({ vectorDBrunning });</span>
-<span class="cstat-no" title="statement not covered" >  }</span>
-<span class="cstat-no" title="statement not covered" >  // check if collection is available</span>
-<span class="cstat-no" title="statement not covered" >  let collection = await isCollectionAvailable();</span>
-<span class="cstat-no" title="statement not covered" >  if (!collection) {</span>
-<span class="cstat-no" title="statement not covered" >    // create collection</span>
-<span class="cstat-no" title="statement not covered" >    // console.log('Creating vector collection...');</span>
-<span class="cstat-no" title="statement not covered" >    collection = await createCollection();</span>
-<span class="cstat-no" title="statement not covered" >  }</span>
-<span class="cstat-no" title="statement not covered" >  // get collection count</span>
-<span class="cstat-no" title="statement not covered" >  const itemCount = await collection.count();</span>
-<span class="cstat-no" title="statement not covered" >  // const items = await collection.get();</span>
-<span class="cstat-no" title="statement not covered" >  // return status</span>
-<span class="cstat-no" title="statement not covered" >  return res.json({ vectorDBrunning, collection, itemCount });</span>
-<span class="cstat-no" title="statement not covered" >};</span>
-&nbsp;
-/** *******************************************************
- * CREATE EMBEDDINGS
- */
-export const createEmbeddings = <span class="fstat-no" title="function not covered" >async (req, res) =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >  // check if collection is available</span>
-<span class="cstat-no" title="statement not covered" >  const collection = await isCollectionAvailable();</span>
-<span class="cstat-no" title="statement not covered" >  if (!collection) {</span>
-<span class="cstat-no" title="statement not covered" >    return res.status(500).json({ error: `VectorDB collection ${process.env['VECTOR_COLLECTION_NAME']} not found.` });</span>
-<span class="cstat-no" title="statement not covered" >  }</span>
-<span class="cstat-no" title="statement not covered" >  // test if model is available</span>
-<span class="cstat-no" title="statement not covered" >  const models = await aiFilterModelsByName(process.env['RAG_MODEL_NAME']);</span>
-<span class="cstat-no" title="statement not covered" >  // install model if missing</span>
-<span class="cstat-no" title="statement not covered" >  if (!models.length) {</span>
-<span class="cstat-no" title="statement not covered" >    console.info('Embedding Model not found. Installing ...');</span>
-<span class="cstat-no" title="statement not covered" >    await ollama.pull({ model: process.env['RAG_MODEL_NAME'] });</span>
-<span class="cstat-no" title="statement not covered" >  }</span>
-<span class="cstat-no" title="statement not covered" >  // console.log('collection count BEFORE', await collection.count());</span>
-<span class="cstat-no" title="statement not covered" >  // load RAG files</span>
-<span class="cstat-no" title="statement not covered" >  const docs = await directoryLoader();</span>
-<span class="cstat-no" title="statement not covered" >  // embed</span>
-<span class="cstat-no" title="statement not covered" >  const loadedDocs = await embedder(docs);</span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" >  // console.log('collection count AFTER', await collection.count());</span>
-<span class="cstat-no" title="statement not covered" >  return res.json({ 'message': 'Embeddings created.' });</span>
-<span class="cstat-no" title="statement not covered" >};</span>
-&nbsp;
-/** *******************************************************
- * UPDATE EMBEDDINGS
- */
-export const updateEmbeddings = <span class="fstat-no" title="function not covered" >async (req, res, next) =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >  // check if collection is available</span>
-<span class="cstat-no" title="statement not covered" >  const collection = await isCollectionAvailable();</span>
-<span class="cstat-no" title="statement not covered" >  if (!collection) {</span>
-<span class="cstat-no" title="statement not covered" >    return res.status(500).json({ error: `VectorDB collection ${process.env['VECTOR_COLLECTION_NAME']} not found.` });</span>
-<span class="cstat-no" title="statement not covered" >  }</span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" >  // #################</span>
-<span class="cstat-no" title="statement not covered" >  // GET CURRENT STATE</span>
-<span class="cstat-no" title="statement not covered" >  // #################  </span>
-<span class="cstat-no" title="statement not covered" >  // save local files incl mtime in object</span>
-<span class="cstat-no" title="statement not covered" >  const currentRAGFiles = await getCurrentRAGFiles();</span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" >  // get all current embeddings in object, equally structured to currentRAGFiles</span>
-<span class="cstat-no" title="statement not covered" >  const embeddingsBefore = await collection.count();</span>
-<span class="cstat-no" title="statement not covered" >  const allCurrentEmbeddings = await collection.get();</span>
-<span class="cstat-no" title="statement not covered" >  const currentEmbeddings = allCurrentEmbeddings.metadatas.reduce((acc, curr) =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >    acc[curr.source] = curr.timestamp;</span>
-<span class="cstat-no" title="statement not covered" >    return acc;</span>
-<span class="cstat-no" title="statement not covered" >  }, {});</span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" >  // #################</span>
-<span class="cstat-no" title="statement not covered" >  // DECIDE WHAT TO DO</span>
-<span class="cstat-no" title="statement not covered" >  // #################</span>
-<span class="cstat-no" title="statement not covered" >  let files2embed = [];</span>
-<span class="cstat-no" title="statement not covered" >  let outdatedEmbeddings = [];</span>
-<span class="cstat-no" title="statement not covered" >  // loop through currentRAGFiles</span>
-<span class="cstat-no" title="statement not covered" >  Object.keys(currentRAGFiles).forEach(async (key) =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >    // RAGFile not in Embeddings =&gt; insert</span>
-<span class="cstat-no" title="statement not covered" >    if (!currentEmbeddings[key]) {</span>
-<span class="cstat-no" title="statement not covered" >      files2embed.push(key);</span>
-<span class="cstat-no" title="statement not covered" >      // delete currentEmbeddings[key];</span>
-<span class="cstat-no" title="statement not covered" >      return;</span>
-<span class="cstat-no" title="statement not covered" >    }</span>
-<span class="cstat-no" title="statement not covered" >    // RAGFile in Embeddings but outdated =&gt; update</span>
-<span class="cstat-no" title="statement not covered" >    if (currentEmbeddings[key] &amp;&amp; currentRAGFiles[key] &gt; currentEmbeddings[key]) {</span>
-<span class="cstat-no" title="statement not covered" >      // console.log("🚀 ~ EMBEDDING IS OUTDATED", key);</span>
-<span class="cstat-no" title="statement not covered" >      files2embed.push(key);</span>
-<span class="cstat-no" title="statement not covered" >      outdatedEmbeddings.push(key);</span>
-<span class="cstat-no" title="statement not covered" >      delete currentEmbeddings[key];</span>
-<span class="cstat-no" title="statement not covered" >      return;</span>
-<span class="cstat-no" title="statement not covered" >    }</span>
-<span class="cstat-no" title="statement not covered" >    // RAGFile in Embeddings and up2date =&gt; do nothing</span>
-<span class="cstat-no" title="statement not covered" >    if (currentEmbeddings[key] &amp;&amp; currentRAGFiles[key] &lt;= currentEmbeddings[key]) {</span>
-<span class="cstat-no" title="statement not covered" >      // console.log("🚀 ~ EMBEDDING IS UP TO DATE", key);</span>
-<span class="cstat-no" title="statement not covered" >      delete currentEmbeddings[key];</span>
-<span class="cstat-no" title="statement not covered" >      return;</span>
-<span class="cstat-no" title="statement not covered" >    }</span>
-<span class="cstat-no" title="statement not covered" >  });</span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" >  // #################</span>
-<span class="cstat-no" title="statement not covered" >  // PROCESS DECISIONS</span>
-<span class="cstat-no" title="statement not covered" >  // #################</span>
-<span class="cstat-no" title="statement not covered" >  // delete outdated embeddings</span>
-<span class="cstat-no" title="statement not covered" >  if (outdatedEmbeddings.length &gt; 0) {</span>
-<span class="cstat-no" title="statement not covered" >    const deletedOutdatedEmbeddings = await deleteEmbeddingsByFileNames(outdatedEmbeddings);</span>
-<span class="cstat-no" title="statement not covered" >  }</span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" >  // embed missing files</span>
-<span class="cstat-no" title="statement not covered" >  if (files2embed.length &gt; 0) {</span>
-<span class="cstat-no" title="statement not covered" >    const docs = await fileLoader(files2embed);</span>
-<span class="cstat-no" title="statement not covered" >    // embed</span>
-<span class="cstat-no" title="statement not covered" >    const loadedDocs = await embedder(docs);</span>
-<span class="cstat-no" title="statement not covered" >  }</span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" >  // Embedding not in RAGFiles =&gt; delete from Embeddings</span>
-<span class="cstat-no" title="statement not covered" >  if (process.env.RAG_DELETE_EMBEDDINGS === 'true' &amp;&amp; Object.keys(currentEmbeddings).length &gt; 0) {</span>
-<span class="cstat-no" title="statement not covered" >    const deletedEmbeddings = await deleteEmbeddingsByFileNames(Object.keys(currentEmbeddings));</span>
-<span class="cstat-no" title="statement not covered" >  }</span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" >  // #################</span>
-<span class="cstat-no" title="statement not covered" >  // FINALIZE</span>
-<span class="cstat-no" title="statement not covered" >  // #################</span>
-<span class="cstat-no" title="statement not covered" >  // make some counts</span>
-<span class="cstat-no" title="statement not covered" >  const newlyEmbedded = files2embed.length - outdatedEmbeddings.length;</span>
-<span class="cstat-no" title="statement not covered" >  const embeddingsAfter = await collection.count();</span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" >  // return result</span>
-<span class="cstat-no" title="statement not covered" >  return res.json({</span>
-<span class="cstat-no" title="statement not covered" >    message: 'Embeddings updated.',</span>
-<span class="cstat-no" title="statement not covered" >    updated: outdatedEmbeddings.length,</span>
-<span class="cstat-no" title="statement not covered" >    added: newlyEmbedded,</span>
-<span class="cstat-no" title="statement not covered" >    deleted: Object.keys(currentEmbeddings).length,</span>
-<span class="cstat-no" title="statement not covered" >    embeddingsBefore,</span>
-<span class="cstat-no" title="statement not covered" >    embeddingsAfter</span>
-<span class="cstat-no" title="statement not covered" >  });</span>
-<span class="cstat-no" title="statement not covered" >};</span>
-&nbsp;
-&nbsp;
-/** *******************************************************
- ####################### FUNCTIONS #######################
- ******************************************************* */
-&nbsp;
-&nbsp;
-/** *******************************************************
-* READ DIRECTORY RECURSIVELY AND RETURN ABSOLUTE PATH OF FILES
-* written by copilot
-*/
-<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function readDirectoryRecursive(directoryPath) {</span></span>
-<span class="cstat-no" title="statement not covered" >  // get all entries in directory</span>
-<span class="cstat-no" title="statement not covered" >  const entries = fs.readdirSync(directoryPath, { withFileTypes: true });</span>
-<span class="cstat-no" title="statement not covered" >  let allEntries = [];</span>
-<span class="cstat-no" title="statement not covered" >  // loop throug entries</span>
-<span class="cstat-no" title="statement not covered" >  entries.forEach(entry =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >    // get full path</span>
-<span class="cstat-no" title="statement not covered" >    const fullPath = path.join(directoryPath, entry.name);</span>
-<span class="cstat-no" title="statement not covered" >    // if entry is directory</span>
-<span class="cstat-no" title="statement not covered" >    if (entry.isDirectory()) {</span>
-<span class="cstat-no" title="statement not covered" >      // fetch all entries recursively by looping in the very same function</span>
-<span class="cstat-no" title="statement not covered" >      allEntries = allEntries.concat(readDirectoryRecursive(fullPath));</span>
-<span class="cstat-no" title="statement not covered" >    } else {</span>
-<span class="cstat-no" title="statement not covered" >      // skip if entry is not a file</span>
-<span class="cstat-no" title="statement not covered" >      if (!entry.isFile()) return;</span>
-<span class="cstat-no" title="statement not covered" >      // add full path to allEntries array</span>
-<span class="cstat-no" title="statement not covered" >      allEntries.push(fullPath);</span>
-<span class="cstat-no" title="statement not covered" >    }</span>
-<span class="cstat-no" title="statement not covered" >  });</span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" >  return allEntries;</span>
-<span class="cstat-no" title="statement not covered" >}</span>
-&nbsp;
-/** *******************************************************
-* GET CURRENT RAG FILES
-*/
-export const getCurrentRAGFiles = <span class="fstat-no" title="function not covered" >async () =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >  // set directory path</span>
-<span class="cstat-no" title="statement not covered" >  const directoryPath = path.join(process.cwd(), process.env.RAG_FOLDER);</span>
-<span class="cstat-no" title="statement not covered" >  // filter unwanted entries and return absolute path of the wanted</span>
-<span class="cstat-no" title="statement not covered" >  const files = readDirectoryRecursive(directoryPath).filter((file) =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >    if (file.endsWith('.gitkeep')) return false;</span>
-<span class="cstat-no" title="statement not covered" >    return true;</span>
-<span class="cstat-no" title="statement not covered" >  });</span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" >  // loop through files</span>
-<span class="cstat-no" title="statement not covered" >  const currentRAGFiles = {};</span>
-<span class="cstat-no" title="statement not covered" >  files.forEach((file) =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >    // skip .gitkeep</span>
-<span class="cstat-no" title="statement not covered" >    if (file === '.gitkeep') return;</span>
-<span class="cstat-no" title="statement not covered" >    // get file stats</span>
-<span class="cstat-no" title="statement not covered" >    const fileStats = fs.statSync(file);</span>
-<span class="cstat-no" title="statement not covered" >    // turn mtime into unix timestamp</span>
-<span class="cstat-no" title="statement not covered" >    let unixtime = Math.floor(new Date(fileStats.mtime).getTime() / 1000);</span>
-<span class="cstat-no" title="statement not covered" >    // store in object</span>
-<span class="cstat-no" title="statement not covered" >    currentRAGFiles[file] = unixtime;</span>
-<span class="cstat-no" title="statement not covered" >  });</span>
-<span class="cstat-no" title="statement not covered" >  return currentRAGFiles;</span>
-<span class="cstat-no" title="statement not covered" >};</span>
-&nbsp;
-&nbsp;
-/** *******************************************************
-* CHECK IF VECTOR DB IS AVAILABLE
-*/
-export const isVectorDbAvailable = <span class="fstat-no" title="function not covered" >async () =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >  let heartbeat;</span>
-<span class="cstat-no" title="statement not covered" >  // console.log('Checking VectorDB availability...');</span>
-<span class="cstat-no" title="statement not covered" >  try {</span>
-<span class="cstat-no" title="statement not covered" >    heartbeat = await chroma.heartbeat();</span>
-<span class="cstat-no" title="statement not covered" >    return true;</span>
-<span class="cstat-no" title="statement not covered" >  } catch (error) {</span>
-<span class="cstat-no" title="statement not covered" >    return false;</span>
-<span class="cstat-no" title="statement not covered" >  }</span>
-<span class="cstat-no" title="statement not covered" >};</span>
-&nbsp;
-/** *******************************************************
-* CHECK IF VECTOR DB COLLECTION IS AVAILABLE
-*/
-export const isCollectionAvailable = <span class="fstat-no" title="function not covered" >async () =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >  // return false if vector db is not available</span>
-<span class="cstat-no" title="statement not covered" >  if (!await isVectorDbAvailable()) {</span>
-<span class="cstat-no" title="statement not covered" >    return false;</span>
-<span class="cstat-no" title="statement not covered" >  }</span>
-<span class="cstat-no" title="statement not covered" >  // get active collections</span>
-<span class="cstat-no" title="statement not covered" >  const collections = await chroma.listCollections();</span>
-<span class="cstat-no" title="statement not covered" >  // check if required collection exists</span>
-<span class="cstat-no" title="statement not covered" >  if (collections.some(collection =&gt; collection.name === process.env['VECTOR_COLLECTION_NAME'])) {</span>
-<span class="cstat-no" title="statement not covered" >    // return collection</span>
-<span class="cstat-no" title="statement not covered" >    return await chroma.getCollection({ name: process.env['VECTOR_COLLECTION_NAME'] });</span>
-<span class="cstat-no" title="statement not covered" >  }</span>
-<span class="cstat-no" title="statement not covered" >  // return false if collection not found</span>
-<span class="cstat-no" title="statement not covered" >  return false;</span>
-<span class="cstat-no" title="statement not covered" >};</span>
-&nbsp;
-&nbsp;
-/** *******************************************************
-* CREATE VECTOR DB COLLECTION
-*/
-export const createCollection = <span class="fstat-no" title="function not covered" >async () =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >  // create collection</span>
-<span class="cstat-no" title="statement not covered" >  try {</span>
-<span class="cstat-no" title="statement not covered" >    return await chroma.createCollection({</span>
-<span class="cstat-no" title="statement not covered" >      name: process.env['VECTOR_COLLECTION_NAME']</span>
-<span class="cstat-no" title="statement not covered" >    });</span>
-<span class="cstat-no" title="statement not covered" >  } catch (error) {</span>
-<span class="cstat-no" title="statement not covered" >    console.error('Error creating VectorDB collection:', error);</span>
-<span class="cstat-no" title="statement not covered" >    next(error);</span>
-<span class="cstat-no" title="statement not covered" >  }</span>
-<span class="cstat-no" title="statement not covered" >};</span>
-&nbsp;
-&nbsp;
-/** *******************************************************
-* LOAD WHOLE FOLDER RECURSIVELY
-*/
-export const directoryLoader = <span class="fstat-no" title="function not covered" >async () =&gt; {</span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" >  const directoryPath = path.join(process.cwd(), process.env.RAG_FOLDER);</span>
-<span class="cstat-no" title="statement not covered" >  // TODO simply skip not mentioned file types</span>
-<span class="cstat-no" title="statement not covered" >  const loader = new DirectoryLoader(</span>
-<span class="cstat-no" title="statement not covered" >    directoryPath,</span>
-<span class="cstat-no" title="statement not covered" >    {</span>
-<span class="cstat-no" title="statement not covered" >      ".json": (path) =&gt; new JSONLoader(path, "/texts"),</span>
-<span class="cstat-no" title="statement not covered" >      ".jsonl": (path) =&gt; new JSONLinesLoader(path, "/html"),</span>
-<span class="cstat-no" title="statement not covered" >      ".txt": (path) =&gt; new TextLoader(path),</span>
-<span class="cstat-no" title="statement not covered" >      ".csv": (path) =&gt; new CSVLoader(path, "text"),</span>
-<span class="cstat-no" title="statement not covered" >      ".pdf": (path) =&gt; new PDFLoader(path, "text"),</span>
-<span class="cstat-no" title="statement not covered" >    }</span>
-<span class="cstat-no" title="statement not covered" >  );</span>
-<span class="cstat-no" title="statement not covered" >  return await loader.load();</span>
-<span class="cstat-no" title="statement not covered" >};</span>
-&nbsp;
-/** *******************************************************
-* LOAD SPECIFIC DOCUMENT
-*/
-export const fileLoader = <span class="fstat-no" title="function not covered" >async (docs = []) =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >  const loader = new MultiFileLoader(</span>
-<span class="cstat-no" title="statement not covered" >    docs,</span>
-<span class="cstat-no" title="statement not covered" >    {</span>
-<span class="cstat-no" title="statement not covered" >      ".json": (path) =&gt; new JSONLoader(path, "/texts"),</span>
-<span class="cstat-no" title="statement not covered" >      ".jsonl": (path) =&gt; new JSONLinesLoader(path, "/html"),</span>
-<span class="cstat-no" title="statement not covered" >      ".txt": (path) =&gt; new TextLoader(path),</span>
-<span class="cstat-no" title="statement not covered" >      ".csv": (path) =&gt; new CSVLoader(path, "text"),</span>
-<span class="cstat-no" title="statement not covered" >      ".pdf": (path) =&gt; new PDFLoader(path, "text"),</span>
-<span class="cstat-no" title="statement not covered" >    }</span>
-<span class="cstat-no" title="statement not covered" >  );</span>
-<span class="cstat-no" title="statement not covered" >  return await loader.load();</span>
-<span class="cstat-no" title="statement not covered" >};</span>
-&nbsp;
-&nbsp;
-/** *******************************************************
-* EMBED GIVEN DOCS
-*/
-export const embedder = <span class="fstat-no" title="function not covered" >async (docs) =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >  // chunk docs </span>
-<span class="cstat-no" title="statement not covered" >  const splitter = new RecursiveCharacterTextSplitter();</span>
-<span class="cstat-no" title="statement not covered" >  const chunks = await splitter.splitDocuments(docs);</span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" >  // add unix timestamp to metadata of all chunks</span>
-<span class="cstat-no" title="statement not covered" >  chunks.forEach(chunk =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >    chunk.metadata.timestamp = Math.floor(new Date().getTime() / 1000);</span>
-<span class="cstat-no" title="statement not covered" >  });</span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" >  // store into vector db</span>
-<span class="cstat-no" title="statement not covered" >  return await Chroma.fromDocuments(</span>
-<span class="cstat-no" title="statement not covered" >    chunks,</span>
-<span class="cstat-no" title="statement not covered" >    embeddings,</span>
-<span class="cstat-no" title="statement not covered" >    chromaVSsettings</span>
-<span class="cstat-no" title="statement not covered" >  );</span>
-<span class="cstat-no" title="statement not covered" >};</span>
-&nbsp;
-&nbsp;
-/** *******************************************************
- * DELETE EMBEDDINGS BY FILE NAME
- */
-export const deleteEmbeddingsByFileNames = <span class="fstat-no" title="function not covered" >async (fileNames = []) =&gt; {</span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" >  // check if collection is available</span>
-<span class="cstat-no" title="statement not covered" >  const collection = await isCollectionAvailable();</span>
-<span class="cstat-no" title="statement not covered" >  if (!collection) {</span>
-<span class="cstat-no" title="statement not covered" >    return res.status(500).json({ error: `VectorDB collection ${process.env['VECTOR_COLLECTION_NAME']} not found.` });</span>
-<span class="cstat-no" title="statement not covered" >  }</span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" >  // delete from embeddings</span>
-<span class="cstat-no" title="statement not covered" >  for (const fileName of fileNames) {</span>
-<span class="cstat-no" title="statement not covered" >    await collection.delete({ where: { source: fileName } });</span>
-<span class="cstat-no" title="statement not covered" >  };</span>
-<span class="cstat-no" title="statement not covered" >  return true;</span>
-<span class="cstat-no" title="statement not covered" >};</span></pre></td></tr></table></pre>
-
-                <div class='push'></div><!-- for sticky footer -->
-            </div><!-- /wrapper -->
-            <div class='footer quiet pad2 space-top1 center small'>
-                Code coverage generated by
-                <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
-                at 2024-07-28T19:23:24.511Z
-            </div>
-        <script src="../../prettify.js"></script>
-        <script>
-            window.onload = function () {
-                prettyPrint();
-            };
-        </script>
-        <script src="../../sorter.js"></script>
-        <script src="../../block-navigation.js"></script>
-    </body>
-</html>
-    
\ No newline at end of file
diff --git a/coverage/ragchat-api/controllers/User.js.html b/coverage/ragchat-api/controllers/User.js.html
index 89fb002..6acaa2b 100644
--- a/coverage/ragchat-api/controllers/User.js.html
+++ b/coverage/ragchat-api/controllers/User.js.html
@@ -23,16 +23,16 @@
         <div class='clearfix'>
             
             <div class='fl pad1y space-right2'>
-                <span class="strong">95.12% </span>
+                <span class="strong">88.88% </span>
                 <span class="quiet">Statements</span>
-                <span class='fraction'>39/41</span>
+                <span class='fraction'>48/54</span>
             </div>
         
             
             <div class='fl pad1y space-right2'>
-                <span class="strong">87.5% </span>
+                <span class="strong">54.54% </span>
                 <span class="quiet">Branches</span>
-                <span class='fraction'>7/8</span>
+                <span class='fraction'>6/11</span>
             </div>
         
             
@@ -44,9 +44,9 @@
         
             
             <div class='fl pad1y space-right2'>
-                <span class="strong">95.12% </span>
+                <span class="strong">88.88% </span>
                 <span class="quiet">Lines</span>
-                <span class='fraction'>39/41</span>
+                <span class='fraction'>48/54</span>
             </div>
         
             
@@ -104,7 +104,20 @@
 <a name='L39'></a><a href='#L39'>39</a>
 <a name='L40'></a><a href='#L40'>40</a>
 <a name='L41'></a><a href='#L41'>41</a>
-<a name='L42'></a><a href='#L42'>42</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
+<a name='L42'></a><a href='#L42'>42</a>
+<a name='L43'></a><a href='#L43'>43</a>
+<a name='L44'></a><a href='#L44'>44</a>
+<a name='L45'></a><a href='#L45'>45</a>
+<a name='L46'></a><a href='#L46'>46</a>
+<a name='L47'></a><a href='#L47'>47</a>
+<a name='L48'></a><a href='#L48'>48</a>
+<a name='L49'></a><a href='#L49'>49</a>
+<a name='L50'></a><a href='#L50'>50</a>
+<a name='L51'></a><a href='#L51'>51</a>
+<a name='L52'></a><a href='#L52'>52</a>
+<a name='L53'></a><a href='#L53'>53</a>
+<a name='L54'></a><a href='#L54'>54</a>
+<a name='L55'></a><a href='#L55'>55</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
@@ -115,9 +128,22 @@
 <span class="cline-any cline-yes">3x</span>
 <span class="cline-any cline-yes">3x</span>
 <span class="cline-any cline-yes">3x</span>
+<span class="cline-any cline-yes">3x</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-yes">3x</span>
+<span class="cline-any cline-yes">3x</span>
+<span class="cline-any cline-yes">3x</span>
+<span class="cline-any cline-yes">3x</span>
+<span class="cline-any cline-yes">3x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">3x</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">3x</span>
 <span class="cline-any cline-yes">2x</span>
@@ -130,21 +156,21 @@
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
-<span class="cline-any cline-yes">5x</span>
 <span class="cline-any cline-yes">2x</span>
 <span class="cline-any cline-yes">2x</span>
 <span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">3x</span>
-<span class="cline-any cline-yes">5x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">2x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">2x</span>
 <span class="cline-any cline-no">&nbsp;</span>
 <span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-yes">5x</span>
+<span class="cline-any cline-yes">2x</span>
 <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import User from "../models/User.js";
 import { createRecord, findOneRecord } from "../utils/handleDB.js";
 import { prefillDocumentObject, hideConfidentialFields } from '../utils/handleSchemes.js';
@@ -154,10 +180,23 @@ import { prefillDocumentObject, hideConfidentialFields } from '../utils/handleSc
  */
 export const createUser = async (req, res, next) =&gt; {
   try {
+    // autoverify if user-agent is Artillery
+    const isArtilleryAgent = (req.get('user-agent') <span class="branch-0 cbranch-no" title="branch not covered" >&amp;&amp; req.get('user-agent').includes('Artillery') <span class="branch-0 cbranch-no" title="branch not covered" ></span>? true </span>: false);
+    if (isArtilleryAgent) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
+<span class="cstat-no" title="statement not covered" >      req.body.verified = true;</span>
+<span class="cstat-no" title="statement not covered" >    }</span>
+    // console.log("🚀 ~ createUser ~ isArtilleryAgent:", isArtilleryAgent);
+    // return res.status(200).json({ message: 'tmp abort', isArtilleryAgent });
+&nbsp;
     // create user object
     const newRecord = await createRecord(User, prefillDocumentObject(User, req.body));
     // remember document but remove confidential info
     req.document = hideConfidentialFields(User, newRecord);
+    // return if user-agent is Artillery
+    if (isArtilleryAgent) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
+<span class="cstat-no" title="statement not covered" >      return res.status(201).json({ message: 'User created', document: req.document });</span>
+<span class="cstat-no" title="statement not covered" >    }</span>
+    // continue to send verification
     next();
     // on error
   } catch (error) {
@@ -193,7 +232,7 @@ export const prefetchUserByEmail = async (req, res, next) =&gt; {
             <div class='footer quiet pad2 space-top1 center small'>
                 Code coverage generated by
                 <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
-                at 2024-07-28T19:23:24.511Z
+                at 2024-08-07T15:59:44.935Z
             </div>
         <script src="../../prettify.js"></script>
         <script>
diff --git a/coverage/ragchat-api/controllers/index.html b/coverage/ragchat-api/controllers/index.html
index 9b4563f..0afc3b9 100644
--- a/coverage/ragchat-api/controllers/index.html
+++ b/coverage/ragchat-api/controllers/index.html
@@ -23,30 +23,30 @@
         <div class='clearfix'>
             
             <div class='fl pad1y space-right2'>
-                <span class="strong">63.79% </span>
+                <span class="strong">92.61% </span>
                 <span class="quiet">Statements</span>
-                <span class='fraction'>548/859</span>
+                <span class='fraction'>439/474</span>
             </div>
         
             
             <div class='fl pad1y space-right2'>
-                <span class="strong">72.85% </span>
+                <span class="strong">69.44% </span>
                 <span class="quiet">Branches</span>
-                <span class='fraction'>51/70</span>
+                <span class='fraction'>50/72</span>
             </div>
         
             
             <div class='fl pad1y space-right2'>
-                <span class="strong">60.6% </span>
+                <span class="strong">100% </span>
                 <span class="quiet">Functions</span>
-                <span class='fraction'>20/33</span>
+                <span class='fraction'>20/20</span>
             </div>
         
             
             <div class='fl pad1y space-right2'>
-                <span class="strong">63.79% </span>
+                <span class="strong">92.61% </span>
                 <span class="quiet">Lines</span>
-                <span class='fraction'>548/859</span>
+                <span class='fraction'>439/474</span>
             </div>
         
             
@@ -61,7 +61,7 @@
             </div>
         </template>
     </div>
-    <div class='status-line medium'></div>
+    <div class='status-line high'></div>
     <div class="pad1">
 <table class="coverage-summary">
 <thead>
@@ -80,62 +80,47 @@
 </thead>
 <tbody><tr>
 	<td class="file high" data-value="AI.js"><a href="AI.js.html">AI.js</a></td>
-	<td data-value="92.7" class="pic high">
+	<td data-value="92.67" class="pic high">
 	<div class="chart"><div class="cover-fill" style="width: 92%"></div><div class="cover-empty" style="width: 8%"></div></div>
 	</td>
-	<td data-value="92.7" class="pct high">92.7%</td>
-	<td data-value="192" class="abs high">178/192</td>
+	<td data-value="92.67" class="pct high">92.67%</td>
+	<td data-value="191" class="abs high">177/191</td>
 	<td data-value="73.33" class="pct medium">73.33%</td>
 	<td data-value="30" class="abs medium">22/30</td>
 	<td data-value="100" class="pct high">100%</td>
 	<td data-value="10" class="abs high">10/10</td>
-	<td data-value="92.7" class="pct high">92.7%</td>
-	<td data-value="192" class="abs high">178/192</td>
+	<td data-value="92.67" class="pct high">92.67%</td>
+	<td data-value="191" class="abs high">177/191</td>
 	</tr>
 
 <tr>
 	<td class="file high" data-value="Auth.js"><a href="Auth.js.html">Auth.js</a></td>
-	<td data-value="93.08" class="pic high">
+	<td data-value="93.44" class="pic high">
 	<div class="chart"><div class="cover-fill" style="width: 93%"></div><div class="cover-empty" style="width: 7%"></div></div>
 	</td>
-	<td data-value="93.08" class="pct high">93.08%</td>
-	<td data-value="217" class="abs high">202/217</td>
+	<td data-value="93.44" class="pct high">93.44%</td>
+	<td data-value="229" class="abs high">214/229</td>
 	<td data-value="70.96" class="pct medium">70.96%</td>
 	<td data-value="31" class="abs medium">22/31</td>
 	<td data-value="100" class="pct high">100%</td>
 	<td data-value="8" class="abs high">8/8</td>
-	<td data-value="93.08" class="pct high">93.08%</td>
-	<td data-value="217" class="abs high">202/217</td>
-	</tr>
-
-<tr>
-	<td class="file low" data-value="Embeddings.js"><a href="Embeddings.js.html">Embeddings.js</a></td>
-	<td data-value="31.54" class="pic low">
-	<div class="chart"><div class="cover-fill" style="width: 31%"></div><div class="cover-empty" style="width: 69%"></div></div>
-	</td>
-	<td data-value="31.54" class="pct low">31.54%</td>
-	<td data-value="409" class="abs low">129/409</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="1" class="abs low">0/1</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="13" class="abs low">0/13</td>
-	<td data-value="31.54" class="pct low">31.54%</td>
-	<td data-value="409" class="abs low">129/409</td>
+	<td data-value="93.44" class="pct high">93.44%</td>
+	<td data-value="229" class="abs high">214/229</td>
 	</tr>
 
 <tr>
 	<td class="file high" data-value="User.js"><a href="User.js.html">User.js</a></td>
-	<td data-value="95.12" class="pic high">
-	<div class="chart"><div class="cover-fill" style="width: 95%"></div><div class="cover-empty" style="width: 5%"></div></div>
+	<td data-value="88.88" class="pic high">
+	<div class="chart"><div class="cover-fill" style="width: 88%"></div><div class="cover-empty" style="width: 12%"></div></div>
 	</td>
-	<td data-value="95.12" class="pct high">95.12%</td>
-	<td data-value="41" class="abs high">39/41</td>
-	<td data-value="87.5" class="pct high">87.5%</td>
-	<td data-value="8" class="abs high">7/8</td>
+	<td data-value="88.88" class="pct high">88.88%</td>
+	<td data-value="54" class="abs high">48/54</td>
+	<td data-value="54.54" class="pct medium">54.54%</td>
+	<td data-value="11" class="abs medium">6/11</td>
 	<td data-value="100" class="pct high">100%</td>
 	<td data-value="2" class="abs high">2/2</td>
-	<td data-value="95.12" class="pct high">95.12%</td>
-	<td data-value="41" class="abs high">39/41</td>
+	<td data-value="88.88" class="pct high">88.88%</td>
+	<td data-value="54" class="abs high">48/54</td>
 	</tr>
 
 </tbody>
@@ -146,7 +131,7 @@
             <div class='footer quiet pad2 space-top1 center small'>
                 Code coverage generated by
                 <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
-                at 2024-07-28T19:23:24.511Z
+                at 2024-08-07T15:59:44.935Z
             </div>
         <script src="../../prettify.js"></script>
         <script>
diff --git a/coverage/ragchat-api/ecosystem.config.cjs.html b/coverage/ragchat-api/ecosystem.config.cjs.html
deleted file mode 100644
index 357e36e..0000000
--- a/coverage/ragchat-api/ecosystem.config.cjs.html
+++ /dev/null
@@ -1,118 +0,0 @@
-
-<!doctype html>
-<html lang="en">
-
-<head>
-    <title>Code coverage report for ragchat-api/ecosystem.config.cjs</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../prettify.css" />
-    <link rel="stylesheet" href="../base.css" />
-    <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
-    <meta name="viewport" content="width=device-width, initial-scale=1" />
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-    
-<body>
-<div class='wrapper'>
-    <div class='pad1'>
-        <h1><a href="../index.html">All files</a> / <a href="index.html">ragchat-api</a> ecosystem.config.cjs</h1>
-        <div class='clearfix'>
-            
-            <div class='fl pad1y space-right2'>
-                <span class="strong">0% </span>
-                <span class="quiet">Statements</span>
-                <span class='fraction'>0/12</span>
-            </div>
-        
-            
-            <div class='fl pad1y space-right2'>
-                <span class="strong">0% </span>
-                <span class="quiet">Branches</span>
-                <span class='fraction'>0/1</span>
-            </div>
-        
-            
-            <div class='fl pad1y space-right2'>
-                <span class="strong">0% </span>
-                <span class="quiet">Functions</span>
-                <span class='fraction'>0/1</span>
-            </div>
-        
-            
-            <div class='fl pad1y space-right2'>
-                <span class="strong">0% </span>
-                <span class="quiet">Lines</span>
-                <span class='fraction'>0/12</span>
-            </div>
-        
-            
-        </div>
-        <p class="quiet">
-            Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
-        </p>
-        <template id="filterTemplate">
-            <div class="quiet">
-                Filter:
-                <input type="search" id="fileSearch">
-            </div>
-        </template>
-    </div>
-    <div class='status-line low'></div>
-    <pre><table class="coverage">
-<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
-<a name='L2'></a><a href='#L2'>2</a>
-<a name='L3'></a><a href='#L3'>3</a>
-<a name='L4'></a><a href='#L4'>4</a>
-<a name='L5'></a><a href='#L5'>5</a>
-<a name='L6'></a><a href='#L6'>6</a>
-<a name='L7'></a><a href='#L7'>7</a>
-<a name='L8'></a><a href='#L8'>8</a>
-<a name='L9'></a><a href='#L9'>9</a>
-<a name='L10'></a><a href='#L10'>10</a>
-<a name='L11'></a><a href='#L11'>11</a>
-<a name='L12'></a><a href='#L12'>12</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >module.exports = {</span></span></span>
-<span class="cstat-no" title="statement not covered" >  apps: [{</span>
-<span class="cstat-no" title="statement not covered" >    name: "RAGchat-API",</span>
-<span class="cstat-no" title="statement not covered" >    script: "server.js",</span>
-<span class="cstat-no" title="statement not covered" >    cwd: "/home/embruch/ragchat-api",</span>
-<span class="cstat-no" title="statement not covered" >    node_args: "--env-file=./.env",</span>
-<span class="cstat-no" title="statement not covered" >    watch: true,</span>
-<span class="cstat-no" title="statement not covered" >    ignore_watch: ["./node_modules", "./RAGFiles", "./.git", "./coverage", "./logs", "./__tests__"],</span>
-<span class="cstat-no" title="statement not covered" >    error_file: 'logs/error.log',</span>
-<span class="cstat-no" title="statement not covered" >    out_file: 'logs/output.log'</span>
-<span class="cstat-no" title="statement not covered" >  }]</span>
-<span class="cstat-no" title="statement not covered" >};</span></pre></td></tr></table></pre>
-
-                <div class='push'></div><!-- for sticky footer -->
-            </div><!-- /wrapper -->
-            <div class='footer quiet pad2 space-top1 center small'>
-                Code coverage generated by
-                <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
-                at 2024-07-28T19:23:24.511Z
-            </div>
-        <script src="../prettify.js"></script>
-        <script>
-            window.onload = function () {
-                prettyPrint();
-            };
-        </script>
-        <script src="../sorter.js"></script>
-        <script src="../block-navigation.js"></script>
-    </body>
-</html>
-    
\ No newline at end of file
diff --git a/coverage/ragchat-api/index.html b/coverage/ragchat-api/index.html
index 3a7f116..d46db2f 100644
--- a/coverage/ragchat-api/index.html
+++ b/coverage/ragchat-api/index.html
@@ -23,30 +23,30 @@
         <div class='clearfix'>
             
             <div class='fl pad1y space-right2'>
-                <span class="strong">58.67% </span>
+                <span class="strong">87.5% </span>
                 <span class="quiet">Statements</span>
-                <span class='fraction'>71/121</span>
+                <span class='fraction'>105/120</span>
             </div>
         
             
             <div class='fl pad1y space-right2'>
-                <span class="strong">25% </span>
+                <span class="strong">60% </span>
                 <span class="quiet">Branches</span>
-                <span class='fraction'>1/4</span>
+                <span class='fraction'>3/5</span>
             </div>
         
             
             <div class='fl pad1y space-right2'>
-                <span class="strong">0% </span>
+                <span class="strong">100% </span>
                 <span class="quiet">Functions</span>
-                <span class='fraction'>0/2</span>
+                <span class='fraction'>0/0</span>
             </div>
         
             
             <div class='fl pad1y space-right2'>
-                <span class="strong">58.67% </span>
+                <span class="strong">87.5% </span>
                 <span class="quiet">Lines</span>
-                <span class='fraction'>71/121</span>
+                <span class='fraction'>105/120</span>
             </div>
         
             
@@ -61,7 +61,7 @@
             </div>
         </template>
     </div>
-    <div class='status-line medium'></div>
+    <div class='status-line high'></div>
     <div class="pad1">
 <table class="coverage-summary">
 <thead>
@@ -80,47 +80,17 @@
 </thead>
 <tbody><tr>
 	<td class="file high" data-value="app.js"><a href="app.js.html">app.js</a></td>
-	<td data-value="87.65" class="pic high">
+	<td data-value="87.5" class="pic high">
 	<div class="chart"><div class="cover-fill" style="width: 87%"></div><div class="cover-empty" style="width: 13%"></div></div>
 	</td>
-	<td data-value="87.65" class="pct high">87.65%</td>
-	<td data-value="81" class="abs high">71/81</td>
-	<td data-value="50" class="pct medium">50%</td>
-	<td data-value="2" class="abs medium">1/2</td>
+	<td data-value="87.5" class="pct high">87.5%</td>
+	<td data-value="120" class="abs high">105/120</td>
+	<td data-value="60" class="pct medium">60%</td>
+	<td data-value="5" class="abs medium">3/5</td>
 	<td data-value="100" class="pct high">100%</td>
 	<td data-value="0" class="abs high">0/0</td>
-	<td data-value="87.65" class="pct high">87.65%</td>
-	<td data-value="81" class="abs high">71/81</td>
-	</tr>
-
-<tr>
-	<td class="file low" data-value="ecosystem.config.cjs"><a href="ecosystem.config.cjs.html">ecosystem.config.cjs</a></td>
-	<td data-value="0" class="pic low">
-	<div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
-	</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="12" class="abs low">0/12</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="1" class="abs low">0/1</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="1" class="abs low">0/1</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="12" class="abs low">0/12</td>
-	</tr>
-
-<tr>
-	<td class="file low" data-value="server.js"><a href="server.js.html">server.js</a></td>
-	<td data-value="0" class="pic low">
-	<div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
-	</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="28" class="abs low">0/28</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="1" class="abs low">0/1</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="1" class="abs low">0/1</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="28" class="abs low">0/28</td>
+	<td data-value="87.5" class="pct high">87.5%</td>
+	<td data-value="120" class="abs high">105/120</td>
 	</tr>
 
 </tbody>
@@ -131,7 +101,7 @@
             <div class='footer quiet pad2 space-top1 center small'>
                 Code coverage generated by
                 <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
-                at 2024-07-28T19:23:24.511Z
+                at 2024-08-07T15:59:44.935Z
             </div>
         <script src="../prettify.js"></script>
         <script>
diff --git a/coverage/ragchat-api/models/Chat.js.html b/coverage/ragchat-api/models/Chat.js.html
index fdfd590..db47c61 100644
--- a/coverage/ragchat-api/models/Chat.js.html
+++ b/coverage/ragchat-api/models/Chat.js.html
@@ -307,7 +307,7 @@ export default model('Chat', ChatSchema);</pre></td></tr></table></pre>
             <div class='footer quiet pad2 space-top1 center small'>
                 Code coverage generated by
                 <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
-                at 2024-07-28T19:23:24.511Z
+                at 2024-08-07T15:59:44.935Z
             </div>
         <script src="../../prettify.js"></script>
         <script>
diff --git a/coverage/ragchat-api/models/User.js.html b/coverage/ragchat-api/models/User.js.html
index df52165..5668830 100644
--- a/coverage/ragchat-api/models/User.js.html
+++ b/coverage/ragchat-api/models/User.js.html
@@ -475,7 +475,7 @@ export default model('User', UserSchema);</pre></td></tr></table></pre>
             <div class='footer quiet pad2 space-top1 center small'>
                 Code coverage generated by
                 <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
-                at 2024-07-28T19:23:24.511Z
+                at 2024-08-07T15:59:44.935Z
             </div>
         <script src="../../prettify.js"></script>
         <script>
diff --git a/coverage/ragchat-api/models/index.html b/coverage/ragchat-api/models/index.html
index b09662d..dd75878 100644
--- a/coverage/ragchat-api/models/index.html
+++ b/coverage/ragchat-api/models/index.html
@@ -116,7 +116,7 @@
             <div class='footer quiet pad2 space-top1 center small'>
                 Code coverage generated by
                 <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
-                at 2024-07-28T19:23:24.511Z
+                at 2024-08-07T15:59:44.935Z
             </div>
         <script src="../../prettify.js"></script>
         <script>
diff --git a/coverage/ragchat-api/routes/ai.js.html b/coverage/ragchat-api/routes/ai.js.html
index 1eb5917..94e18a7 100644
--- a/coverage/ragchat-api/routes/ai.js.html
+++ b/coverage/ragchat-api/routes/ai.js.html
@@ -25,7 +25,7 @@
             <div class='fl pad1y space-right2'>
                 <span class="strong">100% </span>
                 <span class="quiet">Statements</span>
-                <span class='fraction'>96/96</span>
+                <span class='fraction'>97/97</span>
             </div>
         
             
@@ -46,7 +46,7 @@
             <div class='fl pad1y space-right2'>
                 <span class="strong">100% </span>
                 <span class="quiet">Lines</span>
-                <span class='fraction'>96/96</span>
+                <span class='fraction'>97/97</span>
             </div>
         
             
@@ -158,7 +158,9 @@
 <a name='L93'></a><a href='#L93'>93</a>
 <a name='L94'></a><a href='#L94'>94</a>
 <a name='L95'></a><a href='#L95'>95</a>
-<a name='L96'></a><a href='#L96'>96</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
+<a name='L96'></a><a href='#L96'>96</a>
+<a name='L97'></a><a href='#L97'>97</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
@@ -346,6 +348,7 @@ router.post('/chat', verifyAccessToken, validate(chatSchema), checkRequestedMode
  * @header  {authorization}  Bearer       [required] access token
  * @return  {object}                    list of found conversations, ordered by updated
  */
+// TODO sort chats by createdAt
 router.get('/chats', verifyAccessToken, getChats);
 &nbsp;
 export default router;</pre></td></tr></table></pre>
@@ -355,7 +358,7 @@ export default router;</pre></td></tr></table></pre>
             <div class='footer quiet pad2 space-top1 center small'>
                 Code coverage generated by
                 <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
-                at 2024-07-28T19:23:24.511Z
+                at 2024-08-07T15:59:44.935Z
             </div>
         <script src="../../prettify.js"></script>
         <script>
diff --git a/coverage/ragchat-api/routes/auth.js.html b/coverage/ragchat-api/routes/auth.js.html
index 93c1924..b76e4f2 100644
--- a/coverage/ragchat-api/routes/auth.js.html
+++ b/coverage/ragchat-api/routes/auth.js.html
@@ -312,7 +312,7 @@ router.post('/verification',
  */
 router.patch('/verification',
   validate(confirmVerificationSchema),
-  prefetchUserByEmail,
+  // prefetchUserByEmail,
   verifyVerificationToken,
   confirmVerification
 );
@@ -394,7 +394,7 @@ export default router;</pre></td></tr></table></pre>
             <div class='footer quiet pad2 space-top1 center small'>
                 Code coverage generated by
                 <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
-                at 2024-07-28T19:23:24.511Z
+                at 2024-08-07T15:59:44.935Z
             </div>
         <script src="../../prettify.js"></script>
         <script>
diff --git a/coverage/ragchat-api/routes/embeddings.js.html b/coverage/ragchat-api/routes/embeddings.js.html
index 97a129b..d730e9d 100644
--- a/coverage/ragchat-api/routes/embeddings.js.html
+++ b/coverage/ragchat-api/routes/embeddings.js.html
@@ -193,7 +193,7 @@ export default router;</pre></td></tr></table></pre>
             <div class='footer quiet pad2 space-top1 center small'>
                 Code coverage generated by
                 <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
-                at 2024-07-28T19:23:24.511Z
+                at 2024-08-07T15:59:44.935Z
             </div>
         <script src="../../prettify.js"></script>
         <script>
diff --git a/coverage/ragchat-api/routes/index.html b/coverage/ragchat-api/routes/index.html
index 8df105b..c3d7654 100644
--- a/coverage/ragchat-api/routes/index.html
+++ b/coverage/ragchat-api/routes/index.html
@@ -25,7 +25,7 @@
             <div class='fl pad1y space-right2'>
                 <span class="strong">100% </span>
                 <span class="quiet">Statements</span>
-                <span class='fraction'>271/271</span>
+                <span class='fraction'>272/272</span>
             </div>
         
             
@@ -46,7 +46,7 @@
             <div class='fl pad1y space-right2'>
                 <span class="strong">100% </span>
                 <span class="quiet">Lines</span>
-                <span class='fraction'>271/271</span>
+                <span class='fraction'>272/272</span>
             </div>
         
             
@@ -84,13 +84,13 @@
 	<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
 	</td>
 	<td data-value="100" class="pct high">100%</td>
-	<td data-value="96" class="abs high">96/96</td>
+	<td data-value="97" class="abs high">97/97</td>
 	<td data-value="100" class="pct high">100%</td>
 	<td data-value="0" class="abs high">0/0</td>
 	<td data-value="100" class="pct high">100%</td>
 	<td data-value="0" class="abs high">0/0</td>
 	<td data-value="100" class="pct high">100%</td>
-	<td data-value="96" class="abs high">96/96</td>
+	<td data-value="97" class="abs high">97/97</td>
 	</tr>
 
 <tr>
@@ -146,7 +146,7 @@
             <div class='footer quiet pad2 space-top1 center small'>
                 Code coverage generated by
                 <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
-                at 2024-07-28T19:23:24.511Z
+                at 2024-08-07T15:59:44.935Z
             </div>
         <script src="../../prettify.js"></script>
         <script>
diff --git a/coverage/ragchat-api/routes/users.js.html b/coverage/ragchat-api/routes/users.js.html
index 3359b03..9050767 100644
--- a/coverage/ragchat-api/routes/users.js.html
+++ b/coverage/ragchat-api/routes/users.js.html
@@ -139,7 +139,7 @@ export default router;</pre></td></tr></table></pre>
             <div class='footer quiet pad2 space-top1 center small'>
                 Code coverage generated by
                 <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
-                at 2024-07-28T19:23:24.511Z
+                at 2024-08-07T15:59:44.935Z
             </div>
         <script src="../../prettify.js"></script>
         <script>
diff --git a/coverage/ragchat-api/server.js.html b/coverage/ragchat-api/server.js.html
deleted file mode 100644
index a15d414..0000000
--- a/coverage/ragchat-api/server.js.html
+++ /dev/null
@@ -1,166 +0,0 @@
-
-<!doctype html>
-<html lang="en">
-
-<head>
-    <title>Code coverage report for ragchat-api/server.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../prettify.css" />
-    <link rel="stylesheet" href="../base.css" />
-    <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
-    <meta name="viewport" content="width=device-width, initial-scale=1" />
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-    
-<body>
-<div class='wrapper'>
-    <div class='pad1'>
-        <h1><a href="../index.html">All files</a> / <a href="index.html">ragchat-api</a> server.js</h1>
-        <div class='clearfix'>
-            
-            <div class='fl pad1y space-right2'>
-                <span class="strong">0% </span>
-                <span class="quiet">Statements</span>
-                <span class='fraction'>0/28</span>
-            </div>
-        
-            
-            <div class='fl pad1y space-right2'>
-                <span class="strong">0% </span>
-                <span class="quiet">Branches</span>
-                <span class='fraction'>0/1</span>
-            </div>
-        
-            
-            <div class='fl pad1y space-right2'>
-                <span class="strong">0% </span>
-                <span class="quiet">Functions</span>
-                <span class='fraction'>0/1</span>
-            </div>
-        
-            
-            <div class='fl pad1y space-right2'>
-                <span class="strong">0% </span>
-                <span class="quiet">Lines</span>
-                <span class='fraction'>0/28</span>
-            </div>
-        
-            
-        </div>
-        <p class="quiet">
-            Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
-        </p>
-        <template id="filterTemplate">
-            <div class="quiet">
-                Filter:
-                <input type="search" id="fileSearch">
-            </div>
-        </template>
-    </div>
-    <div class='status-line low'></div>
-    <pre><table class="coverage">
-<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
-<a name='L2'></a><a href='#L2'>2</a>
-<a name='L3'></a><a href='#L3'>3</a>
-<a name='L4'></a><a href='#L4'>4</a>
-<a name='L5'></a><a href='#L5'>5</a>
-<a name='L6'></a><a href='#L6'>6</a>
-<a name='L7'></a><a href='#L7'>7</a>
-<a name='L8'></a><a href='#L8'>8</a>
-<a name='L9'></a><a href='#L9'>9</a>
-<a name='L10'></a><a href='#L10'>10</a>
-<a name='L11'></a><a href='#L11'>11</a>
-<a name='L12'></a><a href='#L12'>12</a>
-<a name='L13'></a><a href='#L13'>13</a>
-<a name='L14'></a><a href='#L14'>14</a>
-<a name='L15'></a><a href='#L15'>15</a>
-<a name='L16'></a><a href='#L16'>16</a>
-<a name='L17'></a><a href='#L17'>17</a>
-<a name='L18'></a><a href='#L18'>18</a>
-<a name='L19'></a><a href='#L19'>19</a>
-<a name='L20'></a><a href='#L20'>20</a>
-<a name='L21'></a><a href='#L21'>21</a>
-<a name='L22'></a><a href='#L22'>22</a>
-<a name='L23'></a><a href='#L23'>23</a>
-<a name='L24'></a><a href='#L24'>24</a>
-<a name='L25'></a><a href='#L25'>25</a>
-<a name='L26'></a><a href='#L26'>26</a>
-<a name='L27'></a><a href='#L27'>27</a>
-<a name='L28'></a><a href='#L28'>28</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >import app from './app.js';</span></span></span>
-<span class="cstat-no" title="statement not covered" >import https from 'https';</span>
-<span class="cstat-no" title="statement not covered" >import fs from 'fs';</span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" >/**</span>
-<span class="cstat-no" title="statement not covered" > * prepare httpS</span>
-<span class="cstat-no" title="statement not covered" > */</span>
-<span class="cstat-no" title="statement not covered" >let proto = 'http';</span>
-<span class="cstat-no" title="statement not covered" >let server = app;</span>
-<span class="cstat-no" title="statement not covered" >// get SSL key &amp; cert</span>
-<span class="cstat-no" title="statement not covered" >const key = fs.readFileSync(process.env.API_SSL_KEY);</span>
-<span class="cstat-no" title="statement not covered" >const cert = fs.readFileSync(process.env.API_SSL_CERT);</span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" >console.log('API_MODE:', process.env.API_MODE);</span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" >if (process.env.API_MODE === 'devel') {</span>
-<span class="cstat-no" title="statement not covered" >  server = https.createServer({ key: key, cert: cert }, app);</span>
-<span class="cstat-no" title="statement not covered" >  proto = 'https';</span>
-<span class="cstat-no" title="statement not covered" >}</span>
-<span class="cstat-no" title="statement not covered" >const BASE_URL = `${proto}://${process.env.API_HOST}:${process.env.API_PORT}`;</span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" >/**</span>
-<span class="cstat-no" title="statement not covered" > * finally start the server and run callback funtion on success</span>
-<span class="cstat-no" title="statement not covered" > */</span>
-<span class="cstat-no" title="statement not covered" >server.listen(process.env.API_PORT, process.env.API_HOST, () =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >  console.log(`API LISTENING ON: ${BASE_URL}`);</span>
-<span class="cstat-no" title="statement not covered" >  console.log('To exit CTRL + C');</span>
-<span class="cstat-no" title="statement not covered" >});</span></pre></td></tr></table></pre>
-
-                <div class='push'></div><!-- for sticky footer -->
-            </div><!-- /wrapper -->
-            <div class='footer quiet pad2 space-top1 center small'>
-                Code coverage generated by
-                <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
-                at 2024-07-28T19:23:24.511Z
-            </div>
-        <script src="../prettify.js"></script>
-        <script>
-            window.onload = function () {
-                prettyPrint();
-            };
-        </script>
-        <script src="../sorter.js"></script>
-        <script src="../block-navigation.js"></script>
-    </body>
-</html>
-    
\ No newline at end of file
diff --git a/coverage/ragchat-api/utils/handleAI.js.html b/coverage/ragchat-api/utils/handleAI.js.html
deleted file mode 100644
index 2c241b0..0000000
--- a/coverage/ragchat-api/utils/handleAI.js.html
+++ /dev/null
@@ -1,685 +0,0 @@
-
-<!doctype html>
-<html lang="en">
-
-<head>
-    <title>Code coverage report for ragchat-api/utils/handleAI.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
-    <meta name="viewport" content="width=device-width, initial-scale=1" />
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-    
-<body>
-<div class='wrapper'>
-    <div class='pad1'>
-        <h1><a href="../../index.html">All files</a> / <a href="index.html">ragchat-api/utils</a> handleAI.js</h1>
-        <div class='clearfix'>
-            
-            <div class='fl pad1y space-right2'>
-                <span class="strong">26.86% </span>
-                <span class="quiet">Statements</span>
-                <span class='fraction'>54/201</span>
-            </div>
-        
-            
-            <div class='fl pad1y space-right2'>
-                <span class="strong">100% </span>
-                <span class="quiet">Branches</span>
-                <span class='fraction'>0/0</span>
-            </div>
-        
-            
-            <div class='fl pad1y space-right2'>
-                <span class="strong">0% </span>
-                <span class="quiet">Functions</span>
-                <span class='fraction'>0/7</span>
-            </div>
-        
-            
-            <div class='fl pad1y space-right2'>
-                <span class="strong">26.86% </span>
-                <span class="quiet">Lines</span>
-                <span class='fraction'>54/201</span>
-            </div>
-        
-            
-        </div>
-        <p class="quiet">
-            Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
-        </p>
-        <template id="filterTemplate">
-            <div class="quiet">
-                Filter:
-                <input type="search" id="fileSearch">
-            </div>
-        </template>
-    </div>
-    <div class='status-line low'></div>
-    <pre><table class="coverage">
-<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
-<a name='L2'></a><a href='#L2'>2</a>
-<a name='L3'></a><a href='#L3'>3</a>
-<a name='L4'></a><a href='#L4'>4</a>
-<a name='L5'></a><a href='#L5'>5</a>
-<a name='L6'></a><a href='#L6'>6</a>
-<a name='L7'></a><a href='#L7'>7</a>
-<a name='L8'></a><a href='#L8'>8</a>
-<a name='L9'></a><a href='#L9'>9</a>
-<a name='L10'></a><a href='#L10'>10</a>
-<a name='L11'></a><a href='#L11'>11</a>
-<a name='L12'></a><a href='#L12'>12</a>
-<a name='L13'></a><a href='#L13'>13</a>
-<a name='L14'></a><a href='#L14'>14</a>
-<a name='L15'></a><a href='#L15'>15</a>
-<a name='L16'></a><a href='#L16'>16</a>
-<a name='L17'></a><a href='#L17'>17</a>
-<a name='L18'></a><a href='#L18'>18</a>
-<a name='L19'></a><a href='#L19'>19</a>
-<a name='L20'></a><a href='#L20'>20</a>
-<a name='L21'></a><a href='#L21'>21</a>
-<a name='L22'></a><a href='#L22'>22</a>
-<a name='L23'></a><a href='#L23'>23</a>
-<a name='L24'></a><a href='#L24'>24</a>
-<a name='L25'></a><a href='#L25'>25</a>
-<a name='L26'></a><a href='#L26'>26</a>
-<a name='L27'></a><a href='#L27'>27</a>
-<a name='L28'></a><a href='#L28'>28</a>
-<a name='L29'></a><a href='#L29'>29</a>
-<a name='L30'></a><a href='#L30'>30</a>
-<a name='L31'></a><a href='#L31'>31</a>
-<a name='L32'></a><a href='#L32'>32</a>
-<a name='L33'></a><a href='#L33'>33</a>
-<a name='L34'></a><a href='#L34'>34</a>
-<a name='L35'></a><a href='#L35'>35</a>
-<a name='L36'></a><a href='#L36'>36</a>
-<a name='L37'></a><a href='#L37'>37</a>
-<a name='L38'></a><a href='#L38'>38</a>
-<a name='L39'></a><a href='#L39'>39</a>
-<a name='L40'></a><a href='#L40'>40</a>
-<a name='L41'></a><a href='#L41'>41</a>
-<a name='L42'></a><a href='#L42'>42</a>
-<a name='L43'></a><a href='#L43'>43</a>
-<a name='L44'></a><a href='#L44'>44</a>
-<a name='L45'></a><a href='#L45'>45</a>
-<a name='L46'></a><a href='#L46'>46</a>
-<a name='L47'></a><a href='#L47'>47</a>
-<a name='L48'></a><a href='#L48'>48</a>
-<a name='L49'></a><a href='#L49'>49</a>
-<a name='L50'></a><a href='#L50'>50</a>
-<a name='L51'></a><a href='#L51'>51</a>
-<a name='L52'></a><a href='#L52'>52</a>
-<a name='L53'></a><a href='#L53'>53</a>
-<a name='L54'></a><a href='#L54'>54</a>
-<a name='L55'></a><a href='#L55'>55</a>
-<a name='L56'></a><a href='#L56'>56</a>
-<a name='L57'></a><a href='#L57'>57</a>
-<a name='L58'></a><a href='#L58'>58</a>
-<a name='L59'></a><a href='#L59'>59</a>
-<a name='L60'></a><a href='#L60'>60</a>
-<a name='L61'></a><a href='#L61'>61</a>
-<a name='L62'></a><a href='#L62'>62</a>
-<a name='L63'></a><a href='#L63'>63</a>
-<a name='L64'></a><a href='#L64'>64</a>
-<a name='L65'></a><a href='#L65'>65</a>
-<a name='L66'></a><a href='#L66'>66</a>
-<a name='L67'></a><a href='#L67'>67</a>
-<a name='L68'></a><a href='#L68'>68</a>
-<a name='L69'></a><a href='#L69'>69</a>
-<a name='L70'></a><a href='#L70'>70</a>
-<a name='L71'></a><a href='#L71'>71</a>
-<a name='L72'></a><a href='#L72'>72</a>
-<a name='L73'></a><a href='#L73'>73</a>
-<a name='L74'></a><a href='#L74'>74</a>
-<a name='L75'></a><a href='#L75'>75</a>
-<a name='L76'></a><a href='#L76'>76</a>
-<a name='L77'></a><a href='#L77'>77</a>
-<a name='L78'></a><a href='#L78'>78</a>
-<a name='L79'></a><a href='#L79'>79</a>
-<a name='L80'></a><a href='#L80'>80</a>
-<a name='L81'></a><a href='#L81'>81</a>
-<a name='L82'></a><a href='#L82'>82</a>
-<a name='L83'></a><a href='#L83'>83</a>
-<a name='L84'></a><a href='#L84'>84</a>
-<a name='L85'></a><a href='#L85'>85</a>
-<a name='L86'></a><a href='#L86'>86</a>
-<a name='L87'></a><a href='#L87'>87</a>
-<a name='L88'></a><a href='#L88'>88</a>
-<a name='L89'></a><a href='#L89'>89</a>
-<a name='L90'></a><a href='#L90'>90</a>
-<a name='L91'></a><a href='#L91'>91</a>
-<a name='L92'></a><a href='#L92'>92</a>
-<a name='L93'></a><a href='#L93'>93</a>
-<a name='L94'></a><a href='#L94'>94</a>
-<a name='L95'></a><a href='#L95'>95</a>
-<a name='L96'></a><a href='#L96'>96</a>
-<a name='L97'></a><a href='#L97'>97</a>
-<a name='L98'></a><a href='#L98'>98</a>
-<a name='L99'></a><a href='#L99'>99</a>
-<a name='L100'></a><a href='#L100'>100</a>
-<a name='L101'></a><a href='#L101'>101</a>
-<a name='L102'></a><a href='#L102'>102</a>
-<a name='L103'></a><a href='#L103'>103</a>
-<a name='L104'></a><a href='#L104'>104</a>
-<a name='L105'></a><a href='#L105'>105</a>
-<a name='L106'></a><a href='#L106'>106</a>
-<a name='L107'></a><a href='#L107'>107</a>
-<a name='L108'></a><a href='#L108'>108</a>
-<a name='L109'></a><a href='#L109'>109</a>
-<a name='L110'></a><a href='#L110'>110</a>
-<a name='L111'></a><a href='#L111'>111</a>
-<a name='L112'></a><a href='#L112'>112</a>
-<a name='L113'></a><a href='#L113'>113</a>
-<a name='L114'></a><a href='#L114'>114</a>
-<a name='L115'></a><a href='#L115'>115</a>
-<a name='L116'></a><a href='#L116'>116</a>
-<a name='L117'></a><a href='#L117'>117</a>
-<a name='L118'></a><a href='#L118'>118</a>
-<a name='L119'></a><a href='#L119'>119</a>
-<a name='L120'></a><a href='#L120'>120</a>
-<a name='L121'></a><a href='#L121'>121</a>
-<a name='L122'></a><a href='#L122'>122</a>
-<a name='L123'></a><a href='#L123'>123</a>
-<a name='L124'></a><a href='#L124'>124</a>
-<a name='L125'></a><a href='#L125'>125</a>
-<a name='L126'></a><a href='#L126'>126</a>
-<a name='L127'></a><a href='#L127'>127</a>
-<a name='L128'></a><a href='#L128'>128</a>
-<a name='L129'></a><a href='#L129'>129</a>
-<a name='L130'></a><a href='#L130'>130</a>
-<a name='L131'></a><a href='#L131'>131</a>
-<a name='L132'></a><a href='#L132'>132</a>
-<a name='L133'></a><a href='#L133'>133</a>
-<a name='L134'></a><a href='#L134'>134</a>
-<a name='L135'></a><a href='#L135'>135</a>
-<a name='L136'></a><a href='#L136'>136</a>
-<a name='L137'></a><a href='#L137'>137</a>
-<a name='L138'></a><a href='#L138'>138</a>
-<a name='L139'></a><a href='#L139'>139</a>
-<a name='L140'></a><a href='#L140'>140</a>
-<a name='L141'></a><a href='#L141'>141</a>
-<a name='L142'></a><a href='#L142'>142</a>
-<a name='L143'></a><a href='#L143'>143</a>
-<a name='L144'></a><a href='#L144'>144</a>
-<a name='L145'></a><a href='#L145'>145</a>
-<a name='L146'></a><a href='#L146'>146</a>
-<a name='L147'></a><a href='#L147'>147</a>
-<a name='L148'></a><a href='#L148'>148</a>
-<a name='L149'></a><a href='#L149'>149</a>
-<a name='L150'></a><a href='#L150'>150</a>
-<a name='L151'></a><a href='#L151'>151</a>
-<a name='L152'></a><a href='#L152'>152</a>
-<a name='L153'></a><a href='#L153'>153</a>
-<a name='L154'></a><a href='#L154'>154</a>
-<a name='L155'></a><a href='#L155'>155</a>
-<a name='L156'></a><a href='#L156'>156</a>
-<a name='L157'></a><a href='#L157'>157</a>
-<a name='L158'></a><a href='#L158'>158</a>
-<a name='L159'></a><a href='#L159'>159</a>
-<a name='L160'></a><a href='#L160'>160</a>
-<a name='L161'></a><a href='#L161'>161</a>
-<a name='L162'></a><a href='#L162'>162</a>
-<a name='L163'></a><a href='#L163'>163</a>
-<a name='L164'></a><a href='#L164'>164</a>
-<a name='L165'></a><a href='#L165'>165</a>
-<a name='L166'></a><a href='#L166'>166</a>
-<a name='L167'></a><a href='#L167'>167</a>
-<a name='L168'></a><a href='#L168'>168</a>
-<a name='L169'></a><a href='#L169'>169</a>
-<a name='L170'></a><a href='#L170'>170</a>
-<a name='L171'></a><a href='#L171'>171</a>
-<a name='L172'></a><a href='#L172'>172</a>
-<a name='L173'></a><a href='#L173'>173</a>
-<a name='L174'></a><a href='#L174'>174</a>
-<a name='L175'></a><a href='#L175'>175</a>
-<a name='L176'></a><a href='#L176'>176</a>
-<a name='L177'></a><a href='#L177'>177</a>
-<a name='L178'></a><a href='#L178'>178</a>
-<a name='L179'></a><a href='#L179'>179</a>
-<a name='L180'></a><a href='#L180'>180</a>
-<a name='L181'></a><a href='#L181'>181</a>
-<a name='L182'></a><a href='#L182'>182</a>
-<a name='L183'></a><a href='#L183'>183</a>
-<a name='L184'></a><a href='#L184'>184</a>
-<a name='L185'></a><a href='#L185'>185</a>
-<a name='L186'></a><a href='#L186'>186</a>
-<a name='L187'></a><a href='#L187'>187</a>
-<a name='L188'></a><a href='#L188'>188</a>
-<a name='L189'></a><a href='#L189'>189</a>
-<a name='L190'></a><a href='#L190'>190</a>
-<a name='L191'></a><a href='#L191'>191</a>
-<a name='L192'></a><a href='#L192'>192</a>
-<a name='L193'></a><a href='#L193'>193</a>
-<a name='L194'></a><a href='#L194'>194</a>
-<a name='L195'></a><a href='#L195'>195</a>
-<a name='L196'></a><a href='#L196'>196</a>
-<a name='L197'></a><a href='#L197'>197</a>
-<a name='L198'></a><a href='#L198'>198</a>
-<a name='L199'></a><a href='#L199'>199</a>
-<a name='L200'></a><a href='#L200'>200</a>
-<a name='L201'></a><a href='#L201'>201</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import urlExist from "url-exist";
-import { Ollama } from 'ollama';
-import { ChatOllama } from "@langchain/community/chat_models/ollama";
-import { ChatPromptTemplate, PromptTemplate, MessagesPlaceholder } from "@langchain/core/prompts";
-import { isCollectionAvailable, retriever } from "../controllers/Embeddings.js";
-import { createHistoryAwareRetriever } from "langchain/chains/history_aware_retriever";
-import { createStuffDocumentsChain } from "langchain/chains/combine_documents";
-import { createRetrievalChain } from "langchain/chains/retrieval";
-import { HumanMessage, AIMessage } from "@langchain/core/messages";
-import { extendChat } from "./handleDB.js";
-import * as path from 'path';
-&nbsp;
-&nbsp;
-// PROVIDE OLLAMA CONNECTION TO ALL ROUTES
-export const ollama = new Ollama({ host: process.env.AI_API_URL });
-&nbsp;
-/** *******************************************************
- * CHECK IF OLLAMA API IS AVAILABLE
- */
-export const aiIsRunning = <span class="fstat-no" title="function not covered" >async () =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >  try {</span>
-<span class="cstat-no" title="statement not covered" >    return await urlExist(`${process.env.AI_API_URL}`);</span>
-<span class="cstat-no" title="statement not covered" >  } catch (error) {</span>
-<span class="cstat-no" title="statement not covered" >    return false;</span>
-<span class="cstat-no" title="statement not covered" >  }</span>
-<span class="cstat-no" title="statement not covered" >};</span>
-&nbsp;
-/** *******************************************************
- * FILTER INSTALLED MODELS BY NAME VIA REGEX
- */
-export const aiGetModels = <span class="fstat-no" title="function not covered" >async () =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >  try {</span>
-<span class="cstat-no" title="statement not covered" >    return await ollama.list();</span>
-<span class="cstat-no" title="statement not covered" >  } catch (error) {</span>
-<span class="cstat-no" title="statement not covered" >    throw error;</span>
-<span class="cstat-no" title="statement not covered" >  }</span>
-<span class="cstat-no" title="statement not covered" >};</span>
-&nbsp;
-&nbsp;
-/** *******************************************************
- * GET MODEL
- */
-export const aiGetModel = <span class="fstat-no" title="function not covered" >async (model) =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >  try {</span>
-<span class="cstat-no" title="statement not covered" >    return await ollama.show({ model });</span>
-<span class="cstat-no" title="statement not covered" >  } catch (error) {</span>
-<span class="cstat-no" title="statement not covered" >    throw error;</span>
-<span class="cstat-no" title="statement not covered" >  }</span>
-<span class="cstat-no" title="statement not covered" >};</span>
-&nbsp;
-/** *******************************************************
- * INSTALL MODEL
- */
-export const aiInstallModel = <span class="fstat-no" title="function not covered" >async (model) =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >  try {</span>
-<span class="cstat-no" title="statement not covered" >    return await ollama.pull({ model, stream: false });</span>
-<span class="cstat-no" title="statement not covered" >  } catch (error) {</span>
-<span class="cstat-no" title="statement not covered" >    throw error;</span>
-<span class="cstat-no" title="statement not covered" >  }</span>
-<span class="cstat-no" title="statement not covered" >};</span>
-&nbsp;
-&nbsp;
-/** *******************************************************
- * DELETE MODEL
- */
-export const aiDeleteModel = <span class="fstat-no" title="function not covered" >async (model) =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >  try {</span>
-<span class="cstat-no" title="statement not covered" >    return await ollama.delete({ model });</span>
-<span class="cstat-no" title="statement not covered" >  } catch (error) {</span>
-<span class="cstat-no" title="statement not covered" >    throw error;</span>
-<span class="cstat-no" title="statement not covered" >  }</span>
-<span class="cstat-no" title="statement not covered" >};</span>
-&nbsp;
-&nbsp;
-/** *******************************************************
- * CREATE AI SUMMARIZED TEXT
- */
-export const summarizeText = <span class="fstat-no" title="function not covered" >async (model, input) =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >  try {</span>
-<span class="cstat-no" title="statement not covered" >    // define llm</span>
-<span class="cstat-no" title="statement not covered" >    const llm = new ChatOllama({</span>
-<span class="cstat-no" title="statement not covered" >      baseUrl: process.env['AI_API_URL'],</span>
-<span class="cstat-no" title="statement not covered" >      model: model,</span>
-<span class="cstat-no" title="statement not covered" >      temperature: Number(process.env['AI_TEMPERATURE'])</span>
-<span class="cstat-no" title="statement not covered" >    });</span>
-<span class="cstat-no" title="statement not covered" >    // create template</span>
-<span class="cstat-no" title="statement not covered" >    const promptTemplate = PromptTemplate.fromTemplate(process.env['AI_SUMMARIZE_PROMPT']);</span>
-<span class="cstat-no" title="statement not covered" >    // create chain combining llm and template</span>
-<span class="cstat-no" title="statement not covered" >    const chain = promptTemplate.pipe(llm);</span>
-<span class="cstat-no" title="statement not covered" >    // invoke variable text &amp; run chain</span>
-<span class="cstat-no" title="statement not covered" >    const summary = await chain.invoke({ text: input });</span>
-<span class="cstat-no" title="statement not covered" >    return summary.content;</span>
-<span class="cstat-no" title="statement not covered" >  } catch (error) {</span>
-<span class="cstat-no" title="statement not covered" >    throw error;</span>
-<span class="cstat-no" title="statement not covered" >  }</span>
-<span class="cstat-no" title="statement not covered" >};</span>
-&nbsp;
-&nbsp;
-/** *******************************************************
- * GENERATE CHAT
- */
-export const chat = <span class="fstat-no" title="function not covered" >async (req, res, next) =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >  // FEATURE apply citations or sources</span>
-<span class="cstat-no" title="statement not covered" >  // sources: https://js.langchain.com/v0.1/docs/use_cases/question_answering/sources/#adding-sources</span>
-<span class="cstat-no" title="statement not covered" >  // citations: https://js.langchain.com/v0.1/docs/use_cases/question_answering/citations/</span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" >  // test if collection is available</span>
-<span class="cstat-no" title="statement not covered" >  const collection = await isCollectionAvailable();</span>
-<span class="cstat-no" title="statement not covered" >  if (!collection) {</span>
-<span class="cstat-no" title="statement not covered" >    return res.status(500).json({ error: `VectorDB collection ${process.env['VECTOR_COLLECTION_NAME']} not found.` });</span>
-<span class="cstat-no" title="statement not covered" >  }</span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" >  // create chat model</span>
-<span class="cstat-no" title="statement not covered" >  const llm = new ChatOllama({</span>
-<span class="cstat-no" title="statement not covered" >    baseUrl: process.env['AI_API_URL'],</span>
-<span class="cstat-no" title="statement not covered" >    model: req.body.model,</span>
-<span class="cstat-no" title="statement not covered" >    temperature: Number(process.env['AI_TEMPERATURE'])</span>
-<span class="cstat-no" title="statement not covered" >  });</span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" >  // #################</span>
-<span class="cstat-no" title="statement not covered" >  // contextualize the input</span>
-<span class="cstat-no" title="statement not covered" >  // cite: https://js.langchain.com/v0.1/docs/get_started/quickstart/#conversational-retrieval-chain</span>
-<span class="cstat-no" title="statement not covered" >  //  "[...]take in the most recent input (input) and the conversation history (chat_history) and use an LLM to generate a search query[...]"</span>
-<span class="cstat-no" title="statement not covered" >  // #################</span>
-<span class="cstat-no" title="statement not covered" >  // create a prompt that considers the chat history</span>
-<span class="cstat-no" title="statement not covered" >  const historyAwarePrompt = ChatPromptTemplate.fromMessages([</span>
-<span class="cstat-no" title="statement not covered" >    new MessagesPlaceholder("chat_history"),</span>
-<span class="cstat-no" title="statement not covered" >    ["user", "{input}"],</span>
-<span class="cstat-no" title="statement not covered" >    ["user", process.env['AI_CONTEXTUALIZE_PROMPT']]</span>
-<span class="cstat-no" title="statement not covered" >  ]);</span>
-<span class="cstat-no" title="statement not covered" >  // create a chain that uses the prompt to generate a search query</span>
-<span class="cstat-no" title="statement not covered" >  const historyAwareRetrieverChain = await createHistoryAwareRetriever({</span>
-<span class="cstat-no" title="statement not covered" >    llm,</span>
-<span class="cstat-no" title="statement not covered" >    retriever,</span>
-<span class="cstat-no" title="statement not covered" >    rephrasePrompt: historyAwarePrompt,</span>
-<span class="cstat-no" title="statement not covered" >  });</span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" >  // #################</span>
-<span class="cstat-no" title="statement not covered" >  // create the chat chain</span>
-<span class="cstat-no" title="statement not covered" >  // #################</span>
-<span class="cstat-no" title="statement not covered" >  // create a prompt that uses the chat history</span>
-<span class="cstat-no" title="statement not covered" >  const chatPrompt = ChatPromptTemplate.fromMessages([</span>
-<span class="cstat-no" title="statement not covered" >    [</span>
-<span class="cstat-no" title="statement not covered" >      "system",</span>
-<span class="cstat-no" title="statement not covered" >      process.env['AI_CHAT_PROMPT'],</span>
-<span class="cstat-no" title="statement not covered" >    ],</span>
-<span class="cstat-no" title="statement not covered" >    new MessagesPlaceholder("chat_history"),</span>
-<span class="cstat-no" title="statement not covered" >    ["user", "{input}"],</span>
-<span class="cstat-no" title="statement not covered" >  ]);</span>
-<span class="cstat-no" title="statement not covered" >  // create chat chain</span>
-<span class="cstat-no" title="statement not covered" >  const chatChain = await createStuffDocumentsChain({</span>
-<span class="cstat-no" title="statement not covered" >    llm,</span>
-<span class="cstat-no" title="statement not covered" >    prompt: chatPrompt,</span>
-<span class="cstat-no" title="statement not covered" >    returnMessages: true</span>
-<span class="cstat-no" title="statement not covered" >  });</span>
-<span class="cstat-no" title="statement not covered" >  // #################</span>
-<span class="cstat-no" title="statement not covered" >  // combine chains to get result</span>
-<span class="cstat-no" title="statement not covered" >  // #################</span>
-<span class="cstat-no" title="statement not covered" >  // combine the two chains</span>
-<span class="cstat-no" title="statement not covered" >  const conversationalRetrievalChain = await createRetrievalChain({</span>
-<span class="cstat-no" title="statement not covered" >    retriever: historyAwareRetrieverChain,</span>
-<span class="cstat-no" title="statement not covered" >    combineDocsChain: chatChain,</span>
-<span class="cstat-no" title="statement not covered" >  });</span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" >  // finally ask the question</span>
-<span class="cstat-no" title="statement not covered" >  const result = await conversationalRetrievalChain.invoke({</span>
-<span class="cstat-no" title="statement not covered" >    chat_history: req.body.chatHistory ?? [],</span>
-<span class="cstat-no" title="statement not covered" >    input: req.body.input,</span>
-<span class="cstat-no" title="statement not covered" >  });</span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" >  // get source informations and prepare to store in chat history</span>
-<span class="cstat-no" title="statement not covered" >  // Answers from DocumentSource are prefixed with '&lt;DS&gt; '</span>
-<span class="cstat-no" title="statement not covered" >  // Answers from pretrained knowledge are prefixed with '&lt;PK&gt; '</span>
-<span class="cstat-no" title="statement not covered" >  // BUG: prefixes are not consistent correctly set bet LLM</span>
-<span class="cstat-no" title="statement not covered" >  // console.log('Answer: ', result.answer.substring(0, 15), '...');</span>
-<span class="cstat-no" title="statement not covered" >  let sourceLocation;</span>
-<span class="cstat-no" title="statement not covered" >  if (result.answer.startsWith('&lt;DS&gt; ')) {</span>
-<span class="cstat-no" title="statement not covered" >    const file = path.posix.basename(result.context[0].metadata.source);</span>
-<span class="cstat-no" title="statement not covered" >    const posFrom = result.context[0].metadata.loc.lines.from;</span>
-<span class="cstat-no" title="statement not covered" >    const posTo = result.context[0].metadata.loc.lines.to;</span>
-<span class="cstat-no" title="statement not covered" >    sourceLocation = `${file}:${posFrom}-${posTo}`;</span>
-<span class="cstat-no" title="statement not covered" >  } else {</span>
-<span class="cstat-no" title="statement not covered" >    sourceLocation = 'pretrained';</span>
-<span class="cstat-no" title="statement not covered" >  }</span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" >  result.answer = result.answer.substring(5);</span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" >  // store q/a-pair in chat history</span>
-<span class="cstat-no" title="statement not covered" >  let chat = await extendChat(req.body.chatId, [</span>
-<span class="cstat-no" title="statement not covered" >    new HumanMessage(req.body.input),</span>
-<span class="cstat-no" title="statement not covered" >    new AIMessage({ content: result.answer, source: sourceLocation })</span>
-<span class="cstat-no" title="statement not covered" >  ]);</span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" >  // return the answer</span>
-<span class="cstat-no" title="statement not covered" >  console.log('Answer: ', result.answer);</span>
-<span class="cstat-no" title="statement not covered" >  console.log('Chat: ', chat);</span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" >  return res.json({ answer: result.answer, chat });</span>
-<span class="cstat-no" title="statement not covered" >};</span></pre></td></tr></table></pre>
-
-                <div class='push'></div><!-- for sticky footer -->
-            </div><!-- /wrapper -->
-            <div class='footer quiet pad2 space-top1 center small'>
-                Code coverage generated by
-                <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
-                at 2024-07-28T19:23:24.511Z
-            </div>
-        <script src="../../prettify.js"></script>
-        <script>
-            window.onload = function () {
-                prettyPrint();
-            };
-        </script>
-        <script src="../../sorter.js"></script>
-        <script src="../../block-navigation.js"></script>
-    </body>
-</html>
-    
\ No newline at end of file
diff --git a/coverage/ragchat-api/utils/handleDB.js.html b/coverage/ragchat-api/utils/handleDB.js.html
deleted file mode 100644
index 6089c69..0000000
--- a/coverage/ragchat-api/utils/handleDB.js.html
+++ /dev/null
@@ -1,622 +0,0 @@
-
-<!doctype html>
-<html lang="en">
-
-<head>
-    <title>Code coverage report for ragchat-api/utils/handleDB.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
-    <meta name="viewport" content="width=device-width, initial-scale=1" />
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-    
-<body>
-<div class='wrapper'>
-    <div class='pad1'>
-        <h1><a href="../../index.html">All files</a> / <a href="index.html">ragchat-api/utils</a> handleDB.js</h1>
-        <div class='clearfix'>
-            
-            <div class='fl pad1y space-right2'>
-                <span class="strong">49.44% </span>
-                <span class="quiet">Statements</span>
-                <span class='fraction'>89/180</span>
-            </div>
-        
-            
-            <div class='fl pad1y space-right2'>
-                <span class="strong">100% </span>
-                <span class="quiet">Branches</span>
-                <span class='fraction'>0/0</span>
-            </div>
-        
-            
-            <div class='fl pad1y space-right2'>
-                <span class="strong">0% </span>
-                <span class="quiet">Functions</span>
-                <span class='fraction'>0/8</span>
-            </div>
-        
-            
-            <div class='fl pad1y space-right2'>
-                <span class="strong">49.44% </span>
-                <span class="quiet">Lines</span>
-                <span class='fraction'>89/180</span>
-            </div>
-        
-            
-        </div>
-        <p class="quiet">
-            Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
-        </p>
-        <template id="filterTemplate">
-            <div class="quiet">
-                Filter:
-                <input type="search" id="fileSearch">
-            </div>
-        </template>
-    </div>
-    <div class='status-line low'></div>
-    <pre><table class="coverage">
-<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
-<a name='L2'></a><a href='#L2'>2</a>
-<a name='L3'></a><a href='#L3'>3</a>
-<a name='L4'></a><a href='#L4'>4</a>
-<a name='L5'></a><a href='#L5'>5</a>
-<a name='L6'></a><a href='#L6'>6</a>
-<a name='L7'></a><a href='#L7'>7</a>
-<a name='L8'></a><a href='#L8'>8</a>
-<a name='L9'></a><a href='#L9'>9</a>
-<a name='L10'></a><a href='#L10'>10</a>
-<a name='L11'></a><a href='#L11'>11</a>
-<a name='L12'></a><a href='#L12'>12</a>
-<a name='L13'></a><a href='#L13'>13</a>
-<a name='L14'></a><a href='#L14'>14</a>
-<a name='L15'></a><a href='#L15'>15</a>
-<a name='L16'></a><a href='#L16'>16</a>
-<a name='L17'></a><a href='#L17'>17</a>
-<a name='L18'></a><a href='#L18'>18</a>
-<a name='L19'></a><a href='#L19'>19</a>
-<a name='L20'></a><a href='#L20'>20</a>
-<a name='L21'></a><a href='#L21'>21</a>
-<a name='L22'></a><a href='#L22'>22</a>
-<a name='L23'></a><a href='#L23'>23</a>
-<a name='L24'></a><a href='#L24'>24</a>
-<a name='L25'></a><a href='#L25'>25</a>
-<a name='L26'></a><a href='#L26'>26</a>
-<a name='L27'></a><a href='#L27'>27</a>
-<a name='L28'></a><a href='#L28'>28</a>
-<a name='L29'></a><a href='#L29'>29</a>
-<a name='L30'></a><a href='#L30'>30</a>
-<a name='L31'></a><a href='#L31'>31</a>
-<a name='L32'></a><a href='#L32'>32</a>
-<a name='L33'></a><a href='#L33'>33</a>
-<a name='L34'></a><a href='#L34'>34</a>
-<a name='L35'></a><a href='#L35'>35</a>
-<a name='L36'></a><a href='#L36'>36</a>
-<a name='L37'></a><a href='#L37'>37</a>
-<a name='L38'></a><a href='#L38'>38</a>
-<a name='L39'></a><a href='#L39'>39</a>
-<a name='L40'></a><a href='#L40'>40</a>
-<a name='L41'></a><a href='#L41'>41</a>
-<a name='L42'></a><a href='#L42'>42</a>
-<a name='L43'></a><a href='#L43'>43</a>
-<a name='L44'></a><a href='#L44'>44</a>
-<a name='L45'></a><a href='#L45'>45</a>
-<a name='L46'></a><a href='#L46'>46</a>
-<a name='L47'></a><a href='#L47'>47</a>
-<a name='L48'></a><a href='#L48'>48</a>
-<a name='L49'></a><a href='#L49'>49</a>
-<a name='L50'></a><a href='#L50'>50</a>
-<a name='L51'></a><a href='#L51'>51</a>
-<a name='L52'></a><a href='#L52'>52</a>
-<a name='L53'></a><a href='#L53'>53</a>
-<a name='L54'></a><a href='#L54'>54</a>
-<a name='L55'></a><a href='#L55'>55</a>
-<a name='L56'></a><a href='#L56'>56</a>
-<a name='L57'></a><a href='#L57'>57</a>
-<a name='L58'></a><a href='#L58'>58</a>
-<a name='L59'></a><a href='#L59'>59</a>
-<a name='L60'></a><a href='#L60'>60</a>
-<a name='L61'></a><a href='#L61'>61</a>
-<a name='L62'></a><a href='#L62'>62</a>
-<a name='L63'></a><a href='#L63'>63</a>
-<a name='L64'></a><a href='#L64'>64</a>
-<a name='L65'></a><a href='#L65'>65</a>
-<a name='L66'></a><a href='#L66'>66</a>
-<a name='L67'></a><a href='#L67'>67</a>
-<a name='L68'></a><a href='#L68'>68</a>
-<a name='L69'></a><a href='#L69'>69</a>
-<a name='L70'></a><a href='#L70'>70</a>
-<a name='L71'></a><a href='#L71'>71</a>
-<a name='L72'></a><a href='#L72'>72</a>
-<a name='L73'></a><a href='#L73'>73</a>
-<a name='L74'></a><a href='#L74'>74</a>
-<a name='L75'></a><a href='#L75'>75</a>
-<a name='L76'></a><a href='#L76'>76</a>
-<a name='L77'></a><a href='#L77'>77</a>
-<a name='L78'></a><a href='#L78'>78</a>
-<a name='L79'></a><a href='#L79'>79</a>
-<a name='L80'></a><a href='#L80'>80</a>
-<a name='L81'></a><a href='#L81'>81</a>
-<a name='L82'></a><a href='#L82'>82</a>
-<a name='L83'></a><a href='#L83'>83</a>
-<a name='L84'></a><a href='#L84'>84</a>
-<a name='L85'></a><a href='#L85'>85</a>
-<a name='L86'></a><a href='#L86'>86</a>
-<a name='L87'></a><a href='#L87'>87</a>
-<a name='L88'></a><a href='#L88'>88</a>
-<a name='L89'></a><a href='#L89'>89</a>
-<a name='L90'></a><a href='#L90'>90</a>
-<a name='L91'></a><a href='#L91'>91</a>
-<a name='L92'></a><a href='#L92'>92</a>
-<a name='L93'></a><a href='#L93'>93</a>
-<a name='L94'></a><a href='#L94'>94</a>
-<a name='L95'></a><a href='#L95'>95</a>
-<a name='L96'></a><a href='#L96'>96</a>
-<a name='L97'></a><a href='#L97'>97</a>
-<a name='L98'></a><a href='#L98'>98</a>
-<a name='L99'></a><a href='#L99'>99</a>
-<a name='L100'></a><a href='#L100'>100</a>
-<a name='L101'></a><a href='#L101'>101</a>
-<a name='L102'></a><a href='#L102'>102</a>
-<a name='L103'></a><a href='#L103'>103</a>
-<a name='L104'></a><a href='#L104'>104</a>
-<a name='L105'></a><a href='#L105'>105</a>
-<a name='L106'></a><a href='#L106'>106</a>
-<a name='L107'></a><a href='#L107'>107</a>
-<a name='L108'></a><a href='#L108'>108</a>
-<a name='L109'></a><a href='#L109'>109</a>
-<a name='L110'></a><a href='#L110'>110</a>
-<a name='L111'></a><a href='#L111'>111</a>
-<a name='L112'></a><a href='#L112'>112</a>
-<a name='L113'></a><a href='#L113'>113</a>
-<a name='L114'></a><a href='#L114'>114</a>
-<a name='L115'></a><a href='#L115'>115</a>
-<a name='L116'></a><a href='#L116'>116</a>
-<a name='L117'></a><a href='#L117'>117</a>
-<a name='L118'></a><a href='#L118'>118</a>
-<a name='L119'></a><a href='#L119'>119</a>
-<a name='L120'></a><a href='#L120'>120</a>
-<a name='L121'></a><a href='#L121'>121</a>
-<a name='L122'></a><a href='#L122'>122</a>
-<a name='L123'></a><a href='#L123'>123</a>
-<a name='L124'></a><a href='#L124'>124</a>
-<a name='L125'></a><a href='#L125'>125</a>
-<a name='L126'></a><a href='#L126'>126</a>
-<a name='L127'></a><a href='#L127'>127</a>
-<a name='L128'></a><a href='#L128'>128</a>
-<a name='L129'></a><a href='#L129'>129</a>
-<a name='L130'></a><a href='#L130'>130</a>
-<a name='L131'></a><a href='#L131'>131</a>
-<a name='L132'></a><a href='#L132'>132</a>
-<a name='L133'></a><a href='#L133'>133</a>
-<a name='L134'></a><a href='#L134'>134</a>
-<a name='L135'></a><a href='#L135'>135</a>
-<a name='L136'></a><a href='#L136'>136</a>
-<a name='L137'></a><a href='#L137'>137</a>
-<a name='L138'></a><a href='#L138'>138</a>
-<a name='L139'></a><a href='#L139'>139</a>
-<a name='L140'></a><a href='#L140'>140</a>
-<a name='L141'></a><a href='#L141'>141</a>
-<a name='L142'></a><a href='#L142'>142</a>
-<a name='L143'></a><a href='#L143'>143</a>
-<a name='L144'></a><a href='#L144'>144</a>
-<a name='L145'></a><a href='#L145'>145</a>
-<a name='L146'></a><a href='#L146'>146</a>
-<a name='L147'></a><a href='#L147'>147</a>
-<a name='L148'></a><a href='#L148'>148</a>
-<a name='L149'></a><a href='#L149'>149</a>
-<a name='L150'></a><a href='#L150'>150</a>
-<a name='L151'></a><a href='#L151'>151</a>
-<a name='L152'></a><a href='#L152'>152</a>
-<a name='L153'></a><a href='#L153'>153</a>
-<a name='L154'></a><a href='#L154'>154</a>
-<a name='L155'></a><a href='#L155'>155</a>
-<a name='L156'></a><a href='#L156'>156</a>
-<a name='L157'></a><a href='#L157'>157</a>
-<a name='L158'></a><a href='#L158'>158</a>
-<a name='L159'></a><a href='#L159'>159</a>
-<a name='L160'></a><a href='#L160'>160</a>
-<a name='L161'></a><a href='#L161'>161</a>
-<a name='L162'></a><a href='#L162'>162</a>
-<a name='L163'></a><a href='#L163'>163</a>
-<a name='L164'></a><a href='#L164'>164</a>
-<a name='L165'></a><a href='#L165'>165</a>
-<a name='L166'></a><a href='#L166'>166</a>
-<a name='L167'></a><a href='#L167'>167</a>
-<a name='L168'></a><a href='#L168'>168</a>
-<a name='L169'></a><a href='#L169'>169</a>
-<a name='L170'></a><a href='#L170'>170</a>
-<a name='L171'></a><a href='#L171'>171</a>
-<a name='L172'></a><a href='#L172'>172</a>
-<a name='L173'></a><a href='#L173'>173</a>
-<a name='L174'></a><a href='#L174'>174</a>
-<a name='L175'></a><a href='#L175'>175</a>
-<a name='L176'></a><a href='#L176'>176</a>
-<a name='L177'></a><a href='#L177'>177</a>
-<a name='L178'></a><a href='#L178'>178</a>
-<a name='L179'></a><a href='#L179'>179</a>
-<a name='L180'></a><a href='#L180'>180</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import mongoose from "mongoose";
-import chalk from "chalk";
-import Chat from "../models/Chat.js";
-import { mapChatMessagesToStoredMessages } from "@langchain/core/messages";
-&nbsp;
-&nbsp;
-/**
- * opens a connection to the database
- *
- * @return  {object}          database connection
- */
-export const dbConnection = <span class="fstat-no" title="function not covered" >async () =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >  // skip if testing</span>
-<span class="cstat-no" title="statement not covered" >  console.log(chalk.blue('connecting to db'));</span>
-<span class="cstat-no" title="statement not covered" >  // else try to connect</span>
-<span class="cstat-no" title="statement not covered" >  try {</span>
-<span class="cstat-no" title="statement not covered" >    // prevent deprication warning</span>
-<span class="cstat-no" title="statement not covered" >    mongoose.set('strictQuery', true);</span>
-<span class="cstat-no" title="statement not covered" >    // connect</span>
-<span class="cstat-no" title="statement not covered" >    mongoose.connect(process.env.MONGO_URL);</span>
-<span class="cstat-no" title="statement not covered" >    // get connection</span>
-<span class="cstat-no" title="statement not covered" >    const dbConnection = mongoose.connection;</span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" >    dbConnection.once("open", (_) =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >      console.log(chalk.green('DB connected successfully'));</span>
-<span class="cstat-no" title="statement not covered" >    });</span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" >    dbConnection.on("error", (error) =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >      console.error(chalk.red(error));</span>
-<span class="cstat-no" title="statement not covered" >    });</span>
-<span class="cstat-no" title="statement not covered" >    return dbConnection;</span>
-<span class="cstat-no" title="statement not covered" >  } catch (error) {</span>
-<span class="cstat-no" title="statement not covered" >    console.error(error);</span>
-<span class="cstat-no" title="statement not covered" >    process.exit(1);</span>
-<span class="cstat-no" title="statement not covered" >  }</span>
-<span class="cstat-no" title="statement not covered" >};</span>
-&nbsp;
-&nbsp;
-/**
- * opens a connection to the database
- * 
- * @param   {object}  res  responde object of express
- * @param   {object}  model  model to create record in, avail in /models
- * @param   {object}  data   data to create record with
- * 
- * @return  {object}          document
- */
-export const createRecord = <span class="fstat-no" title="function not covered" >async (model, data) =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >  try {</span>
-<span class="cstat-no" title="statement not covered" >    return await model.create(data);</span>
-<span class="cstat-no" title="statement not covered" >  } catch (error) {</span>
-<span class="cstat-no" title="statement not covered" >    throw error;</span>
-<span class="cstat-no" title="statement not covered" >  }</span>
-<span class="cstat-no" title="statement not covered" >};</span>
-&nbsp;
-&nbsp;
-/**
- * find one record
- *
- * @param   {mongoose model}  model         [required] model to search the record in
- * @param   {object}          searchObject  [optional] search object as filter, i.e. {email: 'a@b.c', name: 'John'}
- * @param   {string}          fieldHandler  [optional] additional fields to return or drop, i.e. '+password'
- *
- * @return  {object}              found document
- */
-export const findOneRecord = <span class="fstat-no" title="function not covered" >async (model, searchObject = {}, fieldHandler = '') =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >  try {</span>
-<span class="cstat-no" title="statement not covered" >    let foundRecord;</span>
-<span class="cstat-no" title="statement not covered" >    if (!fieldHandler) {</span>
-<span class="cstat-no" title="statement not covered" >      foundRecord = await model.findOne(searchObject);</span>
-<span class="cstat-no" title="statement not covered" >    } else {</span>
-<span class="cstat-no" title="statement not covered" >      foundRecord = await model.findOne(searchObject).select(fieldHandler);</span>
-<span class="cstat-no" title="statement not covered" >    }</span>
-<span class="cstat-no" title="statement not covered" >    return foundRecord;</span>
-<span class="cstat-no" title="statement not covered" >  } catch (error) {</span>
-<span class="cstat-no" title="statement not covered" >    throw error;</span>
-<span class="cstat-no" title="statement not covered" >  }</span>
-<span class="cstat-no" title="statement not covered" >};</span>
-&nbsp;
-/**
- * find multiple records
- *
- * @param   {mongoose model}  model         [required] model to search the record in
- * @param   {object}          searchObject  [optional] search object as filter, i.e. {email: 'a@b.c', name: 'John'}
- * @param   {string}          fieldHandler  [optional] additional fields to return or drop, i.e. '+password'
- *
- * @return  {object}              found documents
- */
-export const findRecords = <span class="fstat-no" title="function not covered" >async (model, searchObject = {}, fieldHandler = '') =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >  try {</span>
-<span class="cstat-no" title="statement not covered" >    let foundRecords;</span>
-<span class="cstat-no" title="statement not covered" >    if (!fieldHandler) {</span>
-<span class="cstat-no" title="statement not covered" >      foundRecords = await model.find(searchObject);</span>
-<span class="cstat-no" title="statement not covered" >    } else {</span>
-<span class="cstat-no" title="statement not covered" >      foundRecords = await model.find(searchObject).select(fieldHandler);</span>
-<span class="cstat-no" title="statement not covered" >    }</span>
-<span class="cstat-no" title="statement not covered" >    return foundRecords;</span>
-<span class="cstat-no" title="statement not covered" >  } catch (error) {</span>
-<span class="cstat-no" title="statement not covered" >    throw error;</span>
-<span class="cstat-no" title="statement not covered" >  }</span>
-<span class="cstat-no" title="statement not covered" >};</span>
-&nbsp;
-/**
- * update one record
- *
- * @param   {mongoose document}   newData  a mongoose document with new data
- *
- * @return  {mongoose document}             updated document
- */
-export const updateOneRecord = <span class="fstat-no" title="function not covered" >async (newData) =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >  try {</span>
-<span class="cstat-no" title="statement not covered" >    // drop password if empty to prevent setting empty</span>
-<span class="cstat-no" title="statement not covered" >    if (!newData.password) delete newData.password;</span>
-<span class="cstat-no" title="statement not covered" >    return await newData.save({ new: true });</span>
-<span class="cstat-no" title="statement not covered" >  } catch (error) {</span>
-<span class="cstat-no" title="statement not covered" >    throw error;</span>
-<span class="cstat-no" title="statement not covered" >  }</span>
-<span class="cstat-no" title="statement not covered" >};</span>
-&nbsp;
-/**
- * Find a document by id and update it
- *
- * @param   {mongoose model}  model         [required] model to search the record in
- * @param   {string}          id            [required] id of the searched record
- * @param   {object}          data          [required] data to update the record with
- *
- * @return  {object}         the edited document
- */
-export const findByIdAndUpdate = <span class="fstat-no" title="function not covered" >async (model, id, data) =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >  try {</span>
-<span class="cstat-no" title="statement not covered" >    return model.findByIdAndUpdate(id, data);</span>
-<span class="cstat-no" title="statement not covered" >  } catch (error) {</span>
-<span class="cstat-no" title="statement not covered" >    throw error;</span>
-<span class="cstat-no" title="statement not covered" >  }</span>
-<span class="cstat-no" title="statement not covered" >};</span>
-&nbsp;
-&nbsp;
-/**
- * Find a document by id and update it
- *
- * @param   {mongoose model}  model         [required] model to search the record in
- * @param   {object}          searchObject  [required] search object as filter, i.e. {email: 'a@b.c', name: 'John'}
- * @param   {object}          data          [required] data to update the record with
- *
- * @return  {object}         the edited document
- */
-export const findOneAndUpdate = <span class="fstat-no" title="function not covered" >async (model, searchObject, data) =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >  try {</span>
-<span class="cstat-no" title="statement not covered" >    return model.updateOne(searchObject, data);</span>
-<span class="cstat-no" title="statement not covered" >  } catch (error) {</span>
-<span class="cstat-no" title="statement not covered" >    throw error;</span>
-<span class="cstat-no" title="statement not covered" >  }</span>
-<span class="cstat-no" title="statement not covered" >};</span>
-&nbsp;
-/**
- * extend a chat record with a new input/response-pair
- *
- * @param   {string}  chatId    [required] chatId to extend
- * @param   {array}   messages  [required] array of message objects to extend the chat with
- *
- * @return  {object}            the edited document
- */
-export const extendChat = <span class="fstat-no" title="function not covered" >async (chatId, messages) =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >  // exit if no chatId</span>
-<span class="cstat-no" title="statement not covered" >  if (!chatId) {</span>
-<span class="cstat-no" title="statement not covered" >    console.error('No chatId provided');</span>
-<span class="cstat-no" title="statement not covered" >    return;</span>
-<span class="cstat-no" title="statement not covered" >  }</span>
-<span class="cstat-no" title="statement not covered" >  try {</span>
-<span class="cstat-no" title="statement not covered" >    // fetch chat record</span>
-<span class="cstat-no" title="statement not covered" >    const record = await findOneRecord(Chat, { id: chatId });</span>
-<span class="cstat-no" title="statement not covered" >    // push new message into chat history</span>
-<span class="cstat-no" title="statement not covered" >    const serializedMessages = mapChatMessagesToStoredMessages(messages);</span>
-<span class="cstat-no" title="statement not covered" >    record.chatHistory ? record.chatHistory.push(...serializedMessages) : record.chatHistory = serializedMessages;</span>
-<span class="cstat-no" title="statement not covered" >    // save &amp; return chat</span>
-<span class="cstat-no" title="statement not covered" >    return await findByIdAndUpdate(Chat, chatId, { chatHistory: record.chatHistory });</span>
-<span class="cstat-no" title="statement not covered" >  } catch (error) {</span>
-<span class="cstat-no" title="statement not covered" >    throw error;</span>
-<span class="cstat-no" title="statement not covered" >  }</span>
-<span class="cstat-no" title="statement not covered" >};</span></pre></td></tr></table></pre>
-
-                <div class='push'></div><!-- for sticky footer -->
-            </div><!-- /wrapper -->
-            <div class='footer quiet pad2 space-top1 center small'>
-                Code coverage generated by
-                <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
-                at 2024-07-28T19:23:24.511Z
-            </div>
-        <script src="../../prettify.js"></script>
-        <script>
-            window.onload = function () {
-                prettyPrint();
-            };
-        </script>
-        <script src="../../sorter.js"></script>
-        <script src="../../block-navigation.js"></script>
-    </body>
-</html>
-    
\ No newline at end of file
diff --git a/coverage/ragchat-api/utils/handleErrors.js.html b/coverage/ragchat-api/utils/handleErrors.js.html
index 5ce6c8a..02bb70d 100644
--- a/coverage/ragchat-api/utils/handleErrors.js.html
+++ b/coverage/ragchat-api/utils/handleErrors.js.html
@@ -186,13 +186,13 @@
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">28x</span>
-<span class="cline-any cline-yes">28x</span>
-<span class="cline-any cline-yes">28x</span>
-<span class="cline-any cline-yes">28x</span>
-<span class="cline-any cline-yes">28x</span>
-<span class="cline-any cline-yes">28x</span>
-<span class="cline-any cline-yes">28x</span>
+<span class="cline-any cline-yes">27x</span>
+<span class="cline-any cline-yes">27x</span>
+<span class="cline-any cline-yes">27x</span>
+<span class="cline-any cline-yes">27x</span>
+<span class="cline-any cline-yes">27x</span>
+<span class="cline-any cline-yes">27x</span>
+<span class="cline-any cline-yes">27x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
@@ -218,9 +218,9 @@
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">28x</span>
-<span class="cline-any cline-yes">28x</span>
-<span class="cline-any cline-yes">28x</span>
+<span class="cline-any cline-yes">27x</span>
+<span class="cline-any cline-yes">27x</span>
+<span class="cline-any cline-yes">27x</span>
 <span class="cline-any cline-yes">2x</span>
 <span class="cline-any cline-yes">2x</span>
 <span class="cline-any cline-yes">2x</span>
@@ -231,18 +231,18 @@
 <span class="cline-any cline-yes">2x</span>
 <span class="cline-any cline-yes">2x</span>
 <span class="cline-any cline-yes">2x</span>
-<span class="cline-any cline-yes">28x</span>
-<span class="cline-any cline-yes">28x</span>
-<span class="cline-any cline-yes">20x</span>
-<span class="cline-any cline-yes">20x</span>
-<span class="cline-any cline-yes">20x</span>
-<span class="cline-any cline-yes">20x</span>
-<span class="cline-any cline-yes">20x</span>
-<span class="cline-any cline-yes">48x</span>
-<span class="cline-any cline-yes">48x</span>
-<span class="cline-any cline-yes">48x</span>
-<span class="cline-any cline-yes">48x</span>
-<span class="cline-any cline-yes">48x</span>
+<span class="cline-any cline-yes">27x</span>
+<span class="cline-any cline-yes">27x</span>
+<span class="cline-any cline-yes">19x</span>
+<span class="cline-any cline-yes">19x</span>
+<span class="cline-any cline-yes">19x</span>
+<span class="cline-any cline-yes">19x</span>
+<span class="cline-any cline-yes">19x</span>
+<span class="cline-any cline-yes">45x</span>
+<span class="cline-any cline-yes">45x</span>
+<span class="cline-any cline-yes">45x</span>
+<span class="cline-any cline-yes">45x</span>
+<span class="cline-any cline-yes">45x</span>
 <span class="cline-any cline-no">&nbsp;</span>
 <span class="cline-any cline-no">&nbsp;</span>
 <span class="cline-any cline-no">&nbsp;</span>
@@ -255,17 +255,17 @@
 <span class="cline-any cline-no">&nbsp;</span>
 <span class="cline-any cline-no">&nbsp;</span>
 <span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-yes">48x</span>
-<span class="cline-any cline-yes">48x</span>
-<span class="cline-any cline-yes">20x</span>
-<span class="cline-any cline-yes">20x</span>
-<span class="cline-any cline-yes">20x</span>
-<span class="cline-any cline-yes">20x</span>
-<span class="cline-any cline-yes">20x</span>
-<span class="cline-any cline-yes">20x</span>
-<span class="cline-any cline-yes">20x</span>
-<span class="cline-any cline-yes">28x</span>
-<span class="cline-any cline-yes">28x</span>
+<span class="cline-any cline-yes">45x</span>
+<span class="cline-any cline-yes">45x</span>
+<span class="cline-any cline-yes">19x</span>
+<span class="cline-any cline-yes">19x</span>
+<span class="cline-any cline-yes">19x</span>
+<span class="cline-any cline-yes">19x</span>
+<span class="cline-any cline-yes">19x</span>
+<span class="cline-any cline-yes">19x</span>
+<span class="cline-any cline-yes">19x</span>
+<span class="cline-any cline-yes">27x</span>
+<span class="cline-any cline-yes">27x</span>
 <span class="cline-any cline-yes">6x</span>
 <span class="cline-any cline-yes">6x</span>
 <span class="cline-any cline-no">&nbsp;</span>
@@ -275,8 +275,8 @@
 <span class="cline-any cline-yes">6x</span>
 <span class="cline-any cline-yes">6x</span>
 <span class="cline-any cline-yes">6x</span>
-<span class="cline-any cline-yes">28x</span>
-<span class="cline-any cline-yes">28x</span>
+<span class="cline-any cline-yes">27x</span>
+<span class="cline-any cline-yes">27x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
@@ -291,14 +291,14 @@
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">28x</span>
-<span class="cline-any cline-yes">28x</span>
-<span class="cline-any cline-yes">28x</span>
-<span class="cline-any cline-yes">28x</span>
-<span class="cline-any cline-yes">28x</span>
-<span class="cline-any cline-yes">28x</span>
-<span class="cline-any cline-yes">28x</span>
-<span class="cline-any cline-yes">28x</span>
+<span class="cline-any cline-yes">27x</span>
+<span class="cline-any cline-yes">27x</span>
+<span class="cline-any cline-yes">27x</span>
+<span class="cline-any cline-yes">27x</span>
+<span class="cline-any cline-yes">27x</span>
+<span class="cline-any cline-yes">27x</span>
+<span class="cline-any cline-yes">27x</span>
+<span class="cline-any cline-yes">27x</span>
 <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
  * Return extended error incl. statuscode, describing message and optional messages
  */
@@ -424,7 +424,7 @@ export const middlewareErrorHandler = (error, req, res, next) =&gt; {
             <div class='footer quiet pad2 space-top1 center small'>
                 Code coverage generated by
                 <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
-                at 2024-07-28T19:23:24.511Z
+                at 2024-08-07T15:59:44.935Z
             </div>
         <script src="../../prettify.js"></script>
         <script>
diff --git a/coverage/ragchat-api/utils/handleMailer.js.html b/coverage/ragchat-api/utils/handleMailer.js.html
deleted file mode 100644
index d332a77..0000000
--- a/coverage/ragchat-api/utils/handleMailer.js.html
+++ /dev/null
@@ -1,169 +0,0 @@
-
-<!doctype html>
-<html lang="en">
-
-<head>
-    <title>Code coverage report for ragchat-api/utils/handleMailer.js</title>
-    <meta charset="utf-8" />
-    <link rel="stylesheet" href="../../prettify.css" />
-    <link rel="stylesheet" href="../../base.css" />
-    <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
-    <meta name="viewport" content="width=device-width, initial-scale=1" />
-    <style type='text/css'>
-        .coverage-summary .sorter {
-            background-image: url(../../sort-arrow-sprite.png);
-        }
-    </style>
-</head>
-    
-<body>
-<div class='wrapper'>
-    <div class='pad1'>
-        <h1><a href="../../index.html">All files</a> / <a href="index.html">ragchat-api/utils</a> handleMailer.js</h1>
-        <div class='clearfix'>
-            
-            <div class='fl pad1y space-right2'>
-                <span class="strong">13.79% </span>
-                <span class="quiet">Statements</span>
-                <span class='fraction'>4/29</span>
-            </div>
-        
-            
-            <div class='fl pad1y space-right2'>
-                <span class="strong">100% </span>
-                <span class="quiet">Branches</span>
-                <span class='fraction'>0/0</span>
-            </div>
-        
-            
-            <div class='fl pad1y space-right2'>
-                <span class="strong">0% </span>
-                <span class="quiet">Functions</span>
-                <span class='fraction'>0/1</span>
-            </div>
-        
-            
-            <div class='fl pad1y space-right2'>
-                <span class="strong">13.79% </span>
-                <span class="quiet">Lines</span>
-                <span class='fraction'>4/29</span>
-            </div>
-        
-            
-        </div>
-        <p class="quiet">
-            Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
-        </p>
-        <template id="filterTemplate">
-            <div class="quiet">
-                Filter:
-                <input type="search" id="fileSearch">
-            </div>
-        </template>
-    </div>
-    <div class='status-line low'></div>
-    <pre><table class="coverage">
-<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
-<a name='L2'></a><a href='#L2'>2</a>
-<a name='L3'></a><a href='#L3'>3</a>
-<a name='L4'></a><a href='#L4'>4</a>
-<a name='L5'></a><a href='#L5'>5</a>
-<a name='L6'></a><a href='#L6'>6</a>
-<a name='L7'></a><a href='#L7'>7</a>
-<a name='L8'></a><a href='#L8'>8</a>
-<a name='L9'></a><a href='#L9'>9</a>
-<a name='L10'></a><a href='#L10'>10</a>
-<a name='L11'></a><a href='#L11'>11</a>
-<a name='L12'></a><a href='#L12'>12</a>
-<a name='L13'></a><a href='#L13'>13</a>
-<a name='L14'></a><a href='#L14'>14</a>
-<a name='L15'></a><a href='#L15'>15</a>
-<a name='L16'></a><a href='#L16'>16</a>
-<a name='L17'></a><a href='#L17'>17</a>
-<a name='L18'></a><a href='#L18'>18</a>
-<a name='L19'></a><a href='#L19'>19</a>
-<a name='L20'></a><a href='#L20'>20</a>
-<a name='L21'></a><a href='#L21'>21</a>
-<a name='L22'></a><a href='#L22'>22</a>
-<a name='L23'></a><a href='#L23'>23</a>
-<a name='L24'></a><a href='#L24'>24</a>
-<a name='L25'></a><a href='#L25'>25</a>
-<a name='L26'></a><a href='#L26'>26</a>
-<a name='L27'></a><a href='#L27'>27</a>
-<a name='L28'></a><a href='#L28'>28</a>
-<a name='L29'></a><a href='#L29'>29</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span>
-<span class="cline-any cline-no">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import chalk from 'chalk';
-import nodemailer from 'nodemailer';
-&nbsp;
-export const sendEmail = <span class="fstat-no" title="function not covered" >async options =&gt; {</span>
-<span class="cstat-no" title="statement not covered" >  console.log('original sendEmail');</span>
-<span class="cstat-no" title="statement not covered" >  // create reusable transporter object using the default SMTP transport</span>
-<span class="cstat-no" title="statement not covered" >  const transporter = nodemailer.createTransport({</span>
-<span class="cstat-no" title="statement not covered" >    host: process.env.SMTP_HOST,</span>
-<span class="cstat-no" title="statement not covered" >    port: process.env.SMTP_PORT,</span>
-<span class="cstat-no" title="statement not covered" >    auth: {</span>
-<span class="cstat-no" title="statement not covered" >      user: process.env.SMTP_USER,</span>
-<span class="cstat-no" title="statement not covered" >      pass: process.env.SMTP_PASSWORD</span>
-<span class="cstat-no" title="statement not covered" >    }</span>
-<span class="cstat-no" title="statement not covered" >  });</span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" >  // send mail with defined transport object</span>
-<span class="cstat-no" title="statement not covered" >  // TODO email templates nutzen</span>
-<span class="cstat-no" title="statement not covered" >  const message = {</span>
-<span class="cstat-no" title="statement not covered" >    from: `${process.env.SMTP_FROM_NAME} &lt;${process.env.SMTP_FROM_ADDRESS}&gt;`, // sender address</span>
-<span class="cstat-no" title="statement not covered" >    to: options.to, // list of receivers</span>
-<span class="cstat-no" title="statement not covered" >    subject: options.subject, // Subject line</span>
-<span class="cstat-no" title="statement not covered" >    text: options.text, // plain text body</span>
-<span class="cstat-no" title="statement not covered" >    html: options.html // plain text body</span>
-<span class="cstat-no" title="statement not covered" >  };</span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" >  const info = await transporter.sendMail(message);</span>
-<span class="cstat-no" title="statement not covered" ></span>
-<span class="cstat-no" title="statement not covered" >  console.log(chalk.green('Message sent: %s', info.messageId));</span>
-<span class="cstat-no" title="statement not covered" >};</span></pre></td></tr></table></pre>
-
-                <div class='push'></div><!-- for sticky footer -->
-            </div><!-- /wrapper -->
-            <div class='footer quiet pad2 space-top1 center small'>
-                Code coverage generated by
-                <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
-                at 2024-07-28T19:23:24.511Z
-            </div>
-        <script src="../../prettify.js"></script>
-        <script>
-            window.onload = function () {
-                prettyPrint();
-            };
-        </script>
-        <script src="../../sorter.js"></script>
-        <script src="../../block-navigation.js"></script>
-    </body>
-</html>
-    
\ No newline at end of file
diff --git a/coverage/ragchat-api/utils/handleSchemes.js.html b/coverage/ragchat-api/utils/handleSchemes.js.html
index 266a78b..ff6ba39 100644
--- a/coverage/ragchat-api/utils/handleSchemes.js.html
+++ b/coverage/ragchat-api/utils/handleSchemes.js.html
@@ -25,7 +25,7 @@
             <div class='fl pad1y space-right2'>
                 <span class="strong">100% </span>
                 <span class="quiet">Statements</span>
-                <span class='fraction'>63/63</span>
+                <span class='fraction'>67/67</span>
             </div>
         
             
@@ -46,7 +46,7 @@
             <div class='fl pad1y space-right2'>
                 <span class="strong">100% </span>
                 <span class="quiet">Lines</span>
-                <span class='fraction'>63/63</span>
+                <span class='fraction'>67/67</span>
             </div>
         
             
@@ -126,7 +126,11 @@
 <a name='L61'></a><a href='#L61'>61</a>
 <a name='L62'></a><a href='#L62'>62</a>
 <a name='L63'></a><a href='#L63'>63</a>
-<a name='L64'></a><a href='#L64'>64</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
+<a name='L64'></a><a href='#L64'>64</a>
+<a name='L65'></a><a href='#L65'>65</a>
+<a name='L66'></a><a href='#L66'>66</a>
+<a name='L67'></a><a href='#L67'>67</a>
+<a name='L68'></a><a href='#L68'>68</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
@@ -137,10 +141,12 @@
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">3x</span>
 <span class="cline-any cline-yes">3x</span>
+<span class="cline-any cline-yes">3x</span>
 <span class="cline-any cline-yes">42x</span>
 <span class="cline-any cline-yes">3x</span>
 <span class="cline-any cline-yes">3x</span>
 <span class="cline-any cline-yes">3x</span>
+<span class="cline-any cline-yes">3x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
@@ -155,10 +161,12 @@
 <span class="cline-any cline-yes">3x</span>
 <span class="cline-any cline-yes">3x</span>
 <span class="cline-any cline-yes">3x</span>
+<span class="cline-any cline-yes">3x</span>
 <span class="cline-any cline-yes">6x</span>
 <span class="cline-any cline-yes">3x</span>
 <span class="cline-any cline-yes">3x</span>
 <span class="cline-any cline-yes">3x</span>
+<span class="cline-any cline-yes">3x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
@@ -198,10 +206,12 @@
  * @return  {array}         matching field names 
  */
 export const getConfidentialFields = (model) =&gt; {
+  performance.mark('getConfidentialFields:start');
   const schema = Object.entries(model.schema.paths);
   const confidentialFields = schema.filter(function (field) {
     return field[1].selected === false;
   });
+  performance.mark('getConfidentialFields:end');
   return confidentialFields.map(field =&gt; field[0]);
 };
 &nbsp;
@@ -215,11 +225,13 @@ export const getConfidentialFields = (model) =&gt; {
  * @return  {object}          cleansed object
  */
 export const hideConfidentialFields = (model, object) =&gt; {
+  performance.mark('hideConfidentialFields:start');
   const confidentialFields = getConfidentialFields(model);
   // delete from object
   confidentialFields.forEach(field =&gt; {
     delete object[field];
   });
+  performance.mark('hideConfidentialFields:end');
   return object;
 };
 &nbsp;
@@ -259,7 +271,7 @@ export const prefillDocumentObject = (model, object) =&gt; {
             <div class='footer quiet pad2 space-top1 center small'>
                 Code coverage generated by
                 <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
-                at 2024-07-28T19:23:24.511Z
+                at 2024-08-07T15:59:44.935Z
             </div>
         <script src="../../prettify.js"></script>
         <script>
diff --git a/coverage/ragchat-api/utils/handleTokens.js.html b/coverage/ragchat-api/utils/handleTokens.js.html
index 4afcae7..9a96367 100644
--- a/coverage/ragchat-api/utils/handleTokens.js.html
+++ b/coverage/ragchat-api/utils/handleTokens.js.html
@@ -23,16 +23,16 @@
         <div class='clearfix'>
             
             <div class='fl pad1y space-right2'>
-                <span class="strong">90% </span>
+                <span class="strong">89.24% </span>
                 <span class="quiet">Statements</span>
-                <span class='fraction'>153/170</span>
+                <span class='fraction'>166/186</span>
             </div>
         
             
             <div class='fl pad1y space-right2'>
-                <span class="strong">91.3% </span>
+                <span class="strong">84% </span>
                 <span class="quiet">Branches</span>
-                <span class='fraction'>21/23</span>
+                <span class='fraction'>21/25</span>
             </div>
         
             
@@ -44,9 +44,9 @@
         
             
             <div class='fl pad1y space-right2'>
-                <span class="strong">90% </span>
+                <span class="strong">89.24% </span>
                 <span class="quiet">Lines</span>
-                <span class='fraction'>153/170</span>
+                <span class='fraction'>166/186</span>
             </div>
         
             
@@ -232,7 +232,25 @@
 <a name='L167'></a><a href='#L167'>167</a>
 <a name='L168'></a><a href='#L168'>168</a>
 <a name='L169'></a><a href='#L169'>169</a>
-<a name='L170'></a><a href='#L170'>170</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
+<a name='L170'></a><a href='#L170'>170</a>
+<a name='L171'></a><a href='#L171'>171</a>
+<a name='L172'></a><a href='#L172'>172</a>
+<a name='L173'></a><a href='#L173'>173</a>
+<a name='L174'></a><a href='#L174'>174</a>
+<a name='L175'></a><a href='#L175'>175</a>
+<a name='L176'></a><a href='#L176'>176</a>
+<a name='L177'></a><a href='#L177'>177</a>
+<a name='L178'></a><a href='#L178'>178</a>
+<a name='L179'></a><a href='#L179'>179</a>
+<a name='L180'></a><a href='#L180'>180</a>
+<a name='L181'></a><a href='#L181'>181</a>
+<a name='L182'></a><a href='#L182'>182</a>
+<a name='L183'></a><a href='#L183'>183</a>
+<a name='L184'></a><a href='#L184'>184</a>
+<a name='L185'></a><a href='#L185'>185</a>
+<a name='L186'></a><a href='#L186'>186</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
+<span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
@@ -269,6 +287,7 @@
 <span class="cline-any cline-no">&nbsp;</span>
 <span class="cline-any cline-no">&nbsp;</span>
 <span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
@@ -371,11 +390,18 @@
 <span class="cline-any cline-yes">32x</span>
 <span class="cline-any cline-yes">32x</span>
 <span class="cline-any cline-yes">32x</span>
+<span class="cline-any cline-yes">32x</span>
+<span class="cline-any cline-yes">32x</span>
+<span class="cline-any cline-yes">26x</span>
+<span class="cline-any cline-yes">26x</span>
 <span class="cline-any cline-yes">26x</span>
 <span class="cline-any cline-yes">26x</span>
 <span class="cline-any cline-yes">26x</span>
 <span class="cline-any cline-yes">26x</span>
 <span class="cline-any cline-yes">26x</span>
+<span class="cline-any cline-yes">26x</span>
+<span class="cline-any cline-yes">20x</span>
+<span class="cline-any cline-yes">20x</span>
 <span class="cline-any cline-yes">20x</span>
 <span class="cline-any cline-yes">20x</span>
 <span class="cline-any cline-yes">20x</span>
@@ -399,11 +425,19 @@
 <span class="cline-any cline-yes">3x</span>
 <span class="cline-any cline-yes">3x</span>
 <span class="cline-any cline-yes">3x</span>
+<span class="cline-any cline-yes">3x</span>
+<span class="cline-any cline-yes">3x</span>
+<span class="cline-any cline-yes">3x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">3x</span>
+<span class="cline-any cline-yes">3x</span>
+<span class="cline-any cline-no">&nbsp;</span>
+<span class="cline-any cline-no">&nbsp;</span>
 <span class="cline-any cline-yes">3x</span></td><td class="text"><pre class="prettyprint lang-js">import jwt from 'jsonwebtoken';
 import User from "../models/User.js";
 import { findByIdAndUpdate, findOneAndUpdate, findOneRecord } from './handleDB.js';
+import { performance } from "node:perf_hooks";
+&nbsp;
 &nbsp;
 /**
  * generate a "oneTime" JWT, containing a given object
@@ -415,7 +449,7 @@ import { findByIdAndUpdate, findOneAndUpdate, findOneRecord } from './handleDB.j
  * @return  {token}
  */
 export const createVerificationToken = (payload) =&gt; {
-  return jwt.sign({ id: payload.id, email: payload.email }, process.env.VERIFICATION_TOKEN_KEY + payload.verified, { expiresIn: process.env.VERIFICATION_TOKEN_TTL });
+  return jwt.sign({ id: payload.id, email: payload.email }, process.env.VERIFICATION_TOKEN_KEY, { expiresIn: process.env.VERIFICATION_TOKEN_TTL });
 };
 &nbsp;
 /**
@@ -431,10 +465,11 @@ export const createVerificationToken = (payload) =&gt; {
  */
 export const verifyVerificationToken = <span class="fstat-no" title="function not covered" >async (req, res, next) =&gt; {</span>
 <span class="cstat-no" title="statement not covered" >  // verify token</span>
-<span class="cstat-no" title="statement not covered" >  const valid = jwt.verify(req.body.token, process.env.VERIFICATION_TOKEN_KEY + req.document.verified, async (error, payload) =&gt; {</span>
+<span class="cstat-no" title="statement not covered" >  const valid = jwt.verify(req.body.token, process.env.VERIFICATION_TOKEN_KEY, async (error, payload) =&gt; {</span>
 <span class="cstat-no" title="statement not covered" >    // if invalid</span>
-<span class="cstat-no" title="statement not covered" >    if (error) return res.status(403).json({ message: 'Token is no longer valid.' });</span>
+<span class="cstat-no" title="statement not covered" >    if (error) return res.status(498).json({ message: 'Token is no longer valid.' });</span>
 <span class="cstat-no" title="statement not covered" >    // if valid</span>
+<span class="cstat-no" title="statement not covered" >    req.body.email = payload.email;</span>
 <span class="cstat-no" title="statement not covered" >    next();</span>
 <span class="cstat-no" title="statement not covered" >  });</span>
 <span class="cstat-no" title="statement not covered" >};</span>
@@ -533,6 +568,8 @@ export const deleteRefreshToken = <span class="fstat-no" title="function not cov
  *
  */
 export const verifyAccessToken = async (req, res, next) =&gt; {
+  performance.mark('verifyAccessToken:start');
+&nbsp;
   // define header
   const authHeader = req.headers['authorization'];
   // split token from authHeader - if available
@@ -542,12 +579,17 @@ export const verifyAccessToken = async (req, res, next) =&gt; {
   if (!token) return res.status(401).json({ message: 'No access token found. Access denied.' });
 &nbsp;
   // verify token
+  performance.mark('jwt.verify:start');
   jwt.verify(token, process.env.JWT_SECRET_KEY, async (error, payload) =&gt; {
+    performance.mark('jwt.verify:end');
+&nbsp;
     // if invalid
     if (error) return res.status(403).json({ message: 'Access token is no longer valid. Access denied.' });
     // if valid: remember current user id &amp; role and go on
     global.currentUserId = payload.id;
     global.currentUserRole = payload.role;
+    performance.mark('verifyAccessToken:end');
+&nbsp;
     next();
   });
 };
@@ -563,13 +605,19 @@ export const verifyAccessToken = async (req, res, next) =&gt; {
  *
  */
 export const verifyPasswordToken = async (req, res, next) =&gt; {
-  // fetch user by token
-  req.document = await findOneRecord(User, { resetPasswordToken: req.body.token }, '+password');  // verify token
-  jwt.verify(req.body.token, process.env.PASSWORD_TOKEN_KEY + req.document.password, async (error, payload) =&gt; {
-    // if invalid
-    if (error) return res.status(403).json({ message: 'Token is no longer valid.' });
-    next();
-  });
+  try {
+    // fetch user by token
+    req.document = await findOneRecord(User, { resetPasswordToken: req.body.token }, '+password');  // verify token
+    if (!req.document) <span class="branch-0 cbranch-no" title="branch not covered" >return res.status(498).json({ message: 'Token is no longer valid.' });</span>
+    // check token validity
+    jwt.verify(req.body.token, process.env.PASSWORD_TOKEN_KEY + req.document.password, async (error, payload) =&gt; {
+      // if invalid
+      if (error) return res.status(498).json({ message: 'Token is no longer valid.' });
+      next();
+    });
+  } <span class="branch-0 cbranch-no" title="branch not covered" >catch (error) {</span>
+<span class="cstat-no" title="statement not covered" >    next(error);</span>
+<span class="cstat-no" title="statement not covered" >  }</span>
 };</pre></td></tr></table></pre>
 
                 <div class='push'></div><!-- for sticky footer -->
@@ -577,7 +625,7 @@ export const verifyPasswordToken = async (req, res, next) =&gt; {
             <div class='footer quiet pad2 space-top1 center small'>
                 Code coverage generated by
                 <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
-                at 2024-07-28T19:23:24.511Z
+                at 2024-08-07T15:59:44.935Z
             </div>
         <script src="../../prettify.js"></script>
         <script>
diff --git a/coverage/ragchat-api/utils/handleValidations.js.html b/coverage/ragchat-api/utils/handleValidations.js.html
index e4b3e53..abab0d0 100644
--- a/coverage/ragchat-api/utils/handleValidations.js.html
+++ b/coverage/ragchat-api/utils/handleValidations.js.html
@@ -25,7 +25,7 @@
             <div class='fl pad1y space-right2'>
                 <span class="strong">100% </span>
                 <span class="quiet">Statements</span>
-                <span class='fraction'>17/17</span>
+                <span class='fraction'>19/19</span>
             </div>
         
             
@@ -46,7 +46,7 @@
             <div class='fl pad1y space-right2'>
                 <span class="strong">100% </span>
                 <span class="quiet">Lines</span>
-                <span class='fraction'>17/17</span>
+                <span class='fraction'>19/19</span>
             </div>
         
             
@@ -80,31 +80,37 @@
 <a name='L15'></a><a href='#L15'>15</a>
 <a name='L16'></a><a href='#L16'>16</a>
 <a name='L17'></a><a href='#L17'>17</a>
-<a name='L18'></a><a href='#L18'>18</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
+<a name='L18'></a><a href='#L18'>18</a>
+<a name='L19'></a><a href='#L19'>19</a>
+<a name='L20'></a><a href='#L20'>20</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">49x</span>
-<span class="cline-any cline-yes">49x</span>
-<span class="cline-any cline-yes">49x</span>
-<span class="cline-any cline-yes">49x</span>
-<span class="cline-any cline-yes">49x</span>
-<span class="cline-any cline-yes">49x</span>
-<span class="cline-any cline-yes">20x</span>
-<span class="cline-any cline-yes">20x</span>
-<span class="cline-any cline-yes">20x</span>
-<span class="cline-any cline-yes">20x</span>
-<span class="cline-any cline-yes">20x</span>
-<span class="cline-any cline-yes">20x</span>
-<span class="cline-any cline-yes">49x</span>
+<span class="cline-any cline-yes">47x</span>
+<span class="cline-any cline-yes">47x</span>
+<span class="cline-any cline-yes">47x</span>
+<span class="cline-any cline-yes">47x</span>
+<span class="cline-any cline-yes">47x</span>
+<span class="cline-any cline-yes">47x</span>
+<span class="cline-any cline-yes">47x</span>
+<span class="cline-any cline-yes">47x</span>
+<span class="cline-any cline-yes">19x</span>
+<span class="cline-any cline-yes">19x</span>
+<span class="cline-any cline-yes">19x</span>
+<span class="cline-any cline-yes">19x</span>
+<span class="cline-any cline-yes">19x</span>
+<span class="cline-any cline-yes">19x</span>
+<span class="cline-any cline-yes">47x</span>
 <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { CustomError } from "./handleErrors.js";
 &nbsp;
 // ### Validation function
 export const validate = (schema) =&gt; (req, res, next) =&gt; {
+  performance.mark('validateInput:start');
   try {
     // validate provided schema against request body
     schema.parse(req.body);
     // advance
+    performance.mark('validateInput:end');
     next();
   } catch (error) {
     // name error
@@ -121,7 +127,7 @@ export const validate = (schema) =&gt; (req, res, next) =&gt; {
             <div class='footer quiet pad2 space-top1 center small'>
                 Code coverage generated by
                 <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
-                at 2024-07-28T19:23:24.511Z
+                at 2024-08-07T15:59:44.935Z
             </div>
         <script src="../../prettify.js"></script>
         <script>
diff --git a/coverage/ragchat-api/utils/index.html b/coverage/ragchat-api/utils/index.html
index 945c5ad..31ceccb 100644
--- a/coverage/ragchat-api/utils/index.html
+++ b/coverage/ragchat-api/utils/index.html
@@ -23,30 +23,30 @@
         <div class='clearfix'>
             
             <div class='fl pad1y space-right2'>
-                <span class="strong">61.69% </span>
+                <span class="strong">90.25% </span>
                 <span class="quiet">Statements</span>
-                <span class='fraction'>480/778</span>
+                <span class='fraction'>352/390</span>
             </div>
         
             
             <div class='fl pad1y space-right2'>
-                <span class="strong">92.45% </span>
+                <span class="strong">89.09% </span>
                 <span class="quiet">Branches</span>
-                <span class='fraction'>49/53</span>
+                <span class='fraction'>49/55</span>
             </div>
         
             
             <div class='fl pad1y space-right2'>
-                <span class="strong">45.71% </span>
+                <span class="strong">84.21% </span>
                 <span class="quiet">Functions</span>
-                <span class='fraction'>16/35</span>
+                <span class='fraction'>16/19</span>
             </div>
         
             
             <div class='fl pad1y space-right2'>
-                <span class="strong">61.69% </span>
+                <span class="strong">90.25% </span>
                 <span class="quiet">Lines</span>
-                <span class='fraction'>480/778</span>
+                <span class='fraction'>352/390</span>
             </div>
         
             
@@ -61,7 +61,7 @@
             </div>
         </template>
     </div>
-    <div class='status-line medium'></div>
+    <div class='status-line high'></div>
     <div class="pad1">
 <table class="coverage-summary">
 <thead>
@@ -79,36 +79,6 @@
 </tr>
 </thead>
 <tbody><tr>
-	<td class="file low" data-value="handleAI.js"><a href="handleAI.js.html">handleAI.js</a></td>
-	<td data-value="26.86" class="pic low">
-	<div class="chart"><div class="cover-fill" style="width: 26%"></div><div class="cover-empty" style="width: 74%"></div></div>
-	</td>
-	<td data-value="26.86" class="pct low">26.86%</td>
-	<td data-value="201" class="abs low">54/201</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="0" class="abs high">0/0</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="7" class="abs low">0/7</td>
-	<td data-value="26.86" class="pct low">26.86%</td>
-	<td data-value="201" class="abs low">54/201</td>
-	</tr>
-
-<tr>
-	<td class="file low" data-value="handleDB.js"><a href="handleDB.js.html">handleDB.js</a></td>
-	<td data-value="49.44" class="pic low">
-	<div class="chart"><div class="cover-fill" style="width: 49%"></div><div class="cover-empty" style="width: 51%"></div></div>
-	</td>
-	<td data-value="49.44" class="pct low">49.44%</td>
-	<td data-value="180" class="abs low">89/180</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="0" class="abs high">0/0</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="8" class="abs low">0/8</td>
-	<td data-value="49.44" class="pct low">49.44%</td>
-	<td data-value="180" class="abs low">89/180</td>
-	</tr>
-
-<tr>
 	<td class="file high" data-value="handleErrors.js"><a href="handleErrors.js.html">handleErrors.js</a></td>
 	<td data-value="84.74" class="pic high">
 	<div class="chart"><div class="cover-fill" style="width: 84%"></div><div class="cover-empty" style="width: 16%"></div></div>
@@ -123,49 +93,34 @@
 	<td data-value="118" class="abs high">100/118</td>
 	</tr>
 
-<tr>
-	<td class="file low" data-value="handleMailer.js"><a href="handleMailer.js.html">handleMailer.js</a></td>
-	<td data-value="13.79" class="pic low">
-	<div class="chart"><div class="cover-fill" style="width: 13%"></div><div class="cover-empty" style="width: 87%"></div></div>
-	</td>
-	<td data-value="13.79" class="pct low">13.79%</td>
-	<td data-value="29" class="abs low">4/29</td>
-	<td data-value="100" class="pct high">100%</td>
-	<td data-value="0" class="abs high">0/0</td>
-	<td data-value="0" class="pct low">0%</td>
-	<td data-value="1" class="abs low">0/1</td>
-	<td data-value="13.79" class="pct low">13.79%</td>
-	<td data-value="29" class="abs low">4/29</td>
-	</tr>
-
 <tr>
 	<td class="file high" data-value="handleSchemes.js"><a href="handleSchemes.js.html">handleSchemes.js</a></td>
 	<td data-value="100" class="pic high">
 	<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
 	</td>
 	<td data-value="100" class="pct high">100%</td>
-	<td data-value="63" class="abs high">63/63</td>
+	<td data-value="67" class="abs high">67/67</td>
 	<td data-value="100" class="pct high">100%</td>
 	<td data-value="10" class="abs high">10/10</td>
 	<td data-value="100" class="pct high">100%</td>
 	<td data-value="4" class="abs high">4/4</td>
 	<td data-value="100" class="pct high">100%</td>
-	<td data-value="63" class="abs high">63/63</td>
+	<td data-value="67" class="abs high">67/67</td>
 	</tr>
 
 <tr>
 	<td class="file high" data-value="handleTokens.js"><a href="handleTokens.js.html">handleTokens.js</a></td>
-	<td data-value="90" class="pic high">
-	<div class="chart"><div class="cover-fill" style="width: 90%"></div><div class="cover-empty" style="width: 10%"></div></div>
+	<td data-value="89.24" class="pic high">
+	<div class="chart"><div class="cover-fill" style="width: 89%"></div><div class="cover-empty" style="width: 11%"></div></div>
 	</td>
-	<td data-value="90" class="pct high">90%</td>
-	<td data-value="170" class="abs high">153/170</td>
-	<td data-value="91.3" class="pct high">91.3%</td>
-	<td data-value="23" class="abs high">21/23</td>
+	<td data-value="89.24" class="pct high">89.24%</td>
+	<td data-value="186" class="abs high">166/186</td>
+	<td data-value="84" class="pct high">84%</td>
+	<td data-value="25" class="abs high">21/25</td>
 	<td data-value="77.77" class="pct medium">77.77%</td>
 	<td data-value="9" class="abs medium">7/9</td>
-	<td data-value="90" class="pct high">90%</td>
-	<td data-value="170" class="abs high">153/170</td>
+	<td data-value="89.24" class="pct high">89.24%</td>
+	<td data-value="186" class="abs high">166/186</td>
 	</tr>
 
 <tr>
@@ -174,13 +129,13 @@
 	<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
 	</td>
 	<td data-value="100" class="pct high">100%</td>
-	<td data-value="17" class="abs high">17/17</td>
+	<td data-value="19" class="abs high">19/19</td>
 	<td data-value="100" class="pct high">100%</td>
 	<td data-value="3" class="abs high">3/3</td>
 	<td data-value="100" class="pct high">100%</td>
 	<td data-value="1" class="abs high">1/1</td>
 	<td data-value="100" class="pct high">100%</td>
-	<td data-value="17" class="abs high">17/17</td>
+	<td data-value="19" class="abs high">19/19</td>
 	</tr>
 
 </tbody>
@@ -191,7 +146,7 @@
             <div class='footer quiet pad2 space-top1 center small'>
                 Code coverage generated by
                 <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
-                at 2024-07-28T19:23:24.511Z
+                at 2024-08-07T15:59:44.935Z
             </div>
         <script src="../../prettify.js"></script>
         <script>
diff --git a/coverage/ragchat-api/validationSchemes/AI.js.html b/coverage/ragchat-api/validationSchemes/AI.js.html
index 78fe1c9..346cdf7 100644
--- a/coverage/ragchat-api/validationSchemes/AI.js.html
+++ b/coverage/ragchat-api/validationSchemes/AI.js.html
@@ -154,7 +154,7 @@ export const chatSchema = z.object({
             <div class='footer quiet pad2 space-top1 center small'>
                 Code coverage generated by
                 <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
-                at 2024-07-28T19:23:24.511Z
+                at 2024-08-07T15:59:44.935Z
             </div>
         <script src="../../prettify.js"></script>
         <script>
diff --git a/coverage/ragchat-api/validationSchemes/Auth.js.html b/coverage/ragchat-api/validationSchemes/Auth.js.html
index 1e01757..15752b5 100644
--- a/coverage/ragchat-api/validationSchemes/Auth.js.html
+++ b/coverage/ragchat-api/validationSchemes/Auth.js.html
@@ -25,7 +25,7 @@
             <div class='fl pad1y space-right2'>
                 <span class="strong">100% </span>
                 <span class="quiet">Statements</span>
-                <span class='fraction'>36/36</span>
+                <span class='fraction'>35/35</span>
             </div>
         
             
@@ -46,7 +46,7 @@
             <div class='fl pad1y space-right2'>
                 <span class="strong">100% </span>
                 <span class="quiet">Lines</span>
-                <span class='fraction'>36/36</span>
+                <span class='fraction'>35/35</span>
             </div>
         
             
@@ -97,9 +97,7 @@
 <a name='L32'></a><a href='#L32'>32</a>
 <a name='L33'></a><a href='#L33'>33</a>
 <a name='L34'></a><a href='#L34'>34</a>
-<a name='L35'></a><a href='#L35'>35</a>
-<a name='L36'></a><a href='#L36'>36</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
-<span class="cline-any cline-yes">1x</span>
+<a name='L35'></a><a href='#L35'>35</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
 <span class="cline-any cline-yes">1x</span>
@@ -143,7 +141,6 @@ export const requestVerificationSchema = z.object({
 &nbsp;
 // CONFIRM VERIFICATION
 export const confirmVerificationSchema = z.object({
-  email: z.string().email(),
   token: z.string().min(1),
 });
 &nbsp;
@@ -175,7 +172,7 @@ export const confirmPasswordResetSchema = z.object({
             <div class='footer quiet pad2 space-top1 center small'>
                 Code coverage generated by
                 <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
-                at 2024-07-28T19:23:24.511Z
+                at 2024-08-07T15:59:44.935Z
             </div>
         <script src="../../prettify.js"></script>
         <script>
diff --git a/coverage/ragchat-api/validationSchemes/User.js.html b/coverage/ragchat-api/validationSchemes/User.js.html
index f5187b4..3ffcc68 100644
--- a/coverage/ragchat-api/validationSchemes/User.js.html
+++ b/coverage/ragchat-api/validationSchemes/User.js.html
@@ -118,7 +118,7 @@ export const createUserSchema = z.object({
             <div class='footer quiet pad2 space-top1 center small'>
                 Code coverage generated by
                 <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
-                at 2024-07-28T19:23:24.511Z
+                at 2024-08-07T15:59:44.935Z
             </div>
         <script src="../../prettify.js"></script>
         <script>
diff --git a/coverage/ragchat-api/validationSchemes/index.html b/coverage/ragchat-api/validationSchemes/index.html
index 0d0183a..fb867b1 100644
--- a/coverage/ragchat-api/validationSchemes/index.html
+++ b/coverage/ragchat-api/validationSchemes/index.html
@@ -25,7 +25,7 @@
             <div class='fl pad1y space-right2'>
                 <span class="strong">100% </span>
                 <span class="quiet">Statements</span>
-                <span class='fraction'>81/81</span>
+                <span class='fraction'>80/80</span>
             </div>
         
             
@@ -46,7 +46,7 @@
             <div class='fl pad1y space-right2'>
                 <span class="strong">100% </span>
                 <span class="quiet">Lines</span>
-                <span class='fraction'>81/81</span>
+                <span class='fraction'>80/80</span>
             </div>
         
             
@@ -99,13 +99,13 @@
 	<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
 	</td>
 	<td data-value="100" class="pct high">100%</td>
-	<td data-value="36" class="abs high">36/36</td>
+	<td data-value="35" class="abs high">35/35</td>
 	<td data-value="100" class="pct high">100%</td>
 	<td data-value="2" class="abs high">2/2</td>
 	<td data-value="100" class="pct high">100%</td>
 	<td data-value="2" class="abs high">2/2</td>
 	<td data-value="100" class="pct high">100%</td>
-	<td data-value="36" class="abs high">36/36</td>
+	<td data-value="35" class="abs high">35/35</td>
 	</tr>
 
 <tr>
@@ -131,7 +131,7 @@
             <div class='footer quiet pad2 space-top1 center small'>
                 Code coverage generated by
                 <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
-                at 2024-07-28T19:23:24.511Z
+                at 2024-08-07T15:59:44.935Z
             </div>
         <script src="../../prettify.js"></script>
         <script>
diff --git a/routes/ai.js b/routes/ai.js
index ec38e61..3792abd 100644
--- a/routes/ai.js
+++ b/routes/ai.js
@@ -82,7 +82,6 @@ router.delete('/models', verifyAccessToken, gateKeeper, validate(deleteModelSche
  * 
  * @return  {object}         AI response & chat history record
  */
-// TODO add cross encoder / reranker
 router.post('/chat', verifyAccessToken, validate(chatSchema), checkRequestedModel, getChat, chat);
 
 
diff --git a/routes/embeddings.js b/routes/embeddings.js
index 0f4a341..37bba19 100644
--- a/routes/embeddings.js
+++ b/routes/embeddings.js
@@ -13,7 +13,6 @@ const router = Router();
  *
  * @return  {object}                     related message
  */
-// BUG after deletion and restoring, collection is not found till restart
 router.delete('/', verifyAccessToken, gateKeeper, removeVectorDb);
 
 /**
diff --git a/utils/handleAI.js b/utils/handleAI.js
index a7a538e..a4c1c12 100644
--- a/utils/handleAI.js
+++ b/utils/handleAI.js
@@ -2,7 +2,7 @@ import urlExist from "url-exist";
 import { Ollama } from 'ollama';
 import { ChatOllama } from "@langchain/community/chat_models/ollama";
 import { ChatPromptTemplate, PromptTemplate, MessagesPlaceholder } from "@langchain/core/prompts";
-import { isCollectionAvailable, retriever, vectorStoreConnection } from "../controllers/Embeddings.js";
+import { embeddings, getRetriever, isCollectionAvailable, vectorStoreConnection } from "../controllers/Embeddings.js";
 import { createHistoryAwareRetriever } from "langchain/chains/history_aware_retriever";
 import { createStuffDocumentsChain } from "langchain/chains/combine_documents";
 import { createRetrievalChain } from "langchain/chains/retrieval";
@@ -10,7 +10,21 @@ import { HumanMessage, AIMessage } from "@langchain/core/messages";
 import { extendChat } from "./handleDB.js";
 import * as path from 'path';
 import { MultiQueryRetriever } from "langchain/retrievers/multi_query";
-
+import {
+  RunnableMap,
+  RunnablePassthrough,
+  RunnableSequence,
+} from "@langchain/core/runnables";
+import { formatDocumentsAsString } from "langchain/util/document";
+import { StringOutputParser } from "@langchain/core/output_parsers";
+import { ContextualCompressionRetriever } from "langchain/retrievers/contextual_compression";
+import { LLMChainExtractor } from "langchain/retrievers/document_compressors/chain_extract";
+import { RunnableBranch } from "@langchain/core/runnables";
+import { pull } from "langchain/hub";
+import { z } from "zod";
+import { StructuredChatOutputParser } from "langchain/agents";
+import { StructuredOutputParser } from "langchain/output_parsers";
+import { EmbeddingsFilter } from "langchain/retrievers/document_compressors/embeddings_filter";
 
 // PROVIDE OLLAMA CONNECTION TO ALL ROUTES
 export const ollama = new Ollama({ host: process.env.AI_API_URL });
@@ -100,166 +114,122 @@ export const summarizeText = async (model, input) => {
   }
 };
 
-
 /** *******************************************************
  * GENERATE CHAT
  */
-
 export const chat = async (req, res, next) => {
-  // create chat model
-  const llm = new ChatOllama({
-    baseUrl: process.env['AI_API_URL'],
-    model: req.body.model,
-    temperature: Number(process.env['AI_TEMPERATURE'])
-  });
-
-  let vectorStore = await vectorStoreConnection();
-
-  const retriever = MultiQueryRetriever.fromLLM({
-    llm: llm,
-    retriever: vectorStore.asRetriever(),
-    verbose: true,
-  });
-
-  const query = req.body.input;
-  const retrievedDocs = await retriever.invoke(query);
-
-  res.json({ message: 'hi', retrievedDocs });
-};
-
-
-export const chat_OLD = async (req, res, next) => {
-  // FEATURE apply citations or sources
-  // sources: https://js.langchain.com/v0.1/docs/use_cases/question_answering/sources/#adding-sources
-  // citations: https://js.langchain.com/v0.1/docs/use_cases/question_answering/citations/
-
   performance.mark('chat:start');
-
+  // #################
   // test if collection is available
+  // #################
   const collection = await isCollectionAvailable();
   if (!collection) {
     return res.status(500).json({ error: `VectorDB collection ${process.env['VECTOR_COLLECTION_NAME']} not found.` });
   }
 
-  // create chat model
-  const llm = new ChatOllama({
+  // #################
+  // init chat model
+  // #################
+  performance.mark('chat-InitModel:start');
+  const model = new ChatOllama({
     baseUrl: process.env['AI_API_URL'],
     model: req.body.model,
     temperature: Number(process.env['AI_TEMPERATURE'])
   });
+  performance.mark('chat-InitModel:end');
 
   // #################
-  // contextualize the input
-  // cite: https://js.langchain.com/v0.1/docs/get_started/quickstart/#conversational-retrieval-chain
-  //  "[...]take in the most recent input (input) and the conversation history (chat_history) and use an LLM to generate a search query[...]"
+  // init retriever
   // #################
-  performance.mark('historyAwareRetrieverChain:start');
-  // create a prompt that considers the chat history
-  const historyAwarePrompt = ChatPromptTemplate.fromMessages([
-    new MessagesPlaceholder("chat_history"),
-    ["user", "{input}"],
-    ["user", process.env['AI_CONTEXTUALIZE_PROMPT']]
-  ]);
-  // create a chain that uses the prompt to generate a search query
-  const historyAwareRetrieverChain = await createHistoryAwareRetriever({
-    llm,
-    retriever,
-    rephrasePrompt: historyAwarePrompt,
+  performance.mark('chat-InitCompressionRetriever:start');
+  let vectorStore = await vectorStoreConnection();
+  // const baseCompressor = LLMChainExtractor.fromLLM(model);
+  const baseCompressor = new EmbeddingsFilter({
+    embeddings: embeddings,
+    similarityThreshold: 0.8,
   });
-  performance.mark('historyAwareRetrieverChain:end');
-
+  const retriever = new ContextualCompressionRetriever({
+    baseCompressor,
+    baseRetriever: vectorStore.asRetriever(),
+  });
+  performance.mark('chat-InitCompressionRetriever:end');
 
   // #################
-  // create the chat chain
+  // prepare contextualize question
+  // {question}[String] + {chat_history}[MessagesArray] = {question}[String]
   // #################
-  performance.mark('createStuffDocumentsChain:start');
-
-  // create a prompt that uses the chat history
-  const chatPrompt = ChatPromptTemplate.fromMessages([
-    [
-      "system",
-      process.env['AI_CHAT_PROMPT'],
-    ],
+  performance.mark('chat-prepareContextualization:start');
+  // define a prompt
+  const contextualizeQPrompt = ChatPromptTemplate.fromMessages([
+    ["system", process.env.AI_CONTEXTUALIZE_HISTORY_PROMPT],
     new MessagesPlaceholder("chat_history"),
-    ["user", "{input}"],
+    ["human", "{input}"],
   ]);
-
-  // create chat chain
-  const chatChain = await createStuffDocumentsChain({
-    llm,
-    prompt: chatPrompt,
-    returnMessages: false
-  });
-  performance.mark('createStuffDocumentsChain:end');
+  // define a chain
+  const contextualizeQChain = contextualizeQPrompt
+    .pipe(model)
+    .pipe(new StringOutputParser());
+  performance.mark('chat-prepareContextualization:end');
 
   // #################
-  // combine chains to get result
+  // Q & A
+  // {question}[String] + {context}[string] = {answer}[String]
   // #################
-  // combine the two chains
-  performance.mark('createConversationalRetrievalChain:start');
-  const conversationalRetrievalChain = await createRetrievalChain({
-    retriever: historyAwareRetrieverChain,
-    combineDocsChain: chatChain
-  });
+  performance.mark('chat-runMainChain:start');
+  // genereate a prompt
+  const qaPrompt = ChatPromptTemplate.fromMessages([
+    ["system", process.env.AI_QA_PROMPT],
+    new MessagesPlaceholder("chat_history"),
+    ["human", "{question}"],
+  ]);
 
-  performance.mark('createConversationalRetrievalChain:end');
-  performance.mark('invokeConversationalRetrievalChain:start');
-  // finally ask the question
-  const result = await conversationalRetrievalChain.invoke({
-    chat_history: req.body.chatHistory ?? [],
-    input: req.body.input
+  // define a chain
+  const mainChain = RunnablePassthrough.assign({
+    question: (invokeInput) => {
+      // if history given 
+      if (invokeInput.chat_history.length > 0) {
+        // input into contextualized question
+        console.log('contextualizing input');
+        return contextualizeQChain;
+      }
+      // simply return input if no history given
+      console.log('keeping input as is');
+      return invokeInput.input;
+    }
+  }).assign({
+    docs: async (invokeInput) => {
+      console.log('question', invokeInput.question);
+      // fetch question related docs from retriever
+      return await retriever.invoke(invokeInput.question);
+    }
+  }).assign({
+    context: async (invokeInput) => {
+      // serialize docs to make them a context string
+      return formatDocumentsAsString(invokeInput.docs);
+    }
+  }).assign({
+    answer: async (invokeInput) => {
+      // try to fetch answer, based on context
+      return qaPrompt.pipe(model).pipe(new StringOutputParser());
+    }
   });
-  performance.mark('invokeConversationalRetrievalChain:end');
 
-  const reliesOnDoc = await isFactual(req.body.model, result.answer, result.context[0].pageContent);
-  let sourceLocation;
 
-  console.log("🚀 ~ chat ~ reliesOnDoc.content.toLowerCase():", reliesOnDoc.content.toLowerCase());
-  if (reliesOnDoc.content.toLowerCase() === 'true') {
-    const file = path.posix.basename(result.context[0].metadata.source);
-    const posFrom = result.context[0].metadata.loc.lines.from;
-    const posTo = result.context[0].metadata.loc.lines.to;
-    sourceLocation = `${file}:${posFrom}-${posTo}`;
-  } else {
-    sourceLocation = 'pretrained';
-  }
+  // invoke question + chat_history = contextualized question + answer + docs
+  const results = await mainChain.invoke({
+    input: req.body.input,
+    chat_history: req.body.chatHistory ?? []
+  });
+  performance.mark('chat-runMainChain:end');
 
   // store q/a-pair in chat history
+  performance.mark('chat-saveHistory:start');
   let chat = await extendChat(req.body.chatId, [
     new HumanMessage(req.body.input),
-    new AIMessage({ content: result.answer, source: sourceLocation })
+    new AIMessage({ content: results.answer, source: results.docs[0] })
   ]);
-  performance.mark('chat:end');
+  performance.mark('chat-saveHistory:end');
 
-  // return the answer
-  return res.json({ answer: result.answer, chat });
+  performance.mark('chat:end');
+  return res.json({ results, chat });
 };
-
-
-
-
-
-/** *******************************************************
- * CREATE AI SUMMARIZED TEXT
- */
-export const isFactual = async (model, answer, context) => {
-  try {
-    performance.mark('isFactual:start');
-    // define llm
-    const llm = new ChatOllama({
-      baseUrl: process.env['AI_API_URL'],
-      model: model,
-      temperature: Number(process.env['AI_TEMPERATURE'])
-    });
-    // create template
-    const promptTemplate = PromptTemplate.fromTemplate(process.env['AI_FACTUAL_PROMPT']);
-    // create chain combining llm and template
-    const chain = promptTemplate.pipe(llm);
-    // invoke variable text & run chain
-    const factual = await chain.invoke({ answer, context });
-    performance.mark('isFactual:end');
-    return factual;
-  } catch (error) {
-    throw error;
-  }
-};
\ No newline at end of file
diff --git a/vitest.config.js b/vitest.config.js
index e45d1b4..76dda0c 100644
--- a/vitest.config.js
+++ b/vitest.config.js
@@ -6,5 +6,16 @@ export default defineConfig({
     // clearMocks: true,
     // mockReset: true,
     mockRestore: true,
+    coverage: {
+      exclude: [
+        './ecosystem.config.cjs',
+        './server.js',
+        './vitest.config.js',
+        '**/controllers/Embeddings.js',
+        '**/utils/handleAI.js',
+        '**/utils/handleDB.js',
+        '**/utils/handleMailer.js',
+      ]
+    }
   },
 });
\ No newline at end of file
-- 
GitLab