@talkpilot/core-db 1.3.66 → 1.3.67

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 (342) 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 +0 -48
  5. package/dist/configuration/models/models.constants.d.ts +1 -1
  6. package/dist/configuration/models/models.constants.d.ts.map +1 -1
  7. package/dist/configuration/models/models.constants.js +6 -1
  8. package/dist/configuration/models/models.constants.js.map +1 -1
  9. package/dist/municipal/departmentsSubjects/departmentsSubjects.setters.d.ts +10 -0
  10. package/dist/municipal/departmentsSubjects/departmentsSubjects.setters.d.ts.map +1 -0
  11. package/dist/municipal/departmentsSubjects/departmentsSubjects.setters.js +15 -0
  12. package/dist/municipal/departmentsSubjects/departmentsSubjects.setters.js.map +1 -0
  13. package/dist/municipal/streets/streets.setters.d.ts +10 -0
  14. package/dist/municipal/streets/streets.setters.d.ts.map +1 -0
  15. package/dist/municipal/streets/streets.setters.js +15 -0
  16. package/dist/municipal/streets/streets.setters.js.map +1 -0
  17. package/dist/reconcile/index.d.ts +5 -0
  18. package/dist/reconcile/index.d.ts.map +1 -0
  19. package/dist/{talkpilot/auditLogs → reconcile}/index.js +4 -2
  20. package/dist/reconcile/index.js.map +1 -0
  21. package/dist/reconcile/reconcile.diff.d.ts +4 -0
  22. package/dist/reconcile/reconcile.diff.d.ts.map +1 -0
  23. package/dist/reconcile/reconcile.diff.js +36 -0
  24. package/dist/reconcile/reconcile.diff.js.map +1 -0
  25. package/dist/reconcile/reconcile.execute.d.ts +7 -0
  26. package/dist/reconcile/reconcile.execute.d.ts.map +1 -0
  27. package/dist/reconcile/reconcile.execute.js +20 -0
  28. package/dist/reconcile/reconcile.execute.js.map +1 -0
  29. package/dist/reconcile/reconcile.ops.d.ts +12 -0
  30. package/dist/reconcile/reconcile.ops.d.ts.map +1 -0
  31. package/dist/reconcile/reconcile.ops.js +24 -0
  32. package/dist/reconcile/reconcile.ops.js.map +1 -0
  33. package/dist/reconcile/reconcile.types.d.ts +32 -0
  34. package/dist/reconcile/reconcile.types.d.ts.map +1 -0
  35. package/dist/{talkpilot/auditLogs/auditLogs.types.js → reconcile/reconcile.types.js} +1 -1
  36. package/dist/reconcile/reconcile.types.js.map +1 -0
  37. package/dist/talkpilot/calls/calls.constants.d.ts +1 -9
  38. package/dist/talkpilot/calls/calls.constants.d.ts.map +1 -1
  39. package/dist/talkpilot/calls/calls.constants.js +1 -9
  40. package/dist/talkpilot/calls/calls.constants.js.map +1 -1
  41. package/dist/talkpilot/calls/calls.getters.d.ts +1 -7
  42. package/dist/talkpilot/calls/calls.getters.d.ts.map +1 -1
  43. package/dist/talkpilot/calls/calls.getters.js +1 -181
  44. package/dist/talkpilot/calls/calls.getters.js.map +1 -1
  45. package/dist/talkpilot/calls/calls.types.d.ts +2 -35
  46. package/dist/talkpilot/calls/calls.types.d.ts.map +1 -1
  47. package/dist/talkpilot/clients/clients.getters.d.ts +0 -2
  48. package/dist/talkpilot/clients/clients.getters.d.ts.map +1 -1
  49. package/dist/talkpilot/clients/clients.getters.js +1 -15
  50. package/dist/talkpilot/clients/clients.getters.js.map +1 -1
  51. package/dist/talkpilot/clients/clients.types.d.ts +0 -21
  52. package/dist/talkpilot/clients/clients.types.d.ts.map +1 -1
  53. package/dist/talkpilot/clients/index.d.ts +0 -2
  54. package/dist/talkpilot/clients/index.d.ts.map +1 -1
  55. package/dist/talkpilot/clients/index.js +0 -2
  56. package/dist/talkpilot/clients/index.js.map +1 -1
  57. package/dist/talkpilot/index.d.ts +0 -1
  58. package/dist/talkpilot/index.d.ts.map +1 -1
  59. package/dist/talkpilot/index.js +0 -1
  60. package/dist/talkpilot/index.js.map +1 -1
  61. package/dist/talkpilot/phone_numbers/phone_numbers.getter.d.ts +1 -9
  62. package/dist/talkpilot/phone_numbers/phone_numbers.getter.d.ts.map +1 -1
  63. package/dist/talkpilot/phone_numbers/phone_numbers.getter.js +1 -66
  64. package/dist/talkpilot/phone_numbers/phone_numbers.getter.js.map +1 -1
  65. package/dist/talkpilot/phone_numbers/phone_numbers.types.d.ts +0 -5
  66. package/dist/talkpilot/phone_numbers/phone_numbers.types.d.ts.map +1 -1
  67. package/dist/test-utils/factories/index.d.ts +0 -2
  68. package/dist/test-utils/factories/index.d.ts.map +1 -1
  69. package/dist/test-utils/factories/index.js +0 -2
  70. package/dist/test-utils/factories/index.js.map +1 -1
  71. package/jest.config.js +20 -20
  72. package/package.json +46 -46
  73. package/src/__tests__/setup.ts +20 -20
  74. package/src/bulkWrite/__tests__/bulkWrite.spec.ts +65 -65
  75. package/src/bulkWrite/bulkWrite.ops.ts +45 -45
  76. package/src/bulkWrite/bulkWrite.types.ts +4 -4
  77. package/src/bulkWrite/index.ts +2 -2
  78. package/src/config.ts +9 -9
  79. package/src/configuration/index.ts +17 -17
  80. package/src/configuration/internalModels/index.ts +3 -3
  81. package/src/configuration/internalModels/internalModels.constants.ts +1 -1
  82. package/src/configuration/internalModels/internalModels.getters.ts +33 -33
  83. package/src/configuration/internalModels/internalModels.types.ts +12 -12
  84. package/src/configuration/models/__tests__/models.getters.spec.ts +67 -67
  85. package/src/configuration/models/index.ts +27 -27
  86. package/src/configuration/models/models.constants.ts +20 -15
  87. package/src/configuration/models/models.getters.ts +71 -71
  88. package/src/configuration/models/models.types.ts +80 -80
  89. package/src/configuration/mongodb-client.ts +62 -62
  90. package/src/configuration/prompts/index.ts +2 -2
  91. package/src/configuration/prompts/prompts.getters.ts +49 -49
  92. package/src/configuration/prompts/prompts.types.ts +11 -11
  93. package/src/connection.ts +81 -81
  94. package/src/index.ts +47 -47
  95. package/src/municipal/__tests__/validation.spec.ts +62 -62
  96. package/src/municipal/cities/cities.getters.ts +50 -50
  97. package/src/municipal/cities/cities.types.ts +11 -11
  98. package/src/municipal/cities/index.ts +2 -2
  99. package/src/municipal/departmentsSubjects/__tests__/departmentsSubjects.spec.ts +272 -272
  100. package/src/municipal/departmentsSubjects/departmentsSubjects.getters.ts +317 -317
  101. package/src/municipal/departmentsSubjects/departmentsSubjects.types.ts +73 -73
  102. package/src/municipal/departmentsSubjects/index.ts +9 -9
  103. package/src/municipal/index.ts +22 -22
  104. package/src/municipal/mongodb-client.ts +61 -61
  105. package/src/municipal/muniIssues/__tests__/muniIssues.setters.spec.ts +94 -94
  106. package/src/municipal/muniIssues/__tests__/muniIssues.setup.spec.ts +92 -92
  107. package/src/municipal/muniIssues/index.ts +17 -17
  108. package/src/municipal/muniIssues/muniIssues.constants.ts +18 -18
  109. package/src/municipal/muniIssues/muniIssues.getters.ts +24 -24
  110. package/src/municipal/muniIssues/muniIssues.schema.ts +66 -66
  111. package/src/municipal/muniIssues/muniIssues.setters.ts +24 -24
  112. package/src/municipal/muniIssues/muniIssues.setup.ts +65 -65
  113. package/src/municipal/muniIssues/muniIssues.types.ts +37 -37
  114. package/src/municipal/streets/__tests__/streets.spec.ts +253 -253
  115. package/src/municipal/streets/index.ts +2 -2
  116. package/src/municipal/streets/streets.getters.ts +140 -140
  117. package/src/municipal/streets/streets.types.ts +19 -19
  118. package/src/municipal/systemInstructions/__tests__/getters.spec.ts +113 -113
  119. package/src/municipal/systemInstructions/__tests__/setters.spec.ts +274 -274
  120. package/src/municipal/systemInstructions/index.ts +7 -7
  121. package/src/municipal/systemInstructions/instructions.getters.ts +57 -57
  122. package/src/municipal/systemInstructions/instructions.setters.ts +119 -119
  123. package/src/municipal/systemInstructions/instructions.types.ts +30 -30
  124. package/src/municipal/tickets/__tests__/tickets.getters.spec.ts +30 -30
  125. package/src/municipal/tickets/__tests__/tickets.statistics.spec.ts +99 -99
  126. package/src/municipal/tickets/index.ts +9 -9
  127. package/src/municipal/tickets/tickets.constants.ts +8 -8
  128. package/src/municipal/tickets/tickets.getters.ts +121 -121
  129. package/src/municipal/tickets/tickets.statistics.aggregation.ts +110 -110
  130. package/src/municipal/tickets/tickets.statistics.getters.ts +145 -145
  131. package/src/municipal/tickets/tickets.types.ts +54 -54
  132. package/src/municipal/utils/types.ts +11 -11
  133. package/src/talkpilot/__tests__/db.spec.ts +38 -38
  134. package/src/talkpilot/__tests__/mongodb-client.spec.ts +18 -18
  135. package/src/talkpilot/__tests__/validation.spec.ts +68 -68
  136. package/src/talkpilot/agents/__tests__/agents.getters.spec.ts +29 -29
  137. package/src/talkpilot/agents/agents.getters.ts +34 -34
  138. package/src/talkpilot/agents/agents.types.ts +14 -14
  139. package/src/talkpilot/agents/index.ts +2 -2
  140. package/src/talkpilot/backgroundToolResults/__tests__/backgroundToolResults.getters.spec.ts +147 -147
  141. package/src/talkpilot/backgroundToolResults/backgroundToolResults.getters.ts +65 -65
  142. package/src/talkpilot/backgroundToolResults/backgroundToolResults.types.ts +23 -23
  143. package/src/talkpilot/backgroundToolResults/index.ts +2 -2
  144. package/src/talkpilot/calls/__tests__/callStats.utils.spec.ts +128 -128
  145. package/src/talkpilot/calls/__tests__/calls.dashboard.spec.ts +229 -229
  146. package/src/talkpilot/calls/__tests__/calls.spec.ts +471 -471
  147. package/src/talkpilot/calls/__tests__/calls.statistics.spec.ts +483 -483
  148. package/src/talkpilot/calls/calls.constants.ts +49 -61
  149. package/src/talkpilot/calls/calls.getters.ts +1 -270
  150. package/src/talkpilot/calls/calls.statistics.getters.ts +668 -668
  151. package/src/talkpilot/calls/calls.statistics.types.ts +48 -48
  152. package/src/talkpilot/calls/calls.types.ts +2 -40
  153. package/src/talkpilot/calls/dashboard/calls.dashboard.ts +295 -295
  154. package/src/talkpilot/calls/dashboard/calls.dashboard.types.ts +57 -57
  155. package/src/talkpilot/calls/index.ts +6 -6
  156. package/src/talkpilot/clientAudioBuffers/__tests__/clientAudioBuffer.getters.spec.ts +160 -160
  157. package/src/talkpilot/clientAudioBuffers/clientAudioBuffer.getters.ts +117 -117
  158. package/src/talkpilot/clientAudioBuffers/clientsAudioBuffers.types.ts +25 -25
  159. package/src/talkpilot/clientAudioBuffers/index.ts +2 -2
  160. package/src/talkpilot/clients/__tests__/clients.quota.spec.ts +123 -123
  161. package/src/talkpilot/clients/clients.getters.ts +19 -32
  162. package/src/talkpilot/clients/clients.quota.getters.ts +119 -119
  163. package/src/talkpilot/clients/clients.quota.types.ts +27 -27
  164. package/src/talkpilot/clients/clients.types.ts +18 -37
  165. package/src/talkpilot/clients/index.ts +4 -6
  166. package/src/talkpilot/clientsConfig/__tests__/clientsConfig.getters.spec.ts +423 -423
  167. package/src/talkpilot/clientsConfig/__tests__/clientsConfig.spec.ts +212 -212
  168. package/src/talkpilot/clientsConfig/clientsConfig.constants.ts +2 -2
  169. package/src/talkpilot/clientsConfig/clientsConfig.getters.ts +247 -247
  170. package/src/talkpilot/clientsConfig/clientsConfig.types.ts +137 -137
  171. package/src/talkpilot/clientsConfig/index.ts +3 -3
  172. package/src/talkpilot/contextNotes/__tests__/contextNotes.getters.spec.ts +217 -217
  173. package/src/talkpilot/contextNotes/contextNotes.getters.ts +85 -85
  174. package/src/talkpilot/contextNotes/contextNotes.types.ts +20 -20
  175. package/src/talkpilot/contextNotes/index.ts +2 -2
  176. package/src/talkpilot/flows/__tests__/flows.schema.spec.ts +124 -124
  177. package/src/talkpilot/flows/flows.getter.ts +34 -34
  178. package/src/talkpilot/flows/flows.schema.ts +180 -180
  179. package/src/talkpilot/flows/flows.types.ts +211 -211
  180. package/src/talkpilot/flows/index.ts +7 -7
  181. package/src/talkpilot/groups/__tests__/groups.spec.ts +90 -90
  182. package/src/talkpilot/groups/__tests__/phone.utils.spec.ts +32 -32
  183. package/src/talkpilot/groups/groups.getters.ts +30 -30
  184. package/src/talkpilot/groups/groups.types.ts +29 -29
  185. package/src/talkpilot/groups/index.ts +3 -3
  186. package/src/talkpilot/groups/phone.utils.ts +46 -46
  187. package/src/talkpilot/index.ts +31 -32
  188. package/src/talkpilot/leads/index.ts +2 -2
  189. package/src/talkpilot/leads/leads.getter.ts +6 -6
  190. package/src/talkpilot/leads/leads.schema.ts +33 -33
  191. package/src/talkpilot/leads/leads.types.ts +20 -20
  192. package/src/talkpilot/mongodb-client.ts +78 -78
  193. package/src/talkpilot/phone_numbers/__tests__/phone_numbers.spec.ts +530 -774
  194. package/src/talkpilot/phone_numbers/index.ts +2 -2
  195. package/src/talkpilot/phone_numbers/phone_numbers.getter.ts +240 -324
  196. package/src/talkpilot/phone_numbers/phone_numbers.schema.ts +17 -17
  197. package/src/talkpilot/phone_numbers/phone_numbers.types.ts +30 -36
  198. package/src/talkpilot/phone_numbers/phone_numbers.utils.ts +9 -9
  199. package/src/talkpilot/plans/__tests__/plans.spec.ts +70 -70
  200. package/src/talkpilot/plans/index.ts +2 -2
  201. package/src/talkpilot/plans/plans.getters.ts +132 -132
  202. package/src/talkpilot/plans/plans.types.ts +89 -89
  203. package/src/talkpilot/products/__tests__/products.getters.spec.ts +44 -44
  204. package/src/talkpilot/products/index.ts +2 -2
  205. package/src/talkpilot/products/products.getters.ts +12 -12
  206. package/src/talkpilot/products/products.types.ts +9 -9
  207. package/src/talkpilot/results/index.ts +7 -7
  208. package/src/talkpilot/results/results.getter.ts +39 -39
  209. package/src/talkpilot/results/results.schema.ts +25 -25
  210. package/src/talkpilot/results/results.types.ts +34 -34
  211. package/src/talkpilot/retry_analyze/__tests__/retryAnalyze.getters.spec.ts +156 -156
  212. package/src/talkpilot/retry_analyze/index.ts +2 -2
  213. package/src/talkpilot/retry_analyze/retryAnalyze.getters.ts +84 -84
  214. package/src/talkpilot/retry_analyze/retryAnalyze.types.ts +13 -13
  215. package/src/talkpilot/sessions/__tests__/sessions.spec.ts +147 -147
  216. package/src/talkpilot/sessions/index.ts +2 -2
  217. package/src/talkpilot/sessions/sessions.getter.ts +92 -92
  218. package/src/talkpilot/sessions/sessions.schema.ts +34 -34
  219. package/src/talkpilot/sessions/sessions.types.ts +30 -30
  220. package/src/talkpilot/subscriptions/__tests__/subscriptions.getters.utils.spec.ts +45 -45
  221. package/src/talkpilot/subscriptions/index.ts +3 -3
  222. package/src/talkpilot/subscriptions/subscriptions.getters.ts +146 -146
  223. package/src/talkpilot/subscriptions/subscriptions.getters.utils.ts +33 -33
  224. package/src/talkpilot/subscriptions/subscriptions.types.ts +66 -66
  225. package/src/talkpilot/utils/__tests__/query.utils.spec.ts +49 -49
  226. package/src/talkpilot/utils/query.utils.ts +21 -21
  227. package/src/test-utils/db-utils.ts +33 -33
  228. package/src/test-utils/factories/index.ts +18 -20
  229. package/src/test-utils/factories/municipal/cities.ts +16 -16
  230. package/src/test-utils/factories/municipal/departmentsSubjects.ts +37 -37
  231. package/src/test-utils/factories/municipal/muniIssues.ts +32 -32
  232. package/src/test-utils/factories/municipal/streets.ts +22 -22
  233. package/src/test-utils/factories/municipal/tickets.ts +39 -39
  234. package/src/test-utils/factories/talkpilot/agents.ts +19 -19
  235. package/src/test-utils/factories/talkpilot/calls.ts +37 -37
  236. package/src/test-utils/factories/talkpilot/clientAudioBuffers.ts +20 -20
  237. package/src/test-utils/factories/talkpilot/clientsConfig.ts +18 -18
  238. package/src/test-utils/factories/talkpilot/contextNotes.ts +40 -40
  239. package/src/test-utils/factories/talkpilot/flows.ts +33 -33
  240. package/src/test-utils/factories/talkpilot/groups.ts +33 -33
  241. package/src/test-utils/factories/talkpilot/phone_numbers.ts +22 -22
  242. package/src/test-utils/factories/talkpilot/sessions.ts +35 -35
  243. package/src/test-utils/factories/websitalk/knowledgeDocuments.ts +29 -29
  244. package/src/test-utils/factories/websitalk/scanResources.ts +26 -26
  245. package/src/test-utils/factories/websitalk/scans.ts +30 -30
  246. package/src/test-utils/factories/websitalk/websiteUrls.ts +17 -17
  247. package/src/utils/date.utils.ts +126 -126
  248. package/src/utils/shared.types.ts +4 -4
  249. package/src/utils/validation.ts +23 -23
  250. package/src/websitalk/index.ts +18 -18
  251. package/src/websitalk/knowledgeDocuments/__tests__/knowledgeDocuments.spec.ts +238 -238
  252. package/src/websitalk/knowledgeDocuments/index.ts +3 -3
  253. package/src/websitalk/knowledgeDocuments/knowledgeDocuments.constants.ts +26 -26
  254. package/src/websitalk/knowledgeDocuments/knowledgeDocuments.getters.ts +95 -95
  255. package/src/websitalk/knowledgeDocuments/knowledgeDocuments.types.ts +75 -75
  256. package/src/websitalk/mongodb-client.ts +61 -61
  257. package/src/websitalk/scanResources/__tests__/scanResources.spec.ts +267 -267
  258. package/src/websitalk/scanResources/index.ts +4 -4
  259. package/src/websitalk/scanResources/scanResources.constants.ts +60 -60
  260. package/src/websitalk/scanResources/scanResources.getters.ts +128 -128
  261. package/src/websitalk/scanResources/scanResources.types.ts +105 -105
  262. package/src/websitalk/scanResources/scanResources.utils.ts +31 -31
  263. package/src/websitalk/scans/__tests__/scans.spec.ts +362 -362
  264. package/src/websitalk/scans/index.ts +4 -4
  265. package/src/websitalk/scans/scans.constants.ts +18 -18
  266. package/src/websitalk/scans/scans.getters.ts +172 -172
  267. package/src/websitalk/scans/scans.types.ts +58 -58
  268. package/src/websitalk/scans/scans.utils.ts +5 -5
  269. package/src/websitalk/websiteUrls/__tests__/websiteUrls.spec.ts +77 -77
  270. package/src/websitalk/websiteUrls/index.ts +2 -2
  271. package/src/websitalk/websiteUrls/websiteUrls.getters.ts +65 -65
  272. package/src/websitalk/websiteUrls/websiteUrls.types.ts +13 -13
  273. package/tsconfig.json +23 -23
  274. package/dist/talkpilot/auditLogs/auditLogs.getters.d.ts +0 -8
  275. package/dist/talkpilot/auditLogs/auditLogs.getters.d.ts.map +0 -1
  276. package/dist/talkpilot/auditLogs/auditLogs.getters.js +0 -26
  277. package/dist/talkpilot/auditLogs/auditLogs.getters.js.map +0 -1
  278. package/dist/talkpilot/auditLogs/auditLogs.setters.d.ts +0 -3
  279. package/dist/talkpilot/auditLogs/auditLogs.setters.d.ts.map +0 -1
  280. package/dist/talkpilot/auditLogs/auditLogs.setters.js +0 -9
  281. package/dist/talkpilot/auditLogs/auditLogs.setters.js.map +0 -1
  282. package/dist/talkpilot/auditLogs/auditLogs.types.d.ts +0 -11
  283. package/dist/talkpilot/auditLogs/auditLogs.types.d.ts.map +0 -1
  284. package/dist/talkpilot/auditLogs/auditLogs.types.js.map +0 -1
  285. package/dist/talkpilot/auditLogs/index.d.ts +0 -3
  286. package/dist/talkpilot/auditLogs/index.d.ts.map +0 -1
  287. package/dist/talkpilot/auditLogs/index.js.map +0 -1
  288. package/dist/talkpilot/clientDeletionLogs/clientDeletionLogs.getters.d.ts +0 -4
  289. package/dist/talkpilot/clientDeletionLogs/clientDeletionLogs.getters.d.ts.map +0 -1
  290. package/dist/talkpilot/clientDeletionLogs/clientDeletionLogs.getters.js +0 -9
  291. package/dist/talkpilot/clientDeletionLogs/clientDeletionLogs.getters.js.map +0 -1
  292. package/dist/talkpilot/clientDeletionLogs/clientDeletionLogs.setters.d.ts +0 -3
  293. package/dist/talkpilot/clientDeletionLogs/clientDeletionLogs.setters.d.ts.map +0 -1
  294. package/dist/talkpilot/clientDeletionLogs/clientDeletionLogs.setters.js +0 -9
  295. package/dist/talkpilot/clientDeletionLogs/clientDeletionLogs.setters.js.map +0 -1
  296. package/dist/talkpilot/clientDeletionLogs/clientDeletionLogs.types.d.ts +0 -10
  297. package/dist/talkpilot/clientDeletionLogs/clientDeletionLogs.types.d.ts.map +0 -1
  298. package/dist/talkpilot/clientDeletionLogs/clientDeletionLogs.types.js +0 -3
  299. package/dist/talkpilot/clientDeletionLogs/clientDeletionLogs.types.js.map +0 -1
  300. package/dist/talkpilot/clientDeletionLogs/index.d.ts +0 -4
  301. package/dist/talkpilot/clientDeletionLogs/index.d.ts.map +0 -1
  302. package/dist/talkpilot/clientDeletionLogs/index.js +0 -20
  303. package/dist/talkpilot/clientDeletionLogs/index.js.map +0 -1
  304. package/dist/talkpilot/clients/clients.constants.d.ts +0 -3
  305. package/dist/talkpilot/clients/clients.constants.d.ts.map +0 -1
  306. package/dist/talkpilot/clients/clients.constants.js +0 -6
  307. package/dist/talkpilot/clients/clients.constants.js.map +0 -1
  308. package/dist/talkpilot/clients/clients.lifecycle.d.ts +0 -10
  309. package/dist/talkpilot/clients/clients.lifecycle.d.ts.map +0 -1
  310. package/dist/talkpilot/clients/clients.lifecycle.js +0 -95
  311. package/dist/talkpilot/clients/clients.lifecycle.js.map +0 -1
  312. package/dist/talkpilot/results/results.constants.d.ts +0 -4
  313. package/dist/talkpilot/results/results.constants.d.ts.map +0 -1
  314. package/dist/talkpilot/results/results.constants.js +0 -10
  315. package/dist/talkpilot/results/results.constants.js.map +0 -1
  316. package/dist/talkpilot/results/results.statistics.getters.d.ts +0 -12
  317. package/dist/talkpilot/results/results.statistics.getters.d.ts.map +0 -1
  318. package/dist/talkpilot/results/results.statistics.getters.js +0 -258
  319. package/dist/talkpilot/results/results.statistics.getters.js.map +0 -1
  320. package/dist/talkpilot/results/results.statistics.types.d.ts +0 -22
  321. package/dist/talkpilot/results/results.statistics.types.d.ts.map +0 -1
  322. package/dist/talkpilot/results/results.statistics.types.js +0 -3
  323. package/dist/talkpilot/results/results.statistics.types.js.map +0 -1
  324. package/dist/test-utils/factories/talkpilot/clients.d.ts +0 -14
  325. package/dist/test-utils/factories/talkpilot/clients.d.ts.map +0 -1
  326. package/dist/test-utils/factories/talkpilot/clients.js +0 -19
  327. package/dist/test-utils/factories/talkpilot/clients.js.map +0 -1
  328. package/dist/test-utils/factories/talkpilot/results.d.ts +0 -16
  329. package/dist/test-utils/factories/talkpilot/results.d.ts.map +0 -1
  330. package/dist/test-utils/factories/talkpilot/results.js +0 -40
  331. package/dist/test-utils/factories/talkpilot/results.js.map +0 -1
  332. package/src/talkpilot/auditLogs/__tests__/auditLogs.spec.ts +0 -91
  333. package/src/talkpilot/auditLogs/auditLogs.getters.ts +0 -26
  334. package/src/talkpilot/auditLogs/auditLogs.types.ts +0 -12
  335. package/src/talkpilot/auditLogs/index.ts +0 -2
  336. package/src/talkpilot/calls/__tests__/calls.statistics.getters.spec.ts +0 -374
  337. package/src/talkpilot/clients/__tests__/clients.getters.spec.ts +0 -51
  338. package/src/talkpilot/clients/__tests__/clients.lifecycle.spec.ts +0 -166
  339. package/src/talkpilot/clients/clients.constants.ts +0 -2
  340. package/src/talkpilot/clients/clients.lifecycle.ts +0 -116
  341. package/src/test-utils/factories/talkpilot/clients.ts +0 -21
  342. package/src/test-utils/factories/talkpilot/results.ts +0 -43
