@talkpilot/core-db 1.3.48 → 1.3.49

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 (227) 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 +778 -777
  5. package/dist/talkpilot/clients/clients.quota.constants.d.ts +2 -0
  6. package/dist/talkpilot/clients/clients.quota.constants.d.ts.map +1 -0
  7. package/dist/talkpilot/clients/clients.quota.constants.js +5 -0
  8. package/dist/talkpilot/clients/clients.quota.constants.js.map +1 -0
  9. package/dist/talkpilot/clients/clients.quota.utils.d.ts +8 -0
  10. package/dist/talkpilot/clients/clients.quota.utils.d.ts.map +1 -0
  11. package/dist/talkpilot/clients/clients.quota.utils.js +45 -0
  12. package/dist/talkpilot/clients/clients.quota.utils.js.map +1 -0
  13. package/dist/talkpilot/flows/flows.getter.d.ts +4 -1
  14. package/dist/talkpilot/flows/flows.getter.d.ts.map +1 -1
  15. package/dist/talkpilot/flows/flows.getter.js +12 -1
  16. package/dist/talkpilot/flows/flows.getter.js.map +1 -1
  17. package/dist/talkpilot/flows/flows.schema.d.ts +31 -0
  18. package/dist/talkpilot/flows/flows.schema.d.ts.map +1 -1
  19. package/dist/talkpilot/flows/flows.schema.js +25 -0
  20. package/dist/talkpilot/flows/flows.schema.js.map +1 -1
  21. package/dist/talkpilot/flows/flows.types.d.ts +14 -0
  22. package/dist/talkpilot/flows/flows.types.d.ts.map +1 -1
  23. package/dist/talkpilot/flows/index.d.ts +1 -1
  24. package/dist/talkpilot/flows/index.d.ts.map +1 -1
  25. package/dist/talkpilot/flows/index.js +3 -1
  26. package/dist/talkpilot/flows/index.js.map +1 -1
  27. package/jest.config.js +20 -20
  28. package/package.json +46 -46
  29. package/src/__tests__/setup.ts +20 -20
  30. package/src/bulkWrite/__tests__/bulkWrite.spec.ts +65 -65
  31. package/src/bulkWrite/bulkWrite.ops.ts +45 -45
  32. package/src/bulkWrite/bulkWrite.types.ts +4 -4
  33. package/src/bulkWrite/index.ts +2 -2
  34. package/src/config.ts +9 -9
  35. package/src/configuration/index.ts +17 -17
  36. package/src/configuration/internalModels/index.ts +3 -3
  37. package/src/configuration/internalModels/internalModels.constants.ts +1 -1
  38. package/src/configuration/internalModels/internalModels.getters.ts +33 -33
  39. package/src/configuration/internalModels/internalModels.types.ts +12 -12
  40. package/src/configuration/models/index.ts +25 -25
  41. package/src/configuration/models/models.constants.ts +13 -13
  42. package/src/configuration/models/models.getters.ts +53 -53
  43. package/src/configuration/models/models.types.ts +79 -79
  44. package/src/configuration/mongodb-client.ts +62 -62
  45. package/src/configuration/prompts/index.ts +2 -2
  46. package/src/configuration/prompts/prompts.getters.ts +49 -49
  47. package/src/configuration/prompts/prompts.types.ts +11 -11
  48. package/src/connection.ts +81 -81
  49. package/src/index.ts +46 -46
  50. package/src/municipal/__tests__/validation.spec.ts +62 -62
  51. package/src/municipal/cities/cities.getters.ts +50 -50
  52. package/src/municipal/cities/cities.types.ts +11 -11
  53. package/src/municipal/cities/index.ts +2 -2
  54. package/src/municipal/departmentsSubjects/__tests__/departmentsSubjects.spec.ts +272 -272
  55. package/src/municipal/departmentsSubjects/departmentsSubjects.getters.ts +317 -317
  56. package/src/municipal/departmentsSubjects/departmentsSubjects.types.ts +73 -73
  57. package/src/municipal/departmentsSubjects/index.ts +9 -9
  58. package/src/municipal/index.ts +22 -22
  59. package/src/municipal/mongodb-client.ts +61 -61
  60. package/src/municipal/muniIssues/__tests__/muniIssues.setters.spec.ts +94 -94
  61. package/src/municipal/muniIssues/__tests__/muniIssues.setup.spec.ts +92 -92
  62. package/src/municipal/muniIssues/index.ts +17 -17
  63. package/src/municipal/muniIssues/muniIssues.constants.ts +18 -18
  64. package/src/municipal/muniIssues/muniIssues.getters.ts +24 -24
  65. package/src/municipal/muniIssues/muniIssues.schema.ts +66 -66
  66. package/src/municipal/muniIssues/muniIssues.setters.ts +24 -24
  67. package/src/municipal/muniIssues/muniIssues.setup.ts +65 -65
  68. package/src/municipal/muniIssues/muniIssues.types.ts +37 -37
  69. package/src/municipal/streets/__tests__/streets.spec.ts +253 -253
  70. package/src/municipal/streets/index.ts +2 -2
  71. package/src/municipal/streets/streets.getters.ts +140 -140
  72. package/src/municipal/streets/streets.types.ts +19 -19
  73. package/src/municipal/systemInstructions/__tests__/getters.spec.ts +113 -113
  74. package/src/municipal/systemInstructions/__tests__/setters.spec.ts +274 -274
  75. package/src/municipal/systemInstructions/index.ts +7 -7
  76. package/src/municipal/systemInstructions/instructions.getters.ts +57 -57
  77. package/src/municipal/systemInstructions/instructions.setters.ts +119 -119
  78. package/src/municipal/systemInstructions/instructions.types.ts +30 -30
  79. package/src/municipal/tickets/__tests__/tickets.getters.spec.ts +30 -30
  80. package/src/municipal/tickets/__tests__/tickets.statistics.spec.ts +99 -99
  81. package/src/municipal/tickets/index.ts +9 -9
  82. package/src/municipal/tickets/tickets.constants.ts +8 -8
  83. package/src/municipal/tickets/tickets.getters.ts +121 -121
  84. package/src/municipal/tickets/tickets.statistics.aggregation.ts +110 -110
  85. package/src/municipal/tickets/tickets.statistics.getters.ts +145 -145
  86. package/src/municipal/tickets/tickets.types.ts +54 -54
  87. package/src/municipal/utils/types.ts +11 -11
  88. package/src/talkpilot/__tests__/db.spec.ts +38 -38
  89. package/src/talkpilot/__tests__/mongodb-client.spec.ts +18 -18
  90. package/src/talkpilot/__tests__/validation.spec.ts +68 -68
  91. package/src/talkpilot/agents/__tests__/agents.getters.spec.ts +29 -29
  92. package/src/talkpilot/agents/agents.getters.ts +34 -34
  93. package/src/talkpilot/agents/agents.types.ts +14 -14
  94. package/src/talkpilot/agents/index.ts +2 -2
  95. package/src/talkpilot/backgroundToolResults/__tests__/backgroundToolResults.getters.spec.ts +147 -147
  96. package/src/talkpilot/backgroundToolResults/backgroundToolResults.getters.ts +65 -65
  97. package/src/talkpilot/backgroundToolResults/backgroundToolResults.types.ts +23 -23
  98. package/src/talkpilot/backgroundToolResults/index.ts +2 -2
  99. package/src/talkpilot/calls/__tests__/callStats.utils.spec.ts +128 -128
  100. package/src/talkpilot/calls/__tests__/calls.dashboard.spec.ts +229 -229
  101. package/src/talkpilot/calls/__tests__/calls.spec.ts +471 -471
  102. package/src/talkpilot/calls/__tests__/calls.statistics.spec.ts +483 -483
  103. package/src/talkpilot/calls/calls.constants.ts +49 -49
  104. package/src/talkpilot/calls/calls.getters.ts +277 -277
  105. package/src/talkpilot/calls/calls.statistics.getters.ts +668 -668
  106. package/src/talkpilot/calls/calls.statistics.types.ts +48 -48
  107. package/src/talkpilot/calls/calls.types.ts +149 -149
  108. package/src/talkpilot/calls/dashboard/calls.dashboard.ts +295 -295
  109. package/src/talkpilot/calls/dashboard/calls.dashboard.types.ts +57 -57
  110. package/src/talkpilot/calls/index.ts +6 -6
  111. package/src/talkpilot/clientAudioBuffers/__tests__/clientAudioBuffer.getters.spec.ts +160 -160
  112. package/src/talkpilot/clientAudioBuffers/clientAudioBuffer.getters.ts +117 -117
  113. package/src/talkpilot/clientAudioBuffers/clientsAudioBuffers.types.ts +25 -25
  114. package/src/talkpilot/clientAudioBuffers/index.ts +2 -2
  115. package/src/talkpilot/clients/__tests__/clients.quota.spec.ts +123 -123
  116. package/src/talkpilot/clients/clients.getters.ts +16 -16
  117. package/src/talkpilot/clients/clients.quota.getters.ts +119 -119
  118. package/src/talkpilot/clients/clients.quota.types.ts +27 -27
  119. package/src/talkpilot/clients/clients.types.ts +18 -18
  120. package/src/talkpilot/clients/index.ts +4 -4
  121. package/src/talkpilot/clientsConfig/__tests__/clientsConfig.getters.spec.ts +423 -423
  122. package/src/talkpilot/clientsConfig/__tests__/clientsConfig.spec.ts +212 -212
  123. package/src/talkpilot/clientsConfig/clientsConfig.constants.ts +2 -2
  124. package/src/talkpilot/clientsConfig/clientsConfig.getters.ts +247 -247
  125. package/src/talkpilot/clientsConfig/clientsConfig.types.ts +136 -136
  126. package/src/talkpilot/clientsConfig/index.ts +3 -3
  127. package/src/talkpilot/contextNotes/__tests__/contextNotes.getters.spec.ts +217 -217
  128. package/src/talkpilot/contextNotes/contextNotes.getters.ts +85 -85
  129. package/src/talkpilot/contextNotes/contextNotes.types.ts +20 -20
  130. package/src/talkpilot/contextNotes/index.ts +2 -2
  131. package/src/talkpilot/flows/__tests__/flows.schema.spec.ts +124 -99
  132. package/src/talkpilot/flows/flows.getter.ts +34 -14
  133. package/src/talkpilot/flows/flows.schema.ts +180 -155
  134. package/src/talkpilot/flows/flows.types.ts +211 -189
  135. package/src/talkpilot/flows/index.ts +7 -2
  136. package/src/talkpilot/groups/__tests__/groups.spec.ts +90 -90
  137. package/src/talkpilot/groups/__tests__/phone.utils.spec.ts +32 -32
  138. package/src/talkpilot/groups/groups.getters.ts +30 -30
  139. package/src/talkpilot/groups/groups.types.ts +29 -29
  140. package/src/talkpilot/groups/index.ts +3 -3
  141. package/src/talkpilot/groups/phone.utils.ts +46 -46
  142. package/src/talkpilot/index.ts +31 -31
  143. package/src/talkpilot/leads/index.ts +2 -2
  144. package/src/talkpilot/leads/leads.getter.ts +6 -6
  145. package/src/talkpilot/leads/leads.schema.ts +33 -33
  146. package/src/talkpilot/leads/leads.types.ts +20 -20
  147. package/src/talkpilot/mongodb-client.ts +78 -78
  148. package/src/talkpilot/phone_numbers/__tests__/phone_numbers.spec.ts +282 -282
  149. package/src/talkpilot/phone_numbers/index.ts +2 -2
  150. package/src/talkpilot/phone_numbers/phone_numbers.getter.ts +176 -176
  151. package/src/talkpilot/phone_numbers/phone_numbers.schema.ts +17 -17
  152. package/src/talkpilot/phone_numbers/phone_numbers.types.ts +30 -30
  153. package/src/talkpilot/plans/__tests__/plans.spec.ts +70 -70
  154. package/src/talkpilot/plans/index.ts +2 -2
  155. package/src/talkpilot/plans/plans.getters.ts +132 -132
  156. package/src/talkpilot/plans/plans.types.ts +89 -89
  157. package/src/talkpilot/products/__tests__/products.getters.spec.ts +44 -44
  158. package/src/talkpilot/products/index.ts +2 -2
  159. package/src/talkpilot/products/products.getters.ts +12 -12
  160. package/src/talkpilot/products/products.types.ts +9 -9
  161. package/src/talkpilot/results/index.ts +7 -7
  162. package/src/talkpilot/results/results.getter.ts +39 -39
  163. package/src/talkpilot/results/results.schema.ts +25 -25
  164. package/src/talkpilot/results/results.types.ts +34 -34
  165. package/src/talkpilot/retry_analyze/__tests__/retryAnalyze.getters.spec.ts +156 -156
  166. package/src/talkpilot/retry_analyze/index.ts +2 -2
  167. package/src/talkpilot/retry_analyze/retryAnalyze.getters.ts +84 -84
  168. package/src/talkpilot/retry_analyze/retryAnalyze.types.ts +13 -13
  169. package/src/talkpilot/sessions/__tests__/sessions.spec.ts +147 -147
  170. package/src/talkpilot/sessions/index.ts +2 -2
  171. package/src/talkpilot/sessions/sessions.getter.ts +92 -92
  172. package/src/talkpilot/sessions/sessions.schema.ts +34 -34
  173. package/src/talkpilot/sessions/sessions.types.ts +30 -30
  174. package/src/talkpilot/subscriptions/__tests__/subscriptions.getters.utils.spec.ts +45 -45
  175. package/src/talkpilot/subscriptions/index.ts +3 -3
  176. package/src/talkpilot/subscriptions/subscriptions.getters.ts +146 -146
  177. package/src/talkpilot/subscriptions/subscriptions.getters.utils.ts +33 -33
  178. package/src/talkpilot/subscriptions/subscriptions.types.ts +66 -66
  179. package/src/talkpilot/utils/__tests__/query.utils.spec.ts +49 -49
  180. package/src/talkpilot/utils/query.utils.ts +21 -21
  181. package/src/test-utils/db-utils.ts +33 -33
  182. package/src/test-utils/factories/index.ts +18 -18
  183. package/src/test-utils/factories/municipal/cities.ts +16 -16
  184. package/src/test-utils/factories/municipal/departmentsSubjects.ts +37 -37
  185. package/src/test-utils/factories/municipal/muniIssues.ts +32 -32
  186. package/src/test-utils/factories/municipal/streets.ts +22 -22
  187. package/src/test-utils/factories/municipal/tickets.ts +39 -39
  188. package/src/test-utils/factories/talkpilot/agents.ts +19 -19
  189. package/src/test-utils/factories/talkpilot/calls.ts +37 -37
  190. package/src/test-utils/factories/talkpilot/clientAudioBuffers.ts +20 -20
  191. package/src/test-utils/factories/talkpilot/clientsConfig.ts +18 -18
  192. package/src/test-utils/factories/talkpilot/contextNotes.ts +40 -40
  193. package/src/test-utils/factories/talkpilot/flows.ts +33 -33
  194. package/src/test-utils/factories/talkpilot/groups.ts +33 -33
  195. package/src/test-utils/factories/talkpilot/phone_numbers.ts +22 -22
  196. package/src/test-utils/factories/talkpilot/sessions.ts +35 -35
  197. package/src/test-utils/factories/websitalk/knowledgeDocuments.ts +29 -29
  198. package/src/test-utils/factories/websitalk/scanResources.ts +26 -26
  199. package/src/test-utils/factories/websitalk/scans.ts +29 -29
  200. package/src/test-utils/factories/websitalk/websiteUrls.ts +17 -17
  201. package/src/utils/date.utils.ts +126 -126
  202. package/src/utils/shared.types.ts +4 -4
  203. package/src/utils/validation.ts +23 -23
  204. package/src/websitalk/index.ts +18 -18
  205. package/src/websitalk/knowledgeDocuments/__tests__/knowledgeDocuments.spec.ts +186 -186
  206. package/src/websitalk/knowledgeDocuments/index.ts +3 -3
  207. package/src/websitalk/knowledgeDocuments/knowledgeDocuments.constants.ts +17 -17
  208. package/src/websitalk/knowledgeDocuments/knowledgeDocuments.getters.ts +78 -78
  209. package/src/websitalk/knowledgeDocuments/knowledgeDocuments.types.ts +62 -62
  210. package/src/websitalk/mongodb-client.ts +61 -61
  211. package/src/websitalk/scanResources/__tests__/scanResources.spec.ts +193 -193
  212. package/src/websitalk/scanResources/index.ts +4 -4
  213. package/src/websitalk/scanResources/scanResources.constants.ts +47 -47
  214. package/src/websitalk/scanResources/scanResources.getters.ts +102 -102
  215. package/src/websitalk/scanResources/scanResources.types.ts +90 -90
  216. package/src/websitalk/scanResources/scanResources.utils.ts +31 -31
  217. package/src/websitalk/scans/__tests__/scans.spec.ts +313 -313
  218. package/src/websitalk/scans/index.ts +4 -4
  219. package/src/websitalk/scans/scans.constants.ts +15 -15
  220. package/src/websitalk/scans/scans.getters.ts +166 -166
  221. package/src/websitalk/scans/scans.types.ts +54 -54
  222. package/src/websitalk/scans/scans.utils.ts +5 -5
  223. package/src/websitalk/websiteUrls/__tests__/websiteUrls.spec.ts +77 -77
  224. package/src/websitalk/websiteUrls/index.ts +2 -2
  225. package/src/websitalk/websiteUrls/websiteUrls.getters.ts +65 -65
  226. package/src/websitalk/websiteUrls/websiteUrls.types.ts +13 -13
  227. package/tsconfig.json +23 -23
@@ -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();