@talkpilot/core-db 1.3.5 → 1.3.7

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 (234) hide show
  1. package/.cursor/rules/development.mdc +65 -65
  2. package/DEVELOPMENT.md +141 -126
  3. package/README.md +190 -190
  4. package/README_OLD.md +160 -160
  5. package/dist/talkpilot/calls/calls.types.d.ts +5 -0
  6. package/dist/talkpilot/calls/calls.types.d.ts.map +1 -1
  7. package/dist/talkpilot/contextNotes/contextNotes.getters.d.ts +19 -0
  8. package/dist/talkpilot/contextNotes/contextNotes.getters.d.ts.map +1 -0
  9. package/dist/talkpilot/contextNotes/contextNotes.getters.js +57 -0
  10. package/dist/talkpilot/contextNotes/contextNotes.getters.js.map +1 -0
  11. package/dist/talkpilot/contextNotes/contextNotes.types.d.ts +19 -0
  12. package/dist/talkpilot/contextNotes/contextNotes.types.d.ts.map +1 -0
  13. package/dist/talkpilot/contextNotes/contextNotes.types.js +3 -0
  14. package/dist/talkpilot/contextNotes/contextNotes.types.js.map +1 -0
  15. package/dist/talkpilot/contextNotes/index.d.ts +3 -0
  16. package/dist/talkpilot/contextNotes/index.d.ts.map +1 -0
  17. package/dist/talkpilot/contextNotes/index.js +19 -0
  18. package/dist/talkpilot/contextNotes/index.js.map +1 -0
  19. package/dist/talkpilot/flows/flows.schema.d.ts +3 -0
  20. package/dist/talkpilot/flows/flows.schema.d.ts.map +1 -1
  21. package/dist/talkpilot/flows/flows.schema.js +1 -0
  22. package/dist/talkpilot/flows/flows.schema.js.map +1 -1
  23. package/dist/talkpilot/flows/flows.types.d.ts +2 -0
  24. package/dist/talkpilot/flows/flows.types.d.ts.map +1 -1
  25. package/dist/talkpilot/index.d.ts +2 -0
  26. package/dist/talkpilot/index.d.ts.map +1 -1
  27. package/dist/talkpilot/index.js +2 -0
  28. package/dist/talkpilot/index.js.map +1 -1
  29. package/dist/talkpilot/products/index.d.ts +3 -0
  30. package/dist/talkpilot/products/index.d.ts.map +1 -0
  31. package/dist/talkpilot/products/index.js +19 -0
  32. package/dist/talkpilot/products/index.js.map +1 -0
  33. package/dist/talkpilot/products/products.getters.d.ts +6 -0
  34. package/dist/talkpilot/products/products.getters.d.ts.map +1 -0
  35. package/dist/talkpilot/products/products.getters.js +14 -0
  36. package/dist/talkpilot/products/products.getters.js.map +1 -0
  37. package/dist/talkpilot/products/products.types.d.ts +9 -0
  38. package/dist/talkpilot/products/products.types.d.ts.map +1 -0
  39. package/dist/talkpilot/products/products.types.js +3 -0
  40. package/dist/talkpilot/products/products.types.js.map +1 -0
  41. package/dist/test-utils/factories/index.d.ts +1 -0
  42. package/dist/test-utils/factories/index.d.ts.map +1 -1
  43. package/dist/test-utils/factories/index.js +1 -0
  44. package/dist/test-utils/factories/index.js.map +1 -1
  45. package/dist/test-utils/factories/talkpilot/contextNotes.d.ts +16 -0
  46. package/dist/test-utils/factories/talkpilot/contextNotes.d.ts.map +1 -0
  47. package/dist/test-utils/factories/talkpilot/contextNotes.js +30 -0
  48. package/dist/test-utils/factories/talkpilot/contextNotes.js.map +1 -0
  49. package/jest.config.js +20 -19
  50. package/package.json +46 -46
  51. package/src/__tests__/setup.ts +20 -20
  52. package/src/connection.ts +54 -54
  53. package/src/index.ts +26 -26
  54. package/src/municipal/__tests__/validation.spec.ts +62 -62
  55. package/src/municipal/cities/cities.getters.ts +50 -50
  56. package/src/municipal/cities/cities.types.ts +11 -11
  57. package/src/municipal/cities/index.ts +2 -2
  58. package/src/municipal/departmentsSubjects/departmentsSubjects.getters.ts +282 -282
  59. package/src/municipal/departmentsSubjects/departmentsSubjects.types.ts +72 -72
  60. package/src/municipal/departmentsSubjects/index.ts +9 -9
  61. package/src/municipal/index.ts +22 -22
  62. package/src/municipal/mongodb-client.ts +61 -61
  63. package/src/municipal/muniIssues/__tests__/muniIssues.setters.spec.ts +92 -92
  64. package/src/municipal/muniIssues/__tests__/muniIssues.setup.spec.ts +92 -92
  65. package/src/municipal/muniIssues/index.ts +17 -17
  66. package/src/municipal/muniIssues/muniIssues.constants.ts +18 -18
  67. package/src/municipal/muniIssues/muniIssues.getters.ts +24 -24
  68. package/src/municipal/muniIssues/muniIssues.schema.ts +66 -66
  69. package/src/municipal/muniIssues/muniIssues.setters.ts +24 -24
  70. package/src/municipal/muniIssues/muniIssues.setup.ts +65 -65
  71. package/src/municipal/muniIssues/muniIssues.types.ts +37 -37
  72. package/src/municipal/streets/index.ts +2 -2
  73. package/src/municipal/streets/streets.getters.ts +125 -125
  74. package/src/municipal/streets/streets.types.ts +18 -18
  75. package/src/municipal/systemInstructions/__tests__/getters.spec.ts +113 -113
  76. package/src/municipal/systemInstructions/__tests__/setters.spec.ts +274 -274
  77. package/src/municipal/systemInstructions/index.ts +7 -7
  78. package/src/municipal/systemInstructions/instructions.getters.ts +57 -57
  79. package/src/municipal/systemInstructions/instructions.setters.ts +119 -119
  80. package/src/municipal/systemInstructions/instructions.types.ts +30 -30
  81. package/src/municipal/tickets/__tests__/tickets.getters.spec.ts +30 -30
  82. package/src/municipal/tickets/__tests__/tickets.statistics.spec.ts +51 -51
  83. package/src/municipal/tickets/index.ts +3 -3
  84. package/src/municipal/tickets/tickets.constants.ts +8 -8
  85. package/src/municipal/tickets/tickets.getters.ts +121 -121
  86. package/src/municipal/tickets/tickets.statistics.aggregation.ts +96 -96
  87. package/src/municipal/tickets/tickets.statistics.getters.ts +71 -71
  88. package/src/municipal/tickets/tickets.types.ts +53 -53
  89. package/src/municipal/utils/types.ts +11 -11
  90. package/src/talkpilot/__tests__/db.spec.ts +38 -38
  91. package/src/talkpilot/__tests__/mongodb-client.spec.ts +18 -18
  92. package/src/talkpilot/__tests__/validation.spec.ts +68 -68
  93. package/src/talkpilot/agents/__tests__/agents.getters.spec.ts +29 -29
  94. package/src/talkpilot/agents/agents.getters.ts +34 -34
  95. package/src/talkpilot/agents/agents.types.ts +14 -14
  96. package/src/talkpilot/agents/index.ts +2 -2
  97. package/src/talkpilot/backgroundToolResults/__tests__/backgroundToolResults.getters.spec.ts +147 -147
  98. package/src/talkpilot/backgroundToolResults/backgroundToolResults.getters.ts +65 -65
  99. package/src/talkpilot/backgroundToolResults/backgroundToolResults.types.ts +23 -23
  100. package/src/talkpilot/backgroundToolResults/index.ts +2 -2
  101. package/src/talkpilot/calls/__tests__/callStats.utils.spec.ts +128 -128
  102. package/src/talkpilot/calls/__tests__/calls.dashboard.spec.ts +149 -149
  103. package/src/talkpilot/calls/__tests__/calls.spec.ts +270 -270
  104. package/src/talkpilot/calls/__tests__/calls.statistics.spec.ts +344 -344
  105. package/src/talkpilot/calls/calls.constants.ts +20 -20
  106. package/src/talkpilot/calls/calls.getters.ts +248 -248
  107. package/src/talkpilot/calls/calls.statistics.getters.ts +587 -587
  108. package/src/talkpilot/calls/calls.statistics.types.ts +44 -44
  109. package/src/talkpilot/calls/calls.types.ts +119 -116
  110. package/src/talkpilot/calls/dashboard/calls.dashboard.ts +292 -292
  111. package/src/talkpilot/calls/dashboard/calls.dashboard.types.ts +57 -57
  112. package/src/talkpilot/calls/index.ts +6 -6
  113. package/src/talkpilot/clientAudioBuffers/__tests__/clientAudioBuffer.getters.spec.ts +160 -160
  114. package/src/talkpilot/clientAudioBuffers/clientAudioBuffer.getters.ts +117 -117
  115. package/src/talkpilot/clientAudioBuffers/clientsAudioBuffers.types.ts +25 -25
  116. package/src/talkpilot/clientAudioBuffers/index.ts +2 -2
  117. package/src/talkpilot/clients/clients.getters.ts +16 -16
  118. package/src/talkpilot/clients/clients.types.ts +14 -14
  119. package/src/talkpilot/clients/index.ts +2 -2
  120. package/src/talkpilot/clientsConfig/__tests__/clientsConfig.getters.spec.ts +53 -53
  121. package/src/talkpilot/clientsConfig/__tests__/clientsConfig.spec.ts +190 -190
  122. package/src/talkpilot/clientsConfig/clientsConfig.getters.ts +55 -55
  123. package/src/talkpilot/clientsConfig/clientsConfig.types.ts +127 -127
  124. package/src/talkpilot/clientsConfig/index.ts +2 -2
  125. package/src/talkpilot/contextNotes/__tests__/contextNotes.getters.spec.ts +176 -0
  126. package/src/talkpilot/contextNotes/contextNotes.getters.ts +86 -0
  127. package/src/talkpilot/contextNotes/contextNotes.types.ts +20 -0
  128. package/src/talkpilot/contextNotes/index.ts +2 -0
  129. package/src/talkpilot/flows/__tests__/flows.schema.spec.ts +96 -71
  130. package/src/talkpilot/flows/flows.getter.ts +14 -14
  131. package/src/talkpilot/flows/flows.schema.ts +154 -153
  132. package/src/talkpilot/flows/flows.types.ts +187 -184
  133. package/src/talkpilot/flows/index.ts +2 -2
  134. package/src/talkpilot/groups/__tests__/groups.spec.ts +90 -90
  135. package/src/talkpilot/groups/__tests__/phone.utils.spec.ts +32 -32
  136. package/src/talkpilot/groups/groups.getters.ts +30 -30
  137. package/src/talkpilot/groups/groups.types.ts +29 -29
  138. package/src/talkpilot/groups/index.ts +3 -3
  139. package/src/talkpilot/groups/phone.utils.ts +46 -46
  140. package/src/talkpilot/index.ts +31 -29
  141. package/src/talkpilot/leads/index.ts +2 -2
  142. package/src/talkpilot/leads/leads.getter.ts +6 -6
  143. package/src/talkpilot/leads/leads.schema.ts +33 -33
  144. package/src/talkpilot/leads/leads.types.ts +20 -20
  145. package/src/talkpilot/mongodb-client.ts +78 -78
  146. package/src/talkpilot/phone_numbers/__tests__/phone_numbers.spec.ts +252 -252
  147. package/src/talkpilot/phone_numbers/index.ts +2 -2
  148. package/src/talkpilot/phone_numbers/phone_numbers.getter.ts +158 -158
  149. package/src/talkpilot/phone_numbers/phone_numbers.schema.ts +17 -17
  150. package/src/talkpilot/phone_numbers/phone_numbers.types.ts +30 -30
  151. package/src/talkpilot/plans/__tests__/plans.spec.ts +70 -70
  152. package/src/talkpilot/plans/index.ts +2 -2
  153. package/src/talkpilot/plans/plans.getters.ts +132 -132
  154. package/src/talkpilot/plans/plans.types.ts +89 -89
  155. package/src/talkpilot/products/__tests__/products.getters.spec.ts +45 -0
  156. package/src/talkpilot/products/index.ts +2 -0
  157. package/src/talkpilot/products/products.getters.ts +12 -0
  158. package/src/talkpilot/products/products.types.ts +9 -0
  159. package/src/talkpilot/results/index.ts +7 -7
  160. package/src/talkpilot/results/results.getter.ts +39 -39
  161. package/src/talkpilot/results/results.schema.ts +25 -25
  162. package/src/talkpilot/results/results.types.ts +34 -34
  163. package/src/talkpilot/retry_analyze/__tests__/retryAnalyze.getters.spec.ts +156 -156
  164. package/src/talkpilot/retry_analyze/index.ts +2 -2
  165. package/src/talkpilot/retry_analyze/retryAnalyze.getters.ts +84 -84
  166. package/src/talkpilot/retry_analyze/retryAnalyze.types.ts +13 -13
  167. package/src/talkpilot/sessions/__tests__/sessions.spec.ts +147 -147
  168. package/src/talkpilot/sessions/index.ts +2 -2
  169. package/src/talkpilot/sessions/sessions.getter.ts +92 -92
  170. package/src/talkpilot/sessions/sessions.schema.ts +34 -34
  171. package/src/talkpilot/sessions/sessions.types.ts +30 -30
  172. package/src/talkpilot/subscriptions/__tests__/subscriptions.getters.utils.spec.ts +45 -45
  173. package/src/talkpilot/subscriptions/index.ts +3 -3
  174. package/src/talkpilot/subscriptions/subscriptions.getters.ts +146 -146
  175. package/src/talkpilot/subscriptions/subscriptions.getters.utils.ts +33 -33
  176. package/src/talkpilot/subscriptions/subscriptions.types.ts +66 -66
  177. package/src/talkpilot/utils/__tests__/query.utils.spec.ts +49 -49
  178. package/src/talkpilot/utils/query.utils.ts +21 -21
  179. package/src/test-utils/db-utils.ts +26 -26
  180. package/src/test-utils/factories/index.ts +15 -14
  181. package/src/test-utils/factories/municipal/cities.ts +16 -16
  182. package/src/test-utils/factories/municipal/departmentsSubjects.ts +37 -37
  183. package/src/test-utils/factories/municipal/muniIssues.ts +32 -32
  184. package/src/test-utils/factories/municipal/streets.ts +22 -22
  185. package/src/test-utils/factories/municipal/tickets.ts +39 -39
  186. package/src/test-utils/factories/talkpilot/agents.ts +19 -19
  187. package/src/test-utils/factories/talkpilot/calls.ts +37 -37
  188. package/src/test-utils/factories/talkpilot/clientAudioBuffers.ts +20 -20
  189. package/src/test-utils/factories/talkpilot/clientsConfig.ts +18 -18
  190. package/src/test-utils/factories/talkpilot/contextNotes.ts +33 -0
  191. package/src/test-utils/factories/talkpilot/flows.ts +33 -33
  192. package/src/test-utils/factories/talkpilot/groups.ts +33 -33
  193. package/src/test-utils/factories/talkpilot/phone_numbers.ts +22 -22
  194. package/src/test-utils/factories/talkpilot/sessions.ts +35 -35
  195. package/src/test-utils/factories/websitalk/scans.ts +23 -23
  196. package/src/utils/date.utils.ts +116 -116
  197. package/src/utils/shared.types.ts +4 -4
  198. package/src/utils/validation.ts +23 -23
  199. package/src/websitalk/index.ts +15 -15
  200. package/src/websitalk/mongodb-client.ts +61 -61
  201. package/src/websitalk/scans/__tests__/scans.spec.ts +218 -218
  202. package/src/websitalk/scans/index.ts +2 -2
  203. package/src/websitalk/scans/scans.getters.ts +113 -113
  204. package/src/websitalk/scans/scans.types.ts +53 -53
  205. package/tsconfig.json +23 -23
  206. package/.claude/settings.local.json +0 -11
  207. package/dist/municipal/tickets/tickets.deprecated.getters.d.ts +0 -12
  208. package/dist/municipal/tickets/tickets.deprecated.getters.d.ts.map +0 -1
  209. package/dist/municipal/tickets/tickets.deprecated.getters.js +0 -131
  210. package/dist/municipal/tickets/tickets.deprecated.getters.js.map +0 -1
  211. package/dist/municipal/tickets/tickets.statistics.dates.d.ts +0 -7
  212. package/dist/municipal/tickets/tickets.statistics.dates.d.ts.map +0 -1
  213. package/dist/municipal/tickets/tickets.statistics.dates.js +0 -40
  214. package/dist/municipal/tickets/tickets.statistics.dates.js.map +0 -1
  215. package/dist/municipal/tickets/tickets.statistics.pipeline.d.ts +0 -53
  216. package/dist/municipal/tickets/tickets.statistics.pipeline.d.ts.map +0 -1
  217. package/dist/municipal/tickets/tickets.statistics.pipeline.js +0 -112
  218. package/dist/municipal/tickets/tickets.statistics.pipeline.js.map +0 -1
  219. package/dist/municipal/tickets/tickets.statistics.utils.d.ts +0 -7
  220. package/dist/municipal/tickets/tickets.statistics.utils.d.ts.map +0 -1
  221. package/dist/municipal/tickets/tickets.statistics.utils.js +0 -40
  222. package/dist/municipal/tickets/tickets.statistics.utils.js.map +0 -1
  223. package/dist/talkpilot/calls/calls.statistics.ticketScope.d.ts +0 -12
  224. package/dist/talkpilot/calls/calls.statistics.ticketScope.d.ts.map +0 -1
  225. package/dist/talkpilot/calls/calls.statistics.ticketScope.js +0 -37
  226. package/dist/talkpilot/calls/calls.statistics.ticketScope.js.map +0 -1
  227. package/dist/talkpilot/calls/calls.statistics.tickets.d.ts +0 -17
  228. package/dist/talkpilot/calls/calls.statistics.tickets.d.ts.map +0 -1
  229. package/dist/talkpilot/calls/calls.statistics.tickets.js +0 -33
  230. package/dist/talkpilot/calls/calls.statistics.tickets.js.map +0 -1
  231. package/dist/utils/statistics.aggregation.d.ts +0 -20
  232. package/dist/utils/statistics.aggregation.d.ts.map +0 -1
  233. package/dist/utils/statistics.aggregation.js +0 -43
  234. package/dist/utils/statistics.aggregation.js.map +0 -1
