@talkpilot/core-db 1.2.0 → 1.2.1

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 (132) hide show
  1. package/.cursor/rules/development.mdc +65 -65
  2. package/DEVELOPMENT.md +98 -98
  3. package/README.md +160 -160
  4. package/dist/talkpilot/calls/calls.getters.d.ts +1 -2
  5. package/dist/talkpilot/calls/calls.getters.d.ts.map +1 -1
  6. package/dist/talkpilot/calls/calls.getters.js +0 -176
  7. package/dist/talkpilot/calls/calls.getters.js.map +1 -1
  8. package/dist/talkpilot/calls/calls.types.d.ts +0 -48
  9. package/dist/talkpilot/calls/calls.types.d.ts.map +1 -1
  10. package/dist/talkpilot/clientsConfig/clientsConfig.getters.d.ts +0 -1
  11. package/dist/talkpilot/clientsConfig/clientsConfig.getters.d.ts.map +1 -1
  12. package/dist/talkpilot/clientsConfig/clientsConfig.getters.js +0 -13
  13. package/dist/talkpilot/clientsConfig/clientsConfig.getters.js.map +1 -1
  14. package/dist/talkpilot/clientsConfig/clientsConfig.types.d.ts +16 -8
  15. package/dist/talkpilot/clientsConfig/clientsConfig.types.d.ts.map +1 -1
  16. package/jest.config.js +19 -19
  17. package/package.json +45 -45
  18. package/src/__tests__/setup.ts +20 -20
  19. package/src/connection.ts +42 -42
  20. package/src/index.ts +16 -16
  21. package/src/municipal/__tests__/validation.spec.ts +62 -62
  22. package/src/municipal/cities/cities.getters.ts +50 -50
  23. package/src/municipal/cities/cities.types.ts +11 -11
  24. package/src/municipal/cities/index.ts +2 -2
  25. package/src/municipal/departmentsSubjects/departmentsSubjects.getters.ts +282 -282
  26. package/src/municipal/departmentsSubjects/departmentsSubjects.types.ts +72 -72
  27. package/src/municipal/departmentsSubjects/index.ts +9 -9
  28. package/src/municipal/index.ts +21 -21
  29. package/src/municipal/mongodb-client.ts +61 -61
  30. package/src/municipal/streets/index.ts +2 -2
  31. package/src/municipal/streets/streets.getters.ts +125 -125
  32. package/src/municipal/streets/streets.types.ts +18 -18
  33. package/src/municipal/systemInstructions/__tests__/getters.spec.ts +113 -113
  34. package/src/municipal/systemInstructions/__tests__/setters.spec.ts +274 -274
  35. package/src/municipal/systemInstructions/index.ts +7 -7
  36. package/src/municipal/systemInstructions/instructions.getters.ts +57 -57
  37. package/src/municipal/systemInstructions/instructions.setters.ts +119 -119
  38. package/src/municipal/systemInstructions/instructions.types.ts +30 -30
  39. package/src/municipal/tickets/__tests__/tickets.getters.spec.ts +66 -66
  40. package/src/municipal/tickets/index.ts +2 -2
  41. package/src/municipal/tickets/tickets.getters.ts +261 -261
  42. package/src/municipal/tickets/tickets.types.ts +43 -43
  43. package/src/municipal/utils/types.ts +11 -11
  44. package/src/talkpilot/__tests__/db.spec.ts +38 -38
  45. package/src/talkpilot/__tests__/mongodb-client.spec.ts +18 -18
  46. package/src/talkpilot/__tests__/validation.spec.ts +68 -68
  47. package/src/talkpilot/agents/__tests__/agents.getters.spec.ts +29 -29
  48. package/src/talkpilot/agents/agents.getters.ts +34 -34
  49. package/src/talkpilot/agents/agents.types.ts +14 -14
  50. package/src/talkpilot/agents/index.ts +2 -2
  51. package/src/talkpilot/backgroundToolResults/__tests__/backgroundToolResults.getters.spec.ts +147 -147
  52. package/src/talkpilot/backgroundToolResults/backgroundToolResults.getters.ts +65 -65
  53. package/src/talkpilot/backgroundToolResults/backgroundToolResults.types.ts +23 -23
  54. package/src/talkpilot/backgroundToolResults/index.ts +2 -2
  55. package/src/talkpilot/calls/__tests__/callStats.utils.spec.ts +128 -128
  56. package/src/talkpilot/calls/__tests__/calls.spec.ts +252 -252
  57. package/src/talkpilot/calls/calls.getters.ts +248 -446
  58. package/src/talkpilot/calls/calls.types.ts +115 -171
  59. package/src/talkpilot/calls/index.ts +2 -2
  60. package/src/talkpilot/clientAudioBuffers/__tests__/clientAudioBuffer.getters.spec.ts +160 -160
  61. package/src/talkpilot/clientAudioBuffers/clientAudioBuffer.getters.ts +117 -117
  62. package/src/talkpilot/clientAudioBuffers/clientsAudioBuffers.types.ts +25 -25
  63. package/src/talkpilot/clientAudioBuffers/index.ts +2 -2
  64. package/src/talkpilot/clients/clients.getters.ts +16 -16
  65. package/src/talkpilot/clients/clients.types.ts +14 -14
  66. package/src/talkpilot/clients/index.ts +2 -2
  67. package/src/talkpilot/clientsConfig/__tests__/clientsConfig.spec.ts +187 -106
  68. package/src/talkpilot/clientsConfig/clientsConfig.getters.ts +22 -44
  69. package/src/talkpilot/clientsConfig/clientsConfig.types.ts +119 -94
  70. package/src/talkpilot/clientsConfig/index.ts +2 -2
  71. package/src/talkpilot/flows/__tests__/flows.schema.spec.ts +67 -67
  72. package/src/talkpilot/flows/flows.getter.ts +14 -14
  73. package/src/talkpilot/flows/flows.schema.ts +153 -153
  74. package/src/talkpilot/flows/flows.types.ts +184 -184
  75. package/src/talkpilot/flows/index.ts +2 -2
  76. package/src/talkpilot/groups/__tests__/groups.spec.ts +90 -90
  77. package/src/talkpilot/groups/__tests__/phone.utils.spec.ts +32 -32
  78. package/src/talkpilot/groups/groups.getters.ts +30 -30
  79. package/src/talkpilot/groups/groups.types.ts +29 -29
  80. package/src/talkpilot/groups/index.ts +3 -3
  81. package/src/talkpilot/groups/phone.utils.ts +46 -46
  82. package/src/talkpilot/index.ts +29 -29
  83. package/src/talkpilot/leads/index.ts +2 -2
  84. package/src/talkpilot/leads/leads.getter.ts +6 -6
  85. package/src/talkpilot/leads/leads.schema.ts +33 -33
  86. package/src/talkpilot/leads/leads.types.ts +20 -20
  87. package/src/talkpilot/mongodb-client.ts +78 -78
  88. package/src/talkpilot/phone_numbers/__tests__/phone_numbers.spec.ts +247 -247
  89. package/src/talkpilot/phone_numbers/index.ts +2 -2
  90. package/src/talkpilot/phone_numbers/phone_numbers.getter.ts +154 -154
  91. package/src/talkpilot/phone_numbers/phone_numbers.schema.ts +17 -17
  92. package/src/talkpilot/phone_numbers/phone_numbers.types.ts +30 -30
  93. package/src/talkpilot/plans/__tests__/plans.spec.ts +70 -70
  94. package/src/talkpilot/plans/index.ts +2 -2
  95. package/src/talkpilot/plans/plans.getters.ts +132 -132
  96. package/src/talkpilot/plans/plans.types.ts +89 -89
  97. package/src/talkpilot/results/index.ts +7 -7
  98. package/src/talkpilot/results/results.getter.ts +35 -35
  99. package/src/talkpilot/results/results.schema.ts +25 -25
  100. package/src/talkpilot/results/results.types.ts +34 -34
  101. package/src/talkpilot/retry_analyze/__tests__/retryAnalyze.getters.spec.ts +156 -156
  102. package/src/talkpilot/retry_analyze/index.ts +2 -2
  103. package/src/talkpilot/retry_analyze/retryAnalyze.getters.ts +75 -75
  104. package/src/talkpilot/retry_analyze/retryAnalyze.types.ts +13 -13
  105. package/src/talkpilot/sessions/__tests__/sessions.spec.ts +147 -147
  106. package/src/talkpilot/sessions/index.ts +2 -2
  107. package/src/talkpilot/sessions/sessions.getter.ts +92 -92
  108. package/src/talkpilot/sessions/sessions.schema.ts +34 -34
  109. package/src/talkpilot/sessions/sessions.types.ts +30 -30
  110. package/src/talkpilot/subscriptions/__tests__/subscriptions.getters.utils.spec.ts +45 -45
  111. package/src/talkpilot/subscriptions/index.ts +3 -3
  112. package/src/talkpilot/subscriptions/subscriptions.getters.ts +146 -146
  113. package/src/talkpilot/subscriptions/subscriptions.getters.utils.ts +33 -33
  114. package/src/talkpilot/subscriptions/subscriptions.types.ts +66 -66
  115. package/src/talkpilot/utils/__tests__/query.utils.spec.ts +49 -49
  116. package/src/talkpilot/utils/query.utils.ts +21 -21
  117. package/src/test-utils/db-utils.ts +24 -24
  118. package/src/test-utils/factories/index.ts +12 -12
  119. package/src/test-utils/factories/municipal/cities.ts +16 -16
  120. package/src/test-utils/factories/municipal/departmentsSubjects.ts +37 -37
  121. package/src/test-utils/factories/municipal/streets.ts +22 -22
  122. package/src/test-utils/factories/municipal/tickets.ts +39 -39
  123. package/src/test-utils/factories/talkpilot/agents.ts +19 -19
  124. package/src/test-utils/factories/talkpilot/calls.ts +37 -37
  125. package/src/test-utils/factories/talkpilot/clientAudioBuffers.ts +20 -20
  126. package/src/test-utils/factories/talkpilot/clientsConfig.ts +18 -18
  127. package/src/test-utils/factories/talkpilot/flows.ts +33 -33
  128. package/src/test-utils/factories/talkpilot/groups.ts +33 -33
  129. package/src/test-utils/factories/talkpilot/phone_numbers.ts +22 -22
  130. package/src/test-utils/factories/talkpilot/sessions.ts +35 -35
  131. package/src/utils/validation.ts +23 -23
  132. package/tsconfig.json +23 -23
