@talkpilot/core-db 1.3.74 → 1.3.76

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 (249) hide show
  1. package/.cursor/rules/development.mdc +65 -65
  2. package/AGENTS.md +49 -49
  3. package/DEVELOPMENT.md +141 -141
  4. package/README.md +816 -844
  5. package/dist/municipal/departmentsSubjects/departmentsSubjects.setters.d.ts +10 -0
  6. package/dist/municipal/departmentsSubjects/departmentsSubjects.setters.d.ts.map +1 -0
  7. package/dist/municipal/departmentsSubjects/departmentsSubjects.setters.js +15 -0
  8. package/dist/municipal/departmentsSubjects/departmentsSubjects.setters.js.map +1 -0
  9. package/dist/municipal/streets/streets.setters.d.ts +10 -0
  10. package/dist/municipal/streets/streets.setters.d.ts.map +1 -0
  11. package/dist/municipal/streets/streets.setters.js +15 -0
  12. package/dist/municipal/streets/streets.setters.js.map +1 -0
  13. package/dist/reconcile/index.d.ts +5 -0
  14. package/dist/reconcile/index.d.ts.map +1 -0
  15. package/dist/reconcile/index.js +21 -0
  16. package/dist/reconcile/index.js.map +1 -0
  17. package/dist/reconcile/reconcile.diff.d.ts +4 -0
  18. package/dist/reconcile/reconcile.diff.d.ts.map +1 -0
  19. package/dist/reconcile/reconcile.diff.js +36 -0
  20. package/dist/reconcile/reconcile.diff.js.map +1 -0
  21. package/dist/reconcile/reconcile.execute.d.ts +7 -0
  22. package/dist/reconcile/reconcile.execute.d.ts.map +1 -0
  23. package/dist/reconcile/reconcile.execute.js +20 -0
  24. package/dist/reconcile/reconcile.execute.js.map +1 -0
  25. package/dist/reconcile/reconcile.ops.d.ts +12 -0
  26. package/dist/reconcile/reconcile.ops.d.ts.map +1 -0
  27. package/dist/reconcile/reconcile.ops.js +24 -0
  28. package/dist/reconcile/reconcile.ops.js.map +1 -0
  29. package/dist/reconcile/reconcile.types.d.ts +32 -0
  30. package/dist/reconcile/reconcile.types.d.ts.map +1 -0
  31. package/dist/reconcile/reconcile.types.js +3 -0
  32. package/dist/reconcile/reconcile.types.js.map +1 -0
  33. package/dist/talkpilot/calls/calls.constants.d.ts +0 -7
  34. package/dist/talkpilot/calls/calls.constants.d.ts.map +1 -1
  35. package/dist/talkpilot/calls/calls.constants.js +1 -8
  36. package/dist/talkpilot/calls/calls.constants.js.map +1 -1
  37. package/dist/talkpilot/calls/calls.getters.d.ts +1 -2
  38. package/dist/talkpilot/calls/calls.getters.d.ts.map +1 -1
  39. package/dist/talkpilot/calls/calls.getters.js +1 -6
  40. package/dist/talkpilot/calls/calls.getters.js.map +1 -1
  41. package/dist/talkpilot/calls/calls.types.d.ts +14 -4
  42. package/dist/talkpilot/calls/calls.types.d.ts.map +1 -1
  43. package/jest.config.js +20 -20
  44. package/package.json +46 -46
  45. package/src/__tests__/setup.ts +20 -20
  46. package/src/bulkWrite/__tests__/bulkWrite.spec.ts +65 -65
  47. package/src/bulkWrite/bulkWrite.ops.ts +45 -45
  48. package/src/bulkWrite/bulkWrite.types.ts +4 -4
  49. package/src/bulkWrite/index.ts +2 -2
  50. package/src/config.ts +9 -9
  51. package/src/configuration/index.ts +17 -17
  52. package/src/configuration/internalModels/index.ts +3 -3
  53. package/src/configuration/internalModels/internalModels.constants.ts +1 -1
  54. package/src/configuration/internalModels/internalModels.getters.ts +33 -33
  55. package/src/configuration/internalModels/internalModels.types.ts +12 -12
  56. package/src/configuration/models/__tests__/models.getters.spec.ts +67 -67
  57. package/src/configuration/models/index.ts +27 -27
  58. package/src/configuration/models/models.constants.ts +20 -20
  59. package/src/configuration/models/models.getters.ts +71 -71
  60. package/src/configuration/models/models.types.ts +80 -80
  61. package/src/configuration/mongodb-client.ts +62 -62
  62. package/src/configuration/prompts/index.ts +2 -2
  63. package/src/configuration/prompts/prompts.getters.ts +49 -49
  64. package/src/configuration/prompts/prompts.types.ts +11 -11
  65. package/src/connection.ts +81 -81
  66. package/src/index.ts +47 -47
  67. package/src/municipal/__tests__/validation.spec.ts +62 -62
  68. package/src/municipal/cities/cities.getters.ts +50 -50
  69. package/src/municipal/cities/cities.types.ts +11 -11
  70. package/src/municipal/cities/index.ts +2 -2
  71. package/src/municipal/departmentsSubjects/__tests__/departmentsSubjects.spec.ts +272 -272
  72. package/src/municipal/departmentsSubjects/departmentsSubjects.getters.ts +317 -317
  73. package/src/municipal/departmentsSubjects/departmentsSubjects.types.ts +73 -73
  74. package/src/municipal/departmentsSubjects/index.ts +9 -9
  75. package/src/municipal/index.ts +22 -22
  76. package/src/municipal/mongodb-client.ts +61 -61
  77. package/src/municipal/muniIssues/__tests__/muniIssues.setters.spec.ts +94 -94
  78. package/src/municipal/muniIssues/__tests__/muniIssues.setup.spec.ts +92 -92
  79. package/src/municipal/muniIssues/index.ts +17 -17
  80. package/src/municipal/muniIssues/muniIssues.constants.ts +18 -18
  81. package/src/municipal/muniIssues/muniIssues.getters.ts +24 -24
  82. package/src/municipal/muniIssues/muniIssues.schema.ts +66 -66
  83. package/src/municipal/muniIssues/muniIssues.setters.ts +24 -24
  84. package/src/municipal/muniIssues/muniIssues.setup.ts +65 -65
  85. package/src/municipal/muniIssues/muniIssues.types.ts +37 -37
  86. package/src/municipal/streets/__tests__/streets.spec.ts +253 -253
  87. package/src/municipal/streets/index.ts +2 -2
  88. package/src/municipal/streets/streets.getters.ts +140 -140
  89. package/src/municipal/streets/streets.types.ts +19 -19
  90. package/src/municipal/systemInstructions/__tests__/getters.spec.ts +113 -113
  91. package/src/municipal/systemInstructions/__tests__/setters.spec.ts +274 -274
  92. package/src/municipal/systemInstructions/index.ts +7 -7
  93. package/src/municipal/systemInstructions/instructions.getters.ts +57 -57
  94. package/src/municipal/systemInstructions/instructions.setters.ts +119 -119
  95. package/src/municipal/systemInstructions/instructions.types.ts +30 -30
  96. package/src/municipal/tickets/__tests__/tickets.getters.spec.ts +30 -30
  97. package/src/municipal/tickets/__tests__/tickets.statistics.spec.ts +99 -99
  98. package/src/municipal/tickets/index.ts +9 -9
  99. package/src/municipal/tickets/tickets.constants.ts +8 -8
  100. package/src/municipal/tickets/tickets.getters.ts +121 -121
  101. package/src/municipal/tickets/tickets.statistics.aggregation.ts +110 -110
  102. package/src/municipal/tickets/tickets.statistics.getters.ts +145 -145
  103. package/src/municipal/tickets/tickets.types.ts +54 -54
  104. package/src/municipal/utils/types.ts +11 -11
  105. package/src/talkpilot/__tests__/db.spec.ts +38 -38
  106. package/src/talkpilot/__tests__/mongodb-client.spec.ts +18 -18
  107. package/src/talkpilot/__tests__/validation.spec.ts +68 -68
  108. package/src/talkpilot/agents/__tests__/agents.getters.spec.ts +29 -29
  109. package/src/talkpilot/agents/agents.getters.ts +34 -34
  110. package/src/talkpilot/agents/agents.types.ts +14 -14
  111. package/src/talkpilot/agents/index.ts +2 -2
  112. package/src/talkpilot/backgroundToolResults/__tests__/backgroundToolResults.getters.spec.ts +147 -147
  113. package/src/talkpilot/backgroundToolResults/backgroundToolResults.getters.ts +65 -65
  114. package/src/talkpilot/backgroundToolResults/backgroundToolResults.types.ts +23 -23
  115. package/src/talkpilot/backgroundToolResults/index.ts +2 -2
  116. package/src/talkpilot/callTokenUsage/__tests__/callTokenUsage.getters.spec.ts +57 -57
  117. package/src/talkpilot/callTokenUsage/callTokenUsage.getters.ts +42 -42
  118. package/src/talkpilot/callTokenUsage/callTokenUsage.types.ts +28 -28
  119. package/src/talkpilot/callTokenUsage/index.ts +2 -2
  120. package/src/talkpilot/calls/__tests__/callStats.utils.spec.ts +128 -128
  121. package/src/talkpilot/calls/__tests__/calls.dashboard.spec.ts +229 -229
  122. package/src/talkpilot/calls/__tests__/calls.spec.ts +471 -519
  123. package/src/talkpilot/calls/__tests__/calls.statistics.spec.ts +483 -483
  124. package/src/talkpilot/calls/calls.constants.ts +49 -57
  125. package/src/talkpilot/calls/calls.getters.ts +277 -295
  126. package/src/talkpilot/calls/calls.statistics.getters.ts +668 -668
  127. package/src/talkpilot/calls/calls.statistics.types.ts +48 -48
  128. package/src/talkpilot/calls/calls.types.ts +164 -155
  129. package/src/talkpilot/calls/dashboard/calls.dashboard.ts +295 -295
  130. package/src/talkpilot/calls/dashboard/calls.dashboard.types.ts +57 -57
  131. package/src/talkpilot/calls/index.ts +6 -6
  132. package/src/talkpilot/clientAudioBuffers/__tests__/clientAudioBuffer.getters.spec.ts +160 -160
  133. package/src/talkpilot/clientAudioBuffers/clientAudioBuffer.getters.ts +117 -117
  134. package/src/talkpilot/clientAudioBuffers/clientsAudioBuffers.types.ts +25 -25
  135. package/src/talkpilot/clientAudioBuffers/index.ts +2 -2
  136. package/src/talkpilot/clients/__tests__/clients.quota.spec.ts +123 -123
  137. package/src/talkpilot/clients/clients.getters.ts +19 -19
  138. package/src/talkpilot/clients/clients.quota.getters.ts +119 -119
  139. package/src/talkpilot/clients/clients.quota.types.ts +27 -27
  140. package/src/talkpilot/clients/clients.types.ts +18 -18
  141. package/src/talkpilot/clients/index.ts +4 -4
  142. package/src/talkpilot/clientsConfig/__tests__/clientsConfig.getters.spec.ts +423 -423
  143. package/src/talkpilot/clientsConfig/__tests__/clientsConfig.spec.ts +212 -212
  144. package/src/talkpilot/clientsConfig/clientsConfig.constants.ts +2 -2
  145. package/src/talkpilot/clientsConfig/clientsConfig.getters.ts +247 -247
  146. package/src/talkpilot/clientsConfig/clientsConfig.types.ts +137 -137
  147. package/src/talkpilot/clientsConfig/index.ts +3 -3
  148. package/src/talkpilot/contextNotes/__tests__/contextNotes.getters.spec.ts +217 -217
  149. package/src/talkpilot/contextNotes/contextNotes.getters.ts +85 -85
  150. package/src/talkpilot/contextNotes/contextNotes.types.ts +20 -20
  151. package/src/talkpilot/contextNotes/index.ts +2 -2
  152. package/src/talkpilot/flows/__tests__/flows.schema.spec.ts +124 -124
  153. package/src/talkpilot/flows/flows.getter.ts +34 -34
  154. package/src/talkpilot/flows/flows.schema.ts +180 -180
  155. package/src/talkpilot/flows/flows.types.ts +211 -211
  156. package/src/talkpilot/flows/index.ts +7 -7
  157. package/src/talkpilot/groups/__tests__/groups.spec.ts +90 -90
  158. package/src/talkpilot/groups/__tests__/phone.utils.spec.ts +32 -32
  159. package/src/talkpilot/groups/groups.getters.ts +30 -30
  160. package/src/talkpilot/groups/groups.types.ts +29 -29
  161. package/src/talkpilot/groups/index.ts +3 -3
  162. package/src/talkpilot/groups/phone.utils.ts +46 -46
  163. package/src/talkpilot/index.ts +32 -32
  164. package/src/talkpilot/leads/index.ts +2 -2
  165. package/src/talkpilot/leads/leads.getter.ts +6 -6
  166. package/src/talkpilot/leads/leads.schema.ts +33 -33
  167. package/src/talkpilot/leads/leads.types.ts +20 -20
  168. package/src/talkpilot/mongodb-client.ts +78 -78
  169. package/src/talkpilot/phone_numbers/__tests__/phone_numbers.spec.ts +530 -530
  170. package/src/talkpilot/phone_numbers/index.ts +2 -2
  171. package/src/talkpilot/phone_numbers/phone_numbers.getter.ts +240 -240
  172. package/src/talkpilot/phone_numbers/phone_numbers.schema.ts +17 -17
  173. package/src/talkpilot/phone_numbers/phone_numbers.types.ts +30 -30
  174. package/src/talkpilot/phone_numbers/phone_numbers.utils.ts +9 -9
  175. package/src/talkpilot/plans/__tests__/plans.spec.ts +70 -70
  176. package/src/talkpilot/plans/index.ts +2 -2
  177. package/src/talkpilot/plans/plans.getters.ts +132 -132
  178. package/src/talkpilot/plans/plans.types.ts +89 -89
  179. package/src/talkpilot/products/__tests__/products.getters.spec.ts +44 -44
  180. package/src/talkpilot/products/index.ts +2 -2
  181. package/src/talkpilot/products/products.getters.ts +12 -12
  182. package/src/talkpilot/products/products.types.ts +9 -9
  183. package/src/talkpilot/results/index.ts +7 -7
  184. package/src/talkpilot/results/results.getter.ts +39 -39
  185. package/src/talkpilot/results/results.schema.ts +25 -25
  186. package/src/talkpilot/results/results.types.ts +34 -34
  187. package/src/talkpilot/retry_analyze/__tests__/retryAnalyze.getters.spec.ts +156 -156
  188. package/src/talkpilot/retry_analyze/index.ts +2 -2
  189. package/src/talkpilot/retry_analyze/retryAnalyze.getters.ts +84 -84
  190. package/src/talkpilot/retry_analyze/retryAnalyze.types.ts +13 -13
  191. package/src/talkpilot/sessions/__tests__/sessions.spec.ts +147 -147
  192. package/src/talkpilot/sessions/index.ts +2 -2
  193. package/src/talkpilot/sessions/sessions.getter.ts +92 -92
  194. package/src/talkpilot/sessions/sessions.schema.ts +34 -34
  195. package/src/talkpilot/sessions/sessions.types.ts +30 -30
  196. package/src/talkpilot/subscriptions/__tests__/subscriptions.getters.utils.spec.ts +45 -45
  197. package/src/talkpilot/subscriptions/index.ts +3 -3
  198. package/src/talkpilot/subscriptions/subscriptions.getters.ts +146 -146
  199. package/src/talkpilot/subscriptions/subscriptions.getters.utils.ts +33 -33
  200. package/src/talkpilot/subscriptions/subscriptions.types.ts +66 -66
  201. package/src/talkpilot/utils/__tests__/query.utils.spec.ts +49 -49
  202. package/src/talkpilot/utils/query.utils.ts +21 -21
  203. package/src/test-utils/db-utils.ts +33 -33
  204. package/src/test-utils/factories/index.ts +18 -18
  205. package/src/test-utils/factories/municipal/cities.ts +16 -16
  206. package/src/test-utils/factories/municipal/departmentsSubjects.ts +37 -37
  207. package/src/test-utils/factories/municipal/muniIssues.ts +32 -32
  208. package/src/test-utils/factories/municipal/streets.ts +22 -22
  209. package/src/test-utils/factories/municipal/tickets.ts +39 -39
  210. package/src/test-utils/factories/talkpilot/agents.ts +19 -19
  211. package/src/test-utils/factories/talkpilot/calls.ts +37 -37
  212. package/src/test-utils/factories/talkpilot/clientAudioBuffers.ts +20 -20
  213. package/src/test-utils/factories/talkpilot/clientsConfig.ts +18 -18
  214. package/src/test-utils/factories/talkpilot/contextNotes.ts +40 -40
  215. package/src/test-utils/factories/talkpilot/flows.ts +33 -33
  216. package/src/test-utils/factories/talkpilot/groups.ts +33 -33
  217. package/src/test-utils/factories/talkpilot/phone_numbers.ts +22 -22
  218. package/src/test-utils/factories/talkpilot/sessions.ts +35 -35
  219. package/src/test-utils/factories/websitalk/knowledgeDocuments.ts +29 -29
  220. package/src/test-utils/factories/websitalk/scanResources.ts +26 -26
  221. package/src/test-utils/factories/websitalk/scans.ts +30 -30
  222. package/src/test-utils/factories/websitalk/websiteUrls.ts +17 -17
  223. package/src/utils/date.utils.ts +126 -126
  224. package/src/utils/shared.types.ts +4 -4
  225. package/src/utils/validation.ts +23 -23
  226. package/src/websitalk/index.ts +18 -18
  227. package/src/websitalk/knowledgeDocuments/__tests__/knowledgeDocuments.spec.ts +238 -238
  228. package/src/websitalk/knowledgeDocuments/index.ts +3 -3
  229. package/src/websitalk/knowledgeDocuments/knowledgeDocuments.constants.ts +26 -26
  230. package/src/websitalk/knowledgeDocuments/knowledgeDocuments.getters.ts +95 -95
  231. package/src/websitalk/knowledgeDocuments/knowledgeDocuments.types.ts +75 -75
  232. package/src/websitalk/mongodb-client.ts +61 -61
  233. package/src/websitalk/scanResources/__tests__/scanResources.spec.ts +267 -267
  234. package/src/websitalk/scanResources/index.ts +4 -4
  235. package/src/websitalk/scanResources/scanResources.constants.ts +60 -60
  236. package/src/websitalk/scanResources/scanResources.getters.ts +128 -128
  237. package/src/websitalk/scanResources/scanResources.types.ts +105 -105
  238. package/src/websitalk/scanResources/scanResources.utils.ts +31 -31
  239. package/src/websitalk/scans/__tests__/scans.spec.ts +362 -362
  240. package/src/websitalk/scans/index.ts +4 -4
  241. package/src/websitalk/scans/scans.constants.ts +18 -18
  242. package/src/websitalk/scans/scans.getters.ts +172 -172
  243. package/src/websitalk/scans/scans.types.ts +58 -58
  244. package/src/websitalk/scans/scans.utils.ts +5 -5
  245. package/src/websitalk/websiteUrls/__tests__/websiteUrls.spec.ts +77 -77
  246. package/src/websitalk/websiteUrls/index.ts +2 -2
  247. package/src/websitalk/websiteUrls/websiteUrls.getters.ts +65 -65
  248. package/src/websitalk/websiteUrls/websiteUrls.types.ts +13 -13
  249. package/tsconfig.json +23 -23
