@talkpilot/core-db 1.3.39 → 1.3.41

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 (273) hide show
  1. package/.cursor/rules/development.mdc +65 -65
  2. package/DEVELOPMENT.md +141 -141
  3. package/README.md +706 -721
  4. package/dist/index.d.ts +1 -0
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +1 -0
  7. package/dist/index.js.map +1 -1
  8. package/dist/talkpilot/calls/calls.types.d.ts +0 -1
  9. package/dist/talkpilot/calls/calls.types.d.ts.map +1 -1
  10. package/dist/talkpilot/clients/clients.quota.constants.d.ts +2 -0
  11. package/dist/talkpilot/clients/clients.quota.constants.d.ts.map +1 -0
  12. package/dist/talkpilot/clients/clients.quota.constants.js +5 -0
  13. package/dist/talkpilot/clients/clients.quota.constants.js.map +1 -0
  14. package/dist/talkpilot/clients/clients.quota.utils.d.ts +8 -0
  15. package/dist/talkpilot/clients/clients.quota.utils.d.ts.map +1 -0
  16. package/dist/talkpilot/clients/clients.quota.utils.js +45 -0
  17. package/dist/talkpilot/clients/clients.quota.utils.js.map +1 -0
  18. package/dist/talkpilot/clientsConfig/clientsConfig.getters.d.ts +0 -39
  19. package/dist/talkpilot/clientsConfig/clientsConfig.getters.d.ts.map +1 -1
  20. package/dist/talkpilot/clientsConfig/clientsConfig.getters.js +1 -92
  21. package/dist/talkpilot/clientsConfig/clientsConfig.getters.js.map +1 -1
  22. package/dist/talkpilot/clientsConfig/clientsConfig.types.d.ts +0 -4
  23. package/dist/talkpilot/clientsConfig/clientsConfig.types.d.ts.map +1 -1
  24. package/dist/talkpilot/clientsConfig/index.d.ts +0 -1
  25. package/dist/talkpilot/clientsConfig/index.d.ts.map +1 -1
  26. package/dist/talkpilot/clientsConfig/index.js +0 -1
  27. package/dist/talkpilot/clientsConfig/index.js.map +1 -1
  28. package/dist/test-utils/factories/index.d.ts +1 -0
  29. package/dist/test-utils/factories/index.d.ts.map +1 -1
  30. package/dist/test-utils/factories/index.js +1 -0
  31. package/dist/test-utils/factories/index.js.map +1 -1
  32. package/dist/test-utils/factories/websitalk/knowledgeDocuments.d.ts +5 -0
  33. package/dist/test-utils/factories/websitalk/knowledgeDocuments.d.ts.map +1 -0
  34. package/dist/test-utils/factories/websitalk/knowledgeDocuments.js +23 -0
  35. package/dist/test-utils/factories/websitalk/knowledgeDocuments.js.map +1 -0
  36. package/dist/test-utils/factories/websitalk/scanResources.d.ts +5 -0
  37. package/dist/test-utils/factories/websitalk/scanResources.d.ts.map +1 -0
  38. package/dist/test-utils/factories/websitalk/scanResources.js +24 -0
  39. package/dist/test-utils/factories/websitalk/scanResources.js.map +1 -0
  40. package/dist/websitalk/index.d.ts +1 -0
  41. package/dist/websitalk/index.d.ts.map +1 -1
  42. package/dist/websitalk/index.js +1 -0
  43. package/dist/websitalk/index.js.map +1 -1
  44. package/dist/websitalk/knowledgeDocuments/index.d.ts +4 -0
  45. package/dist/websitalk/knowledgeDocuments/index.d.ts.map +1 -0
  46. package/dist/websitalk/knowledgeDocuments/index.js +20 -0
  47. package/dist/websitalk/knowledgeDocuments/index.js.map +1 -0
  48. package/dist/websitalk/knowledgeDocuments/knowledgeDocuments.constants.d.ts +14 -0
  49. package/dist/websitalk/knowledgeDocuments/knowledgeDocuments.constants.d.ts.map +1 -0
  50. package/dist/websitalk/knowledgeDocuments/knowledgeDocuments.constants.js +15 -0
  51. package/dist/websitalk/knowledgeDocuments/knowledgeDocuments.constants.js.map +1 -0
  52. package/dist/websitalk/knowledgeDocuments/knowledgeDocuments.getters.d.ts +10 -0
  53. package/dist/websitalk/knowledgeDocuments/knowledgeDocuments.getters.d.ts.map +1 -0
  54. package/dist/websitalk/knowledgeDocuments/knowledgeDocuments.getters.js +61 -0
  55. package/dist/websitalk/knowledgeDocuments/knowledgeDocuments.getters.js.map +1 -0
  56. package/dist/websitalk/knowledgeDocuments/knowledgeDocuments.types.d.ts +28 -0
  57. package/dist/websitalk/knowledgeDocuments/knowledgeDocuments.types.d.ts.map +1 -0
  58. package/dist/websitalk/knowledgeDocuments/knowledgeDocuments.types.js +3 -0
  59. package/dist/websitalk/knowledgeDocuments/knowledgeDocuments.types.js.map +1 -0
  60. package/dist/websitalk/scanResources/index.d.ts +5 -0
  61. package/dist/websitalk/scanResources/index.d.ts.map +1 -0
  62. package/dist/websitalk/scanResources/index.js +21 -0
  63. package/dist/websitalk/scanResources/index.js.map +1 -0
  64. package/dist/websitalk/scanResources/scanResources.constants.d.ts +38 -0
  65. package/dist/websitalk/scanResources/scanResources.constants.d.ts.map +1 -0
  66. package/dist/websitalk/scanResources/scanResources.constants.js +47 -0
  67. package/dist/websitalk/scanResources/scanResources.constants.js.map +1 -0
  68. package/dist/websitalk/scanResources/scanResources.getters.d.ts +8 -0
  69. package/dist/websitalk/scanResources/scanResources.getters.d.ts.map +1 -0
  70. package/dist/websitalk/scanResources/scanResources.getters.js +68 -0
  71. package/dist/websitalk/scanResources/scanResources.getters.js.map +1 -0
  72. package/dist/websitalk/scanResources/scanResources.types.d.ts +60 -0
  73. package/dist/websitalk/scanResources/scanResources.types.d.ts.map +1 -0
  74. package/dist/websitalk/scanResources/scanResources.types.js +3 -0
  75. package/dist/websitalk/scanResources/scanResources.types.js.map +1 -0
  76. package/dist/websitalk/scanResources/scanResources.utils.d.ts +7 -0
  77. package/dist/websitalk/scanResources/scanResources.utils.d.ts.map +1 -0
  78. package/dist/websitalk/scanResources/scanResources.utils.js +20 -0
  79. package/dist/websitalk/scanResources/scanResources.utils.js.map +1 -0
  80. package/jest.config.js +20 -20
  81. package/package.json +46 -46
  82. package/src/__tests__/setup.ts +20 -20
  83. package/src/bulkWrite/__tests__/bulkWrite.spec.ts +65 -65
  84. package/src/bulkWrite/bulkWrite.ops.ts +45 -45
  85. package/src/bulkWrite/bulkWrite.types.ts +4 -4
  86. package/src/bulkWrite/index.ts +2 -2
  87. package/src/config.ts +9 -9
  88. package/src/configuration/index.ts +17 -17
  89. package/src/configuration/internalModels/index.ts +3 -3
  90. package/src/configuration/internalModels/internalModels.constants.ts +1 -1
  91. package/src/configuration/internalModels/internalModels.getters.ts +33 -33
  92. package/src/configuration/internalModels/internalModels.types.ts +12 -12
  93. package/src/configuration/models/index.ts +25 -25
  94. package/src/configuration/models/models.constants.ts +13 -13
  95. package/src/configuration/models/models.getters.ts +53 -53
  96. package/src/configuration/models/models.types.ts +79 -79
  97. package/src/configuration/mongodb-client.ts +62 -62
  98. package/src/configuration/prompts/index.ts +2 -2
  99. package/src/configuration/prompts/prompts.getters.ts +49 -49
  100. package/src/configuration/prompts/prompts.types.ts +11 -11
  101. package/src/connection.ts +81 -81
  102. package/src/index.ts +43 -42
  103. package/src/municipal/__tests__/validation.spec.ts +62 -62
  104. package/src/municipal/cities/cities.getters.ts +50 -50
  105. package/src/municipal/cities/cities.types.ts +11 -11
  106. package/src/municipal/cities/index.ts +2 -2
  107. package/src/municipal/departmentsSubjects/__tests__/departmentsSubjects.spec.ts +272 -272
  108. package/src/municipal/departmentsSubjects/departmentsSubjects.getters.ts +317 -317
  109. package/src/municipal/departmentsSubjects/departmentsSubjects.types.ts +73 -73
  110. package/src/municipal/departmentsSubjects/index.ts +9 -9
  111. package/src/municipal/index.ts +22 -22
  112. package/src/municipal/mongodb-client.ts +61 -61
  113. package/src/municipal/muniIssues/__tests__/muniIssues.setters.spec.ts +94 -94
  114. package/src/municipal/muniIssues/__tests__/muniIssues.setup.spec.ts +92 -92
  115. package/src/municipal/muniIssues/index.ts +17 -17
  116. package/src/municipal/muniIssues/muniIssues.constants.ts +18 -18
  117. package/src/municipal/muniIssues/muniIssues.getters.ts +24 -24
  118. package/src/municipal/muniIssues/muniIssues.schema.ts +66 -66
  119. package/src/municipal/muniIssues/muniIssues.setters.ts +24 -24
  120. package/src/municipal/muniIssues/muniIssues.setup.ts +65 -65
  121. package/src/municipal/muniIssues/muniIssues.types.ts +37 -37
  122. package/src/municipal/streets/__tests__/streets.spec.ts +253 -253
  123. package/src/municipal/streets/index.ts +2 -2
  124. package/src/municipal/streets/streets.getters.ts +140 -140
  125. package/src/municipal/streets/streets.types.ts +19 -19
  126. package/src/municipal/systemInstructions/__tests__/getters.spec.ts +113 -113
  127. package/src/municipal/systemInstructions/__tests__/setters.spec.ts +274 -274
  128. package/src/municipal/systemInstructions/index.ts +7 -7
  129. package/src/municipal/systemInstructions/instructions.getters.ts +57 -57
  130. package/src/municipal/systemInstructions/instructions.setters.ts +119 -119
  131. package/src/municipal/systemInstructions/instructions.types.ts +30 -30
  132. package/src/municipal/tickets/__tests__/tickets.getters.spec.ts +30 -30
  133. package/src/municipal/tickets/__tests__/tickets.statistics.spec.ts +99 -99
  134. package/src/municipal/tickets/index.ts +9 -9
  135. package/src/municipal/tickets/tickets.constants.ts +8 -8
  136. package/src/municipal/tickets/tickets.getters.ts +121 -121
  137. package/src/municipal/tickets/tickets.statistics.aggregation.ts +110 -110
  138. package/src/municipal/tickets/tickets.statistics.getters.ts +145 -145
  139. package/src/municipal/tickets/tickets.types.ts +54 -54
  140. package/src/municipal/utils/types.ts +11 -11
  141. package/src/talkpilot/__tests__/db.spec.ts +38 -38
  142. package/src/talkpilot/__tests__/mongodb-client.spec.ts +18 -18
  143. package/src/talkpilot/__tests__/validation.spec.ts +68 -68
  144. package/src/talkpilot/agents/__tests__/agents.getters.spec.ts +29 -29
  145. package/src/talkpilot/agents/agents.getters.ts +34 -34
  146. package/src/talkpilot/agents/agents.types.ts +14 -14
  147. package/src/talkpilot/agents/index.ts +2 -2
  148. package/src/talkpilot/backgroundToolResults/__tests__/backgroundToolResults.getters.spec.ts +147 -147
  149. package/src/talkpilot/backgroundToolResults/backgroundToolResults.getters.ts +65 -65
  150. package/src/talkpilot/backgroundToolResults/backgroundToolResults.types.ts +23 -23
  151. package/src/talkpilot/backgroundToolResults/index.ts +2 -2
  152. package/src/talkpilot/calls/__tests__/callStats.utils.spec.ts +128 -128
  153. package/src/talkpilot/calls/__tests__/calls.dashboard.spec.ts +229 -229
  154. package/src/talkpilot/calls/__tests__/calls.spec.ts +471 -471
  155. package/src/talkpilot/calls/__tests__/calls.statistics.spec.ts +483 -483
  156. package/src/talkpilot/calls/calls.constants.ts +49 -49
  157. package/src/talkpilot/calls/calls.getters.ts +277 -277
  158. package/src/talkpilot/calls/calls.statistics.getters.ts +668 -668
  159. package/src/talkpilot/calls/calls.statistics.types.ts +48 -48
  160. package/src/talkpilot/calls/calls.types.ts +133 -134
  161. package/src/talkpilot/calls/dashboard/calls.dashboard.ts +295 -295
  162. package/src/talkpilot/calls/dashboard/calls.dashboard.types.ts +57 -57
  163. package/src/talkpilot/calls/index.ts +6 -6
  164. package/src/talkpilot/clientAudioBuffers/__tests__/clientAudioBuffer.getters.spec.ts +160 -160
  165. package/src/talkpilot/clientAudioBuffers/clientAudioBuffer.getters.ts +117 -117
  166. package/src/talkpilot/clientAudioBuffers/clientsAudioBuffers.types.ts +25 -25
  167. package/src/talkpilot/clientAudioBuffers/index.ts +2 -2
  168. package/src/talkpilot/clients/__tests__/clients.quota.spec.ts +123 -123
  169. package/src/talkpilot/clients/clients.getters.ts +16 -16
  170. package/src/talkpilot/clients/clients.quota.getters.ts +119 -119
  171. package/src/talkpilot/clients/clients.quota.types.ts +27 -27
  172. package/src/talkpilot/clients/clients.types.ts +18 -18
  173. package/src/talkpilot/clients/index.ts +4 -4
  174. package/src/talkpilot/clientsConfig/__tests__/clientsConfig.getters.spec.ts +0 -318
  175. package/src/talkpilot/clientsConfig/__tests__/clientsConfig.spec.ts +212 -212
  176. package/src/talkpilot/clientsConfig/clientsConfig.getters.ts +2 -116
  177. package/src/talkpilot/clientsConfig/clientsConfig.types.ts +0 -4
  178. package/src/talkpilot/clientsConfig/index.ts +2 -3
  179. package/src/talkpilot/contextNotes/__tests__/contextNotes.getters.spec.ts +217 -217
  180. package/src/talkpilot/contextNotes/contextNotes.getters.ts +85 -85
  181. package/src/talkpilot/contextNotes/contextNotes.types.ts +20 -20
  182. package/src/talkpilot/contextNotes/index.ts +2 -2
  183. package/src/talkpilot/flows/__tests__/flows.schema.spec.ts +99 -99
  184. package/src/talkpilot/flows/flows.getter.ts +14 -14
  185. package/src/talkpilot/flows/flows.schema.ts +155 -155
  186. package/src/talkpilot/flows/flows.types.ts +189 -189
  187. package/src/talkpilot/flows/index.ts +2 -2
  188. package/src/talkpilot/groups/__tests__/groups.spec.ts +90 -90
  189. package/src/talkpilot/groups/__tests__/phone.utils.spec.ts +32 -32
  190. package/src/talkpilot/groups/groups.getters.ts +30 -30
  191. package/src/talkpilot/groups/groups.types.ts +29 -29
  192. package/src/talkpilot/groups/index.ts +3 -3
  193. package/src/talkpilot/groups/phone.utils.ts +46 -46
  194. package/src/talkpilot/index.ts +31 -31
  195. package/src/talkpilot/leads/index.ts +2 -2
  196. package/src/talkpilot/leads/leads.getter.ts +6 -6
  197. package/src/talkpilot/leads/leads.schema.ts +33 -33
  198. package/src/talkpilot/leads/leads.types.ts +20 -20
  199. package/src/talkpilot/mongodb-client.ts +78 -78
  200. package/src/talkpilot/phone_numbers/__tests__/phone_numbers.spec.ts +282 -282
  201. package/src/talkpilot/phone_numbers/index.ts +2 -2
  202. package/src/talkpilot/phone_numbers/phone_numbers.getter.ts +176 -176
  203. package/src/talkpilot/phone_numbers/phone_numbers.schema.ts +17 -17
  204. package/src/talkpilot/phone_numbers/phone_numbers.types.ts +30 -30
  205. package/src/talkpilot/plans/__tests__/plans.spec.ts +70 -70
  206. package/src/talkpilot/plans/index.ts +2 -2
  207. package/src/talkpilot/plans/plans.getters.ts +132 -132
  208. package/src/talkpilot/plans/plans.types.ts +89 -89
  209. package/src/talkpilot/products/__tests__/products.getters.spec.ts +44 -44
  210. package/src/talkpilot/products/index.ts +2 -2
  211. package/src/talkpilot/products/products.getters.ts +12 -12
  212. package/src/talkpilot/products/products.types.ts +9 -9
  213. package/src/talkpilot/results/index.ts +7 -7
  214. package/src/talkpilot/results/results.getter.ts +39 -39
  215. package/src/talkpilot/results/results.schema.ts +25 -25
  216. package/src/talkpilot/results/results.types.ts +34 -34
  217. package/src/talkpilot/retry_analyze/__tests__/retryAnalyze.getters.spec.ts +156 -156
  218. package/src/talkpilot/retry_analyze/index.ts +2 -2
  219. package/src/talkpilot/retry_analyze/retryAnalyze.getters.ts +84 -84
  220. package/src/talkpilot/retry_analyze/retryAnalyze.types.ts +13 -13
  221. package/src/talkpilot/sessions/__tests__/sessions.spec.ts +147 -147
  222. package/src/talkpilot/sessions/index.ts +2 -2
  223. package/src/talkpilot/sessions/sessions.getter.ts +92 -92
  224. package/src/talkpilot/sessions/sessions.schema.ts +34 -34
  225. package/src/talkpilot/sessions/sessions.types.ts +30 -30
  226. package/src/talkpilot/subscriptions/__tests__/subscriptions.getters.utils.spec.ts +45 -45
  227. package/src/talkpilot/subscriptions/index.ts +3 -3
  228. package/src/talkpilot/subscriptions/subscriptions.getters.ts +146 -146
  229. package/src/talkpilot/subscriptions/subscriptions.getters.utils.ts +33 -33
  230. package/src/talkpilot/subscriptions/subscriptions.types.ts +66 -66
  231. package/src/talkpilot/utils/__tests__/query.utils.spec.ts +49 -49
  232. package/src/talkpilot/utils/query.utils.ts +21 -21
  233. package/src/test-utils/db-utils.ts +33 -33
  234. package/src/test-utils/factories/index.ts +17 -16
  235. package/src/test-utils/factories/municipal/cities.ts +16 -16
  236. package/src/test-utils/factories/municipal/departmentsSubjects.ts +37 -37
  237. package/src/test-utils/factories/municipal/muniIssues.ts +32 -32
  238. package/src/test-utils/factories/municipal/streets.ts +22 -22
  239. package/src/test-utils/factories/municipal/tickets.ts +39 -39
  240. package/src/test-utils/factories/talkpilot/agents.ts +19 -19
  241. package/src/test-utils/factories/talkpilot/calls.ts +37 -37
  242. package/src/test-utils/factories/talkpilot/clientAudioBuffers.ts +20 -20
  243. package/src/test-utils/factories/talkpilot/clientsConfig.ts +18 -18
  244. package/src/test-utils/factories/talkpilot/contextNotes.ts +40 -40
  245. package/src/test-utils/factories/talkpilot/flows.ts +33 -33
  246. package/src/test-utils/factories/talkpilot/groups.ts +33 -33
  247. package/src/test-utils/factories/talkpilot/phone_numbers.ts +22 -22
  248. package/src/test-utils/factories/talkpilot/sessions.ts +35 -35
  249. package/src/test-utils/factories/websitalk/knowledgeDocuments.ts +28 -0
  250. package/src/test-utils/factories/websitalk/scans.ts +24 -24
  251. package/src/test-utils/factories/websitalk/websiteUrls.ts +17 -17
  252. package/src/utils/date.utils.ts +126 -126
  253. package/src/utils/shared.types.ts +4 -4
  254. package/src/utils/validation.ts +23 -23
  255. package/src/websitalk/index.ts +17 -16
  256. package/src/websitalk/knowledgeDocuments/__tests__/knowledgeDocuments.spec.ts +123 -0
  257. package/src/websitalk/knowledgeDocuments/index.ts +3 -0
  258. package/src/websitalk/knowledgeDocuments/knowledgeDocuments.constants.ts +19 -0
  259. package/src/websitalk/knowledgeDocuments/knowledgeDocuments.getters.ts +85 -0
  260. package/src/websitalk/knowledgeDocuments/knowledgeDocuments.types.ts +37 -0
  261. package/src/websitalk/mongodb-client.ts +61 -61
  262. package/src/websitalk/scans/__tests__/scans.spec.ts +313 -313
  263. package/src/websitalk/scans/index.ts +4 -4
  264. package/src/websitalk/scans/scans.constants.ts +15 -15
  265. package/src/websitalk/scans/scans.getters.ts +160 -160
  266. package/src/websitalk/scans/scans.types.ts +45 -45
  267. package/src/websitalk/scans/scans.utils.ts +5 -5
  268. package/src/websitalk/websiteUrls/__tests__/websiteUrls.spec.ts +77 -77
  269. package/src/websitalk/websiteUrls/index.ts +2 -2
  270. package/src/websitalk/websiteUrls/websiteUrls.getters.ts +65 -65
  271. package/src/websitalk/websiteUrls/websiteUrls.types.ts +13 -13
  272. package/tsconfig.json +23 -23
  273. package/src/talkpilot/clientsConfig/clientsConfig.constants.ts +0 -2
