@talkpilot/core-db 1.3.65 → 1.3.66

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (322) hide show
  1. package/.cursor/rules/development.mdc +65 -65
  2. package/AGENTS.md +49 -49
  3. package/DEVELOPMENT.md +141 -141
  4. package/README.md +48 -0
  5. package/dist/talkpilot/auditLogs/auditLogs.getters.d.ts +8 -0
  6. package/dist/talkpilot/auditLogs/auditLogs.getters.d.ts.map +1 -0
  7. package/dist/talkpilot/auditLogs/auditLogs.getters.js +26 -0
  8. package/dist/talkpilot/auditLogs/auditLogs.getters.js.map +1 -0
  9. package/dist/talkpilot/auditLogs/auditLogs.setters.d.ts +3 -0
  10. package/dist/talkpilot/auditLogs/auditLogs.setters.d.ts.map +1 -0
  11. package/dist/talkpilot/auditLogs/auditLogs.setters.js +9 -0
  12. package/dist/talkpilot/auditLogs/auditLogs.setters.js.map +1 -0
  13. package/dist/talkpilot/auditLogs/auditLogs.types.d.ts +11 -0
  14. package/dist/talkpilot/auditLogs/auditLogs.types.d.ts.map +1 -0
  15. package/dist/talkpilot/auditLogs/auditLogs.types.js +3 -0
  16. package/dist/talkpilot/auditLogs/auditLogs.types.js.map +1 -0
  17. package/dist/talkpilot/auditLogs/index.d.ts +3 -0
  18. package/dist/talkpilot/auditLogs/index.d.ts.map +1 -0
  19. package/dist/talkpilot/auditLogs/index.js +19 -0
  20. package/dist/talkpilot/auditLogs/index.js.map +1 -0
  21. package/dist/talkpilot/calls/calls.constants.d.ts +9 -1
  22. package/dist/talkpilot/calls/calls.constants.d.ts.map +1 -1
  23. package/dist/talkpilot/calls/calls.constants.js +9 -1
  24. package/dist/talkpilot/calls/calls.constants.js.map +1 -1
  25. package/dist/talkpilot/calls/calls.getters.d.ts +7 -1
  26. package/dist/talkpilot/calls/calls.getters.d.ts.map +1 -1
  27. package/dist/talkpilot/calls/calls.getters.js +181 -1
  28. package/dist/talkpilot/calls/calls.getters.js.map +1 -1
  29. package/dist/talkpilot/calls/calls.types.d.ts +35 -0
  30. package/dist/talkpilot/calls/calls.types.d.ts.map +1 -1
  31. package/dist/talkpilot/clientDeletionLogs/clientDeletionLogs.getters.d.ts +4 -0
  32. package/dist/talkpilot/clientDeletionLogs/clientDeletionLogs.getters.d.ts.map +1 -0
  33. package/dist/talkpilot/clientDeletionLogs/clientDeletionLogs.getters.js +9 -0
  34. package/dist/talkpilot/clientDeletionLogs/clientDeletionLogs.getters.js.map +1 -0
  35. package/dist/talkpilot/clientDeletionLogs/clientDeletionLogs.setters.d.ts +3 -0
  36. package/dist/talkpilot/clientDeletionLogs/clientDeletionLogs.setters.d.ts.map +1 -0
  37. package/dist/talkpilot/clientDeletionLogs/clientDeletionLogs.setters.js +9 -0
  38. package/dist/talkpilot/clientDeletionLogs/clientDeletionLogs.setters.js.map +1 -0
  39. package/dist/talkpilot/clientDeletionLogs/clientDeletionLogs.types.d.ts +10 -0
  40. package/dist/talkpilot/clientDeletionLogs/clientDeletionLogs.types.d.ts.map +1 -0
  41. package/dist/talkpilot/clientDeletionLogs/clientDeletionLogs.types.js +3 -0
  42. package/dist/talkpilot/clientDeletionLogs/clientDeletionLogs.types.js.map +1 -0
  43. package/dist/talkpilot/clientDeletionLogs/index.d.ts +4 -0
  44. package/dist/talkpilot/clientDeletionLogs/index.d.ts.map +1 -0
  45. package/dist/talkpilot/clientDeletionLogs/index.js +20 -0
  46. package/dist/talkpilot/clientDeletionLogs/index.js.map +1 -0
  47. package/dist/talkpilot/clients/clients.constants.d.ts +3 -0
  48. package/dist/talkpilot/clients/clients.constants.d.ts.map +1 -0
  49. package/dist/talkpilot/clients/clients.constants.js +6 -0
  50. package/dist/talkpilot/clients/clients.constants.js.map +1 -0
  51. package/dist/talkpilot/clients/clients.getters.d.ts +2 -0
  52. package/dist/talkpilot/clients/clients.getters.d.ts.map +1 -1
  53. package/dist/talkpilot/clients/clients.getters.js +15 -1
  54. package/dist/talkpilot/clients/clients.getters.js.map +1 -1
  55. package/dist/talkpilot/clients/clients.lifecycle.d.ts +10 -0
  56. package/dist/talkpilot/clients/clients.lifecycle.d.ts.map +1 -0
  57. package/dist/talkpilot/clients/clients.lifecycle.js +95 -0
  58. package/dist/talkpilot/clients/clients.lifecycle.js.map +1 -0
  59. package/dist/talkpilot/clients/clients.types.d.ts +21 -0
  60. package/dist/talkpilot/clients/clients.types.d.ts.map +1 -1
  61. package/dist/talkpilot/clients/index.d.ts +2 -0
  62. package/dist/talkpilot/clients/index.d.ts.map +1 -1
  63. package/dist/talkpilot/clients/index.js +2 -0
  64. package/dist/talkpilot/clients/index.js.map +1 -1
  65. package/dist/talkpilot/flows/flows.schema.d.ts +0 -6
  66. package/dist/talkpilot/flows/flows.schema.d.ts.map +1 -1
  67. package/dist/talkpilot/flows/flows.schema.js +0 -2
  68. package/dist/talkpilot/flows/flows.schema.js.map +1 -1
  69. package/dist/talkpilot/flows/flows.types.d.ts +0 -1
  70. package/dist/talkpilot/flows/flows.types.d.ts.map +1 -1
  71. package/dist/talkpilot/index.d.ts +1 -0
  72. package/dist/talkpilot/index.d.ts.map +1 -1
  73. package/dist/talkpilot/index.js +1 -0
  74. package/dist/talkpilot/index.js.map +1 -1
  75. package/dist/talkpilot/phone_numbers/phone_numbers.getter.d.ts +9 -1
  76. package/dist/talkpilot/phone_numbers/phone_numbers.getter.d.ts.map +1 -1
  77. package/dist/talkpilot/phone_numbers/phone_numbers.getter.js +66 -1
  78. package/dist/talkpilot/phone_numbers/phone_numbers.getter.js.map +1 -1
  79. package/dist/talkpilot/phone_numbers/phone_numbers.types.d.ts +5 -0
  80. package/dist/talkpilot/phone_numbers/phone_numbers.types.d.ts.map +1 -1
  81. package/dist/talkpilot/results/results.constants.d.ts +4 -0
  82. package/dist/talkpilot/results/results.constants.d.ts.map +1 -0
  83. package/dist/talkpilot/results/results.constants.js +10 -0
  84. package/dist/talkpilot/results/results.constants.js.map +1 -0
  85. package/dist/talkpilot/results/results.statistics.getters.d.ts +12 -0
  86. package/dist/talkpilot/results/results.statistics.getters.d.ts.map +1 -0
  87. package/dist/talkpilot/results/results.statistics.getters.js +258 -0
  88. package/dist/talkpilot/results/results.statistics.getters.js.map +1 -0
  89. package/dist/talkpilot/results/results.statistics.types.d.ts +22 -0
  90. package/dist/talkpilot/results/results.statistics.types.d.ts.map +1 -0
  91. package/dist/talkpilot/results/results.statistics.types.js +3 -0
  92. package/dist/talkpilot/results/results.statistics.types.js.map +1 -0
  93. package/dist/test-utils/factories/index.d.ts +2 -0
  94. package/dist/test-utils/factories/index.d.ts.map +1 -1
  95. package/dist/test-utils/factories/index.js +2 -0
  96. package/dist/test-utils/factories/index.js.map +1 -1
  97. package/dist/test-utils/factories/talkpilot/clients.d.ts +14 -0
  98. package/dist/test-utils/factories/talkpilot/clients.d.ts.map +1 -0
  99. package/dist/test-utils/factories/talkpilot/clients.js +19 -0
  100. package/dist/test-utils/factories/talkpilot/clients.js.map +1 -0
  101. package/dist/test-utils/factories/talkpilot/results.d.ts +16 -0
  102. package/dist/test-utils/factories/talkpilot/results.d.ts.map +1 -0
  103. package/dist/test-utils/factories/talkpilot/results.js +40 -0
  104. package/dist/test-utils/factories/talkpilot/results.js.map +1 -0
  105. package/jest.config.js +20 -20
  106. package/package.json +46 -46
  107. package/src/__tests__/setup.ts +20 -20
  108. package/src/bulkWrite/__tests__/bulkWrite.spec.ts +65 -65
  109. package/src/bulkWrite/bulkWrite.ops.ts +45 -45
  110. package/src/bulkWrite/bulkWrite.types.ts +4 -4
  111. package/src/bulkWrite/index.ts +2 -2
  112. package/src/config.ts +9 -9
  113. package/src/configuration/index.ts +17 -17
  114. package/src/configuration/internalModels/index.ts +3 -3
  115. package/src/configuration/internalModels/internalModels.constants.ts +1 -1
  116. package/src/configuration/internalModels/internalModels.getters.ts +33 -33
  117. package/src/configuration/internalModels/internalModels.types.ts +12 -12
  118. package/src/configuration/models/__tests__/models.getters.spec.ts +67 -67
  119. package/src/configuration/models/index.ts +27 -27
  120. package/src/configuration/models/models.constants.ts +15 -15
  121. package/src/configuration/models/models.getters.ts +71 -71
  122. package/src/configuration/models/models.types.ts +80 -80
  123. package/src/configuration/mongodb-client.ts +62 -62
  124. package/src/configuration/prompts/index.ts +2 -2
  125. package/src/configuration/prompts/prompts.getters.ts +49 -49
  126. package/src/configuration/prompts/prompts.types.ts +11 -11
  127. package/src/connection.ts +81 -81
  128. package/src/index.ts +47 -47
  129. package/src/municipal/__tests__/validation.spec.ts +62 -62
  130. package/src/municipal/cities/cities.getters.ts +50 -50
  131. package/src/municipal/cities/cities.types.ts +11 -11
  132. package/src/municipal/cities/index.ts +2 -2
  133. package/src/municipal/departmentsSubjects/__tests__/departmentsSubjects.spec.ts +272 -272
  134. package/src/municipal/departmentsSubjects/departmentsSubjects.getters.ts +317 -317
  135. package/src/municipal/departmentsSubjects/departmentsSubjects.types.ts +73 -73
  136. package/src/municipal/departmentsSubjects/index.ts +9 -9
  137. package/src/municipal/index.ts +22 -22
  138. package/src/municipal/mongodb-client.ts +61 -61
  139. package/src/municipal/muniIssues/__tests__/muniIssues.setters.spec.ts +94 -94
  140. package/src/municipal/muniIssues/__tests__/muniIssues.setup.spec.ts +92 -92
  141. package/src/municipal/muniIssues/index.ts +17 -17
  142. package/src/municipal/muniIssues/muniIssues.constants.ts +18 -18
  143. package/src/municipal/muniIssues/muniIssues.getters.ts +24 -24
  144. package/src/municipal/muniIssues/muniIssues.schema.ts +66 -66
  145. package/src/municipal/muniIssues/muniIssues.setters.ts +24 -24
  146. package/src/municipal/muniIssues/muniIssues.setup.ts +65 -65
  147. package/src/municipal/muniIssues/muniIssues.types.ts +37 -37
  148. package/src/municipal/streets/__tests__/streets.spec.ts +253 -253
  149. package/src/municipal/streets/index.ts +2 -2
  150. package/src/municipal/streets/streets.getters.ts +140 -140
  151. package/src/municipal/streets/streets.types.ts +19 -19
  152. package/src/municipal/systemInstructions/__tests__/getters.spec.ts +113 -113
  153. package/src/municipal/systemInstructions/__tests__/setters.spec.ts +274 -274
  154. package/src/municipal/systemInstructions/index.ts +7 -7
  155. package/src/municipal/systemInstructions/instructions.getters.ts +57 -57
  156. package/src/municipal/systemInstructions/instructions.setters.ts +119 -119
  157. package/src/municipal/systemInstructions/instructions.types.ts +30 -30
  158. package/src/municipal/tickets/__tests__/tickets.getters.spec.ts +30 -30
  159. package/src/municipal/tickets/__tests__/tickets.statistics.spec.ts +99 -99
  160. package/src/municipal/tickets/index.ts +9 -9
  161. package/src/municipal/tickets/tickets.constants.ts +8 -8
  162. package/src/municipal/tickets/tickets.getters.ts +121 -121
  163. package/src/municipal/tickets/tickets.statistics.aggregation.ts +110 -110
  164. package/src/municipal/tickets/tickets.statistics.getters.ts +145 -145
  165. package/src/municipal/tickets/tickets.types.ts +54 -54
  166. package/src/municipal/utils/types.ts +11 -11
  167. package/src/talkpilot/__tests__/db.spec.ts +38 -38
  168. package/src/talkpilot/__tests__/mongodb-client.spec.ts +18 -18
  169. package/src/talkpilot/__tests__/validation.spec.ts +68 -68
  170. package/src/talkpilot/agents/__tests__/agents.getters.spec.ts +29 -29
  171. package/src/talkpilot/agents/agents.getters.ts +34 -34
  172. package/src/talkpilot/agents/agents.types.ts +14 -14
  173. package/src/talkpilot/agents/index.ts +2 -2
  174. package/src/talkpilot/auditLogs/__tests__/auditLogs.spec.ts +91 -0
  175. package/src/talkpilot/auditLogs/auditLogs.getters.ts +26 -0
  176. package/src/talkpilot/auditLogs/auditLogs.types.ts +12 -0
  177. package/src/talkpilot/auditLogs/index.ts +2 -0
  178. package/src/talkpilot/backgroundToolResults/__tests__/backgroundToolResults.getters.spec.ts +147 -147
  179. package/src/talkpilot/backgroundToolResults/backgroundToolResults.getters.ts +65 -65
  180. package/src/talkpilot/backgroundToolResults/backgroundToolResults.types.ts +23 -23
  181. package/src/talkpilot/backgroundToolResults/index.ts +2 -2
  182. package/src/talkpilot/calls/__tests__/callStats.utils.spec.ts +128 -128
  183. package/src/talkpilot/calls/__tests__/calls.dashboard.spec.ts +229 -229
  184. package/src/talkpilot/calls/__tests__/calls.spec.ts +471 -471
  185. package/src/talkpilot/calls/__tests__/calls.statistics.getters.spec.ts +374 -0
  186. package/src/talkpilot/calls/__tests__/calls.statistics.spec.ts +483 -483
  187. package/src/talkpilot/calls/calls.constants.ts +61 -49
  188. package/src/talkpilot/calls/calls.getters.ts +270 -1
  189. package/src/talkpilot/calls/calls.statistics.getters.ts +668 -668
  190. package/src/talkpilot/calls/calls.statistics.types.ts +48 -48
  191. package/src/talkpilot/calls/calls.types.ts +40 -0
  192. package/src/talkpilot/calls/dashboard/calls.dashboard.ts +295 -295
  193. package/src/talkpilot/calls/dashboard/calls.dashboard.types.ts +57 -57
  194. package/src/talkpilot/calls/index.ts +6 -6
  195. package/src/talkpilot/clientAudioBuffers/__tests__/clientAudioBuffer.getters.spec.ts +160 -160
  196. package/src/talkpilot/clientAudioBuffers/clientAudioBuffer.getters.ts +117 -117
  197. package/src/talkpilot/clientAudioBuffers/clientsAudioBuffers.types.ts +25 -25
  198. package/src/talkpilot/clientAudioBuffers/index.ts +2 -2
  199. package/src/talkpilot/clients/__tests__/clients.getters.spec.ts +51 -0
  200. package/src/talkpilot/clients/__tests__/clients.lifecycle.spec.ts +166 -0
  201. package/src/talkpilot/clients/__tests__/clients.quota.spec.ts +123 -123
  202. package/src/talkpilot/clients/clients.constants.ts +2 -0
  203. package/src/talkpilot/clients/clients.getters.ts +32 -19
  204. package/src/talkpilot/clients/clients.lifecycle.ts +116 -0
  205. package/src/talkpilot/clients/clients.quota.getters.ts +119 -119
  206. package/src/talkpilot/clients/clients.quota.types.ts +27 -27
  207. package/src/talkpilot/clients/clients.types.ts +37 -18
  208. package/src/talkpilot/clients/index.ts +6 -4
  209. package/src/talkpilot/clientsConfig/__tests__/clientsConfig.getters.spec.ts +423 -423
  210. package/src/talkpilot/clientsConfig/__tests__/clientsConfig.spec.ts +212 -212
  211. package/src/talkpilot/clientsConfig/clientsConfig.constants.ts +2 -2
  212. package/src/talkpilot/clientsConfig/clientsConfig.getters.ts +247 -247
  213. package/src/talkpilot/clientsConfig/clientsConfig.types.ts +137 -137
  214. package/src/talkpilot/clientsConfig/index.ts +3 -3
  215. package/src/talkpilot/contextNotes/__tests__/contextNotes.getters.spec.ts +217 -217
  216. package/src/talkpilot/contextNotes/contextNotes.getters.ts +85 -85
  217. package/src/talkpilot/contextNotes/contextNotes.types.ts +20 -20
  218. package/src/talkpilot/contextNotes/index.ts +2 -2
  219. package/src/talkpilot/flows/__tests__/flows.schema.spec.ts +124 -142
  220. package/src/talkpilot/flows/flows.getter.ts +34 -34
  221. package/src/talkpilot/flows/flows.schema.ts +180 -182
  222. package/src/talkpilot/flows/flows.types.ts +211 -212
  223. package/src/talkpilot/flows/index.ts +7 -7
  224. package/src/talkpilot/groups/__tests__/groups.spec.ts +90 -90
  225. package/src/talkpilot/groups/__tests__/phone.utils.spec.ts +32 -32
  226. package/src/talkpilot/groups/groups.getters.ts +30 -30
  227. package/src/talkpilot/groups/groups.types.ts +29 -29
  228. package/src/talkpilot/groups/index.ts +3 -3
  229. package/src/talkpilot/groups/phone.utils.ts +46 -46
  230. package/src/talkpilot/index.ts +32 -31
  231. package/src/talkpilot/leads/index.ts +2 -2
  232. package/src/talkpilot/leads/leads.getter.ts +6 -6
  233. package/src/talkpilot/leads/leads.schema.ts +33 -33
  234. package/src/talkpilot/leads/leads.types.ts +20 -20
  235. package/src/talkpilot/mongodb-client.ts +78 -78
  236. package/src/talkpilot/phone_numbers/__tests__/phone_numbers.spec.ts +774 -530
  237. package/src/talkpilot/phone_numbers/index.ts +2 -2
  238. package/src/talkpilot/phone_numbers/phone_numbers.getter.ts +324 -240
  239. package/src/talkpilot/phone_numbers/phone_numbers.schema.ts +17 -17
  240. package/src/talkpilot/phone_numbers/phone_numbers.types.ts +36 -30
  241. package/src/talkpilot/phone_numbers/phone_numbers.utils.ts +9 -9
  242. package/src/talkpilot/plans/__tests__/plans.spec.ts +70 -70
  243. package/src/talkpilot/plans/index.ts +2 -2
  244. package/src/talkpilot/plans/plans.getters.ts +132 -132
  245. package/src/talkpilot/plans/plans.types.ts +89 -89
  246. package/src/talkpilot/products/__tests__/products.getters.spec.ts +44 -44
  247. package/src/talkpilot/products/index.ts +2 -2
  248. package/src/talkpilot/products/products.getters.ts +12 -12
  249. package/src/talkpilot/products/products.types.ts +9 -9
  250. package/src/talkpilot/results/index.ts +7 -7
  251. package/src/talkpilot/results/results.getter.ts +39 -39
  252. package/src/talkpilot/results/results.schema.ts +25 -25
  253. package/src/talkpilot/results/results.types.ts +34 -34
  254. package/src/talkpilot/retry_analyze/__tests__/retryAnalyze.getters.spec.ts +156 -156
  255. package/src/talkpilot/retry_analyze/index.ts +2 -2
  256. package/src/talkpilot/retry_analyze/retryAnalyze.getters.ts +84 -84
  257. package/src/talkpilot/retry_analyze/retryAnalyze.types.ts +13 -13
  258. package/src/talkpilot/sessions/__tests__/sessions.spec.ts +147 -147
  259. package/src/talkpilot/sessions/index.ts +2 -2
  260. package/src/talkpilot/sessions/sessions.getter.ts +92 -92
  261. package/src/talkpilot/sessions/sessions.schema.ts +34 -34
  262. package/src/talkpilot/sessions/sessions.types.ts +30 -30
  263. package/src/talkpilot/subscriptions/__tests__/subscriptions.getters.utils.spec.ts +45 -45
  264. package/src/talkpilot/subscriptions/index.ts +3 -3
  265. package/src/talkpilot/subscriptions/subscriptions.getters.ts +146 -146
  266. package/src/talkpilot/subscriptions/subscriptions.getters.utils.ts +33 -33
  267. package/src/talkpilot/subscriptions/subscriptions.types.ts +66 -66
  268. package/src/talkpilot/utils/__tests__/query.utils.spec.ts +49 -49
  269. package/src/talkpilot/utils/query.utils.ts +21 -21
  270. package/src/test-utils/db-utils.ts +33 -33
  271. package/src/test-utils/factories/index.ts +20 -18
  272. package/src/test-utils/factories/municipal/cities.ts +16 -16
  273. package/src/test-utils/factories/municipal/departmentsSubjects.ts +37 -37
  274. package/src/test-utils/factories/municipal/muniIssues.ts +32 -32
  275. package/src/test-utils/factories/municipal/streets.ts +22 -22
  276. package/src/test-utils/factories/municipal/tickets.ts +39 -39
  277. package/src/test-utils/factories/talkpilot/agents.ts +19 -19
  278. package/src/test-utils/factories/talkpilot/calls.ts +37 -37
  279. package/src/test-utils/factories/talkpilot/clientAudioBuffers.ts +20 -20
  280. package/src/test-utils/factories/talkpilot/clients.ts +21 -0
  281. package/src/test-utils/factories/talkpilot/clientsConfig.ts +18 -18
  282. package/src/test-utils/factories/talkpilot/contextNotes.ts +40 -40
  283. package/src/test-utils/factories/talkpilot/flows.ts +33 -33
  284. package/src/test-utils/factories/talkpilot/groups.ts +33 -33
  285. package/src/test-utils/factories/talkpilot/phone_numbers.ts +22 -22
  286. package/src/test-utils/factories/talkpilot/results.ts +43 -0
  287. package/src/test-utils/factories/talkpilot/sessions.ts +35 -35
  288. package/src/test-utils/factories/websitalk/knowledgeDocuments.ts +29 -29
  289. package/src/test-utils/factories/websitalk/scanResources.ts +26 -26
  290. package/src/test-utils/factories/websitalk/scans.ts +30 -30
  291. package/src/test-utils/factories/websitalk/websiteUrls.ts +17 -17
  292. package/src/utils/date.utils.ts +126 -126
  293. package/src/utils/shared.types.ts +4 -4
  294. package/src/utils/validation.ts +23 -23
  295. package/src/websitalk/index.ts +18 -18
  296. package/src/websitalk/knowledgeDocuments/__tests__/knowledgeDocuments.spec.ts +238 -238
  297. package/src/websitalk/knowledgeDocuments/index.ts +3 -3
  298. package/src/websitalk/knowledgeDocuments/knowledgeDocuments.constants.ts +26 -26
  299. package/src/websitalk/knowledgeDocuments/knowledgeDocuments.getters.ts +95 -95
  300. package/src/websitalk/knowledgeDocuments/knowledgeDocuments.types.ts +75 -75
  301. package/src/websitalk/mongodb-client.ts +61 -61
  302. package/src/websitalk/scanResources/__tests__/scanResources.spec.ts +267 -267
  303. package/src/websitalk/scanResources/index.ts +4 -4
  304. package/src/websitalk/scanResources/scanResources.constants.ts +60 -60
  305. package/src/websitalk/scanResources/scanResources.getters.ts +128 -128
  306. package/src/websitalk/scanResources/scanResources.types.ts +105 -105
  307. package/src/websitalk/scanResources/scanResources.utils.ts +31 -31
  308. package/src/websitalk/scans/__tests__/scans.spec.ts +362 -362
  309. package/src/websitalk/scans/index.ts +4 -4
  310. package/src/websitalk/scans/scans.constants.ts +18 -18
  311. package/src/websitalk/scans/scans.getters.ts +172 -172
  312. package/src/websitalk/scans/scans.types.ts +58 -58
  313. package/src/websitalk/scans/scans.utils.ts +5 -5
  314. package/src/websitalk/websiteUrls/__tests__/websiteUrls.spec.ts +77 -77
  315. package/src/websitalk/websiteUrls/index.ts +2 -2
  316. package/src/websitalk/websiteUrls/websiteUrls.getters.ts +65 -65
  317. package/src/websitalk/websiteUrls/websiteUrls.types.ts +13 -13
  318. package/tsconfig.json +23 -23
  319. package/dist/talkpilot/subscriptions/subscriptions.utils.d.ts +0 -4
  320. package/dist/talkpilot/subscriptions/subscriptions.utils.d.ts.map +0 -1
  321. package/dist/talkpilot/subscriptions/subscriptions.utils.js +0 -20
  322. package/dist/talkpilot/subscriptions/subscriptions.utils.js.map +0 -1
