@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,92 +1,92 @@
1
- import { ObjectId } from "mongodb";
2
- import type { Collection, WithId } from "mongodb";
3
- import { getDb, getPhoneNumbersCollection } from "../index";
4
- import type { Session } from "./sessions.types";
5
-
6
- export const getSessionsCollection = (): Collection<Session> =>
7
- getDb().collection<Session>("sessions");
8
-
9
- const buildPhoneCandidates = (phone: string): string[] => {
10
- const raw = (phone ?? "").trim();
11
- if (!raw) return [];
12
-
13
- const noPlus = raw.startsWith("+") ? raw.slice(1) : raw;
14
- const digitsOnly = raw.replace(/\D/g, "");
15
- const digitsOnlyNoPlus = noPlus.replace(/\D/g, "");
16
-
17
- return Array.from(
18
- new Set([raw, noPlus, digitsOnly, digitsOnlyNoPlus].filter(Boolean)),
19
- );
20
- };
21
-
22
- const buildFlowIdCandidates = (flowId: unknown): Array<string | ObjectId> => {
23
- if (!flowId) return [];
24
-
25
- // Some sessions store flow_id as string, others as ObjectId.
26
- if (flowId instanceof ObjectId) {
27
- return [flowId, flowId.toString()];
28
- }
29
-
30
- const asString = String(flowId);
31
- if (!asString) return [];
32
-
33
- if (ObjectId.isValid(asString)) {
34
- return [new ObjectId(asString), asString];
35
- }
36
- return [asString];
37
- };
38
-
39
- export const findSessionById = (
40
- sessionId: ObjectId,
41
- clientId: string,
42
- ): Promise<WithId<Session> | null> => {
43
- return getSessionsCollection().findOne({
44
- _id: sessionId,
45
- clientId: clientId,
46
- });
47
- };
48
-
49
- export const findSessionOfIncomingCall = async (from: string, to: string) => {
50
- const toCandidates = buildPhoneCandidates(to);
51
- const fromCandidates = buildPhoneCandidates(from);
52
-
53
- const receiverPhoneData = await getPhoneNumbersCollection().findOne({
54
- phone_number: { $in: toCandidates },
55
- });
56
- if (!receiverPhoneData) {
57
- return null;
58
- }
59
-
60
- const flowIdCandidates = buildFlowIdCandidates(receiverPhoneData.flow_id);
61
-
62
- const [session] = await getSessionsCollection()
63
- .aggregate<WithId<Session>>([
64
- {
65
- $match: {
66
- flow_id: { $in: flowIdCandidates },
67
- phone_numbers: {
68
- $elemMatch: { phoneNumber: { $in: fromCandidates } },
69
- },
70
- },
71
- },
72
- {
73
- $addFields: {
74
- phone_numbers: {
75
- $filter: {
76
- input: "$phone_numbers",
77
- as: "pn",
78
- cond: { $in: ["$$pn.phoneNumber", fromCandidates] },
79
- },
80
- },
81
- },
82
- },
83
- { $limit: 1 },
84
- ])
85
- .toArray();
86
-
87
- if (!session) {
88
- console.info("No session found for incoming call");
89
- return null;
90
- }
91
- return session;
92
- };
1
+ import { ObjectId } from "mongodb";
2
+ import type { Collection, WithId } from "mongodb";
3
+ import { getDb, getPhoneNumbersCollection } from "../index";
4
+ import type { Session } from "./sessions.types";
5
+
6
+ export const getSessionsCollection = (): Collection<Session> =>
7
+ getDb().collection<Session>("sessions");
8
+
9
+ const buildPhoneCandidates = (phone: string): string[] => {
10
+ const raw = (phone ?? "").trim();
11
+ if (!raw) return [];
12
+
13
+ const noPlus = raw.startsWith("+") ? raw.slice(1) : raw;
14
+ const digitsOnly = raw.replace(/\D/g, "");
15
+ const digitsOnlyNoPlus = noPlus.replace(/\D/g, "");
16
+
17
+ return Array.from(
18
+ new Set([raw, noPlus, digitsOnly, digitsOnlyNoPlus].filter(Boolean)),
19
+ );
20
+ };
21
+
22
+ const buildFlowIdCandidates = (flowId: unknown): Array<string | ObjectId> => {
23
+ if (!flowId) return [];
24
+
25
+ // Some sessions store flow_id as string, others as ObjectId.
26
+ if (flowId instanceof ObjectId) {
27
+ return [flowId, flowId.toString()];
28
+ }
29
+
30
+ const asString = String(flowId);
31
+ if (!asString) return [];
32
+
33
+ if (ObjectId.isValid(asString)) {
34
+ return [new ObjectId(asString), asString];
35
+ }
36
+ return [asString];
37
+ };
38
+
39
+ export const findSessionById = (
40
+ sessionId: ObjectId,
41
+ clientId: string,
42
+ ): Promise<WithId<Session> | null> => {
43
+ return getSessionsCollection().findOne({
44
+ _id: sessionId,
45
+ clientId: clientId,
46
+ });
47
+ };
48
+
49
+ export const findSessionOfIncomingCall = async (from: string, to: string) => {
50
+ const toCandidates = buildPhoneCandidates(to);
51
+ const fromCandidates = buildPhoneCandidates(from);
52
+
53
+ const receiverPhoneData = await getPhoneNumbersCollection().findOne({
54
+ phone_number: { $in: toCandidates },
55
+ });
56
+ if (!receiverPhoneData) {
57
+ return null;
58
+ }
59
+
60
+ const flowIdCandidates = buildFlowIdCandidates(receiverPhoneData.flow_id);
61
+
62
+ const [session] = await getSessionsCollection()
63
+ .aggregate<WithId<Session>>([
64
+ {
65
+ $match: {
66
+ flow_id: { $in: flowIdCandidates },
67
+ phone_numbers: {
68
+ $elemMatch: { phoneNumber: { $in: fromCandidates } },
69
+ },
70
+ },
71
+ },
72
+ {
73
+ $addFields: {
74
+ phone_numbers: {
75
+ $filter: {
76
+ input: "$phone_numbers",
77
+ as: "pn",
78
+ cond: { $in: ["$$pn.phoneNumber", fromCandidates] },
79
+ },
80
+ },
81
+ },
82
+ },
83
+ { $limit: 1 },
84
+ ])
85
+ .toArray();
86
+
87
+ if (!session) {
88
+ console.info("No session found for incoming call");
89
+ return null;
90
+ }
91
+ return session;
92
+ };
@@ -1,34 +1,34 @@
1
- export const sessionMongoSchema = {
2
- bsonType: "object",
3
- required: ["session_name"],
4
- properties: {
5
- _id: { bsonType: "objectId" },
6
- session_name: { bsonType: "string" },
7
- company_name: { bsonType: ["string", "null"] },
8
- flow_id: { bsonType: ["objectId", "string", "null"] },
9
- metaKeys: {
10
- bsonType: ["array", "null"],
11
- items: {
12
- bsonType: "object",
13
- required: ["key"],
14
- properties: {
15
- key: { bsonType: "string" },
16
- value: { bsonType: "string" },
17
- },
18
- },
19
- },
20
- phone_numbers: {
21
- bsonType: "array",
22
- items: {
23
- bsonType: "object",
24
- required: ["name", "phoneNumber"],
25
- properties: {
26
- name: { bsonType: "string" },
27
- phoneNumber: { bsonType: "string" },
28
- },
29
- },
30
- },
31
- voice: { bsonType: ["string", "null"] },
32
- },
33
- additionalProperties: false,
34
- } as const;
1
+ export const sessionMongoSchema = {
2
+ bsonType: "object",
3
+ required: ["session_name"],
4
+ properties: {
5
+ _id: { bsonType: "objectId" },
6
+ session_name: { bsonType: "string" },
7
+ company_name: { bsonType: ["string", "null"] },
8
+ flow_id: { bsonType: ["objectId", "string", "null"] },
9
+ metaKeys: {
10
+ bsonType: ["array", "null"],
11
+ items: {
12
+ bsonType: "object",
13
+ required: ["key"],
14
+ properties: {
15
+ key: { bsonType: "string" },
16
+ value: { bsonType: "string" },
17
+ },
18
+ },
19
+ },
20
+ phone_numbers: {
21
+ bsonType: "array",
22
+ items: {
23
+ bsonType: "object",
24
+ required: ["name", "phoneNumber"],
25
+ properties: {
26
+ name: { bsonType: "string" },
27
+ phoneNumber: { bsonType: "string" },
28
+ },
29
+ },
30
+ },
31
+ voice: { bsonType: ["string", "null"] },
32
+ },
33
+ additionalProperties: false,
34
+ } as const;
@@ -1,30 +1,30 @@
1
- import { ObjectId } from "mongodb";
2
-
3
- export type Session = {
4
- _id?: ObjectId;
5
-
6
- session_name: string;
7
- company_name?: string | null;
8
- flow_id?: ObjectId | string | null;
9
- clientId: string;
10
-
11
- metaKeys?: Array<{
12
- key: string;
13
- value?: string;
14
- }> | null;
15
-
16
- phone_numbers: Array<{
17
- name: string;
18
- phoneNumber: string;
19
- gender: "male" | "female";
20
- }>;
21
-
22
- voice?: string | null;
23
- json: Record<string, any> | null;
24
-
25
- // Timestamps
26
- createdAt?: Date;
27
- updatedAt?: Date;
28
- };
29
-
30
- export type SessionDoc = Session & { _id: ObjectId };
1
+ import { ObjectId } from "mongodb";
2
+
3
+ export type Session = {
4
+ _id?: ObjectId;
5
+
6
+ session_name: string;
7
+ company_name?: string | null;
8
+ flow_id?: ObjectId | string | null;
9
+ clientId: string;
10
+
11
+ metaKeys?: Array<{
12
+ key: string;
13
+ value?: string;
14
+ }> | null;
15
+
16
+ phone_numbers: Array<{
17
+ name: string;
18
+ phoneNumber: string;
19
+ gender: "male" | "female";
20
+ }>;
21
+
22
+ voice?: string | null;
23
+ json: Record<string, any> | null;
24
+
25
+ // Timestamps
26
+ createdAt?: Date;
27
+ updatedAt?: Date;
28
+ };
29
+
30
+ export type SessionDoc = Session & { _id: ObjectId };
@@ -1,45 +1,45 @@
1
- import { ObjectId } from "mongodb";
2
- import {
3
- buildSimpleQuery,
4
- buildDateRangeFilter,
5
- } from "../subscriptions.getters.utils";
6
- import { SimpleSubscriptionFilter } from "../subscriptions.types";
7
-
8
- describe("subscriptions.getters.utils", () => {
9
- describe("buildSimpleQuery", () => {
10
- it("returns empty query when filter is empty", () => {
11
- const filter: SimpleSubscriptionFilter = {};
12
- const result = buildSimpleQuery(filter);
13
- expect(result).toEqual({});
14
- });
15
-
16
- it("converts _id string to ObjectId", () => {
17
- const id = "507f1f77bcf86cd799439011";
18
- const filter: SimpleSubscriptionFilter = { _id: id };
19
- const result = buildSimpleQuery(filter);
20
- expect(result._id).toBeInstanceOf(ObjectId);
21
- expect((result._id as ObjectId).toHexString()).toBe(id);
22
- });
23
-
24
- it("includes valid simple fields", () => {
25
- const filter: SimpleSubscriptionFilter = {
26
- clientId: "abc",
27
- isActive: true,
28
- };
29
- const result = buildSimpleQuery(filter);
30
- expect(result).toEqual({ clientId: "abc", isActive: true });
31
- });
32
- });
33
-
34
- describe("buildDateRangeFilter", () => {
35
- it("returns a mongo date range filter", () => {
36
- const from = new Date("2023-01-01");
37
- const to = new Date("2023-01-02");
38
- const result = buildDateRangeFilter(from, to);
39
- expect(result).toEqual({
40
- $gte: from,
41
- $lt: to,
42
- });
43
- });
44
- });
45
- });
1
+ import { ObjectId } from "mongodb";
2
+ import {
3
+ buildSimpleQuery,
4
+ buildDateRangeFilter,
5
+ } from "../subscriptions.getters.utils";
6
+ import { SimpleSubscriptionFilter } from "../subscriptions.types";
7
+
8
+ describe("subscriptions.getters.utils", () => {
9
+ describe("buildSimpleQuery", () => {
10
+ it("returns empty query when filter is empty", () => {
11
+ const filter: SimpleSubscriptionFilter = {};
12
+ const result = buildSimpleQuery(filter);
13
+ expect(result).toEqual({});
14
+ });
15
+
16
+ it("converts _id string to ObjectId", () => {
17
+ const id = "507f1f77bcf86cd799439011";
18
+ const filter: SimpleSubscriptionFilter = { _id: id };
19
+ const result = buildSimpleQuery(filter);
20
+ expect(result._id).toBeInstanceOf(ObjectId);
21
+ expect((result._id as ObjectId).toHexString()).toBe(id);
22
+ });
23
+
24
+ it("includes valid simple fields", () => {
25
+ const filter: SimpleSubscriptionFilter = {
26
+ clientId: "abc",
27
+ isActive: true,
28
+ };
29
+ const result = buildSimpleQuery(filter);
30
+ expect(result).toEqual({ clientId: "abc", isActive: true });
31
+ });
32
+ });
33
+
34
+ describe("buildDateRangeFilter", () => {
35
+ it("returns a mongo date range filter", () => {
36
+ const from = new Date("2023-01-01");
37
+ const to = new Date("2023-01-02");
38
+ const result = buildDateRangeFilter(from, to);
39
+ expect(result).toEqual({
40
+ $gte: from,
41
+ $lt: to,
42
+ });
43
+ });
44
+ });
45
+ });
@@ -1,3 +1,3 @@
1
- export * from "./subscriptions.types";
2
- export * from "./subscriptions.getters";
3
- export * from "./subscriptions.getters.utils";
1
+ export * from "./subscriptions.types";
2
+ export * from "./subscriptions.getters";
3
+ export * from "./subscriptions.getters.utils";