@talkpilot/core-db 1.3.19 → 1.3.21

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