@@ -1,30 +1,30 @@
1
- import { getDb, ObjectId, Group } from "../index";
2
- import { Collection, Filter } from "mongodb";
3
-
4
- export const getGroupsCollection = (): Collection<Group> => {
5
- return getDb().collection<Group>("groups");
6
- };
7
-
8
- export const findGroups = async (filter: Filter<Group>): Promise<Group[]> => {
9
- return await getGroupsCollection().find(filter).toArray();
10
- };
11
-
12
- export const createGroup = async (group: Group) => {
13
- const { insertedId } = await getGroupsCollection().insertOne(group);
14
- return insertedId;
15
- };
16
-
17
- export const updateGroup = async (
18
- filter: Filter<Group>,
19
- data: Partial<Group>,
20
- ) => {
21
- return await getGroupsCollection().findOneAndUpdate(
22
- filter,
23
- { $set: { ...data, updatedAt: new Date() } },
24
- { returnDocument: "after" },
25
- );
26
- };
27
-
28
- export const removeGroup = async (groupId: string) => {
29
- return await getGroupsCollection().deleteOne({ _id: new ObjectId(groupId) });
30
- };
1
+ import { getDb, ObjectId, Group } from "../index";
2
+ import { Collection, Filter } from "mongodb";
3
+
4
+ export const getGroupsCollection = (): Collection<Group> => {
5
+ return getDb().collection<Group>("groups");
6
+ };
7
+
8
+ export const findGroups = async (filter: Filter<Group>): Promise<Group[]> => {
9
+ return await getGroupsCollection().find(filter).toArray();
10
+ };
11
+
12
+ export const createGroup = async (group: Group) => {
13
+ const { insertedId } = await getGroupsCollection().insertOne(group);
14
+ return insertedId;
15
+ };
16
+
17
+ export const updateGroup = async (
18
+ filter: Filter<Group>,
19
+ data: Partial<Group>,
20
+ ) => {
21
+ return await getGroupsCollection().findOneAndUpdate(
22
+ filter,
23
+ { $set: { ...data, updatedAt: new Date() } },
24
+ { returnDocument: "after" },
25
+ );
26
+ };
27
+
28
+ export const removeGroup = async (groupId: string) => {
29
+ return await getGroupsCollection().deleteOne({ _id: new ObjectId(groupId) });
30
+ };
@@ -1,29 +1,29 @@
1
- import { WithId } from "mongodb";
2
- export type E164 = `+${string}`;
3
- export type CountryISO = Uppercase<string>;
4
-
5
- export type Phone = {
6
- e164: E164;
7
- region?: CountryISO;
8
- countryCallingCode?: string;
9
- national?: string;
10
- ext?: string;
11
- formatted?: string;
12
- };
13
-
14
- export type GroupContact = {
15
- name: string;
16
- phone: Phone;
17
- gender: string;
18
- };
19
-
20
- export type Group = {
21
- clientId: string;
22
- createdAt: Date;
23
- updatedAt: Date;
24
- name: string;
25
- description: string;
26
- contacts: GroupContact[];
27
- };
28
-
29
- export type GroupDoc = WithId<Group>;
1
+ import { WithId } from "mongodb";
2
+ export type E164 = `+${string}`;
3
+ export type CountryISO = Uppercase<string>;
4
+
5
+ export type Phone = {
6
+ e164: E164;
7
+ region?: CountryISO;
8
+ countryCallingCode?: string;
9
+ national?: string;
10
+ ext?: string;
11
+ formatted?: string;
12
+ };
13
+
14
+ export type GroupContact = {
15
+ name: string;
16
+ phone: Phone;
17
+ gender: string;
18
+ };
19
+
20
+ export type Group = {
21
+ clientId: string;
22
+ createdAt: Date;
23
+ updatedAt: Date;
24
+ name: string;
25
+ description: string;
26
+ contacts: GroupContact[];
27
+ };
28
+
29
+ export type GroupDoc = WithId<Group>;
@@ -1,3 +1,3 @@
1
- export * from "./groups.getters";
2
- export * from "./groups.types";
3
- export * from "./phone.utils";
1
+ export * from "./groups.getters";
2
+ export * from "./groups.types";
3
+ export * from "./phone.utils";
@@ -1,46 +1,46 @@
1
- import { PhoneNumberUtil, PhoneNumberFormat } from "google-libphonenumber";
2
- import type { Phone, E164, CountryISO } from "./groups.types";
3
-
4
- const phoneUtil = PhoneNumberUtil.getInstance();
5
-
6
- export const enrichPhoneNumber = (e164: string): Phone | null => {
7
- try {
8
- const phoneNumber = phoneUtil.parse(e164, "ZZ");
9
- if (!phoneUtil.isValidNumber(phoneNumber)) {
10
- return null;
11
- }
12
-
13
- const normalizedE164 = phoneUtil.format(
14
- phoneNumber,
15
- PhoneNumberFormat.E164,
16
- ) as E164;
17
- const region = phoneUtil.getRegionCodeForNumber(phoneNumber) as CountryISO;
18
- const countryCallingCode = phoneNumber.getCountryCode()?.toString();
19
- const national = phoneNumber.getNationalNumber()?.toString();
20
- const ext = phoneNumber.getExtension() || undefined;
21
- const formatted = phoneUtil.format(
22
- phoneNumber,
23
- PhoneNumberFormat.INTERNATIONAL,
24
- );
25
-
26
- return {
27
- e164: normalizedE164,
28
- region,
29
- countryCallingCode,
30
- national,
31
- ext,
32
- formatted,
33
- };
34
- } catch (error) {
35
- return null;
36
- }
37
- };
38
-
39
- export const isValidE164 = (e164: string): boolean => {
40
- try {
41
- const phoneNumber = phoneUtil.parse(e164, "ZZ");
42
- return phoneUtil.isValidNumber(phoneNumber);
43
- } catch (error) {
44
- return false;
45
- }
46
- };
1
+ import { PhoneNumberUtil, PhoneNumberFormat } from "google-libphonenumber";
2
+ import type { Phone, E164, CountryISO } from "./groups.types";
3
+
4
+ const phoneUtil = PhoneNumberUtil.getInstance();
5
+
6
+ export const enrichPhoneNumber = (e164: string): Phone | null => {
7
+ try {
8
+ const phoneNumber = phoneUtil.parse(e164, "ZZ");
9
+ if (!phoneUtil.isValidNumber(phoneNumber)) {
10
+ return null;
11
+ }
12
+
13
+ const normalizedE164 = phoneUtil.format(
14
+ phoneNumber,
15
+ PhoneNumberFormat.E164,
16
+ ) as E164;
17
+ const region = phoneUtil.getRegionCodeForNumber(phoneNumber) as CountryISO;
18
+ const countryCallingCode = phoneNumber.getCountryCode()?.toString();
19
+ const national = phoneNumber.getNationalNumber()?.toString();
20
+ const ext = phoneNumber.getExtension() || undefined;
21
+ const formatted = phoneUtil.format(
22
+ phoneNumber,
23
+ PhoneNumberFormat.INTERNATIONAL,
24
+ );
25
+
26
+ return {
27
+ e164: normalizedE164,
28
+ region,
29
+ countryCallingCode,
30
+ national,
31
+ ext,
32
+ formatted,
33
+ };
34
+ } catch (error) {
35
+ return null;
36
+ }
37
+ };
38
+
39
+ export const isValidE164 = (e164: string): boolean => {
40
+ try {
41
+ const phoneNumber = phoneUtil.parse(e164, "ZZ");
42
+ return phoneUtil.isValidNumber(phoneNumber);
43
+ } catch (error) {
44
+ return false;
45
+ }
46
+ };
@@ -1,31 +1,31 @@
1
- import { Db, ObjectId as MongoObjectId } from "mongodb";
2
-
3
- export * from "./flows";
4
- export * from "./contextNotes";
5
- export * from "./products";
6
- export * from "./results";
7
- export * from "./sessions";
8
- export * from "./phone_numbers";
9
- export * from "./leads";
10
- export * from "./clients";
11
- export * from "./agents";
12
- export * from "./plans";
13
- export * from "./subscriptions";
14
- export * from "./groups";
15
- export * from "./calls";
16
- export * from "./clientAudioBuffers";
17
- export * from "./clientsConfig";
18
- export * from "./backgroundToolResults";
19
- export * from "./retry_analyze";
20
- export { mongodbClient } from "./mongodb-client";
21
-
22
- let db: Db;
23
- export const setDb = (d: Db) => {
24
- db = d;
25
- };
26
- export const getDb = (): Db => {
27
- if (!db) throw new Error("DB not initialised");
28
- return db;
29
- };
30
-
31
- export const ObjectId = MongoObjectId;
1
+ import { Db, ObjectId as MongoObjectId } from "mongodb";
2
+
3
+ export * from "./flows";
4
+ export * from "./contextNotes";
5
+ export * from "./products";
6
+ export * from "./results";
7
+ export * from "./sessions";
8
+ export * from "./phone_numbers";
9
+ export * from "./leads";
10
+ export * from "./clients";
11
+ export * from "./agents";
12
+ export * from "./plans";
13
+ export * from "./subscriptions";
14
+ export * from "./groups";
15
+ export * from "./calls";
16
+ export * from "./clientAudioBuffers";
17
+ export * from "./clientsConfig";
18
+ export * from "./backgroundToolResults";
19
+ export * from "./retry_analyze";
20
+ export { mongodbClient } from "./mongodb-client";
21
+
22
+ let db: Db;
23
+ export const setDb = (d: Db) => {
24
+ db = d;
25
+ };
26
+ export const getDb = (): Db => {
27
+ if (!db) throw new Error("DB not initialised");
28
+ return db;
29
+ };
30
+
31
+ export const ObjectId = MongoObjectId;
@@ -1,2 +1,2 @@
1
- export { getLeadsCollection } from "./leads.getter";
2
- export type { Lead, LeadItem, LeadProperty } from "./leads.types";
1
+ export { getLeadsCollection } from "./leads.getter";
2
+ export type { Lead, LeadItem, LeadProperty } from "./leads.types";
@@ -1,6 +1,6 @@
1
- import type { Collection } from "mongodb";
2
- import { getDb } from "../index";
3
- import type { Lead } from "./leads.types";
4
-
5
- export const getLeadsCollection = (): Collection<Lead> =>
6
- getDb().collection<Lead>("leads");
1
+ import type { Collection } from "mongodb";
2
+ import { getDb } from "../index";
3
+ import type { Lead } from "./leads.types";
4
+
5
+ export const getLeadsCollection = (): Collection<Lead> =>
6
+ getDb().collection<Lead>("leads");
@@ -1,33 +1,33 @@
1
- export const leadsMongoSchema = {
2
- bsonType: "object",
3
- required: ["flowId", "clientId", "createdAt", "leads"],
4
- properties: {
5
- _id: { bsonType: "objectId" },
6
- flowId: { bsonType: "string" },
7
- clientId: { bsonType: "string" },
8
- createdAt: { bsonType: "date" },
9
- leads: {
10
- bsonType: "array",
11
- items: {
12
- bsonType: "object",
13
- required: ["callSid", "timestamp"],
14
- properties: {
15
- callSid: { bsonType: "string" },
16
- timestamp: { bsonType: "date" },
17
- properties: {
18
- bsonType: "array",
19
- items: {
20
- bsonType: "object",
21
- required: ["name", "value"],
22
- properties: {
23
- name: { bsonType: "string" },
24
- value: { bsonType: "string" },
25
- },
26
- },
27
- },
28
- },
29
- },
30
- },
31
- },
32
- additionalProperties: false,
33
- } as const;
1
+ export const leadsMongoSchema = {
2
+ bsonType: "object",
3
+ required: ["flowId", "clientId", "createdAt", "leads"],
4
+ properties: {
5
+ _id: { bsonType: "objectId" },
6
+ flowId: { bsonType: "string" },
7
+ clientId: { bsonType: "string" },
8
+ createdAt: { bsonType: "date" },
9
+ leads: {
10
+ bsonType: "array",
11
+ items: {
12
+ bsonType: "object",
13
+ required: ["callSid", "timestamp"],
14
+ properties: {
15
+ callSid: { bsonType: "string" },
16
+ timestamp: { bsonType: "date" },
17
+ properties: {
18
+ bsonType: "array",
19
+ items: {
20
+ bsonType: "object",
21
+ required: ["name", "value"],
22
+ properties: {
23
+ name: { bsonType: "string" },
24
+ value: { bsonType: "string" },
25
+ },
26
+ },
27
+ },
28
+ },
29
+ },
30
+ },
31
+ },
32
+ additionalProperties: false,
33
+ } as const;
@@ -1,20 +1,20 @@
1
- import { ObjectId } from "mongodb";
2
-
3
- export interface LeadProperty {
4
- name: string;
5
- value: string;
6
- }
7
-
8
- export interface LeadItem {
9
- callSid: string;
10
- timestamp: Date;
11
- properties?: LeadProperty[];
12
- }
13
-
14
- export interface Lead {
15
- _id?: ObjectId;
16
- flowId: ObjectId;
17
- clientId: string;
18
- createdAt: Date;
19
- leads: LeadItem[];
20
- }
1
+ import { ObjectId } from "mongodb";
2
+
3
+ export interface LeadProperty {
4
+ name: string;
5
+ value: string;
6
+ }
7
+
8
+ export interface LeadItem {
9
+ callSid: string;
10
+ timestamp: Date;
11
+ properties?: LeadProperty[];
12
+ }
13
+
14
+ export interface Lead {
15
+ _id?: ObjectId;
16
+ flowId: ObjectId;
17
+ clientId: string;
18
+ createdAt: Date;
19
+ leads: LeadItem[];
20
+ }
@@ -1,78 +1,78 @@
1
- import { MongoClient, Db } from "mongodb";
2
- import { setDb } from "./index";
3
- import { validateConfig, validateMongoUri } from "../utils/validation";
4
-
5
- class MongoDBClient {
6
- private client: MongoClient | null = null;
7
- private db: Db | null = null;
8
-
9
- private extractDatabaseName(uri: string): string | null {
10
- try {
11
- const url = new URL(uri);
12
- const dbName = url.pathname.slice(1);
13
- return dbName || null;
14
- } catch {
15
- return null;
16
- }
17
- }
18
-
19
- async connect(uri?: string, databaseName?: string): Promise<void> {
20
- if (this.client) {
21
- return;
22
- }
23
-
24
- const mongodbUri = uri || process.env.MONGO_URI || process.env.MONGODB_URI;
25
- validateConfig("MONGO_URI", mongodbUri);
26
- validateMongoUri(mongodbUri!);
27
-
28
- try {
29
- this.client = new MongoClient(mongodbUri!);
30
- await this.client.connect();
31
-
32
- const dbNameFromUri = this.extractDatabaseName(mongodbUri!);
33
- const dbName =
34
- databaseName || process.env.TALKPILOT_DB_NAME || dbNameFromUri;
35
-
36
- if (!dbName) {
37
- throw new Error(
38
- "[core-db] Database name not specified. Please pass databaseName to connect(), " +
39
- "add it to the URI, or set TALKPILOT_DB_NAME.",
40
- );
41
- }
42
-
43
- this.db = this.client.db(dbName);
44
- setDb(this.db);
45
- console.info(`[core-db] TalkPilot MongoDB connected: ${dbName}`);
46
- } catch (error) {
47
- console.error("[core-db] TalkPilot connection failed", error);
48
- throw error;
49
- }
50
- }
51
-
52
- async disconnect(): Promise<void> {
53
- if (this.client) {
54
- try {
55
- await this.client.close();
56
- this.client = null;
57
- this.db = null;
58
- console.info("MongoDB disconnected successfully");
59
- } catch (error) {
60
- console.error("[core-db] Disconnection failed", error);
61
- throw error;
62
- }
63
- }
64
- }
65
-
66
- getDb(): Db {
67
- if (!this.db) {
68
- throw new Error("Database not initialized. Call connect() first.");
69
- }
70
- return this.db;
71
- }
72
-
73
- isConnected(): boolean {
74
- return this.client !== null && this.client !== undefined;
75
- }
76
- }
77
-
78
- export const mongodbClient = new MongoDBClient();
1
+ import { MongoClient, Db } from "mongodb";
2
+ import { setDb } from "./index";
3
+ import { validateConfig, validateMongoUri } from "../utils/validation";
4
+
5
+ class MongoDBClient {
6
+ private client: MongoClient | null = null;
7
+ private db: Db | null = null;
8
+
9
+ private extractDatabaseName(uri: string): string | null {
10
+ try {
11
+ const url = new URL(uri);
12
+ const dbName = url.pathname.slice(1);
13
+ return dbName || null;
14
+ } catch {
15
+ return null;
16
+ }
17
+ }
18
+
19
+ async connect(uri?: string, databaseName?: string): Promise<void> {
20
+ if (this.client) {
21
+ return;
22
+ }
23
+
24
+ const mongodbUri = uri || process.env.MONGO_URI || process.env.MONGODB_URI;
25
+ validateConfig("MONGO_URI", mongodbUri);
26
+ validateMongoUri(mongodbUri!);
27
+
28
+ try {
29
+ this.client = new MongoClient(mongodbUri!);
30
+ await this.client.connect();
31
+
32
+ const dbNameFromUri = this.extractDatabaseName(mongodbUri!);
33
+ const dbName =
34
+ databaseName || process.env.TALKPILOT_DB_NAME || dbNameFromUri;
35
+
36
+ if (!dbName) {
37
+ throw new Error(
38
+ "[core-db] Database name not specified. Please pass databaseName to connect(), " +
39
+ "add it to the URI, or set TALKPILOT_DB_NAME.",
40
+ );
41
+ }
42
+
43
+ this.db = this.client.db(dbName);
44
+ setDb(this.db);
45
+ console.info(`[core-db] TalkPilot MongoDB connected: ${dbName}`);
46
+ } catch (error) {
47
+ console.error("[core-db] TalkPilot connection failed", error);
48
+ throw error;
49
+ }
50
+ }
51
+
52
+ async disconnect(): Promise<void> {
53
+ if (this.client) {
54
+ try {
55
+ await this.client.close();
56
+ this.client = null;
57
+ this.db = null;
58
+ console.info("MongoDB disconnected successfully");
59
+ } catch (error) {
60
+ console.error("[core-db] Disconnection failed", error);
61
+ throw error;
62
+ }
63
+ }
64
+ }
65
+
66
+ getDb(): Db {
67
+ if (!this.db) {
68
+ throw new Error("Database not initialized. Call connect() first.");
69
+ }
70
+ return this.db;
71
+ }
72
+
73
+ isConnected(): boolean {
74
+ return this.client !== null && this.client !== undefined;
75
+ }
76
+ }
77
+
78
+ export const mongodbClient = new MongoDBClient();