@@ -1,44 +1,22 @@
1
- import { ClientConfigDoc, getDb, findClientByPhoneNumber } from "../index";
2
- import { Collection } from "mongodb";
3
-
4
- export const getClientsConfigCollection = (): Collection<ClientConfigDoc> => {
5
- return getDb().collection<ClientConfigDoc>("clientsConfig");
6
- };
7
-
8
- export const getClientConfig = (clientId: string) => {
9
- return getClientsConfigCollection().findOne({ clientId });
10
- };
11
-
12
- export const getClientConfigByPhone = async (phone: string) => {
13
- const client = await findClientByPhoneNumber(phone);
14
- if (!client) return null;
15
- return getClientConfig(client.clientId);
16
- };
17
-
18
- export const createClientConfigDoc = async (
19
- clientConfig: ClientConfigDoc,
20
- ): Promise<void> => {
21
- await getClientsConfigCollection().insertOne(clientConfig);
22
- };
23
-
24
- export async function updateWebsitalkDefaultBaseUrl(
25
- clientId: string,
26
- defaultBaseUrl: string,
27
- ): Promise<void> {
28
- try {
29
- const result = await getClientsConfigCollection().updateOne(
30
- { clientId },
31
- { $set: { "products.websiteTalk.defaultBaseUrl": defaultBaseUrl } },
32
- );
33
-
34
- if (result.matchedCount === 0) {
35
- throw new Error(`No client config found for clientId: ${clientId}`);
36
- }
37
- } catch (error) {
38
- console.error(
39
- `[core-db] Error updating defaultBaseUrl for client: ${clientId}`,
40
- error
41
- );
42
- throw error;
43
- }
44
- }
1
+ import { ClientConfigDoc, getDb, findClientByPhoneNumber } from "../index";
2
+ import { Collection } from "mongodb";
3
+
4
+ export const getClientsConfigCollection = (): Collection<ClientConfigDoc> => {
5
+ return getDb().collection<ClientConfigDoc>("clientsConfig");
6
+ };
7
+
8
+ export const getClientConfig = (clientId: string) => {
9
+ return getClientsConfigCollection().findOne({ clientId });
10
+ };
11
+
12
+ export const getClientConfigByPhone = async (phone: string) => {
13
+ const client = await findClientByPhoneNumber(phone);
14
+ if (!client) return null;
15
+ return getClientConfig(client.clientId);
16
+ };
17
+
18
+ export const createClientConfigDoc = async (
19
+ clientConfig: ClientConfigDoc,
20
+ ): Promise<void> => {
21
+ await getClientsConfigCollection().insertOne(clientConfig);
22
+ };
@@ -1,94 +1,119 @@
1
- import { WithId } from "mongodb";
2
-
3
- export type InitiateCallForShortSlaConfig = {
4
- active: boolean;
5
- max_hours: number;
6
- contacts?: { name: string; phoneNumber: string }[];
7
- flow_id?: string | string[];
8
- };
9
-
10
- export type Moked106Config = {
11
- initiate_call_for_short_sla?: InitiateCallForShortSlaConfig;
12
- avoidSaveTickets?: boolean;
13
- withUploadImagesSms?: boolean;
14
- withNeedAttentionCalls?: boolean;
15
- };
16
-
17
- export type MunicipalProduct = {
18
- moked_106?: Moked106Config;
19
- cityName: string;
20
- crmName?: string;
21
- cityDisplayName?: string;
22
- cityLogoURL?: string;
23
- timezone: string;
24
- websiteUrl?: string;
25
- isProductionReady?: boolean;
26
- municipalDisplayName?: string;
27
- findSubjectsSystemPrompt?: string;
28
- findStreetsSystemPrompt?: string;
29
- };
30
-
31
- export type WebsiteTalkScheduler = {
32
- type: "cron";
33
- schedule: string;
34
- };
35
-
36
- export type WebsiteTalkProduct = {
37
- logoUrl: string;
38
- companyName: string;
39
- timezone: string;
40
- language: string;
41
- defaultBaseUrl: string;
42
- scheduler?: WebsiteTalkScheduler;
43
- };
44
-
45
- export type Products = {
46
- municipal?: MunicipalProduct;
47
- clinics?: ClinicsProduct;
48
- websiteTalk?: WebsiteTalkProduct;
49
- [key: string]: unknown;
50
- };
51
-
52
- export type ClinicsProduct = {
53
- api_key_secret_name: string;
54
- base_api_url: string;
55
- provider: "clinix" | (string & {});
56
- description?: string;
57
- };
58
-
59
- export type ClientLanguageName =
60
- | "Hebrew"
61
- | "English"
62
- | "Russian"
63
- | "French"
64
- | "Spanish"
65
- | (string & {});
66
-
67
- export type SendGridConfig = {
68
- emailTo: string[];
69
- templateId?: string;
70
- senderId?: string;
71
- };
72
-
73
- export type SmsConfig = {};
74
-
75
- export type WhatsappConfig = {};
76
-
77
- export type CommunicationsConfig = {
78
- sendGrid?: SendGridConfig;
79
- sms?: SmsConfig;
80
- whatsapp?: WhatsappConfig;
81
- };
82
-
83
- export type ClientConfig<P extends Products = Products> = {
84
- clientId: string;
85
- phoneNumber?: string;
86
- language?: ClientLanguageName;
87
- products: P;
88
- timezone?: string;
89
- communications?: CommunicationsConfig;
90
- };
91
-
92
- export type ClientConfigDoc<P extends Products = Products> = WithId<
93
- ClientConfig<P>
94
- >;
1
+ import { WithId } from "mongodb";
2
+
3
+ // ---------------------------------------------------------------------------
4
+ // Moked106 (MIS)
5
+ // ---------------------------------------------------------------------------
6
+
7
+ export type InitiateCallForShortSlaConfig = {
8
+ active: boolean;
9
+ max_hours: number;
10
+ contacts?: { name: string; phoneNumber: string }[];
11
+ flow_id?: string | string[];
12
+ };
13
+
14
+ /** Per-tool LLM system prompt overrides. Falls back to hardcoded defaults when absent. */
15
+ export type Moked106ToolPrompts = {
16
+ findSubjectsSystemPrompt?: string;
17
+ findStreetsSystemPrompt?: string;
18
+ };
19
+
20
+ /** Feature flags and behavior config for the moked_106 municipal call-center product. */
21
+ export type Moked106Config = {
22
+ initiate_call_for_short_sla?: InitiateCallForShortSlaConfig;
23
+ avoidSaveTickets?: boolean;
24
+ withUploadImagesSms?: boolean;
25
+ withNeedAttentionCalls?: boolean;
26
+ toolsPrompts?: Moked106ToolPrompts;
27
+ };
28
+
29
+ /** Product config for the MIS */
30
+ export type MunicipalProduct = {
31
+ moked_106?: Moked106Config;
32
+ cityName: string;
33
+ crmName?: string;
34
+ cityDisplayName?: string;
35
+ cityLogoURL?: string;
36
+ timezone: string;
37
+ websiteUrl?: string;
38
+ isProductionReady?: boolean;
39
+ municipalDisplayName?: string;
40
+ };
41
+
42
+ // ---------------------------------------------------------------------------
43
+ // WebsiteTalk
44
+ // ---------------------------------------------------------------------------
45
+
46
+ export type WebsiteTalkScheduler = {
47
+ type: "cron";
48
+ schedule: string;
49
+ };
50
+
51
+ /** Product config for the websiteTalk */
52
+ export type WebsiteTalkProduct = {
53
+ logoUrl: string;
54
+ companyName: string;
55
+ timezone: string;
56
+ language: string;
57
+ defaultBaseUrl: string;
58
+ scheduler?: WebsiteTalkScheduler;
59
+ };
60
+
61
+ // ---------------------------------------------------------------------------
62
+ // Clinics
63
+ // ---------------------------------------------------------------------------
64
+
65
+ /** Product config for the clinics scheduling integration. */
66
+ export type ClinicsProduct = {
67
+ api_key_secret_name: string;
68
+ base_api_url: string;
69
+ provider: "clinix" | (string & {});
70
+ description?: string;
71
+ };
72
+
73
+ // ---------------------------------------------------------------------------
74
+ // Top Level Client config
75
+ // ---------------------------------------------------------------------------
76
+
77
+ export type Products = {
78
+ municipal?: MunicipalProduct;
79
+ clinics?: ClinicsProduct;
80
+ websiteTalk?: WebsiteTalkProduct;
81
+ [key: string]: unknown;
82
+ };
83
+
84
+ export type ClientLanguageName =
85
+ | "Hebrew"
86
+ | "English"
87
+ | "Russian"
88
+ | "French"
89
+ | "Spanish"
90
+ | (string & {});
91
+
92
+ export type SendGridConfig = {
93
+ emailTo: string[];
94
+ templateId?: string;
95
+ senderId?: string;
96
+ };
97
+
98
+ export type SmsConfig = {};
99
+
100
+ export type WhatsappConfig = {};
101
+
102
+ export type CommunicationsConfig = {
103
+ sendGrid?: SendGridConfig;
104
+ sms?: SmsConfig;
105
+ whatsapp?: WhatsappConfig;
106
+ };
107
+
108
+ export type ClientConfig<P extends Products = Products> = {
109
+ clientId: string;
110
+ phoneNumber?: string;
111
+ language?: ClientLanguageName;
112
+ products: P;
113
+ timezone?: string;
114
+ communications?: CommunicationsConfig;
115
+ };
116
+
117
+ export type ClientConfigDoc<P extends Products = Products> = WithId<
118
+ ClientConfig<P>
119
+ >;
@@ -1,2 +1,2 @@
1
- export * from "./clientsConfig.types";
2
- export * from "./clientsConfig.getters";
1
+ export * from "./clientsConfig.types";
2
+ export * from "./clientsConfig.getters";
@@ -1,67 +1,67 @@
1
- import { flowMongoSchema } from "../flows.schema";
2
-
3
- describe("flowMongoSchema", () => {
4
- it("defines conversationSettings as optional object or null", () => {
5
- const schema: any = flowMongoSchema;
6
-
7
- expect(schema.properties).toHaveProperty("conversationSettings");
8
- expect(schema.properties.conversationSettings.bsonType).toEqual([
9
- "object",
10
- "null",
11
- ]);
12
- expect(schema.required).not.toContain("conversationSettings");
13
- expect(schema.additionalProperties).toBe(false);
14
- });
15
-
16
- it("defines conversationSettings with expected nested properties", () => {
17
- const schema: any = flowMongoSchema;
18
- const convSettings = schema.properties.conversationSettings.properties;
19
-
20
- expect(convSettings).toHaveProperty("interruptions");
21
- expect(convSettings.interruptions.bsonType).toEqual(["object", "null"]);
22
-
23
- const interruptions = convSettings.interruptions.properties;
24
- expect(interruptions.enableInterruptionDetection.bsonType).toEqual("bool");
25
- expect(interruptions.interruptionWindowSeconds.bsonType).toEqual("number");
26
- expect(interruptions.interruptionThresholdSeconds.bsonType).toEqual(
27
- "number",
28
- );
29
- expect(interruptions.interruptionInstruction.bsonType).toEqual("string");
30
-
31
- expect(convSettings).toHaveProperty("silence");
32
- expect(convSettings.silence.bsonType).toEqual(["object", "null"]);
33
-
34
- const silence = convSettings.silence.properties;
35
- expect(silence.enableSilenceDetection.bsonType).toEqual("bool");
36
- expect(silence.firstWarningSilenceSeconds.bsonType).toEqual("number");
37
- expect(silence.firstWarningInstruction.bsonType).toEqual("string");
38
- expect(silence.secondWarningSilenceSeconds.bsonType).toEqual("number");
39
- expect(silence.secondWarningInstruction.bsonType).toEqual("string");
40
- expect(silence.disconnectSilenceSeconds.bsonType).toEqual("number");
41
- expect(convSettings).toHaveProperty("liveTimeUpdates");
42
- expect(convSettings.liveTimeUpdates.bsonType).toEqual("bool");
43
- });
44
-
45
- it("should define tools schema and return a backgroundToolType enum with allowed values", () => {
46
- const schema: any = flowMongoSchema;
47
-
48
- expect(schema.properties).toHaveProperty("tools");
49
- expect(schema.properties.tools.bsonType).toEqual(["array", "null"]);
50
-
51
- const toolItem = schema.properties.tools.items;
52
- expect(toolItem.bsonType).toBe("object");
53
-
54
- expect(toolItem.properties).toHaveProperty("runInBackground");
55
- expect(toolItem.properties.runInBackground.bsonType).toBe("bool");
56
-
57
- expect(toolItem.properties).toHaveProperty("backgroundToolType");
58
- expect(toolItem.properties.backgroundToolType.bsonType).toBe("string");
59
- expect(toolItem.properties.backgroundToolType.enum).toEqual([
60
- "backgroundToolAlways",
61
- "backgroundToolOnce",
62
- ]);
63
-
64
- expect(toolItem.properties).toHaveProperty('backgroundContinuationInstructions');
65
- expect(toolItem.properties.backgroundContinuationInstructions.bsonType).toBe('string');
66
- });
67
- });
1
+ import { flowMongoSchema } from "../flows.schema";
2
+
3
+ describe("flowMongoSchema", () => {
4
+ it("defines conversationSettings as optional object or null", () => {
5
+ const schema: any = flowMongoSchema;
6
+
7
+ expect(schema.properties).toHaveProperty("conversationSettings");
8
+ expect(schema.properties.conversationSettings.bsonType).toEqual([
9
+ "object",
10
+ "null",
11
+ ]);
12
+ expect(schema.required).not.toContain("conversationSettings");
13
+ expect(schema.additionalProperties).toBe(false);
14
+ });
15
+
16
+ it("defines conversationSettings with expected nested properties", () => {
17
+ const schema: any = flowMongoSchema;
18
+ const convSettings = schema.properties.conversationSettings.properties;
19
+
20
+ expect(convSettings).toHaveProperty("interruptions");
21
+ expect(convSettings.interruptions.bsonType).toEqual(["object", "null"]);
22
+
23
+ const interruptions = convSettings.interruptions.properties;
24
+ expect(interruptions.enableInterruptionDetection.bsonType).toEqual("bool");
25
+ expect(interruptions.interruptionWindowSeconds.bsonType).toEqual("number");
26
+ expect(interruptions.interruptionThresholdSeconds.bsonType).toEqual(
27
+ "number",
28
+ );
29
+ expect(interruptions.interruptionInstruction.bsonType).toEqual("string");
30
+
31
+ expect(convSettings).toHaveProperty("silence");
32
+ expect(convSettings.silence.bsonType).toEqual(["object", "null"]);
33
+
34
+ const silence = convSettings.silence.properties;
35
+ expect(silence.enableSilenceDetection.bsonType).toEqual("bool");
36
+ expect(silence.firstWarningSilenceSeconds.bsonType).toEqual("number");
37
+ expect(silence.firstWarningInstruction.bsonType).toEqual("string");
38
+ expect(silence.secondWarningSilenceSeconds.bsonType).toEqual("number");
39
+ expect(silence.secondWarningInstruction.bsonType).toEqual("string");
40
+ expect(silence.disconnectSilenceSeconds.bsonType).toEqual("number");
41
+ expect(convSettings).toHaveProperty("liveTimeUpdates");
42
+ expect(convSettings.liveTimeUpdates.bsonType).toEqual("bool");
43
+ });
44
+
45
+ it("should define tools schema and return a backgroundToolType enum with allowed values", () => {
46
+ const schema: any = flowMongoSchema;
47
+
48
+ expect(schema.properties).toHaveProperty("tools");
49
+ expect(schema.properties.tools.bsonType).toEqual(["array", "null"]);
50
+
51
+ const toolItem = schema.properties.tools.items;
52
+ expect(toolItem.bsonType).toBe("object");
53
+
54
+ expect(toolItem.properties).toHaveProperty("runInBackground");
55
+ expect(toolItem.properties.runInBackground.bsonType).toBe("bool");
56
+
57
+ expect(toolItem.properties).toHaveProperty("backgroundToolType");
58
+ expect(toolItem.properties.backgroundToolType.bsonType).toBe("string");
59
+ expect(toolItem.properties.backgroundToolType.enum).toEqual([
60
+ "backgroundToolAlways",
61
+ "backgroundToolOnce",
62
+ ]);
63
+
64
+ expect(toolItem.properties).toHaveProperty('backgroundContinuationInstructions');
65
+ expect(toolItem.properties.backgroundContinuationInstructions.bsonType).toBe('string');
66
+ });
67
+ });
@@ -1,14 +1,14 @@
1
- import type { Collection, ObjectId, WithId } from "mongodb";
2
- import { getDb } from "../index";
3
- import type { Flow } from "./flows.types";
4
-
5
- export const getFlowsCollection = (): Collection<Flow> => {
6
- return getDb().collection<Flow>("flows");
7
- };
8
-
9
- export const findFlowById = (
10
- flowId: ObjectId,
11
- clientId: string,
12
- ): Promise<WithId<Flow> | null> => {
13
- return getFlowsCollection().findOne({ _id: flowId, clientId });
14
- };
1
+ import type { Collection, ObjectId, WithId } from "mongodb";
2
+ import { getDb } from "../index";
3
+ import type { Flow } from "./flows.types";
4
+
5
+ export const getFlowsCollection = (): Collection<Flow> => {
6
+ return getDb().collection<Flow>("flows");
7
+ };
8
+
9
+ export const findFlowById = (
10
+ flowId: ObjectId,
11
+ clientId: string,
12
+ ): Promise<WithId<Flow> | null> => {
13
+ return getFlowsCollection().findOne({ _id: flowId, clientId });
14
+ };