@@ -1,238 +1,238 @@
1
- import {
2
- KNOWLEDGE_CONTENT_TYPES,
3
- KNOWLEDGE_DOCUMENT_STATUSES,
4
- KNOWLEDGE_FILE_TYPES,
5
- } from "../knowledgeDocuments.constants";
6
- import {
7
- createKnowledgeDocument,
8
- deleteKnowledgeDocument,
9
- getKnowledgeDocumentById,
10
- getKnowledgeDocumentsCollection,
11
- listKnowledgeDocumentsByClientId,
12
- listReadyKnowledgeDocumentIdsByClientId,
13
- listReadyKnowledgeDocumentsByClientId,
14
- updateKnowledgeDocument,
15
- } from "../knowledgeDocuments.getters";
16
- import { createKnowledgeDocumentFixture } from "../../../test-utils/factories/websitalk/knowledgeDocuments";
17
-
18
- describe("db.websitalk.knowledgeDocuments", () => {
19
- const clientId = "test-client";
20
- const nonExistentId = "507f1f77bcf86cd799439011";
21
-
22
- describe("createKnowledgeDocument", () => {
23
- it("should create a knowledge document", async () => {
24
- const id = await createKnowledgeDocument({
25
- clientId,
26
- filename: "faq.pdf",
27
- contentType: KNOWLEDGE_CONTENT_TYPES.PDF,
28
- fileType: KNOWLEDGE_FILE_TYPES.PDF,
29
- storagePath: "websitalk/knowledge_files/test/faq.pdf",
30
- byteSize: 2048,
31
- });
32
-
33
- const saved = await getKnowledgeDocumentById(id.toString());
34
- expect(saved).toMatchObject({
35
- clientId,
36
- filename: "faq.pdf",
37
- status: KNOWLEDGE_DOCUMENT_STATUSES.UPLOADING,
38
- progressPercent: 0,
39
- fileType: KNOWLEDGE_FILE_TYPES.PDF,
40
- });
41
- expect(saved?.createdAt).toBeInstanceOf(Date);
42
- expect(saved?.updatedAt).toBeInstanceOf(Date);
43
- });
44
- });
45
-
46
- describe("getKnowledgeDocumentById", () => {
47
- it("should throw for an invalid id", async () => {
48
- await expect(getKnowledgeDocumentById("invalid-id")).rejects.toThrow();
49
- });
50
- });
51
-
52
- describe("listKnowledgeDocumentsByClientId", () => {
53
- it("should return documents for a client only", async () => {
54
- await getKnowledgeDocumentsCollection().insertMany([
55
- createKnowledgeDocumentFixture({ clientId, filename: "a.pdf" }),
56
- createKnowledgeDocumentFixture({ clientId, filename: "b.pdf" }),
57
- createKnowledgeDocumentFixture({
58
- clientId: "other-client",
59
- filename: "c.pdf",
60
- }),
61
- ]);
62
-
63
- const results = await listKnowledgeDocumentsByClientId(clientId);
64
- expect(results).toHaveLength(2);
65
- expect(results.map((doc) => doc.filename).sort()).toEqual([
66
- "a.pdf",
67
- "b.pdf",
68
- ]);
69
- });
70
-
71
- it("should return documents sorted by createdAt descending", async () => {
72
- await getKnowledgeDocumentsCollection().insertMany([
73
- createKnowledgeDocumentFixture({
74
- clientId,
75
- filename: "older.pdf",
76
- createdAt: new Date("2024-01-01"),
77
- updatedAt: new Date("2024-01-01"),
78
- }),
79
- createKnowledgeDocumentFixture({
80
- clientId,
81
- filename: "newer.pdf",
82
- createdAt: new Date("2024-06-01"),
83
- updatedAt: new Date("2024-06-01"),
84
- }),
85
- ]);
86
-
87
- const results = await listKnowledgeDocumentsByClientId(clientId);
88
- expect(results.map((doc) => doc.filename)).toEqual([
89
- "newer.pdf",
90
- "older.pdf",
91
- ]);
92
- });
93
- });
94
-
95
- describe("listReadyKnowledgeDocumentIdsByClientId", () => {
96
- it("should return only READY document ids sorted by createdAt descending", async () => {
97
- await getKnowledgeDocumentsCollection().insertMany([
98
- createKnowledgeDocumentFixture({
99
- clientId,
100
- status: KNOWLEDGE_DOCUMENT_STATUSES.READY,
101
- createdAt: new Date("2024-01-01"),
102
- updatedAt: new Date("2024-01-01"),
103
- }),
104
- createKnowledgeDocumentFixture({
105
- clientId,
106
- status: KNOWLEDGE_DOCUMENT_STATUSES.READY,
107
- createdAt: new Date("2024-06-01"),
108
- updatedAt: new Date("2024-06-01"),
109
- }),
110
- createKnowledgeDocumentFixture({
111
- clientId,
112
- status: KNOWLEDGE_DOCUMENT_STATUSES.PROCESSING,
113
- }),
114
- createKnowledgeDocumentFixture({
115
- clientId: "other",
116
- status: KNOWLEDGE_DOCUMENT_STATUSES.READY,
117
- }),
118
- ]);
119
-
120
- const readyDocs = await getKnowledgeDocumentsCollection()
121
- .find({ clientId, status: KNOWLEDGE_DOCUMENT_STATUSES.READY })
122
- .sort({ createdAt: -1 })
123
- .toArray();
124
- const expectedIds = readyDocs.map((doc) => doc._id.toString());
125
-
126
- const ids = await listReadyKnowledgeDocumentIdsByClientId(clientId);
127
- expect(ids).toHaveLength(2);
128
- expect(ids).toEqual(expectedIds);
129
- });
130
- });
131
-
132
- describe("listReadyKnowledgeDocumentsByClientId", () => {
133
- it("should return only READY documents sorted by createdAt descending", async () => {
134
- await getKnowledgeDocumentsCollection().insertMany([
135
- createKnowledgeDocumentFixture({
136
- clientId,
137
- filename: "older.pdf",
138
- status: KNOWLEDGE_DOCUMENT_STATUSES.READY,
139
- markdownStoragePath: "path/older.md",
140
- charCount: 100,
141
- totalTokens: 20,
142
- createdAt: new Date("2024-01-01"),
143
- updatedAt: new Date("2024-01-01"),
144
- }),
145
- createKnowledgeDocumentFixture({
146
- clientId,
147
- filename: "newer.pdf",
148
- status: KNOWLEDGE_DOCUMENT_STATUSES.READY,
149
- markdownStoragePath: "path/newer.md",
150
- charCount: 200,
151
- totalTokens: 40,
152
- createdAt: new Date("2024-06-01"),
153
- updatedAt: new Date("2024-06-01"),
154
- }),
155
- createKnowledgeDocumentFixture({
156
- clientId,
157
- filename: "processing.pdf",
158
- status: KNOWLEDGE_DOCUMENT_STATUSES.PROCESSING,
159
- }),
160
- createKnowledgeDocumentFixture({
161
- clientId: "other",
162
- filename: "other.pdf",
163
- status: KNOWLEDGE_DOCUMENT_STATUSES.READY,
164
- }),
165
- ]);
166
-
167
- const docs = await listReadyKnowledgeDocumentsByClientId(clientId);
168
- expect(docs.map((doc) => doc.filename)).toEqual([
169
- "newer.pdf",
170
- "older.pdf",
171
- ]);
172
- expect(docs[0]).toMatchObject({
173
- clientId,
174
- filename: "newer.pdf",
175
- markdownStoragePath: "path/newer.md",
176
- charCount: 200,
177
- totalTokens: 40,
178
- status: KNOWLEDGE_DOCUMENT_STATUSES.READY,
179
- });
180
- });
181
- });
182
-
183
- describe("updateKnowledgeDocument", () => {
184
- it("should update status and progress", async () => {
185
- const id = await createKnowledgeDocument({
186
- clientId,
187
- filename: "doc.pdf",
188
- contentType: KNOWLEDGE_CONTENT_TYPES.PDF,
189
- fileType: KNOWLEDGE_FILE_TYPES.PDF,
190
- storagePath: "websitalk/knowledge_files/test/doc.pdf",
191
- byteSize: 100,
192
- });
193
-
194
- const before = await getKnowledgeDocumentById(id.toString());
195
-
196
- const updated = await updateKnowledgeDocument(id.toString(), {
197
- status: KNOWLEDGE_DOCUMENT_STATUSES.READY,
198
- progressPercent: 100,
199
- pageCount: 12,
200
- });
201
-
202
- expect(updated?.status).toBe(KNOWLEDGE_DOCUMENT_STATUSES.READY);
203
- expect(updated?.progressPercent).toBe(100);
204
- expect(updated?.pageCount).toBe(12);
205
- expect(updated?.updatedAt.getTime()).toBeGreaterThanOrEqual(
206
- before!.updatedAt.getTime(),
207
- );
208
- });
209
-
210
- it("should return null when the document does not exist", async () => {
211
- expect(
212
- await updateKnowledgeDocument(nonExistentId, {
213
- status: KNOWLEDGE_DOCUMENT_STATUSES.READY,
214
- }),
215
- ).toBeNull();
216
- });
217
- });
218
-
219
- describe("deleteKnowledgeDocument", () => {
220
- it("should delete and return true", async () => {
221
- const id = await createKnowledgeDocument({
222
- clientId: "delete-client",
223
- filename: "gone.pdf",
224
- contentType: KNOWLEDGE_CONTENT_TYPES.PDF,
225
- fileType: KNOWLEDGE_FILE_TYPES.PDF,
226
- storagePath: "websitalk/knowledge_files/delete/gone.pdf",
227
- byteSize: 10,
228
- });
229
-
230
- expect(await deleteKnowledgeDocument(id.toString())).toBe(true);
231
- expect(await getKnowledgeDocumentById(id.toString())).toBeNull();
232
- });
233
-
234
- it("should return false when the document does not exist", async () => {
235
- expect(await deleteKnowledgeDocument(nonExistentId)).toBe(false);
236
- });
237
- });
238
- });
1
+ import {
2
+ KNOWLEDGE_CONTENT_TYPES,
3
+ KNOWLEDGE_DOCUMENT_STATUSES,
4
+ KNOWLEDGE_FILE_TYPES,
5
+ } from "../knowledgeDocuments.constants";
6
+ import {
7
+ createKnowledgeDocument,
8
+ deleteKnowledgeDocument,
9
+ getKnowledgeDocumentById,
10
+ getKnowledgeDocumentsCollection,
11
+ listKnowledgeDocumentsByClientId,
12
+ listReadyKnowledgeDocumentIdsByClientId,
13
+ listReadyKnowledgeDocumentsByClientId,
14
+ updateKnowledgeDocument,
15
+ } from "../knowledgeDocuments.getters";
16
+ import { createKnowledgeDocumentFixture } from "../../../test-utils/factories/websitalk/knowledgeDocuments";
17
+
18
+ describe("db.websitalk.knowledgeDocuments", () => {
19
+ const clientId = "test-client";
20
+ const nonExistentId = "507f1f77bcf86cd799439011";
21
+
22
+ describe("createKnowledgeDocument", () => {
23
+ it("should create a knowledge document", async () => {
24
+ const id = await createKnowledgeDocument({
25
+ clientId,
26
+ filename: "faq.pdf",
27
+ contentType: KNOWLEDGE_CONTENT_TYPES.PDF,
28
+ fileType: KNOWLEDGE_FILE_TYPES.PDF,
29
+ storagePath: "websitalk/knowledge_files/test/faq.pdf",
30
+ byteSize: 2048,
31
+ });
32
+
33
+ const saved = await getKnowledgeDocumentById(id.toString());
34
+ expect(saved).toMatchObject({
35
+ clientId,
36
+ filename: "faq.pdf",
37
+ status: KNOWLEDGE_DOCUMENT_STATUSES.UPLOADING,
38
+ progressPercent: 0,
39
+ fileType: KNOWLEDGE_FILE_TYPES.PDF,
40
+ });
41
+ expect(saved?.createdAt).toBeInstanceOf(Date);
42
+ expect(saved?.updatedAt).toBeInstanceOf(Date);
43
+ });
44
+ });
45
+
46
+ describe("getKnowledgeDocumentById", () => {
47
+ it("should throw for an invalid id", async () => {
48
+ await expect(getKnowledgeDocumentById("invalid-id")).rejects.toThrow();
49
+ });
50
+ });
51
+
52
+ describe("listKnowledgeDocumentsByClientId", () => {
53
+ it("should return documents for a client only", async () => {
54
+ await getKnowledgeDocumentsCollection().insertMany([
55
+ createKnowledgeDocumentFixture({ clientId, filename: "a.pdf" }),
56
+ createKnowledgeDocumentFixture({ clientId, filename: "b.pdf" }),
57
+ createKnowledgeDocumentFixture({
58
+ clientId: "other-client",
59
+ filename: "c.pdf",
60
+ }),
61
+ ]);
62
+
63
+ const results = await listKnowledgeDocumentsByClientId(clientId);
64
+ expect(results).toHaveLength(2);
65
+ expect(results.map((doc) => doc.filename).sort()).toEqual([
66
+ "a.pdf",
67
+ "b.pdf",
68
+ ]);
69
+ });
70
+
71
+ it("should return documents sorted by createdAt descending", async () => {
72
+ await getKnowledgeDocumentsCollection().insertMany([
73
+ createKnowledgeDocumentFixture({
74
+ clientId,
75
+ filename: "older.pdf",
76
+ createdAt: new Date("2024-01-01"),
77
+ updatedAt: new Date("2024-01-01"),
78
+ }),
79
+ createKnowledgeDocumentFixture({
80
+ clientId,
81
+ filename: "newer.pdf",
82
+ createdAt: new Date("2024-06-01"),
83
+ updatedAt: new Date("2024-06-01"),
84
+ }),
85
+ ]);
86
+
87
+ const results = await listKnowledgeDocumentsByClientId(clientId);
88
+ expect(results.map((doc) => doc.filename)).toEqual([
89
+ "newer.pdf",
90
+ "older.pdf",
91
+ ]);
92
+ });
93
+ });
94
+
95
+ describe("listReadyKnowledgeDocumentIdsByClientId", () => {
96
+ it("should return only READY document ids sorted by createdAt descending", async () => {
97
+ await getKnowledgeDocumentsCollection().insertMany([
98
+ createKnowledgeDocumentFixture({
99
+ clientId,
100
+ status: KNOWLEDGE_DOCUMENT_STATUSES.READY,
101
+ createdAt: new Date("2024-01-01"),
102
+ updatedAt: new Date("2024-01-01"),
103
+ }),
104
+ createKnowledgeDocumentFixture({
105
+ clientId,
106
+ status: KNOWLEDGE_DOCUMENT_STATUSES.READY,
107
+ createdAt: new Date("2024-06-01"),
108
+ updatedAt: new Date("2024-06-01"),
109
+ }),
110
+ createKnowledgeDocumentFixture({
111
+ clientId,
112
+ status: KNOWLEDGE_DOCUMENT_STATUSES.PROCESSING,
113
+ }),
114
+ createKnowledgeDocumentFixture({
115
+ clientId: "other",
116
+ status: KNOWLEDGE_DOCUMENT_STATUSES.READY,
117
+ }),
118
+ ]);
119
+
120
+ const readyDocs = await getKnowledgeDocumentsCollection()
121
+ .find({ clientId, status: KNOWLEDGE_DOCUMENT_STATUSES.READY })
122
+ .sort({ createdAt: -1 })
123
+ .toArray();
124
+ const expectedIds = readyDocs.map((doc) => doc._id.toString());
125
+
126
+ const ids = await listReadyKnowledgeDocumentIdsByClientId(clientId);
127
+ expect(ids).toHaveLength(2);
128
+ expect(ids).toEqual(expectedIds);
129
+ });
130
+ });
131
+
132
+ describe("listReadyKnowledgeDocumentsByClientId", () => {
133
+ it("should return only READY documents sorted by createdAt descending", async () => {
134
+ await getKnowledgeDocumentsCollection().insertMany([
135
+ createKnowledgeDocumentFixture({
136
+ clientId,
137
+ filename: "older.pdf",
138
+ status: KNOWLEDGE_DOCUMENT_STATUSES.READY,
139
+ markdownStoragePath: "path/older.md",
140
+ charCount: 100,
141
+ totalTokens: 20,
142
+ createdAt: new Date("2024-01-01"),
143
+ updatedAt: new Date("2024-01-01"),
144
+ }),
145
+ createKnowledgeDocumentFixture({
146
+ clientId,
147
+ filename: "newer.pdf",
148
+ status: KNOWLEDGE_DOCUMENT_STATUSES.READY,
149
+ markdownStoragePath: "path/newer.md",
150
+ charCount: 200,
151
+ totalTokens: 40,
152
+ createdAt: new Date("2024-06-01"),
153
+ updatedAt: new Date("2024-06-01"),
154
+ }),
155
+ createKnowledgeDocumentFixture({
156
+ clientId,
157
+ filename: "processing.pdf",
158
+ status: KNOWLEDGE_DOCUMENT_STATUSES.PROCESSING,
159
+ }),
160
+ createKnowledgeDocumentFixture({
161
+ clientId: "other",
162
+ filename: "other.pdf",
163
+ status: KNOWLEDGE_DOCUMENT_STATUSES.READY,
164
+ }),
165
+ ]);
166
+
167
+ const docs = await listReadyKnowledgeDocumentsByClientId(clientId);
168
+ expect(docs.map((doc) => doc.filename)).toEqual([
169
+ "newer.pdf",
170
+ "older.pdf",
171
+ ]);
172
+ expect(docs[0]).toMatchObject({
173
+ clientId,
174
+ filename: "newer.pdf",
175
+ markdownStoragePath: "path/newer.md",
176
+ charCount: 200,
177
+ totalTokens: 40,
178
+ status: KNOWLEDGE_DOCUMENT_STATUSES.READY,
179
+ });
180
+ });
181
+ });
182
+
183
+ describe("updateKnowledgeDocument", () => {
184
+ it("should update status and progress", async () => {
185
+ const id = await createKnowledgeDocument({
186
+ clientId,
187
+ filename: "doc.pdf",
188
+ contentType: KNOWLEDGE_CONTENT_TYPES.PDF,
189
+ fileType: KNOWLEDGE_FILE_TYPES.PDF,
190
+ storagePath: "websitalk/knowledge_files/test/doc.pdf",
191
+ byteSize: 100,
192
+ });
193
+
194
+ const before = await getKnowledgeDocumentById(id.toString());
195
+
196
+ const updated = await updateKnowledgeDocument(id.toString(), {
197
+ status: KNOWLEDGE_DOCUMENT_STATUSES.READY,
198
+ progressPercent: 100,
199
+ pageCount: 12,
200
+ });
201
+
202
+ expect(updated?.status).toBe(KNOWLEDGE_DOCUMENT_STATUSES.READY);
203
+ expect(updated?.progressPercent).toBe(100);
204
+ expect(updated?.pageCount).toBe(12);
205
+ expect(updated?.updatedAt.getTime()).toBeGreaterThanOrEqual(
206
+ before!.updatedAt.getTime(),
207
+ );
208
+ });
209
+
210
+ it("should return null when the document does not exist", async () => {
211
+ expect(
212
+ await updateKnowledgeDocument(nonExistentId, {
213
+ status: KNOWLEDGE_DOCUMENT_STATUSES.READY,
214
+ }),
215
+ ).toBeNull();
216
+ });
217
+ });
218
+
219
+ describe("deleteKnowledgeDocument", () => {
220
+ it("should delete and return true", async () => {
221
+ const id = await createKnowledgeDocument({
222
+ clientId: "delete-client",
223
+ filename: "gone.pdf",
224
+ contentType: KNOWLEDGE_CONTENT_TYPES.PDF,
225
+ fileType: KNOWLEDGE_FILE_TYPES.PDF,
226
+ storagePath: "websitalk/knowledge_files/delete/gone.pdf",
227
+ byteSize: 10,
228
+ });
229
+
230
+ expect(await deleteKnowledgeDocument(id.toString())).toBe(true);
231
+ expect(await getKnowledgeDocumentById(id.toString())).toBeNull();
232
+ });
233
+
234
+ it("should return false when the document does not exist", async () => {
235
+ expect(await deleteKnowledgeDocument(nonExistentId)).toBe(false);
236
+ });
237
+ });
238
+ });
@@ -1,3 +1,3 @@
1
- export * from "./knowledgeDocuments.constants";
2
- export * from "./knowledgeDocuments.getters";
3
- export * from "./knowledgeDocuments.types";
1
+ export * from "./knowledgeDocuments.constants";
2
+ export * from "./knowledgeDocuments.getters";
3
+ export * from "./knowledgeDocuments.types";
@@ -1,26 +1,26 @@
1
- export const KNOWLEDGE_DOCUMENTS_COLLECTION = "knowledgeDocuments";
2
-
3
- export const KNOWLEDGE_DOCUMENT_STATUSES = {
4
- UPLOADING: "UPLOADING",
5
- EXTRACTING: "EXTRACTING",
6
- PROCESSING: "PROCESSING",
7
- READY: "READY",
8
- FAILED: "FAILED",
9
- } as const;
10
-
11
- export const KNOWLEDGE_FILE_TYPES = {
12
- PDF: "pdf",
13
- } as const;
14
-
15
- export const KNOWLEDGE_CONTENT_TYPES = {
16
- PDF: "application/pdf",
17
- } as const;
18
-
19
- export const KNOWLEDGE_DOCUMENT_READY_PROJECTION = {
20
- clientId: 1,
21
- filename: 1,
22
- markdownStoragePath: 1,
23
- charCount: 1,
24
- totalTokens: 1,
25
- status: 1,
26
- } as const;
1
+ export const KNOWLEDGE_DOCUMENTS_COLLECTION = "knowledgeDocuments";
2
+
3
+ export const KNOWLEDGE_DOCUMENT_STATUSES = {
4
+ UPLOADING: "UPLOADING",
5
+ EXTRACTING: "EXTRACTING",
6
+ PROCESSING: "PROCESSING",
7
+ READY: "READY",
8
+ FAILED: "FAILED",
9
+ } as const;
10
+
11
+ export const KNOWLEDGE_FILE_TYPES = {
12
+ PDF: "pdf",
13
+ } as const;
14
+
15
+ export const KNOWLEDGE_CONTENT_TYPES = {
16
+ PDF: "application/pdf",
17
+ } as const;
18
+
19
+ export const KNOWLEDGE_DOCUMENT_READY_PROJECTION = {
20
+ clientId: 1,
21
+ filename: 1,
22
+ markdownStoragePath: 1,
23
+ charCount: 1,
24
+ totalTokens: 1,
25
+ status: 1,
26
+ } as const;