@@ -0,0 +1 @@
1
+ {"version":3,"file":"departmentsSubjects.setters.d.ts","sourceRoot":"","sources":["../../../src/municipal/departmentsSubjects/departmentsSubjects.setters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAGhE;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,GACvC,YAAY,qBAAqB,CAAC,iBAAiB,CAAC,EAAE,EACtD,UAAU,gBAAgB,KACzB,OAAO,CAAC,eAAe,CAEzB,CAAC"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.bulkWriteDepartmentsSubjects = void 0;
4
+ const departmentsSubjects_getters_1 = require("./departmentsSubjects.getters");
5
+ /**
6
+ * Generic batch write for the departmentsSubjects collection — a thin passthrough to the
7
+ * driver's bulkWrite, with no diffing/key-building/business logic. `operations` must be
8
+ * non-empty (the driver throws on an empty batch). Errors (including partial failures under
9
+ * `{ ordered: false }`) propagate unchanged, so callers can still catch `MongoBulkWriteError`.
10
+ */
11
+ const bulkWriteDepartmentsSubjects = async (operations, options) => {
12
+ return (0, departmentsSubjects_getters_1.getDepartmentsSubjectsCollection)().bulkWrite(operations, options);
13
+ };
14
+ exports.bulkWriteDepartmentsSubjects = bulkWriteDepartmentsSubjects;
15
+ //# sourceMappingURL=departmentsSubjects.setters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"departmentsSubjects.setters.js","sourceRoot":"","sources":["../../../src/municipal/departmentsSubjects/departmentsSubjects.setters.ts"],"names":[],"mappings":";;;AAEA,+EAAiF;AAEjF;;;;;GAKG;AACI,MAAM,4BAA4B,GAAG,KAAK,EAC/C,UAAsD,EACtD,OAA0B,EACA,EAAE;IAC5B,OAAO,IAAA,8DAAgC,GAAE,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC3E,CAAC,CAAC;AALW,QAAA,4BAA4B,gCAKvC"}
@@ -0,0 +1,10 @@
1
+ import { AnyBulkWriteOperation, BulkWriteOptions, BulkWriteResult } from "mongodb";
2
+ import { Street } from "./streets.types";
3
+ /**
4
+ * Generic batch write for the streets collection — a thin passthrough to the driver's
5
+ * bulkWrite, with no diffing/key-building/business logic. `operations` must be non-empty
6
+ * (the driver throws on an empty batch). Errors (including partial failures under
7
+ * `{ ordered: false }`) propagate unchanged, so callers can still catch `MongoBulkWriteError`.
8
+ */
9
+ export declare const bulkWriteStreets: (operations: AnyBulkWriteOperation<Street>[], options?: BulkWriteOptions) => Promise<BulkWriteResult>;
10
+ //# sourceMappingURL=streets.setters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streets.setters.d.ts","sourceRoot":"","sources":["../../../src/municipal/streets/streets.setters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AACnF,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAGzC;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAC3B,YAAY,qBAAqB,CAAC,MAAM,CAAC,EAAE,EAC3C,UAAU,gBAAgB,KACzB,OAAO,CAAC,eAAe,CAEzB,CAAC"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.bulkWriteStreets = void 0;
4
+ const streets_getters_1 = require("./streets.getters");
5
+ /**
6
+ * Generic batch write for the streets collection — a thin passthrough to the driver's
7
+ * bulkWrite, with no diffing/key-building/business logic. `operations` must be non-empty
8
+ * (the driver throws on an empty batch). Errors (including partial failures under
9
+ * `{ ordered: false }`) propagate unchanged, so callers can still catch `MongoBulkWriteError`.
10
+ */
11
+ const bulkWriteStreets = async (operations, options) => {
12
+ return (0, streets_getters_1.getStreetsCollection)().bulkWrite(operations, options);
13
+ };
14
+ exports.bulkWriteStreets = bulkWriteStreets;
15
+ //# sourceMappingURL=streets.setters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streets.setters.js","sourceRoot":"","sources":["../../../src/municipal/streets/streets.setters.ts"],"names":[],"mappings":";;;AAEA,uDAAyD;AAEzD;;;;;GAKG;AACI,MAAM,gBAAgB,GAAG,KAAK,EACnC,UAA2C,EAC3C,OAA0B,EACA,EAAE;IAC5B,OAAO,IAAA,sCAAoB,GAAE,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC/D,CAAC,CAAC;AALW,QAAA,gBAAgB,oBAK3B"}
@@ -0,0 +1,5 @@
1
+ export * from "./reconcile.types";
2
+ export * from "./reconcile.ops";
3
+ export * from "./reconcile.diff";
4
+ export * from "./reconcile.execute";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reconcile/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC"}
@@ -14,6 +14,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./auditLogs.types"), exports);
18
- __exportStar(require("./auditLogs.getters"), exports);
17
+ __exportStar(require("./reconcile.types"), exports);
18
+ __exportStar(require("./reconcile.ops"), exports);
19
+ __exportStar(require("./reconcile.diff"), exports);
20
+ __exportStar(require("./reconcile.execute"), exports);
19
21
  //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/reconcile/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,kDAAgC;AAChC,mDAAiC;AACjC,sDAAoC"}
@@ -0,0 +1,4 @@
1
+ import { Document } from "mongodb";
2
+ import { ReconcileConfig, ReconcileDiffResult } from "./reconcile.types";
3
+ export declare function computeReconcileDiff<TSource, TDb extends Document, TKey extends string | number>(config: ReconcileConfig<TSource, TDb, TKey>, now?: Date): ReconcileDiffResult<TDb>;
4
+ //# sourceMappingURL=reconcile.diff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile.diff.d.ts","sourceRoot":"","sources":["../../src/reconcile/reconcile.diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAEzE,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,GAAG,SAAS,QAAQ,EAAE,IAAI,SAAS,MAAM,GAAG,MAAM,EAC9F,MAAM,EAAE,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EAC3C,GAAG,GAAE,IAAiB,GACrB,mBAAmB,CAAC,GAAG,CAAC,CA8C1B"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.computeReconcileDiff = computeReconcileDiff;
4
+ function computeReconcileDiff(config, now = new Date()) {
5
+ const { source, dbRecords, getSourceKey, getDbKey, buildInsertOp, buildUpdateOp, buildDeactivateOp, shouldDeactivate = () => true, } = config;
6
+ const dbByKey = new Map(dbRecords.map((dbRecord) => [getDbKey(dbRecord), dbRecord]));
7
+ const sourceKeys = new Set();
8
+ const bulkOps = [];
9
+ const counts = { inserted: 0, updated: 0, deactivated: 0, exists: 0 };
10
+ for (const sourceRecord of source) {
11
+ const key = getSourceKey(sourceRecord);
12
+ sourceKeys.add(key);
13
+ const dbRecord = dbByKey.get(key);
14
+ if (!dbRecord) {
15
+ bulkOps.push(buildInsertOp(sourceRecord, now));
16
+ counts.inserted++;
17
+ continue;
18
+ }
19
+ const updateOp = buildUpdateOp(sourceRecord, dbRecord, now);
20
+ if (updateOp) {
21
+ bulkOps.push(updateOp);
22
+ counts.updated++;
23
+ }
24
+ else {
25
+ counts.exists++;
26
+ }
27
+ }
28
+ for (const dbRecord of dbRecords) {
29
+ if (!sourceKeys.has(getDbKey(dbRecord)) && shouldDeactivate(dbRecord)) {
30
+ bulkOps.push(buildDeactivateOp(dbRecord, now));
31
+ counts.deactivated++;
32
+ }
33
+ }
34
+ return { bulkOps, counts };
35
+ }
36
+ //# sourceMappingURL=reconcile.diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile.diff.js","sourceRoot":"","sources":["../../src/reconcile/reconcile.diff.ts"],"names":[],"mappings":";;AAGA,oDAiDC;AAjDD,SAAgB,oBAAoB,CAClC,MAA2C,EAC3C,MAAY,IAAI,IAAI,EAAE;IAEtB,MAAM,EACJ,MAAM,EACN,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,gBAAgB,GAAG,GAAG,EAAE,CAAC,IAAI,GAC9B,GAAG,MAAM,CAAC;IAEX,MAAM,OAAO,GAAG,IAAI,GAAG,CAAY,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAChG,MAAM,UAAU,GAAG,IAAI,GAAG,EAAQ,CAAC;IAEnC,MAAM,OAAO,GAAwC,EAAE,CAAC;IACxD,MAAM,MAAM,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IAEtE,KAAK,MAAM,YAAY,IAAI,MAAM,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;QACvC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAElC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,QAAQ,EAAE,CAAC;YAClB,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,aAAa,CAAC,YAAY,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC5D,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvB,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtE,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { BulkWriteOptions, Collection, Document } from "mongodb";
2
+ import { BulkWriteOp } from "./reconcile.types";
3
+ export interface ExecuteReconcileBulkWriteResult {
4
+ errors: string[];
5
+ }
6
+ export declare function executeReconcileBulkWrite<TDb extends Document>(collection: Collection<TDb>, bulkOps: BulkWriteOp<TDb>[], options?: BulkWriteOptions): Promise<ExecuteReconcileBulkWriteResult>;
7
+ //# sourceMappingURL=reconcile.execute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile.execute.d.ts","sourceRoot":"","sources":["../../src/reconcile/reconcile.execute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,QAAQ,EAAuB,MAAM,SAAS,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,WAAW,+BAA+B;IAC9C,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAsB,yBAAyB,CAAC,GAAG,SAAS,QAAQ,EAClE,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,EAC3B,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,EAC3B,OAAO,GAAE,gBAAqC,GAC7C,OAAO,CAAC,+BAA+B,CAAC,CAa1C"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.executeReconcileBulkWrite = executeReconcileBulkWrite;
4
+ const mongodb_1 = require("mongodb");
5
+ async function executeReconcileBulkWrite(collection, bulkOps, options = { ordered: false }) {
6
+ if (bulkOps.length === 0)
7
+ return { errors: [] };
8
+ try {
9
+ await collection.bulkWrite(bulkOps, options);
10
+ return { errors: [] };
11
+ }
12
+ catch (err) {
13
+ if (err instanceof mongodb_1.MongoBulkWriteError) {
14
+ const writeErrors = [err.writeErrors].flat();
15
+ return { errors: writeErrors.map((writeError) => `Write error: ${writeError.errmsg}`) };
16
+ }
17
+ return { errors: [err instanceof Error ? err.message : String(err)] };
18
+ }
19
+ }
20
+ //# sourceMappingURL=reconcile.execute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile.execute.js","sourceRoot":"","sources":["../../src/reconcile/reconcile.execute.ts"],"names":[],"mappings":";;AAOA,8DAiBC;AAxBD,qCAAsF;AAO/E,KAAK,UAAU,yBAAyB,CAC7C,UAA2B,EAC3B,OAA2B,EAC3B,UAA4B,EAAE,OAAO,EAAE,KAAK,EAAE;IAE9C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAEhD,IAAI,CAAC;QACH,MAAM,UAAU,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7C,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,6BAAmB,EAAE,CAAC;YACvC,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7C,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,gBAAgB,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;QAC1F,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;IACxE,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { Document, Filter } from "mongodb";
2
+ import { BulkWriteOp } from "./reconcile.types";
3
+ /**
4
+ * updateOne with a plain $set — e.g. a deactivation:
5
+ * buildSetOp({ _id }, { isActive: false, updatedAt: now })
6
+ */
7
+ export declare function buildSetOp<T extends Document>(filter: Filter<T>, setFields: Partial<T>): BulkWriteOp<T>;
8
+ /**
9
+ * updateOne with $set + $setOnInsert + upsert:true.
10
+ */
11
+ export declare function buildUpsertOp<T extends Document>(filter: Filter<T>, setFields: Partial<T>, setOnInsertFields?: Partial<T>): BulkWriteOp<T>;
12
+ //# sourceMappingURL=reconcile.ops.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile.ops.d.ts","sourceRoot":"","sources":["../../src/reconcile/reconcile.ops.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAEvG;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,QAAQ,EAC9C,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EACjB,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,EACrB,iBAAiB,GAAE,OAAO,CAAC,CAAC,CAAM,GACjC,WAAW,CAAC,CAAC,CAAC,CAQhB"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildSetOp = buildSetOp;
4
+ exports.buildUpsertOp = buildUpsertOp;
5
+ /**
6
+ * updateOne with a plain $set — e.g. a deactivation:
7
+ * buildSetOp({ _id }, { isActive: false, updatedAt: now })
8
+ */
9
+ function buildSetOp(filter, setFields) {
10
+ return { updateOne: { filter, update: { $set: setFields } } };
11
+ }
12
+ /**
13
+ * updateOne with $set + $setOnInsert + upsert:true.
14
+ */
15
+ function buildUpsertOp(filter, setFields, setOnInsertFields = {}) {
16
+ return {
17
+ updateOne: {
18
+ filter,
19
+ update: { $set: setFields, $setOnInsert: setOnInsertFields },
20
+ upsert: true,
21
+ },
22
+ };
23
+ }
24
+ //# sourceMappingURL=reconcile.ops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile.ops.js","sourceRoot":"","sources":["../../src/reconcile/reconcile.ops.ts"],"names":[],"mappings":";;AAOA,gCAEC;AAKD,sCAYC;AAvBD;;;GAGG;AACH,SAAgB,UAAU,CAAqB,MAAiB,EAAE,SAAqB;IACrF,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;AAChE,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa,CAC3B,MAAiB,EACjB,SAAqB,EACrB,oBAAgC,EAAE;IAElC,OAAO;QACL,SAAS,EAAE;YACT,MAAM;YACN,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,iBAAiB,EAAE;YAC5D,MAAM,EAAE,IAAI;SACb;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { AnyBulkWriteOperation, Document } from "mongodb";
2
+ export type BulkWriteOp<T extends Document> = AnyBulkWriteOperation<T>;
3
+ export interface ReconcileCounts {
4
+ inserted: number;
5
+ updated: number;
6
+ deactivated: number;
7
+ exists: number;
8
+ }
9
+ export interface ReconcileDiffResult<TDb extends Document> {
10
+ bulkOps: BulkWriteOp<TDb>[];
11
+ counts: ReconcileCounts;
12
+ }
13
+ export interface ReconcileConfig<TSource, TDb extends Document, TKey extends string | number> {
14
+ source: TSource[];
15
+ dbRecords: TDb[];
16
+ getSourceKey: (source: TSource) => TKey;
17
+ getDbKey: (dbRecord: TDb) => TKey;
18
+ buildInsertOp: (source: TSource, now: Date) => BulkWriteOp<TDb>;
19
+ /** Return null when unchanged — counted as `exists`, no op emitted. */
20
+ buildUpdateOp: (source: TSource, existing: TDb, now: Date) => BulkWriteOp<TDb> | null;
21
+ /**
22
+ * Called for every dbRecord missing from source (and passing shouldDeactivate).
23
+ * The caller decides the op shape entirely — typically via buildSetOp.
24
+ */
25
+ buildDeactivateOp: (dbRecord: TDb, now: Date) => BulkWriteOp<TDb>;
26
+ /**
27
+ * Whether a missing dbRecord should even be considered for deactivation.
28
+ * Defaults to always true — core-db has no opinion on what "already inactive" means.
29
+ */
30
+ shouldDeactivate?: (dbRecord: TDb) => boolean;
31
+ }
32
+ //# sourceMappingURL=reconcile.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile.types.d.ts","sourceRoot":"","sources":["../../src/reconcile/reconcile.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE1D,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,QAAQ,IAAI,qBAAqB,CAAC,CAAC,CAAC,CAAC;AAEvE,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB,CAAC,GAAG,SAAS,QAAQ;IACvD,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;IAC5B,MAAM,EAAE,eAAe,CAAC;CACzB;AAED,MAAM,WAAW,eAAe,CAAC,OAAO,EAAE,GAAG,SAAS,QAAQ,EAAE,IAAI,SAAS,MAAM,GAAG,MAAM;IAC1F,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,SAAS,EAAE,GAAG,EAAE,CAAC;IACjB,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,QAAQ,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,IAAI,CAAC;IAClC,aAAa,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,KAAK,WAAW,CAAC,GAAG,CAAC,CAAC;IAChE,uEAAuE;IACvE,aAAa,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IACtF;;;OAGG;IACH,iBAAiB,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,WAAW,CAAC,GAAG,CAAC,CAAC;IAClE;;;OAGG;IACH,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,OAAO,CAAC;CAC/C"}
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=auditLogs.types.js.map
3
+ //# sourceMappingURL=reconcile.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile.types.js","sourceRoot":"","sources":["../../src/reconcile/reconcile.types.ts"],"names":[],"mappings":""}
@@ -6,12 +6,6 @@ export declare const CONFERENCE_ROLE_SUPERVISOR: "supervisor";
6
6
  export declare const IN_CALL_STATUSES: readonly ["in-progress", "answered"];
7
7
  /** Terminal Twilio call statuses — no further status callbacks expected. */
8
8
  export declare const FINAL_STATUSES: readonly ["no-answer", "completed", "busy", "failed", "canceled"];
9
- /** sessionId used for calls that arrived without an existing session (incoming calls). */
10
- export declare const INCOMING_SESSION_ID = "incomingCall";
11
- /** Twilio call statuses considered "currently active" for the live calls summary. */
12
- export declare const ACTIVE_STATUSES: string[];
13
- /** Lookback window for the "active calls right now" summary. */
14
- export declare const ACTIVE_CALLS_WINDOW_MS: number;
15
9
  /** Hours in a single day. */
16
10
  export declare const HOURS_PER_DAY = 24;
17
11
  /** Max execution time (ms) for calls statistics aggregations. */
@@ -37,7 +31,5 @@ export declare const CallStatusValues: {
37
31
  readonly Failed: "failed";
38
32
  readonly Canceled: "canceled";
39
33
  };
40
- export declare const ALL_CALL_STATUSES: ("failed" | "in-progress" | "answered" | "no-answer" | "completed" | "busy" | "canceled" | "initiated" | "ringing")[];
41
- /** All statuses shown in the breakdown tables — kept separate so CallStatusValues stays untouched. */
42
- export declare const ALL_STATUSES_FOR_BREAKDOWN: readonly [...("failed" | "in-progress" | "answered" | "no-answer" | "completed" | "busy" | "canceled" | "initiated" | "ringing")[], "queued"];
34
+ export declare const ALL_CALL_STATUSES: ("in-progress" | "answered" | "no-answer" | "completed" | "busy" | "failed" | "canceled" | "initiated" | "ringing")[];
43
35
  //# sourceMappingURL=calls.constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"calls.constants.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/calls/calls.constants.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,eAAO,MAAM,wBAAwB,EAAG,UAAmB,CAAC;AAE5D,gDAAgD;AAChD,eAAO,MAAM,0BAA0B,EAAG,YAAqB,CAAC;AAEhE,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,sCAAuC,CAAC;AAErE,4EAA4E;AAC5E,eAAO,MAAM,cAAc,mEAMjB,CAAC;AAEX,0FAA0F;AAC1F,eAAO,MAAM,mBAAmB,iBAAiB,CAAC;AAElD,qFAAqF;AACrF,eAAO,MAAM,eAAe,UAAkB,CAAC;AAE/C,gEAAgE;AAChE,eAAO,MAAM,sBAAsB,QAAqB,CAAC;AAEzD,6BAA6B;AAC7B,eAAO,MAAM,aAAa,KAAK,CAAC;AAEhC,iEAAiE;AACjE,eAAO,MAAM,iBAAiB,QAAS,CAAC;AAExC;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAC/C,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAE9C,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAC9C,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAEhD,eAAO,MAAM,gBAAgB;;;;;;;;;;CAUnB,CAAC;AAEX,eAAO,MAAM,iBAAiB,uHAAkC,CAAC;AAEjE,sGAAsG;AACtG,eAAO,MAAM,0BAA0B,+IAA4C,CAAC"}
1
+ {"version":3,"file":"calls.constants.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/calls/calls.constants.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,eAAO,MAAM,wBAAwB,EAAG,UAAmB,CAAC;AAE5D,gDAAgD;AAChD,eAAO,MAAM,0BAA0B,EAAG,YAAqB,CAAC;AAEhE,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,sCAAuC,CAAC;AAErE,4EAA4E;AAC5E,eAAO,MAAM,cAAc,mEAMjB,CAAC;AAEX,6BAA6B;AAC7B,eAAO,MAAM,aAAa,KAAK,CAAC;AAEhC,iEAAiE;AACjE,eAAO,MAAM,iBAAiB,QAAS,CAAC;AAExC;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAC/C,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAE9C,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAC9C,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAEhD,eAAO,MAAM,gBAAgB;;;;;;;;;;CAUnB,CAAC;AAEX,eAAO,MAAM,iBAAiB,uHAAkC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ALL_STATUSES_FOR_BREAKDOWN = exports.ALL_CALL_STATUSES = exports.CallStatusValues = exports.TOOL_EXECUTIONS_DEFAULT_LIMIT = exports.TOOL_EXECUTIONS_DEFAULT_SKIP = exports.TREND_WEEK_BUCKET_MIN_MONTHS = exports.TREND_MONTH_BUCKET_MIN_MONTHS = exports.STATS_MAX_TIME_MS = exports.HOURS_PER_DAY = exports.ACTIVE_CALLS_WINDOW_MS = exports.ACTIVE_STATUSES = exports.INCOMING_SESSION_ID = exports.FINAL_STATUSES = exports.IN_CALL_STATUSES = exports.CONFERENCE_ROLE_SUPERVISOR = exports.CONFERENCE_ROLE_CUSTOMER = void 0;
3
+ exports.ALL_CALL_STATUSES = exports.CallStatusValues = exports.TOOL_EXECUTIONS_DEFAULT_LIMIT = exports.TOOL_EXECUTIONS_DEFAULT_SKIP = exports.TREND_WEEK_BUCKET_MIN_MONTHS = exports.TREND_MONTH_BUCKET_MIN_MONTHS = exports.STATS_MAX_TIME_MS = exports.HOURS_PER_DAY = exports.FINAL_STATUSES = exports.IN_CALL_STATUSES = exports.CONFERENCE_ROLE_SUPERVISOR = exports.CONFERENCE_ROLE_CUSTOMER = void 0;
4
4
  /** Customer role within a conference call. */
5
5
  exports.CONFERENCE_ROLE_CUSTOMER = "customer";
6
6
  /** Supervisor role within a conference call. */
@@ -15,12 +15,6 @@ exports.FINAL_STATUSES = [
15
15
  "failed",
16
16
  "canceled",
17
17
  ];
18
- /** sessionId used for calls that arrived without an existing session (incoming calls). */
19
- exports.INCOMING_SESSION_ID = "incomingCall";
20
- /** Twilio call statuses considered "currently active" for the live calls summary. */
21
- exports.ACTIVE_STATUSES = ["in-progress"];
22
- /** Lookback window for the "active calls right now" summary. */
23
- exports.ACTIVE_CALLS_WINDOW_MS = 2 * 60 * 60 * 1000;
24
18
  /** Hours in a single day. */
25
19
  exports.HOURS_PER_DAY = 24;
26
20
  /** Max execution time (ms) for calls statistics aggregations. */
@@ -47,6 +41,4 @@ exports.CallStatusValues = {
47
41
  Canceled: "canceled",
48
42
  };
49
43
  exports.ALL_CALL_STATUSES = Object.values(exports.CallStatusValues);
50
- /** All statuses shown in the breakdown tables — kept separate so CallStatusValues stays untouched. */
51
- exports.ALL_STATUSES_FOR_BREAKDOWN = [...exports.ALL_CALL_STATUSES, "queued"];
52
44
  //# sourceMappingURL=calls.constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"calls.constants.js","sourceRoot":"","sources":["../../../src/talkpilot/calls/calls.constants.ts"],"names":[],"mappings":";;;AAAA,8CAA8C;AACjC,QAAA,wBAAwB,GAAG,UAAmB,CAAC;AAE5D,gDAAgD;AACnC,QAAA,0BAA0B,GAAG,YAAqB,CAAC;AAEhE,wEAAwE;AAC3D,QAAA,gBAAgB,GAAG,CAAC,aAAa,EAAE,UAAU,CAAU,CAAC;AAErE,4EAA4E;AAC/D,QAAA,cAAc,GAAG;IAC5B,WAAW;IACX,WAAW;IACX,MAAM;IACN,QAAQ;IACR,UAAU;CACF,CAAC;AAEX,0FAA0F;AAC7E,QAAA,mBAAmB,GAAG,cAAc,CAAC;AAElD,qFAAqF;AACxE,QAAA,eAAe,GAAG,CAAC,aAAa,CAAC,CAAC;AAE/C,gEAAgE;AACnD,QAAA,sBAAsB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEzD,6BAA6B;AAChB,QAAA,aAAa,GAAG,EAAE,CAAC;AAEhC,iEAAiE;AACpD,QAAA,iBAAiB,GAAG,MAAM,CAAC;AAExC;;;;;GAKG;AACU,QAAA,6BAA6B,GAAG,CAAC,CAAC;AAClC,QAAA,4BAA4B,GAAG,CAAC,CAAC;AAEjC,QAAA,4BAA4B,GAAG,CAAC,CAAC;AACjC,QAAA,6BAA6B,GAAG,EAAE,CAAC;AAEnC,QAAA,gBAAgB,GAAG;IAC9B,SAAS,EAAE,WAAW;IACtB,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,aAAa;IACzB,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;IACtB,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,WAAW;IACrB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;CACZ,CAAC;AAEE,QAAA,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,wBAAgB,CAAC,CAAC;AAEjE,sGAAsG;AACzF,QAAA,0BAA0B,GAAG,CAAC,GAAG,yBAAiB,EAAE,QAAQ,CAAU,CAAC"}
1
+ {"version":3,"file":"calls.constants.js","sourceRoot":"","sources":["../../../src/talkpilot/calls/calls.constants.ts"],"names":[],"mappings":";;;AAAA,8CAA8C;AACjC,QAAA,wBAAwB,GAAG,UAAmB,CAAC;AAE5D,gDAAgD;AACnC,QAAA,0BAA0B,GAAG,YAAqB,CAAC;AAEhE,wEAAwE;AAC3D,QAAA,gBAAgB,GAAG,CAAC,aAAa,EAAE,UAAU,CAAU,CAAC;AAErE,4EAA4E;AAC/D,QAAA,cAAc,GAAG;IAC5B,WAAW;IACX,WAAW;IACX,MAAM;IACN,QAAQ;IACR,UAAU;CACF,CAAC;AAEX,6BAA6B;AAChB,QAAA,aAAa,GAAG,EAAE,CAAC;AAEhC,iEAAiE;AACpD,QAAA,iBAAiB,GAAG,MAAM,CAAC;AAExC;;;;;GAKG;AACU,QAAA,6BAA6B,GAAG,CAAC,CAAC;AAClC,QAAA,4BAA4B,GAAG,CAAC,CAAC;AAEjC,QAAA,4BAA4B,GAAG,CAAC,CAAC;AACjC,QAAA,6BAA6B,GAAG,EAAE,CAAC;AAEnC,QAAA,gBAAgB,GAAG;IAC9B,SAAS,EAAE,WAAW;IACtB,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,aAAa;IACzB,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;IACtB,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,WAAW;IACrB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;CACZ,CAAC;AAEE,QAAA,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,wBAAgB,CAAC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { Call, CallDoc, CallQueryOptions, CallUpdateParams } from "../index";
2
- import type { CountOpts, DateRange, ToolExecution, CallStatus, ActiveCallsSummary, TodayCallsSummary, ClientCallStats, SessionCallStats, StatsDateRangeParams } from "./calls.types";
2
+ import type { CountOpts, DateRange, ToolExecution, CallStatus } from "./calls.types";
3
3
  import { Filter, ObjectId } from "mongodb";
4
4
  import { DashboardHeatmapMetric } from "./dashboard/calls.dashboard.types";
5
5
  export declare const getCallsCollection: () => import("mongodb").Collection<Call>;
@@ -40,10 +40,4 @@ export declare function getCallsStatsForDateRange(clientId: string, startStr: st
40
40
  * Aggregate calls by hour for a given date (createdAt converted to given timezone). Hour format "HH:mm".
41
41
  */
42
42
  export declare function getCallsHourlyAggregation(clientId: string, dateStr: string, timezone: string): Promise<DashboardHeatmapMetric[]>;
43
- export declare const aggregateActiveCallsSummary: (clientId?: string) => Promise<ActiveCallsSummary>;
44
- export declare const aggregateTodayCallsSummary: ({ dateFrom, dateTo, clientId, timezone, }: StatsDateRangeParams) => Promise<TodayCallsSummary>;
45
- export declare const aggregateClientCallStats: ({ dateFrom, dateTo, clientId, timezone, }: StatsDateRangeParams) => Promise<ClientCallStats[]>;
46
- export declare const aggregateSessionCallStats: ({ dateFrom, dateTo, clientId, timezone, }: StatsDateRangeParams) => Promise<SessionCallStats[]>;
47
- export declare const getAllClientsLastCallDate: () => Promise<Map<string, Date>>;
48
- export declare const findClientIdsByCallSids: (callSids: string[]) => Promise<Map<string, string>>;
49
43
  //# sourceMappingURL=calls.getters.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"calls.getters.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/calls/calls.getters.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,OAAO,EACP,gBAAgB,EAChB,gBAAgB,EAEjB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EACV,SAAS,EACT,SAAS,EACT,aAAa,EACb,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,eAAe,CAAC;AASvB,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAG3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAO3E,eAAO,MAAM,kBAAkB,0CAE9B,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,SAAS,MAAM,mDAE/C,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,aAAa,MAAM,8CAIxD,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,UAAU,MAAM,8CAEhD,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,QAAQ,QAAQ,8CAE9C,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,MAAM,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,WAAW,GAAG,KAAK,CAAC,qDAQpD,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,SAAS,MAAM,EACf,SAAS,gBAAgB,KACxB,OAAO,CAAC,OAAO,GAAG,IAAI,CAWxB,CAAC;AAEF,eAAO,MAAM,0BAA0B,GACrC,SAAS,MAAM,EACf,OAAO,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,KACtE,OAAO,CAAC,aAAa,EAAE,CAUzB,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACpC,SAAS,MAAM,EACf,QAAQ,UAAU,KACjB,OAAO,CAAC,OAAO,GAAG,IAAI,CAKtB,CAAC;AAEJ,eAAO,MAAM,iBAAiB,GAC5B,SAAS,MAAM,EACf,WAAW,aAAa,KACvB,OAAO,CAAC,IAAI,CAKd,CAAC;AAIF,eAAO,MAAM,4BAA4B,GACvC,UAAU,MAAM,EAChB,WAAW,IAAI,EACf,SAAS,IAAI,8CAWd,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,OAAO,MAAM,CAAC,IAAI,CAAC,EACnB,UAAU,gBAAgB,KACzB,OAAO,CAAC,OAAO,EAAE,CAGnB,CAAC;AAEF,eAAO,MAAM,UAAU,GAAU,OAAO,MAAM,CAAC,IAAI,CAAC,KAAG,OAAO,CAAC,MAAM,CAEpE,CAAC;AAEF,wBAAsB,wBAAwB,CAC5C,mBAAmB,EAAE,MAAM,EAC3B,IAAI,GAAE,SAAc,EACpB,KAAK,GAAE,SAAc,GACpB,OAAO,CAAC,MAAM,CAAC,CAoBjB;AAED,eAAO,MAAM,KAAK;qBACC,IAAI,SAAS,IAAI,KAAG,SAAS;sBAC9B,SAAS;qBACV,SAAS;qBAKT,SAAS;yBAKH,IAAI,KAAG,SAAS;CAItC,CAAC;AAEF,wBAAgB,UAAU,CAAC,CAAC,GAAE,IAAiB,GAAG,IAAI,CAIrD;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAInD;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CA2CjE;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,sBAAsB,EAAE,CAAC,CA2BnC;AAoCD,eAAO,MAAM,2BAA2B,GACtC,WAAW,MAAM,KAChB,OAAO,CAAC,kBAAkB,CA0C5B,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAU,2CAK9C,oBAAoB,KAAG,OAAO,CAAC,iBAAiB,CAmDlD,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAU,2CAK5C,oBAAoB,KAAG,OAAO,CAAC,eAAe,EAAE,CAkClD,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAU,2CAK7C,oBAAoB,KAAG,OAAO,CAAC,gBAAgB,EAAE,CAuCnD,CAAC;AAEF,eAAO,MAAM,yBAAyB,QAAa,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAQ3E,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,UAAU,MAAM,EAAE,KACjB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAW7B,CAAC"}
1
+ {"version":3,"file":"calls.getters.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/calls/calls.getters.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,OAAO,EACP,gBAAgB,EAChB,gBAAgB,EAEjB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAKrF,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAG3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAE3E,eAAO,MAAM,kBAAkB,0CAE9B,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,SAAS,MAAM,mDAE/C,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,aAAa,MAAM,8CAIxD,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,UAAU,MAAM,8CAEhD,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,QAAQ,QAAQ,8CAE9C,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,MAAM,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,WAAW,GAAG,KAAK,CAAC,qDAQpD,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,SAAS,MAAM,EACf,SAAS,gBAAgB,KACxB,OAAO,CAAC,OAAO,GAAG,IAAI,CAWxB,CAAC;AAEF,eAAO,MAAM,0BAA0B,GACrC,SAAS,MAAM,EACf,OAAO,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,KACtE,OAAO,CAAC,aAAa,EAAE,CAUzB,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACpC,SAAS,MAAM,EACf,QAAQ,UAAU,KACjB,OAAO,CAAC,OAAO,GAAG,IAAI,CAKtB,CAAC;AAEJ,eAAO,MAAM,iBAAiB,GAC5B,SAAS,MAAM,EACf,WAAW,aAAa,KACvB,OAAO,CAAC,IAAI,CAKd,CAAC;AAIF,eAAO,MAAM,4BAA4B,GACvC,UAAU,MAAM,EAChB,WAAW,IAAI,EACf,SAAS,IAAI,8CAWd,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,OAAO,MAAM,CAAC,IAAI,CAAC,EACnB,UAAU,gBAAgB,KACzB,OAAO,CAAC,OAAO,EAAE,CAGnB,CAAC;AAEF,eAAO,MAAM,UAAU,GAAU,OAAO,MAAM,CAAC,IAAI,CAAC,KAAG,OAAO,CAAC,MAAM,CAEpE,CAAC;AAEF,wBAAsB,wBAAwB,CAC5C,mBAAmB,EAAE,MAAM,EAC3B,IAAI,GAAE,SAAc,EACpB,KAAK,GAAE,SAAc,GACpB,OAAO,CAAC,MAAM,CAAC,CAoBjB;AAED,eAAO,MAAM,KAAK;qBACC,IAAI,SAAS,IAAI,KAAG,SAAS;sBAC9B,SAAS;qBACV,SAAS;qBAKT,SAAS;yBAKH,IAAI,KAAG,SAAS;CAItC,CAAC;AAEF,wBAAgB,UAAU,CAAC,CAAC,GAAE,IAAiB,GAAG,IAAI,CAIrD;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAInD;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CA2CjE;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,sBAAsB,EAAE,CAAC,CA2BnC"}
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.findClientIdsByCallSids = exports.getAllClientsLastCallDate = exports.aggregateSessionCallStats = exports.aggregateClientCallStats = exports.aggregateTodayCallsSummary = exports.aggregateActiveCallsSummary = exports.range = exports.countCalls = exports.findCallsByQuery = exports.getCallsByClientAndDateRange = exports.pushToolExecution = exports.updateCallStatusByCallSid = exports.getToolExecutionsByCallSid = exports.updateCallByCallSid = exports.createCallDoc = exports.getCallsByFlow = exports.getCallsByClient = exports.getCallsByPhoneNumber = exports.getCallByCallSid = exports.getCallsCollection = void 0;
36
+ exports.range = exports.countCalls = exports.findCallsByQuery = exports.getCallsByClientAndDateRange = exports.pushToolExecution = exports.updateCallStatusByCallSid = exports.getToolExecutionsByCallSid = exports.updateCallByCallSid = exports.createCallDoc = exports.getCallsByFlow = exports.getCallsByClient = exports.getCallsByPhoneNumber = exports.getCallByCallSid = exports.getCallsCollection = void 0;
37
37
  exports.countCallsByPhoneInRange = countCallsByPhoneInRange;
38
38
  exports.startOfDay = startOfDay;
39
39
  exports.addDays = addDays;
@@ -43,7 +43,6 @@ const index_1 = require("../index");
43
43
  const calls_constants_1 = require("./calls.constants");
44
44
  const process = __importStar(require("node:process"));
45
45
  const query_utils_1 = require("../utils/query.utils");
46
- const date_utils_1 = require("../../utils/date.utils");
47
46
  const getCallsCollection = () => {
48
47
  return (0, index_1.getDb)().collection("calls");
49
48
  };
@@ -242,183 +241,4 @@ async function getCallsHourlyAggregation(clientId, dateStr, timezone) {
242
241
  calls: r.calls,
243
242
  }));
244
243
  }
245
- // One $sum/$cond accumulator per status in ALL_STATUSES_FOR_BREAKDOWN.
246
- const buildStatusCountFields = (field) => Object.fromEntries(calls_constants_1.ALL_STATUSES_FOR_BREAKDOWN.map((status) => [
247
- status,
248
- { $sum: { $cond: [{ $eq: [field, status] }, 1, 0] } },
249
- ]));
250
- const extractStatusCounts = (row) => Object.fromEntries(calls_constants_1.ALL_STATUSES_FOR_BREAKDOWN.map((status) => [status, row[status] ?? 0]));
251
- const dateRangeFilter = (dateFrom, dateTo, timezone) => {
252
- const today = (0, date_utils_1.formatYmdInTz)(new Date(), timezone);
253
- return {
254
- start: (0, date_utils_1.startOfCalendarDayInTz)(dateFrom ?? today, timezone),
255
- end: (0, date_utils_1.endOfCalendarDayInTz)(dateTo ?? today, timezone),
256
- };
257
- };
258
- const buildCallsStatsMatch = ({ dateFrom, dateTo, clientId, timezone = "UTC" }) => {
259
- const range = dateFrom || dateTo ? dateRangeFilter(dateFrom, dateTo, timezone) : null;
260
- return {
261
- ...(range ? { createdAt: { $gte: range.start, $lte: range.end } } : {}),
262
- ...(clientId ? { clientId } : {}),
263
- };
264
- };
265
- const aggregateActiveCallsSummary = async (clientId) => {
266
- const coll = (0, exports.getCallsCollection)();
267
- const twoHoursAgo = new Date(Date.now() - calls_constants_1.ACTIVE_CALLS_WINDOW_MS);
268
- const match = {
269
- status: { $in: calls_constants_1.ACTIVE_STATUSES },
270
- updatedAt: { $gte: twoHoursAgo },
271
- ...(clientId ? { clientId } : {}),
272
- };
273
- const facetResult = await coll
274
- .aggregate([
275
- { $match: match },
276
- {
277
- $facet: {
278
- counts: [
279
- {
280
- $group: {
281
- _id: null,
282
- total: { $sum: 1 },
283
- incoming: { $sum: { $cond: ["$isIncomingCall", 1, 0] } },
284
- outgoing: { $sum: { $cond: ["$isOutgoingCall", 1, 0] } },
285
- },
286
- },
287
- ],
288
- activeClients: [{ $group: { _id: "$clientId" } }],
289
- },
290
- },
291
- ])
292
- .next();
293
- const counts = facetResult?.counts?.[0];
294
- return {
295
- total: counts?.total ?? 0,
296
- incoming: counts?.incoming ?? 0,
297
- outgoing: counts?.outgoing ?? 0,
298
- activeClientIds: (facetResult?.activeClients ?? []).map((d) => d._id || "Unknown"),
299
- };
300
- };
301
- exports.aggregateActiveCallsSummary = aggregateActiveCallsSummary;
302
- const aggregateTodayCallsSummary = async ({ dateFrom, dateTo, clientId, timezone = "UTC", }) => {
303
- const coll = (0, exports.getCallsCollection)();
304
- const match = buildCallsStatsMatch({ dateFrom, dateTo, clientId, timezone });
305
- const facetResult = await coll
306
- .aggregate([
307
- { $match: match },
308
- {
309
- $facet: {
310
- byStatus: [{ $group: { _id: "$status", count: { $sum: 1 } } }],
311
- byType: [
312
- {
313
- $group: {
314
- _id: { $cond: ["$isIncomingCall", "incoming", "outgoing"] },
315
- count: { $sum: 1 },
316
- },
317
- },
318
- ],
319
- total: [{ $group: { _id: null, count: { $sum: 1 } } }],
320
- totalSeconds: [{ $group: { _id: null, seconds: { $sum: "$callLength" } } }],
321
- },
322
- },
323
- ])
324
- .next();
325
- const byStatus = {};
326
- (facetResult?.byStatus ?? []).forEach((s) => {
327
- byStatus[s._id] = s.count;
328
- });
329
- const byType = {};
330
- (facetResult?.byType ?? []).forEach((t) => {
331
- byType[t._id] = t.count;
332
- });
333
- const totalSeconds = facetResult?.totalSeconds?.[0]?.seconds ?? 0;
334
- return {
335
- total: facetResult?.total?.[0]?.count ?? 0,
336
- incoming: byType.incoming ?? 0,
337
- outgoing: byType.outgoing ?? 0,
338
- completed: byStatus.completed ?? 0,
339
- failed: byStatus.failed ?? 0,
340
- busy: byStatus.busy ?? 0,
341
- noAnswer: byStatus["no-answer"] ?? 0,
342
- totalMinutes: Math.ceil(totalSeconds / 60),
343
- };
344
- };
345
- exports.aggregateTodayCallsSummary = aggregateTodayCallsSummary;
346
- const aggregateClientCallStats = async ({ dateFrom, dateTo, clientId, timezone = "UTC", }) => {
347
- const coll = (0, exports.getCallsCollection)();
348
- const match = buildCallsStatsMatch({ dateFrom, dateTo, clientId, timezone });
349
- const rows = await coll
350
- .aggregate([
351
- { $match: match },
352
- {
353
- $group: {
354
- _id: "$clientId",
355
- totalCalls: { $sum: 1 },
356
- ...buildStatusCountFields("$status"),
357
- totalSeconds: { $sum: "$callLength" },
358
- lastCallDate: { $max: "$createdAt" },
359
- },
360
- },
361
- { $sort: { totalCalls: -1 } },
362
- ])
363
- .toArray();
364
- return rows.map((r) => ({
365
- clientId: r._id || "Unknown",
366
- totalCalls: r.totalCalls,
367
- statusCounts: extractStatusCounts(r),
368
- totalMinutes: Math.ceil((r.totalSeconds || 0) / 60),
369
- lastCallDate: r.lastCallDate,
370
- }));
371
- };
372
- exports.aggregateClientCallStats = aggregateClientCallStats;
373
- const aggregateSessionCallStats = async ({ dateFrom, dateTo, clientId, timezone = "UTC", }) => {
374
- const coll = (0, exports.getCallsCollection)();
375
- const match = buildCallsStatsMatch({ dateFrom, dateTo, clientId, timezone });
376
- const rows = await coll
377
- .aggregate([
378
- { $match: match },
379
- {
380
- $group: {
381
- _id: "$sessionId",
382
- totalCalls: { $sum: 1 },
383
- ...buildStatusCountFields("$status"),
384
- },
385
- },
386
- {
387
- $lookup: {
388
- from: "sessions",
389
- localField: "_id",
390
- foreignField: "_id",
391
- as: "sessionDoc",
392
- },
393
- },
394
- { $sort: { totalCalls: -1 } },
395
- ])
396
- .toArray();
397
- return rows.map((r) => ({
398
- // A null sessionId is an incoming call (expected), not a broken/orphaned one.
399
- sessionId: r._id ? r._id.toString() : calls_constants_1.INCOMING_SESSION_ID,
400
- sessionName: r._id ? r.sessionDoc[0]?.session_name || "Unknown" : "Incoming Call",
401
- totalCalls: r.totalCalls,
402
- statusCounts: extractStatusCounts(r),
403
- }));
404
- };
405
- exports.aggregateSessionCallStats = aggregateSessionCallStats;
406
- const getAllClientsLastCallDate = async () => {
407
- const rows = await (0, exports.getCallsCollection)()
408
- .aggregate([
409
- { $group: { _id: "$clientId", lastCallDate: { $max: "$createdAt" } } },
410
- ])
411
- .toArray();
412
- return new Map(rows.map((r) => [r._id, r.lastCallDate]));
413
- };
414
- exports.getAllClientsLastCallDate = getAllClientsLastCallDate;
415
- const findClientIdsByCallSids = async (callSids) => {
416
- if (callSids.length === 0)
417
- return new Map();
418
- const docs = await (0, exports.getCallsCollection)()
419
- .find({ callSid: { $in: callSids } }, { projection: { _id: 0, clientId: 1, callSid: 1 } })
420
- .toArray();
421
- return new Map(docs.map((d) => [d.callSid, d.clientId]));
422
- };
423
- exports.findClientIdsByCallSids = findClientIdsByCallSids;
424
244
  //# sourceMappingURL=calls.getters.js.map