package/package.json CHANGED
@@ -1,46 +1,46 @@
1
- {
2
- "name": "@talkpilot/core-db",
3
- "version": "1.3.74",
4
- "description": "Core database package for centralized connections and ORM integration.",
5
- "main": "dist/index.js",
6
- "types": "dist/index.d.ts",
7
- "scripts": {
8
- "build": "tsc",
9
- "dev": "tsc --watch",
10
- "test": "jest",
11
- "lint": "eslint 'src/**/*.{ts,tsx}'",
12
- "format": "prettier --write \"src/**/*.{ts,tsx}\"",
13
- "prepare": "npm run build"
14
- },
15
- "keywords": [
16
- "database",
17
- "orm",
18
- "typescript",
19
- "postgres",
20
- "db-client"
21
- ],
22
- "author": "",
23
- "license": "MIT",
24
- "dependencies": {
25
- "dayjs": "^1.11.21",
26
- "express": "^4.18.0",
27
- "google-libphonenumber": "^3.2.0",
28
- "mongodb": "^6.11.0"
29
- },
30
- "devDependencies": {
31
- "@faker-js/faker": "^8.0.0",
32
- "@types/express": "^4.17.0",
33
- "@types/google-libphonenumber": "^7.4.0",
34
- "@types/jest": "^29.0.0",
35
- "@types/node": "^20.0.0",
36
- "fishery": "^2.4.0",
37
- "jest": "^29.0.0",
38
- "mongodb-memory-server": "^10.0.0",
39
- "prettier": "^3.8.2",
40
- "ts-jest": "^29.0.0",
41
- "typescript": "^5.0.0"
42
- },
43
- "publishConfig": {
44
- "access": "public"
45
- }
46
- }
1
+ {
2
+ "name": "@talkpilot/core-db",
3
+ "version": "1.3.76",
4
+ "description": "Core database package for centralized connections and ORM integration.",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "scripts": {
8
+ "build": "tsc",
9
+ "dev": "tsc --watch",
10
+ "test": "jest",
11
+ "lint": "eslint 'src/**/*.{ts,tsx}'",
12
+ "format": "prettier --write \"src/**/*.{ts,tsx}\"",
13
+ "prepare": "npm run build"
14
+ },
15
+ "keywords": [
16
+ "database",
17
+ "orm",
18
+ "typescript",
19
+ "postgres",
20
+ "db-client"
21
+ ],
22
+ "author": "",
23
+ "license": "MIT",
24
+ "dependencies": {
25
+ "dayjs": "^1.11.21",
26
+ "express": "^4.18.0",
27
+ "google-libphonenumber": "^3.2.0",
28
+ "mongodb": "^6.11.0"
29
+ },
30
+ "devDependencies": {
31
+ "@faker-js/faker": "^8.0.0",
32
+ "@types/express": "^4.17.0",
33
+ "@types/google-libphonenumber": "^7.4.0",
34
+ "@types/jest": "^29.0.0",
35
+ "@types/node": "^20.0.0",
36
+ "fishery": "^2.4.0",
37
+ "jest": "^29.0.0",
38
+ "mongodb-memory-server": "^10.0.0",
39
+ "prettier": "^3.8.2",
40
+ "ts-jest": "^29.0.0",
41
+ "typescript": "^5.0.0"
42
+ },
43
+ "publishConfig": {
44
+ "access": "public"
45
+ }
46
+ }
@@ -1,20 +1,20 @@
1
- import { initTestDb, closeTestDb } from "../test-utils/db-utils";
2
-
3
- declare global {
4
- // eslint-disable-next-line no-var
5
- var db: import("mongodb").Db;
6
- }
7
-
8
- // Set up global mocks if needed
9
- // global.fetch = jest.fn();
10
-
11
- beforeEach(async () => {
12
- global.db = await initTestDb();
13
- }, 30_000);
14
-
15
- afterEach(async () => {
16
- await closeTestDb();
17
- jest.resetAllMocks();
18
- });
19
-
20
- process.env.NODE_ENV = "test";
1
+ import { initTestDb, closeTestDb } from "../test-utils/db-utils";
2
+
3
+ declare global {
4
+ // eslint-disable-next-line no-var
5
+ var db: import("mongodb").Db;
6
+ }
7
+
8
+ // Set up global mocks if needed
9
+ // global.fetch = jest.fn();
10
+
11
+ beforeEach(async () => {
12
+ global.db = await initTestDb();
13
+ }, 30_000);
14
+
15
+ afterEach(async () => {
16
+ await closeTestDb();
17
+ jest.resetAllMocks();
18
+ });
19
+
20
+ process.env.NODE_ENV = "test";
@@ -1,65 +1,65 @@
1
- import {
2
- buildDeleteOp,
3
- buildInsertOp,
4
- buildSetOp,
5
- buildUpsertOp,
6
- } from "../bulkWrite.ops";
7
-
8
- interface TestDoc {
9
- _id: string;
10
- key: string;
11
- value: string;
12
- }
13
-
14
- describe("buildSetOp", () => {
15
- it("returns a plain $set updateOne with no upsert", () => {
16
- const op = buildSetOp<TestDoc>({ key: "k1" }, { value: "v2" });
17
- expect(op).toEqual({
18
- updateOne: { filter: { key: "k1" }, update: { $set: { value: "v2" } } },
19
- });
20
- });
21
- });
22
-
23
- describe("buildUpsertOp", () => {
24
- it("returns $set + $setOnInsert + upsert:true", () => {
25
- const op = buildUpsertOp<TestDoc>(
26
- { key: "k1" },
27
- { value: "v1" },
28
- { key: "k1" },
29
- );
30
- expect(op).toEqual({
31
- updateOne: {
32
- filter: { key: "k1" },
33
- update: { $set: { value: "v1" }, $setOnInsert: { key: "k1" } },
34
- upsert: true,
35
- },
36
- });
37
- });
38
-
39
- it("defaults $setOnInsert to an empty object when omitted", () => {
40
- const op = buildUpsertOp<TestDoc>({ key: "k1" }, { value: "v1" });
41
- expect(op).toEqual({
42
- updateOne: {
43
- filter: { key: "k1" },
44
- update: { $set: { value: "v1" }, $setOnInsert: {} },
45
- upsert: true,
46
- },
47
- });
48
- });
49
- });
50
-
51
- describe("buildInsertOp", () => {
52
- it("returns an insertOne with the given document", () => {
53
- const op = buildInsertOp<TestDoc>({ _id: "1", key: "k1", value: "v1" });
54
- expect(op).toEqual({
55
- insertOne: { document: { _id: "1", key: "k1", value: "v1" } },
56
- });
57
- });
58
- });
59
-
60
- describe("buildDeleteOp", () => {
61
- it("returns a deleteOne matching filter", () => {
62
- const op = buildDeleteOp<TestDoc>({ key: "k1" });
63
- expect(op).toEqual({ deleteOne: { filter: { key: "k1" } } });
64
- });
65
- });
1
+ import {
2
+ buildDeleteOp,
3
+ buildInsertOp,
4
+ buildSetOp,
5
+ buildUpsertOp,
6
+ } from "../bulkWrite.ops";
7
+
8
+ interface TestDoc {
9
+ _id: string;
10
+ key: string;
11
+ value: string;
12
+ }
13
+
14
+ describe("buildSetOp", () => {
15
+ it("returns a plain $set updateOne with no upsert", () => {
16
+ const op = buildSetOp<TestDoc>({ key: "k1" }, { value: "v2" });
17
+ expect(op).toEqual({
18
+ updateOne: { filter: { key: "k1" }, update: { $set: { value: "v2" } } },
19
+ });
20
+ });
21
+ });
22
+
23
+ describe("buildUpsertOp", () => {
24
+ it("returns $set + $setOnInsert + upsert:true", () => {
25
+ const op = buildUpsertOp<TestDoc>(
26
+ { key: "k1" },
27
+ { value: "v1" },
28
+ { key: "k1" },
29
+ );
30
+ expect(op).toEqual({
31
+ updateOne: {
32
+ filter: { key: "k1" },
33
+ update: { $set: { value: "v1" }, $setOnInsert: { key: "k1" } },
34
+ upsert: true,
35
+ },
36
+ });
37
+ });
38
+
39
+ it("defaults $setOnInsert to an empty object when omitted", () => {
40
+ const op = buildUpsertOp<TestDoc>({ key: "k1" }, { value: "v1" });
41
+ expect(op).toEqual({
42
+ updateOne: {
43
+ filter: { key: "k1" },
44
+ update: { $set: { value: "v1" }, $setOnInsert: {} },
45
+ upsert: true,
46
+ },
47
+ });
48
+ });
49
+ });
50
+
51
+ describe("buildInsertOp", () => {
52
+ it("returns an insertOne with the given document", () => {
53
+ const op = buildInsertOp<TestDoc>({ _id: "1", key: "k1", value: "v1" });
54
+ expect(op).toEqual({
55
+ insertOne: { document: { _id: "1", key: "k1", value: "v1" } },
56
+ });
57
+ });
58
+ });
59
+
60
+ describe("buildDeleteOp", () => {
61
+ it("returns a deleteOne matching filter", () => {
62
+ const op = buildDeleteOp<TestDoc>({ key: "k1" });
63
+ expect(op).toEqual({ deleteOne: { filter: { key: "k1" } } });
64
+ });
65
+ });
@@ -1,45 +1,45 @@
1
- import { Document, Filter, OptionalId } from "mongodb";
2
- import { BulkWriteOp } from "./bulkWrite.types";
3
-
4
- /**
5
- * Updates specific fields on the record matching filter.
6
- * Does nothing if no record matches.
7
- */
8
- export function buildSetOp<T extends Document>(
9
- filter: Filter<T>,
10
- setFields: Partial<T>,
11
- ): BulkWriteOp<T> {
12
- return { updateOne: { filter, update: { $set: setFields } } };
13
- }
14
-
15
- /**
16
- * Updates specific fields on the record matching the filter or creates a new record if none matches.
17
- * setOnInsertFields are only applied when a new record is created; they're ignored on an update.
18
- */
19
- export function buildUpsertOp<T extends Document>(
20
- filter: Filter<T>,
21
- setFields: Partial<T>,
22
- setOnInsertFields: Partial<T> = {},
23
- ): BulkWriteOp<T> {
24
- return {
25
- updateOne: {
26
- filter,
27
- update: { $set: setFields, $setOnInsert: setOnInsertFields },
28
- upsert: true,
29
- },
30
- };
31
- }
32
-
33
- /** Creates a new record. */
34
- export function buildInsertOp<T extends Document>(
35
- document: OptionalId<T>,
36
- ): BulkWriteOp<T> {
37
- return { insertOne: { document } };
38
- }
39
-
40
- /** Permanently removes the record matching the filter. */
41
- export function buildDeleteOp<T extends Document>(
42
- filter: Filter<T>,
43
- ): BulkWriteOp<T> {
44
- return { deleteOne: { filter } };
45
- }
1
+ import { Document, Filter, OptionalId } from "mongodb";
2
+ import { BulkWriteOp } from "./bulkWrite.types";
3
+
4
+ /**
5
+ * Updates specific fields on the record matching filter.
6
+ * Does nothing if no record matches.
7
+ */
8
+ export function buildSetOp<T extends Document>(
9
+ filter: Filter<T>,
10
+ setFields: Partial<T>,
11
+ ): BulkWriteOp<T> {
12
+ return { updateOne: { filter, update: { $set: setFields } } };
13
+ }
14
+
15
+ /**
16
+ * Updates specific fields on the record matching the filter or creates a new record if none matches.
17
+ * setOnInsertFields are only applied when a new record is created; they're ignored on an update.
18
+ */
19
+ export function buildUpsertOp<T extends Document>(
20
+ filter: Filter<T>,
21
+ setFields: Partial<T>,
22
+ setOnInsertFields: Partial<T> = {},
23
+ ): BulkWriteOp<T> {
24
+ return {
25
+ updateOne: {
26
+ filter,
27
+ update: { $set: setFields, $setOnInsert: setOnInsertFields },
28
+ upsert: true,
29
+ },
30
+ };
31
+ }
32
+
33
+ /** Creates a new record. */
34
+ export function buildInsertOp<T extends Document>(
35
+ document: OptionalId<T>,
36
+ ): BulkWriteOp<T> {
37
+ return { insertOne: { document } };
38
+ }
39
+
40
+ /** Permanently removes the record matching the filter. */
41
+ export function buildDeleteOp<T extends Document>(
42
+ filter: Filter<T>,
43
+ ): BulkWriteOp<T> {
44
+ return { deleteOne: { filter } };
45
+ }
@@ -1,4 +1,4 @@
1
- import { AnyBulkWriteOperation, Document } from "mongodb";
2
-
3
- /** A single MongoDB bulk-write operation, typed against the target document shape. */
4
- export type BulkWriteOp<T extends Document> = AnyBulkWriteOperation<T>;
1
+ import { AnyBulkWriteOperation, Document } from "mongodb";
2
+
3
+ /** A single MongoDB bulk-write operation, typed against the target document shape. */
4
+ export type BulkWriteOp<T extends Document> = AnyBulkWriteOperation<T>;
@@ -1,2 +1,2 @@
1
- export * from "./bulkWrite.types";
2
- export * from "./bulkWrite.ops";
1
+ export * from "./bulkWrite.types";
2
+ export * from "./bulkWrite.ops";
package/src/config.ts CHANGED
@@ -1,9 +1,9 @@
1
- /**
2
- * Centralized env var access. Add new fields here instead of reading
3
- * process.env directly elsewhere, so each env var has exactly one source of truth in the code.
4
- */
5
-
6
- export const configurationDbConfig = {
7
- mongoUri: process.env.MONGO_URI || process.env.MONGODB_URI,
8
- configurationDbName: process.env.CONFIGURATION_DB_NAME,
9
- };
1
+ /**
2
+ * Centralized env var access. Add new fields here instead of reading
3
+ * process.env directly elsewhere, so each env var has exactly one source of truth in the code.
4
+ */
5
+
6
+ export const configurationDbConfig = {
7
+ mongoUri: process.env.MONGO_URI || process.env.MONGODB_URI,
8
+ configurationDbName: process.env.CONFIGURATION_DB_NAME,
9
+ };
@@ -1,17 +1,17 @@
1
- import { Db, ObjectId as MongoObjectId } from "mongodb";
2
-
3
- export * from "./prompts";
4
- export * from "./models";
5
- export * from "./internalModels";
6
- export { configurationMongodbClient } from "./mongodb-client";
7
-
8
- let db: Db;
9
- export const setDb = (d: Db) => {
10
- db = d;
11
- };
12
-
13
- export const getDb = (): Db => {
14
- if (!db) throw new Error("Configuration DB not initialised");
15
- return db;
16
- };
17
- export const ObjectId = MongoObjectId;
1
+ import { Db, ObjectId as MongoObjectId } from "mongodb";
2
+
3
+ export * from "./prompts";
4
+ export * from "./models";
5
+ export * from "./internalModels";
6
+ export { configurationMongodbClient } from "./mongodb-client";
7
+
8
+ let db: Db;
9
+ export const setDb = (d: Db) => {
10
+ db = d;
11
+ };
12
+
13
+ export const getDb = (): Db => {
14
+ if (!db) throw new Error("Configuration DB not initialised");
15
+ return db;
16
+ };
17
+ export const ObjectId = MongoObjectId;
@@ -1,3 +1,3 @@
1
- export { INTERNAL_MODELS_COLLECTION } from "./internalModels.constants";
2
- export * from "./internalModels.getters";
3
- export type { InternalModel } from "./internalModels.types";
1
+ export { INTERNAL_MODELS_COLLECTION } from "./internalModels.constants";
2
+ export * from "./internalModels.getters";
3
+ export type { InternalModel } from "./internalModels.types";
@@ -1 +1 @@
1
- export const INTERNAL_MODELS_COLLECTION = "internal-models";
1
+ export const INTERNAL_MODELS_COLLECTION = "internal-models";
@@ -1,33 +1,33 @@
1
- import { getDb } from "../index";
2
- import { Collection, Filter } from "mongodb";
3
- import { InternalModel } from "./internalModels.types";
4
- import { INTERNAL_MODELS_COLLECTION } from "./internalModels.constants";
5
-
6
- export const getInternalModelsCollection = (): Collection<InternalModel> => {
7
- return getDb().collection<InternalModel>(INTERNAL_MODELS_COLLECTION);
8
- };
9
-
10
- /**
11
- * Get an internal model config by its unique name
12
- */
13
- export const getInternalModelByName = async (
14
- name: string
15
- ): Promise<InternalModel | null> => {
16
- return await getInternalModelsCollection().findOne({ name });
17
- };
18
-
19
- /**
20
- * Find internal models by filter.
21
- */
22
- export const findInternalModels = async (
23
- filter: Filter<InternalModel> = {}
24
- ): Promise<InternalModel[]> => {
25
- return await getInternalModelsCollection().find(filter).toArray();
26
- };
27
-
28
- /**
29
- * Get all internal models.
30
- */
31
- export const getAllInternalModels = async (): Promise<InternalModel[]> => {
32
- return await findInternalModels();
33
- };
1
+ import { getDb } from "../index";
2
+ import { Collection, Filter } from "mongodb";
3
+ import { InternalModel } from "./internalModels.types";
4
+ import { INTERNAL_MODELS_COLLECTION } from "./internalModels.constants";
5
+
6
+ export const getInternalModelsCollection = (): Collection<InternalModel> => {
7
+ return getDb().collection<InternalModel>(INTERNAL_MODELS_COLLECTION);
8
+ };
9
+
10
+ /**
11
+ * Get an internal model config by its unique name
12
+ */
13
+ export const getInternalModelByName = async (
14
+ name: string
15
+ ): Promise<InternalModel | null> => {
16
+ return await getInternalModelsCollection().findOne({ name });
17
+ };
18
+
19
+ /**
20
+ * Find internal models by filter.
21
+ */
22
+ export const findInternalModels = async (
23
+ filter: Filter<InternalModel> = {}
24
+ ): Promise<InternalModel[]> => {
25
+ return await getInternalModelsCollection().find(filter).toArray();
26
+ };
27
+
28
+ /**
29
+ * Get all internal models.
30
+ */
31
+ export const getAllInternalModels = async (): Promise<InternalModel[]> => {
32
+ return await findInternalModels();
33
+ };
@@ -1,12 +1,12 @@
1
- import { ObjectId } from "mongodb";
2
-
3
- export type InternalModel = {
4
- _id: ObjectId;
5
- /** Has to be unique between other names in collection */
6
- name: string;
7
- provider: string;
8
- model: string;
9
- config?: Record<string, unknown>;
10
- createdAt: Date;
11
- updatedAt: Date;
12
- };
1
+ import { ObjectId } from "mongodb";
2
+
3
+ export type InternalModel = {
4
+ _id: ObjectId;
5
+ /** Has to be unique between other names in collection */
6
+ name: string;
7
+ provider: string;
8
+ model: string;
9
+ config?: Record<string, unknown>;
10
+ createdAt: Date;
11
+ updatedAt: Date;
12
+ };