@@ -1,53 +1,53 @@
1
- import { ObjectId, WithId } from "mongodb";
2
-
3
- import { CityName } from "../utils/types";
4
-
5
- export type Ticket = {
6
- _id: ObjectId;
7
- createdAt: Date;
8
- updatedAt: Date;
9
- callSid?: string;
10
- cityName: CityName;
11
- externalCallFields: {
12
- first_name?: string;
13
- last_name?: string;
14
- event_description?: string;
15
- street?: string;
16
- house_number?: string;
17
- event_subject_id?: string;
18
- event_sub_subject_id?: string;
19
- event_sub_subject_id2?: string | null;
20
- call_number?: string;
21
- status?: number;
22
- error?: string;
23
- image1?: string;
24
- image2?: string;
25
- image3?: string;
26
- file1?: string;
27
- file2?: string;
28
- file3?: string;
29
- };
30
- guestJwt?: string;
31
- };
32
-
33
- export type TicketDoc = WithId<Ticket>;
34
-
35
- export type SubjectItem = {
36
- subject: string;
37
- count: number;
38
- };
39
-
40
- export type TicketSubjectRow = {
41
- callSid: string;
42
- subject: string;
43
- };
44
-
45
- export type TicketStatsDateScope = {
46
- from?: Date;
47
- to?: Date;
48
- };
49
-
50
- export type TicketStatsDateRange = {
51
- from: Date;
52
- to: Date;
53
- };
1
+ import { ObjectId, WithId } from "mongodb";
2
+
3
+ import { CityName } from "../utils/types";
4
+
5
+ export type Ticket = {
6
+ _id: ObjectId;
7
+ createdAt: Date;
8
+ updatedAt: Date;
9
+ callSid?: string;
10
+ cityName: CityName;
11
+ externalCallFields: {
12
+ first_name?: string;
13
+ last_name?: string;
14
+ event_description?: string;
15
+ street?: string;
16
+ house_number?: string;
17
+ event_subject_id?: string;
18
+ event_sub_subject_id?: string;
19
+ event_sub_subject_id2?: string | null;
20
+ call_number?: string;
21
+ status?: number;
22
+ error?: string;
23
+ image1?: string;
24
+ image2?: string;
25
+ image3?: string;
26
+ file1?: string;
27
+ file2?: string;
28
+ file3?: string;
29
+ };
30
+ guestJwt?: string;
31
+ };
32
+
33
+ export type TicketDoc = WithId<Ticket>;
34
+
35
+ export type SubjectItem = {
36
+ subject: string;
37
+ count: number;
38
+ };
39
+
40
+ export type TicketSubjectRow = {
41
+ callSid: string;
42
+ subject: string;
43
+ };
44
+
45
+ export type TicketStatsDateScope = {
46
+ from?: Date;
47
+ to?: Date;
48
+ };
49
+
50
+ export type TicketStatsDateRange = {
51
+ from: Date;
52
+ to: Date;
53
+ };
@@ -1,11 +1,11 @@
1
- /**
2
- * City name type for municipal data
3
- */
4
- export type CityName =
5
- | "ashdod"
6
- | "maltar"
7
- | "billit"
8
- | "hashkelon"
9
- | "eilat"
10
- | "tests"
11
- | string;
1
+ /**
2
+ * City name type for municipal data
3
+ */
4
+ export type CityName =
5
+ | "ashdod"
6
+ | "maltar"
7
+ | "billit"
8
+ | "hashkelon"
9
+ | "eilat"
10
+ | "tests"
11
+ | string;
@@ -1,38 +1,38 @@
1
- import {
2
- getFlowsCollection,
3
- getSessionsCollection,
4
- getResultsCollection,
5
- getLeadsCollection,
6
- getPhoneNumbersCollection,
7
- getClientsCollection,
8
- ObjectId,
9
- getPlansCollection,
10
- getSubscriptionsCollection,
11
- } from "../index";
12
-
13
- import { ObjectId as MongoObjectId } from "mongodb";
14
-
15
- describe("talkpilot core/db", () => {
16
- it.each([
17
- ["flows", getFlowsCollection],
18
- ["sessions", getSessionsCollection],
19
- ["results", getResultsCollection],
20
- ["leads", getLeadsCollection],
21
- ["phone_numbers", getPhoneNumbersCollection],
22
- ["clients", getClientsCollection],
23
- ["plans", getPlansCollection],
24
- ["subscriptions", getSubscriptionsCollection],
25
- ])('%s collection helper returns a "%s" collection', (name, getter) => {
26
- expect(getter().collectionName).toBe(name);
27
- });
28
-
29
- it("ObjectId re-export behaves like mongodb.ObjectId", () => {
30
- expect(ObjectId).toBe(MongoObjectId);
31
-
32
- const id = new ObjectId();
33
-
34
- expect(id).toBeInstanceOf(MongoObjectId);
35
- expect(ObjectId.isValid(id)).toBe(true);
36
- expect(id.toHexString()).toHaveLength(24);
37
- });
38
- });
1
+ import {
2
+ getFlowsCollection,
3
+ getSessionsCollection,
4
+ getResultsCollection,
5
+ getLeadsCollection,
6
+ getPhoneNumbersCollection,
7
+ getClientsCollection,
8
+ ObjectId,
9
+ getPlansCollection,
10
+ getSubscriptionsCollection,
11
+ } from "../index";
12
+
13
+ import { ObjectId as MongoObjectId } from "mongodb";
14
+
15
+ describe("talkpilot core/db", () => {
16
+ it.each([
17
+ ["flows", getFlowsCollection],
18
+ ["sessions", getSessionsCollection],
19
+ ["results", getResultsCollection],
20
+ ["leads", getLeadsCollection],
21
+ ["phone_numbers", getPhoneNumbersCollection],
22
+ ["clients", getClientsCollection],
23
+ ["plans", getPlansCollection],
24
+ ["subscriptions", getSubscriptionsCollection],
25
+ ])('%s collection helper returns a "%s" collection', (name, getter) => {
26
+ expect(getter().collectionName).toBe(name);
27
+ });
28
+
29
+ it("ObjectId re-export behaves like mongodb.ObjectId", () => {
30
+ expect(ObjectId).toBe(MongoObjectId);
31
+
32
+ const id = new ObjectId();
33
+
34
+ expect(id).toBeInstanceOf(MongoObjectId);
35
+ expect(ObjectId.isValid(id)).toBe(true);
36
+ expect(id.toHexString()).toHaveLength(24);
37
+ });
38
+ });
@@ -1,18 +1,18 @@
1
- import { getDb } from "../index";
2
-
3
- describe("MongoDBClient", () => {
4
- it("should have a connected database instance from global setup", () => {
5
- const db = getDb();
6
- expect(db).toBeDefined();
7
- expect(db.databaseName).toBe("test"); // Based on our setup.ts
8
- });
9
-
10
- it("should report as connected", async () => {
11
- // Note: mongodbClient.connect() was called in global setup
12
- // but through setDb, not necessarily through the client singleton instance
13
- // since initTestDb calls setDb directly.
14
-
15
- // In a real scenario, you'd use the client.
16
- expect(true).toBe(true);
17
- });
18
- });
1
+ import { getDb } from "../index";
2
+
3
+ describe("MongoDBClient", () => {
4
+ it("should have a connected database instance from global setup", () => {
5
+ const db = getDb();
6
+ expect(db).toBeDefined();
7
+ expect(db.databaseName).toBe("test"); // Based on our setup.ts
8
+ });
9
+
10
+ it("should report as connected", async () => {
11
+ // Note: mongodbClient.connect() was called in global setup
12
+ // but through setDb, not necessarily through the client singleton instance
13
+ // since initTestDb calls setDb directly.
14
+
15
+ // In a real scenario, you'd use the client.
16
+ expect(true).toBe(true);
17
+ });
18
+ });
@@ -1,68 +1,68 @@
1
- import { mongodbClient } from "../mongodb-client";
2
- import { MongoClient } from "mongodb";
3
-
4
- describe("MongoDBClient Validation", () => {
5
- const originalEnv = process.env;
6
-
7
- beforeEach(() => {
8
- process.env = { ...originalEnv };
9
- delete process.env.MONGO_URI;
10
- delete process.env.MONGODB_URI;
11
- delete process.env.MONGODB_DB_NAME;
12
-
13
- // Force reset singleton state
14
- (mongodbClient as any).client = null;
15
- (mongodbClient as any).db = null;
16
- });
17
-
18
- afterAll(async () => {
19
- process.env = originalEnv;
20
- // Ensure we are disconnected
21
- await mongodbClient.disconnect();
22
- });
23
-
24
- it("should throw error if no URI is provided", async () => {
25
- await expect(mongodbClient.connect()).rejects.toThrow(
26
- "[core-db] Configuration Error: 'MONGO_URI' is missing",
27
- );
28
- });
29
-
30
- it("should throw error if an invalid URI format is provided", async () => {
31
- await expect(mongodbClient.connect("not-a-mongo-uri")).rejects.toThrow(
32
- "[core-db] Connection Error: The provided MongoDB URI is invalid",
33
- );
34
- });
35
-
36
- it("should throw error if URI is valid but database name is missing", async () => {
37
- // We mock the actual MongoClient connection so it doesn't try to hit a real network
38
- const connectSpy = jest
39
- .spyOn(MongoClient.prototype, "connect")
40
- .mockResolvedValue({} as any);
41
-
42
- const uriWithoutDb = "mongodb://127.0.0.1:27017";
43
- await expect(mongodbClient.connect(uriWithoutDb)).rejects.toThrow(
44
- "[core-db] Database name not specified",
45
- );
46
-
47
- connectSpy.mockRestore();
48
- });
49
-
50
- it("should succeed when valid URI and DB name are provided", async () => {
51
- const mockDb = { databaseName: "my-db" };
52
- const connectSpy = jest
53
- .spyOn(MongoClient.prototype, "connect")
54
- .mockResolvedValue({} as any);
55
- const dbSpy = jest
56
- .spyOn(MongoClient.prototype, "db")
57
- .mockReturnValue(mockDb as any);
58
-
59
- const validUri = "mongodb://127.0.0.1:27017/my-db";
60
- await mongodbClient.connect(validUri);
61
-
62
- expect(mongodbClient.getDb()).toBeDefined();
63
- expect(mongodbClient.getDb().databaseName).toBe("my-db");
64
-
65
- connectSpy.mockRestore();
66
- dbSpy.mockRestore();
67
- });
68
- });
1
+ import { mongodbClient } from "../mongodb-client";
2
+ import { MongoClient } from "mongodb";
3
+
4
+ describe("MongoDBClient Validation", () => {
5
+ const originalEnv = process.env;
6
+
7
+ beforeEach(() => {
8
+ process.env = { ...originalEnv };
9
+ delete process.env.MONGO_URI;
10
+ delete process.env.MONGODB_URI;
11
+ delete process.env.MONGODB_DB_NAME;
12
+
13
+ // Force reset singleton state
14
+ (mongodbClient as any).client = null;
15
+ (mongodbClient as any).db = null;
16
+ });
17
+
18
+ afterAll(async () => {
19
+ process.env = originalEnv;
20
+ // Ensure we are disconnected
21
+ await mongodbClient.disconnect();
22
+ });
23
+
24
+ it("should throw error if no URI is provided", async () => {
25
+ await expect(mongodbClient.connect()).rejects.toThrow(
26
+ "[core-db] Configuration Error: 'MONGO_URI' is missing",
27
+ );
28
+ });
29
+
30
+ it("should throw error if an invalid URI format is provided", async () => {
31
+ await expect(mongodbClient.connect("not-a-mongo-uri")).rejects.toThrow(
32
+ "[core-db] Connection Error: The provided MongoDB URI is invalid",
33
+ );
34
+ });
35
+
36
+ it("should throw error if URI is valid but database name is missing", async () => {
37
+ // We mock the actual MongoClient connection so it doesn't try to hit a real network
38
+ const connectSpy = jest
39
+ .spyOn(MongoClient.prototype, "connect")
40
+ .mockResolvedValue({} as any);
41
+
42
+ const uriWithoutDb = "mongodb://127.0.0.1:27017";
43
+ await expect(mongodbClient.connect(uriWithoutDb)).rejects.toThrow(
44
+ "[core-db] Database name not specified",
45
+ );
46
+
47
+ connectSpy.mockRestore();
48
+ });
49
+
50
+ it("should succeed when valid URI and DB name are provided", async () => {
51
+ const mockDb = { databaseName: "my-db" };
52
+ const connectSpy = jest
53
+ .spyOn(MongoClient.prototype, "connect")
54
+ .mockResolvedValue({} as any);
55
+ const dbSpy = jest
56
+ .spyOn(MongoClient.prototype, "db")
57
+ .mockReturnValue(mockDb as any);
58
+
59
+ const validUri = "mongodb://127.0.0.1:27017/my-db";
60
+ await mongodbClient.connect(validUri);
61
+
62
+ expect(mongodbClient.getDb()).toBeDefined();
63
+ expect(mongodbClient.getDb().databaseName).toBe("my-db");
64
+
65
+ connectSpy.mockRestore();
66
+ dbSpy.mockRestore();
67
+ });
68
+ });
@@ -1,29 +1,29 @@
1
- import { findAgents } from "../agents.getters";
2
- import { setDb } from "../../index";
3
- import { Db, Collection } from "mongodb";
4
- import { createAgent } from "../../../test-utils/factories";
5
-
6
- describe("agents getters", () => {
7
- let mockDb: Partial<Db>;
8
- let mockCollection: Partial<Collection>;
9
-
10
- beforeEach(() => {
11
- const mockAgent = createAgent({ name: "Agent Smith" });
12
- mockCollection = {
13
- find: jest.fn().mockReturnValue({
14
- toArray: jest.fn().mockResolvedValue([mockAgent]),
15
- }),
16
- };
17
- mockDb = {
18
- collection: jest.fn().mockReturnValue(mockCollection),
19
- };
20
- setDb(mockDb as Db);
21
- });
22
-
23
- it("findAgents should return agents", async () => {
24
- const result = await findAgents();
25
-
26
- expect(mockDb.collection).toHaveBeenCalledWith("agents");
27
- expect(result[0].name).toBe("Agent Smith");
28
- });
29
- });
1
+ import { findAgents } from "../agents.getters";
2
+ import { setDb } from "../../index";
3
+ import { Db, Collection } from "mongodb";
4
+ import { createAgent } from "../../../test-utils/factories";
5
+
6
+ describe("agents getters", () => {
7
+ let mockDb: Partial<Db>;
8
+ let mockCollection: Partial<Collection>;
9
+
10
+ beforeEach(() => {
11
+ const mockAgent = createAgent({ name: "Agent Smith" });
12
+ mockCollection = {
13
+ find: jest.fn().mockReturnValue({
14
+ toArray: jest.fn().mockResolvedValue([mockAgent]),
15
+ }),
16
+ };
17
+ mockDb = {
18
+ collection: jest.fn().mockReturnValue(mockCollection),
19
+ };
20
+ setDb(mockDb as Db);
21
+ });
22
+
23
+ it("findAgents should return agents", async () => {
24
+ const result = await findAgents();
25
+
26
+ expect(mockDb.collection).toHaveBeenCalledWith("agents");
27
+ expect(result[0].name).toBe("Agent Smith");
28
+ });
29
+ });
@@ -1,34 +1,34 @@
1
- import { getDb, Agent, ObjectId } from "../index";
2
-
3
- export const getAgentsCollection = () => {
4
- return getDb().collection<Agent>("agents");
5
- };
6
-
7
- export const findAgents = async (filter: any = {}) => {
8
- return getAgentsCollection().find(filter).toArray();
9
- };
10
-
11
- export const findAgentById = (agentId: string) => {
12
- return getAgentsCollection().findOne({ _id: new ObjectId(agentId) });
13
- };
14
-
15
- export const findAgentsByClientId = (clientId: string) => {
16
- return getAgentsCollection().find({ clientId }).toArray();
17
- };
18
-
19
- export const createAgent = async (agent: Agent) => {
20
- const { insertedId } = await getAgentsCollection().insertOne(agent);
21
- return findAgentById(String(insertedId));
22
- };
23
-
24
- export const updateAgent = (agentId: string, data: Partial<Agent>) => {
25
- return getAgentsCollection().findOneAndUpdate(
26
- { _id: new ObjectId(agentId) },
27
- { $set: data },
28
- { returnDocument: "after" },
29
- );
30
- };
31
-
32
- export const removeAgent = (agentId: string) => {
33
- return getAgentsCollection().deleteOne({ _id: new ObjectId(agentId) });
34
- };
1
+ import { getDb, Agent, ObjectId } from "../index";
2
+
3
+ export const getAgentsCollection = () => {
4
+ return getDb().collection<Agent>("agents");
5
+ };
6
+
7
+ export const findAgents = async (filter: any = {}) => {
8
+ return getAgentsCollection().find(filter).toArray();
9
+ };
10
+
11
+ export const findAgentById = (agentId: string) => {
12
+ return getAgentsCollection().findOne({ _id: new ObjectId(agentId) });
13
+ };
14
+
15
+ export const findAgentsByClientId = (clientId: string) => {
16
+ return getAgentsCollection().find({ clientId }).toArray();
17
+ };
18
+
19
+ export const createAgent = async (agent: Agent) => {
20
+ const { insertedId } = await getAgentsCollection().insertOne(agent);
21
+ return findAgentById(String(insertedId));
22
+ };
23
+
24
+ export const updateAgent = (agentId: string, data: Partial<Agent>) => {
25
+ return getAgentsCollection().findOneAndUpdate(
26
+ { _id: new ObjectId(agentId) },
27
+ { $set: data },
28
+ { returnDocument: "after" },
29
+ );
30
+ };
31
+
32
+ export const removeAgent = (agentId: string) => {
33
+ return getAgentsCollection().deleteOne({ _id: new ObjectId(agentId) });
34
+ };
@@ -1,14 +1,14 @@
1
- import { WithId } from "mongodb";
2
-
3
- export type Agent = {
4
- name: string;
5
- language: string;
6
- voice: string;
7
- instructions: string;
8
- labels: string[];
9
- clientId: string;
10
- role: string;
11
- gender: "male" | "female";
12
- };
13
-
14
- export type AgentDoc = WithId<Agent>;
1
+ import { WithId } from "mongodb";
2
+
3
+ export type Agent = {
4
+ name: string;
5
+ language: string;
6
+ voice: string;
7
+ instructions: string;
8
+ labels: string[];
9
+ clientId: string;
10
+ role: string;
11
+ gender: "male" | "female";
12
+ };
13
+
14
+ export type AgentDoc = WithId<Agent>;
@@ -1,2 +1,2 @@
1
- export * from "./agents.getters";
2
- export * from "./agents.types";
1
+ export * from "./agents.getters";
2
+ export * from "./agents.types";