@talkpilot/core-db 1.3.66 → 1.3.68
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.
- package/.cursor/rules/development.mdc +65 -65
- package/AGENTS.md +49 -49
- package/DEVELOPMENT.md +141 -141
- package/README.md +1 -48
- package/dist/configuration/models/models.constants.d.ts +1 -1
- package/dist/configuration/models/models.constants.d.ts.map +1 -1
- package/dist/configuration/models/models.constants.js +6 -1
- package/dist/configuration/models/models.constants.js.map +1 -1
- package/dist/municipal/departmentsSubjects/departmentsSubjects.setters.d.ts +10 -0
- package/dist/municipal/departmentsSubjects/departmentsSubjects.setters.d.ts.map +1 -0
- package/dist/municipal/departmentsSubjects/departmentsSubjects.setters.js +15 -0
- package/dist/municipal/departmentsSubjects/departmentsSubjects.setters.js.map +1 -0
- package/dist/municipal/streets/streets.setters.d.ts +10 -0
- package/dist/municipal/streets/streets.setters.d.ts.map +1 -0
- package/dist/municipal/streets/streets.setters.js +15 -0
- package/dist/municipal/streets/streets.setters.js.map +1 -0
- package/dist/reconcile/index.d.ts +5 -0
- package/dist/reconcile/index.d.ts.map +1 -0
- package/dist/{talkpilot/clientDeletionLogs → reconcile}/index.js +4 -3
- package/dist/reconcile/index.js.map +1 -0
- package/dist/reconcile/reconcile.diff.d.ts +4 -0
- package/dist/reconcile/reconcile.diff.d.ts.map +1 -0
- package/dist/reconcile/reconcile.diff.js +36 -0
- package/dist/reconcile/reconcile.diff.js.map +1 -0
- package/dist/reconcile/reconcile.execute.d.ts +7 -0
- package/dist/reconcile/reconcile.execute.d.ts.map +1 -0
- package/dist/reconcile/reconcile.execute.js +20 -0
- package/dist/reconcile/reconcile.execute.js.map +1 -0
- package/dist/reconcile/reconcile.ops.d.ts +12 -0
- package/dist/reconcile/reconcile.ops.d.ts.map +1 -0
- package/dist/reconcile/reconcile.ops.js +24 -0
- package/dist/reconcile/reconcile.ops.js.map +1 -0
- package/dist/reconcile/reconcile.types.d.ts +32 -0
- package/dist/reconcile/reconcile.types.d.ts.map +1 -0
- package/dist/{talkpilot/auditLogs/auditLogs.types.js → reconcile/reconcile.types.js} +1 -1
- package/dist/reconcile/reconcile.types.js.map +1 -0
- package/dist/talkpilot/callTokenUsage/callTokenUsage.getters.d.ts +4 -0
- package/dist/talkpilot/callTokenUsage/callTokenUsage.getters.d.ts.map +1 -0
- package/dist/talkpilot/callTokenUsage/callTokenUsage.getters.js +30 -0
- package/dist/talkpilot/callTokenUsage/callTokenUsage.getters.js.map +1 -0
- package/dist/talkpilot/callTokenUsage/callTokenUsage.types.d.ts +28 -0
- package/dist/talkpilot/callTokenUsage/callTokenUsage.types.d.ts.map +1 -0
- package/dist/talkpilot/{clientDeletionLogs/clientDeletionLogs.types.js → callTokenUsage/callTokenUsage.types.js} +1 -1
- package/dist/talkpilot/callTokenUsage/callTokenUsage.types.js.map +1 -0
- package/dist/talkpilot/callTokenUsage/index.d.ts +3 -0
- package/dist/talkpilot/callTokenUsage/index.d.ts.map +1 -0
- package/dist/talkpilot/{auditLogs → callTokenUsage}/index.js +1 -2
- package/dist/talkpilot/callTokenUsage/index.js.map +1 -0
- package/dist/talkpilot/calls/calls.constants.d.ts +1 -9
- package/dist/talkpilot/calls/calls.constants.d.ts.map +1 -1
- package/dist/talkpilot/calls/calls.constants.js +1 -9
- package/dist/talkpilot/calls/calls.constants.js.map +1 -1
- package/dist/talkpilot/calls/calls.getters.d.ts +1 -7
- package/dist/talkpilot/calls/calls.getters.d.ts.map +1 -1
- package/dist/talkpilot/calls/calls.getters.js +1 -181
- package/dist/talkpilot/calls/calls.getters.js.map +1 -1
- package/dist/talkpilot/calls/calls.types.d.ts +2 -35
- package/dist/talkpilot/calls/calls.types.d.ts.map +1 -1
- package/dist/talkpilot/clients/clients.getters.d.ts +0 -2
- package/dist/talkpilot/clients/clients.getters.d.ts.map +1 -1
- package/dist/talkpilot/clients/clients.getters.js +1 -15
- package/dist/talkpilot/clients/clients.getters.js.map +1 -1
- package/dist/talkpilot/clients/clients.types.d.ts +0 -21
- package/dist/talkpilot/clients/clients.types.d.ts.map +1 -1
- package/dist/talkpilot/clients/index.d.ts +0 -2
- package/dist/talkpilot/clients/index.d.ts.map +1 -1
- package/dist/talkpilot/clients/index.js +0 -2
- package/dist/talkpilot/clients/index.js.map +1 -1
- package/dist/talkpilot/index.d.ts +1 -1
- package/dist/talkpilot/index.d.ts.map +1 -1
- package/dist/talkpilot/index.js +1 -1
- package/dist/talkpilot/index.js.map +1 -1
- package/dist/talkpilot/phone_numbers/phone_numbers.getter.d.ts +1 -9
- package/dist/talkpilot/phone_numbers/phone_numbers.getter.d.ts.map +1 -1
- package/dist/talkpilot/phone_numbers/phone_numbers.getter.js +1 -66
- package/dist/talkpilot/phone_numbers/phone_numbers.getter.js.map +1 -1
- package/dist/talkpilot/phone_numbers/phone_numbers.types.d.ts +0 -5
- package/dist/talkpilot/phone_numbers/phone_numbers.types.d.ts.map +1 -1
- package/dist/test-utils/factories/index.d.ts +0 -2
- package/dist/test-utils/factories/index.d.ts.map +1 -1
- package/dist/test-utils/factories/index.js +0 -2
- package/dist/test-utils/factories/index.js.map +1 -1
- package/jest.config.js +20 -20
- package/package.json +46 -46
- package/src/__tests__/setup.ts +20 -20
- package/src/bulkWrite/__tests__/bulkWrite.spec.ts +65 -65
- package/src/bulkWrite/bulkWrite.ops.ts +45 -45
- package/src/bulkWrite/bulkWrite.types.ts +4 -4
- package/src/bulkWrite/index.ts +2 -2
- package/src/config.ts +9 -9
- package/src/configuration/index.ts +17 -17
- package/src/configuration/internalModels/index.ts +3 -3
- package/src/configuration/internalModels/internalModels.constants.ts +1 -1
- package/src/configuration/internalModels/internalModels.getters.ts +33 -33
- package/src/configuration/internalModels/internalModels.types.ts +12 -12
- package/src/configuration/models/__tests__/models.getters.spec.ts +67 -67
- package/src/configuration/models/index.ts +27 -27
- package/src/configuration/models/models.constants.ts +20 -15
- package/src/configuration/models/models.getters.ts +71 -71
- package/src/configuration/models/models.types.ts +80 -80
- package/src/configuration/mongodb-client.ts +62 -62
- package/src/configuration/prompts/index.ts +2 -2
- package/src/configuration/prompts/prompts.getters.ts +49 -49
- package/src/configuration/prompts/prompts.types.ts +11 -11
- package/src/connection.ts +81 -81
- package/src/index.ts +47 -47
- package/src/municipal/__tests__/validation.spec.ts +62 -62
- package/src/municipal/cities/cities.getters.ts +50 -50
- package/src/municipal/cities/cities.types.ts +11 -11
- package/src/municipal/cities/index.ts +2 -2
- package/src/municipal/departmentsSubjects/__tests__/departmentsSubjects.spec.ts +272 -272
- package/src/municipal/departmentsSubjects/departmentsSubjects.getters.ts +317 -317
- package/src/municipal/departmentsSubjects/departmentsSubjects.types.ts +73 -73
- package/src/municipal/departmentsSubjects/index.ts +9 -9
- package/src/municipal/index.ts +22 -22
- package/src/municipal/mongodb-client.ts +61 -61
- package/src/municipal/muniIssues/__tests__/muniIssues.setters.spec.ts +94 -94
- package/src/municipal/muniIssues/__tests__/muniIssues.setup.spec.ts +92 -92
- package/src/municipal/muniIssues/index.ts +17 -17
- package/src/municipal/muniIssues/muniIssues.constants.ts +18 -18
- package/src/municipal/muniIssues/muniIssues.getters.ts +24 -24
- package/src/municipal/muniIssues/muniIssues.schema.ts +66 -66
- package/src/municipal/muniIssues/muniIssues.setters.ts +24 -24
- package/src/municipal/muniIssues/muniIssues.setup.ts +65 -65
- package/src/municipal/muniIssues/muniIssues.types.ts +37 -37
- package/src/municipal/streets/__tests__/streets.spec.ts +253 -253
- package/src/municipal/streets/index.ts +2 -2
- package/src/municipal/streets/streets.getters.ts +140 -140
- package/src/municipal/streets/streets.types.ts +19 -19
- package/src/municipal/systemInstructions/__tests__/getters.spec.ts +113 -113
- package/src/municipal/systemInstructions/__tests__/setters.spec.ts +274 -274
- package/src/municipal/systemInstructions/index.ts +7 -7
- package/src/municipal/systemInstructions/instructions.getters.ts +57 -57
- package/src/municipal/systemInstructions/instructions.setters.ts +119 -119
- package/src/municipal/systemInstructions/instructions.types.ts +30 -30
- package/src/municipal/tickets/__tests__/tickets.getters.spec.ts +30 -30
- package/src/municipal/tickets/__tests__/tickets.statistics.spec.ts +99 -99
- package/src/municipal/tickets/index.ts +9 -9
- package/src/municipal/tickets/tickets.constants.ts +8 -8
- package/src/municipal/tickets/tickets.getters.ts +121 -121
- package/src/municipal/tickets/tickets.statistics.aggregation.ts +110 -110
- package/src/municipal/tickets/tickets.statistics.getters.ts +145 -145
- package/src/municipal/tickets/tickets.types.ts +54 -54
- package/src/municipal/utils/types.ts +11 -11
- package/src/talkpilot/__tests__/db.spec.ts +38 -38
- package/src/talkpilot/__tests__/mongodb-client.spec.ts +18 -18
- package/src/talkpilot/__tests__/validation.spec.ts +68 -68
- package/src/talkpilot/agents/__tests__/agents.getters.spec.ts +29 -29
- package/src/talkpilot/agents/agents.getters.ts +34 -34
- package/src/talkpilot/agents/agents.types.ts +14 -14
- package/src/talkpilot/agents/index.ts +2 -2
- package/src/talkpilot/backgroundToolResults/__tests__/backgroundToolResults.getters.spec.ts +147 -147
- package/src/talkpilot/backgroundToolResults/backgroundToolResults.getters.ts +65 -65
- package/src/talkpilot/backgroundToolResults/backgroundToolResults.types.ts +23 -23
- package/src/talkpilot/backgroundToolResults/index.ts +2 -2
- package/src/talkpilot/callTokenUsage/__tests__/callTokenUsage.getters.spec.ts +57 -0
- package/src/talkpilot/callTokenUsage/callTokenUsage.getters.ts +42 -0
- package/src/talkpilot/callTokenUsage/callTokenUsage.types.ts +28 -0
- package/src/talkpilot/callTokenUsage/index.ts +2 -0
- package/src/talkpilot/calls/__tests__/callStats.utils.spec.ts +128 -128
- package/src/talkpilot/calls/__tests__/calls.dashboard.spec.ts +229 -229
- package/src/talkpilot/calls/__tests__/calls.spec.ts +471 -471
- package/src/talkpilot/calls/__tests__/calls.statistics.spec.ts +483 -483
- package/src/talkpilot/calls/calls.constants.ts +49 -61
- package/src/talkpilot/calls/calls.getters.ts +1 -270
- package/src/talkpilot/calls/calls.statistics.getters.ts +668 -668
- package/src/talkpilot/calls/calls.statistics.types.ts +48 -48
- package/src/talkpilot/calls/calls.types.ts +2 -40
- package/src/talkpilot/calls/dashboard/calls.dashboard.ts +295 -295
- package/src/talkpilot/calls/dashboard/calls.dashboard.types.ts +57 -57
- package/src/talkpilot/calls/index.ts +6 -6
- package/src/talkpilot/clientAudioBuffers/__tests__/clientAudioBuffer.getters.spec.ts +160 -160
- package/src/talkpilot/clientAudioBuffers/clientAudioBuffer.getters.ts +117 -117
- package/src/talkpilot/clientAudioBuffers/clientsAudioBuffers.types.ts +25 -25
- package/src/talkpilot/clientAudioBuffers/index.ts +2 -2
- package/src/talkpilot/clients/__tests__/clients.quota.spec.ts +123 -123
- package/src/talkpilot/clients/clients.getters.ts +19 -32
- package/src/talkpilot/clients/clients.quota.getters.ts +119 -119
- package/src/talkpilot/clients/clients.quota.types.ts +27 -27
- package/src/talkpilot/clients/clients.types.ts +18 -37
- package/src/talkpilot/clients/index.ts +4 -6
- package/src/talkpilot/clientsConfig/__tests__/clientsConfig.getters.spec.ts +423 -423
- package/src/talkpilot/clientsConfig/__tests__/clientsConfig.spec.ts +212 -212
- package/src/talkpilot/clientsConfig/clientsConfig.constants.ts +2 -2
- package/src/talkpilot/clientsConfig/clientsConfig.getters.ts +247 -247
- package/src/talkpilot/clientsConfig/clientsConfig.types.ts +137 -137
- package/src/talkpilot/clientsConfig/index.ts +3 -3
- package/src/talkpilot/contextNotes/__tests__/contextNotes.getters.spec.ts +217 -217
- package/src/talkpilot/contextNotes/contextNotes.getters.ts +85 -85
- package/src/talkpilot/contextNotes/contextNotes.types.ts +20 -20
- package/src/talkpilot/contextNotes/index.ts +2 -2
- package/src/talkpilot/flows/__tests__/flows.schema.spec.ts +124 -124
- package/src/talkpilot/flows/flows.getter.ts +34 -34
- package/src/talkpilot/flows/flows.schema.ts +180 -180
- package/src/talkpilot/flows/flows.types.ts +211 -211
- package/src/talkpilot/flows/index.ts +7 -7
- package/src/talkpilot/groups/__tests__/groups.spec.ts +90 -90
- package/src/talkpilot/groups/__tests__/phone.utils.spec.ts +32 -32
- package/src/talkpilot/groups/groups.getters.ts +30 -30
- package/src/talkpilot/groups/groups.types.ts +29 -29
- package/src/talkpilot/groups/index.ts +3 -3
- package/src/talkpilot/groups/phone.utils.ts +46 -46
- package/src/talkpilot/index.ts +32 -32
- package/src/talkpilot/leads/index.ts +2 -2
- package/src/talkpilot/leads/leads.getter.ts +6 -6
- package/src/talkpilot/leads/leads.schema.ts +33 -33
- package/src/talkpilot/leads/leads.types.ts +20 -20
- package/src/talkpilot/mongodb-client.ts +78 -78
- package/src/talkpilot/phone_numbers/__tests__/phone_numbers.spec.ts +530 -774
- package/src/talkpilot/phone_numbers/index.ts +2 -2
- package/src/talkpilot/phone_numbers/phone_numbers.getter.ts +240 -324
- package/src/talkpilot/phone_numbers/phone_numbers.schema.ts +17 -17
- package/src/talkpilot/phone_numbers/phone_numbers.types.ts +30 -36
- package/src/talkpilot/phone_numbers/phone_numbers.utils.ts +9 -9
- package/src/talkpilot/plans/__tests__/plans.spec.ts +70 -70
- package/src/talkpilot/plans/index.ts +2 -2
- package/src/talkpilot/plans/plans.getters.ts +132 -132
- package/src/talkpilot/plans/plans.types.ts +89 -89
- package/src/talkpilot/products/__tests__/products.getters.spec.ts +44 -44
- package/src/talkpilot/products/index.ts +2 -2
- package/src/talkpilot/products/products.getters.ts +12 -12
- package/src/talkpilot/products/products.types.ts +9 -9
- package/src/talkpilot/results/index.ts +7 -7
- package/src/talkpilot/results/results.getter.ts +39 -39
- package/src/talkpilot/results/results.schema.ts +25 -25
- package/src/talkpilot/results/results.types.ts +34 -34
- package/src/talkpilot/retry_analyze/__tests__/retryAnalyze.getters.spec.ts +156 -156
- package/src/talkpilot/retry_analyze/index.ts +2 -2
- package/src/talkpilot/retry_analyze/retryAnalyze.getters.ts +84 -84
- package/src/talkpilot/retry_analyze/retryAnalyze.types.ts +13 -13
- package/src/talkpilot/sessions/__tests__/sessions.spec.ts +147 -147
- package/src/talkpilot/sessions/index.ts +2 -2
- package/src/talkpilot/sessions/sessions.getter.ts +92 -92
- package/src/talkpilot/sessions/sessions.schema.ts +34 -34
- package/src/talkpilot/sessions/sessions.types.ts +30 -30
- package/src/talkpilot/subscriptions/__tests__/subscriptions.getters.utils.spec.ts +45 -45
- package/src/talkpilot/subscriptions/index.ts +3 -3
- package/src/talkpilot/subscriptions/subscriptions.getters.ts +146 -146
- package/src/talkpilot/subscriptions/subscriptions.getters.utils.ts +33 -33
- package/src/talkpilot/subscriptions/subscriptions.types.ts +66 -66
- package/src/talkpilot/utils/__tests__/query.utils.spec.ts +49 -49
- package/src/talkpilot/utils/query.utils.ts +21 -21
- package/src/test-utils/db-utils.ts +33 -33
- package/src/test-utils/factories/index.ts +18 -20
- package/src/test-utils/factories/municipal/cities.ts +16 -16
- package/src/test-utils/factories/municipal/departmentsSubjects.ts +37 -37
- package/src/test-utils/factories/municipal/muniIssues.ts +32 -32
- package/src/test-utils/factories/municipal/streets.ts +22 -22
- package/src/test-utils/factories/municipal/tickets.ts +39 -39
- package/src/test-utils/factories/talkpilot/agents.ts +19 -19
- package/src/test-utils/factories/talkpilot/calls.ts +37 -37
- package/src/test-utils/factories/talkpilot/clientAudioBuffers.ts +20 -20
- package/src/test-utils/factories/talkpilot/clientsConfig.ts +18 -18
- package/src/test-utils/factories/talkpilot/contextNotes.ts +40 -40
- package/src/test-utils/factories/talkpilot/flows.ts +33 -33
- package/src/test-utils/factories/talkpilot/groups.ts +33 -33
- package/src/test-utils/factories/talkpilot/phone_numbers.ts +22 -22
- package/src/test-utils/factories/talkpilot/sessions.ts +35 -35
- package/src/test-utils/factories/websitalk/knowledgeDocuments.ts +29 -29
- package/src/test-utils/factories/websitalk/scanResources.ts +26 -26
- package/src/test-utils/factories/websitalk/scans.ts +30 -30
- package/src/test-utils/factories/websitalk/websiteUrls.ts +17 -17
- package/src/utils/date.utils.ts +126 -126
- package/src/utils/shared.types.ts +4 -4
- package/src/utils/validation.ts +23 -23
- package/src/websitalk/index.ts +18 -18
- package/src/websitalk/knowledgeDocuments/__tests__/knowledgeDocuments.spec.ts +238 -238
- package/src/websitalk/knowledgeDocuments/index.ts +3 -3
- package/src/websitalk/knowledgeDocuments/knowledgeDocuments.constants.ts +26 -26
- package/src/websitalk/knowledgeDocuments/knowledgeDocuments.getters.ts +95 -95
- package/src/websitalk/knowledgeDocuments/knowledgeDocuments.types.ts +75 -75
- package/src/websitalk/mongodb-client.ts +61 -61
- package/src/websitalk/scanResources/__tests__/scanResources.spec.ts +267 -267
- package/src/websitalk/scanResources/index.ts +4 -4
- package/src/websitalk/scanResources/scanResources.constants.ts +60 -60
- package/src/websitalk/scanResources/scanResources.getters.ts +128 -128
- package/src/websitalk/scanResources/scanResources.types.ts +105 -105
- package/src/websitalk/scanResources/scanResources.utils.ts +31 -31
- package/src/websitalk/scans/__tests__/scans.spec.ts +362 -362
- package/src/websitalk/scans/index.ts +4 -4
- package/src/websitalk/scans/scans.constants.ts +18 -18
- package/src/websitalk/scans/scans.getters.ts +172 -172
- package/src/websitalk/scans/scans.types.ts +58 -58
- package/src/websitalk/scans/scans.utils.ts +5 -5
- package/src/websitalk/websiteUrls/__tests__/websiteUrls.spec.ts +77 -77
- package/src/websitalk/websiteUrls/index.ts +2 -2
- package/src/websitalk/websiteUrls/websiteUrls.getters.ts +65 -65
- package/src/websitalk/websiteUrls/websiteUrls.types.ts +13 -13
- package/tsconfig.json +23 -23
- package/dist/talkpilot/auditLogs/auditLogs.getters.d.ts +0 -8
- package/dist/talkpilot/auditLogs/auditLogs.getters.d.ts.map +0 -1
- package/dist/talkpilot/auditLogs/auditLogs.getters.js +0 -26
- package/dist/talkpilot/auditLogs/auditLogs.getters.js.map +0 -1
- package/dist/talkpilot/auditLogs/auditLogs.setters.d.ts +0 -3
- package/dist/talkpilot/auditLogs/auditLogs.setters.d.ts.map +0 -1
- package/dist/talkpilot/auditLogs/auditLogs.setters.js +0 -9
- package/dist/talkpilot/auditLogs/auditLogs.setters.js.map +0 -1
- package/dist/talkpilot/auditLogs/auditLogs.types.d.ts +0 -11
- package/dist/talkpilot/auditLogs/auditLogs.types.d.ts.map +0 -1
- package/dist/talkpilot/auditLogs/auditLogs.types.js.map +0 -1
- package/dist/talkpilot/auditLogs/index.d.ts +0 -3
- package/dist/talkpilot/auditLogs/index.d.ts.map +0 -1
- package/dist/talkpilot/auditLogs/index.js.map +0 -1
- package/dist/talkpilot/clientDeletionLogs/clientDeletionLogs.getters.d.ts +0 -4
- package/dist/talkpilot/clientDeletionLogs/clientDeletionLogs.getters.d.ts.map +0 -1
- package/dist/talkpilot/clientDeletionLogs/clientDeletionLogs.getters.js +0 -9
- package/dist/talkpilot/clientDeletionLogs/clientDeletionLogs.getters.js.map +0 -1
- package/dist/talkpilot/clientDeletionLogs/clientDeletionLogs.setters.d.ts +0 -3
- package/dist/talkpilot/clientDeletionLogs/clientDeletionLogs.setters.d.ts.map +0 -1
- package/dist/talkpilot/clientDeletionLogs/clientDeletionLogs.setters.js +0 -9
- package/dist/talkpilot/clientDeletionLogs/clientDeletionLogs.setters.js.map +0 -1
- package/dist/talkpilot/clientDeletionLogs/clientDeletionLogs.types.d.ts +0 -10
- package/dist/talkpilot/clientDeletionLogs/clientDeletionLogs.types.d.ts.map +0 -1
- package/dist/talkpilot/clientDeletionLogs/clientDeletionLogs.types.js.map +0 -1
- package/dist/talkpilot/clientDeletionLogs/index.d.ts +0 -4
- package/dist/talkpilot/clientDeletionLogs/index.d.ts.map +0 -1
- package/dist/talkpilot/clientDeletionLogs/index.js.map +0 -1
- package/dist/talkpilot/clients/clients.constants.d.ts +0 -3
- package/dist/talkpilot/clients/clients.constants.d.ts.map +0 -1
- package/dist/talkpilot/clients/clients.constants.js +0 -6
- package/dist/talkpilot/clients/clients.constants.js.map +0 -1
- package/dist/talkpilot/clients/clients.lifecycle.d.ts +0 -10
- package/dist/talkpilot/clients/clients.lifecycle.d.ts.map +0 -1
- package/dist/talkpilot/clients/clients.lifecycle.js +0 -95
- package/dist/talkpilot/clients/clients.lifecycle.js.map +0 -1
- package/dist/talkpilot/results/results.constants.d.ts +0 -4
- package/dist/talkpilot/results/results.constants.d.ts.map +0 -1
- package/dist/talkpilot/results/results.constants.js +0 -10
- package/dist/talkpilot/results/results.constants.js.map +0 -1
- package/dist/talkpilot/results/results.statistics.getters.d.ts +0 -12
- package/dist/talkpilot/results/results.statistics.getters.d.ts.map +0 -1
- package/dist/talkpilot/results/results.statistics.getters.js +0 -258
- package/dist/talkpilot/results/results.statistics.getters.js.map +0 -1
- package/dist/talkpilot/results/results.statistics.types.d.ts +0 -22
- package/dist/talkpilot/results/results.statistics.types.d.ts.map +0 -1
- package/dist/talkpilot/results/results.statistics.types.js +0 -3
- package/dist/talkpilot/results/results.statistics.types.js.map +0 -1
- package/dist/test-utils/factories/talkpilot/clients.d.ts +0 -14
- package/dist/test-utils/factories/talkpilot/clients.d.ts.map +0 -1
- package/dist/test-utils/factories/talkpilot/clients.js +0 -19
- package/dist/test-utils/factories/talkpilot/clients.js.map +0 -1
- package/dist/test-utils/factories/talkpilot/results.d.ts +0 -16
- package/dist/test-utils/factories/talkpilot/results.d.ts.map +0 -1
- package/dist/test-utils/factories/talkpilot/results.js +0 -40
- package/dist/test-utils/factories/talkpilot/results.js.map +0 -1
- package/src/talkpilot/auditLogs/__tests__/auditLogs.spec.ts +0 -91
- package/src/talkpilot/auditLogs/auditLogs.getters.ts +0 -26
- package/src/talkpilot/auditLogs/auditLogs.types.ts +0 -12
- package/src/talkpilot/auditLogs/index.ts +0 -2
- package/src/talkpilot/calls/__tests__/calls.statistics.getters.spec.ts +0 -374
- package/src/talkpilot/clients/__tests__/clients.getters.spec.ts +0 -51
- package/src/talkpilot/clients/__tests__/clients.lifecycle.spec.ts +0 -166
- package/src/talkpilot/clients/clients.constants.ts +0 -2
- package/src/talkpilot/clients/clients.lifecycle.ts +0 -116
- package/src/test-utils/factories/talkpilot/clients.ts +0 -21
- package/src/test-utils/factories/talkpilot/results.ts +0 -43
|
@@ -1,65 +1,65 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Development standards and conventions for the core-db package
|
|
3
|
-
globs: src/**/*.ts
|
|
4
|
-
alwaysApply: true
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Development Standards
|
|
8
|
-
|
|
9
|
-
This package provides a centralized database layer for multiple domains (TalkPilot and Municipal). Follow these rules to maintain consistency and reliability.
|
|
10
|
-
|
|
11
|
-
## Project Structure
|
|
12
|
-
|
|
13
|
-
- **`src/talkpilot/`**: All database logic, types, and getters related to the TalkPilot domain.
|
|
14
|
-
- **`src/municipal/`**: All database logic, types, and getters related to the Municipal Data domain.
|
|
15
|
-
- **`src/test-utils/`**: Shared testing infrastructure, including factories and database utilities.
|
|
16
|
-
|
|
17
|
-
## Database Connection Pattern
|
|
18
|
-
|
|
19
|
-
Each domain is isolated. They have their own `db` instance and must be connected independently.
|
|
20
|
-
|
|
21
|
-
```typescript
|
|
22
|
-
import { mongodbClient, municipalDataMongodbClient } from '@talkpilot/core-db';
|
|
23
|
-
|
|
24
|
-
// TalkPilot
|
|
25
|
-
await mongodbClient.connect(uri);
|
|
26
|
-
|
|
27
|
-
// Municipal
|
|
28
|
-
await municipalDataMongodbClient.connect(uri);
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## Creating New Getters
|
|
32
|
-
|
|
33
|
-
1. **Location**: Place getters in the relevant domain folder (e.g., `src/talkpilot/agents/agents.getters.ts`).
|
|
34
|
-
2. **Naming**: Use `find...` for multiple results and `get...ById` for single results.
|
|
35
|
-
3. **Domain isolation**: Always use the `getDb()` function from the current domain's `index.ts`.
|
|
36
|
-
|
|
37
|
-
## Environment Validation
|
|
38
|
-
|
|
39
|
-
Always validate configuration "on-demand" within the `connect` methods using the validation utilities.
|
|
40
|
-
|
|
41
|
-
```typescript
|
|
42
|
-
import { validateConfig, validateMongoUri } from '../utils/validation';
|
|
43
|
-
|
|
44
|
-
async connect(uri?: string) {
|
|
45
|
-
const mongodbUri = uri || process.env.MONGO_URI;
|
|
46
|
-
validateConfig('MONGO_URI', mongodbUri);
|
|
47
|
-
validateMongoUri(mongodbUri!);
|
|
48
|
-
// ... connection logic
|
|
49
|
-
}
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
## Testing Standards
|
|
53
|
-
|
|
54
|
-
1. **In-Memory DB**: Use `mongodb-memory-server` for all tests. It is automatically initialized in `src/__tests__/setup.ts`.
|
|
55
|
-
2. **Factories**: Use the Fishery factories in `src/test-utils/factories/` to generate test data.
|
|
56
|
-
3. **Organization**: Place tests in a `__tests__` folder within the relevant domain.
|
|
57
|
-
|
|
58
|
-
```typescript
|
|
59
|
-
import { createAgent } from '../../../test-utils/factories';
|
|
60
|
-
|
|
61
|
-
it('should find agents', async () => {
|
|
62
|
-
const agent = createAgent({ name: 'Test' });
|
|
63
|
-
// ... test logic
|
|
64
|
-
});
|
|
65
|
-
```
|
|
1
|
+
---
|
|
2
|
+
description: Development standards and conventions for the core-db package
|
|
3
|
+
globs: src/**/*.ts
|
|
4
|
+
alwaysApply: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Development Standards
|
|
8
|
+
|
|
9
|
+
This package provides a centralized database layer for multiple domains (TalkPilot and Municipal). Follow these rules to maintain consistency and reliability.
|
|
10
|
+
|
|
11
|
+
## Project Structure
|
|
12
|
+
|
|
13
|
+
- **`src/talkpilot/`**: All database logic, types, and getters related to the TalkPilot domain.
|
|
14
|
+
- **`src/municipal/`**: All database logic, types, and getters related to the Municipal Data domain.
|
|
15
|
+
- **`src/test-utils/`**: Shared testing infrastructure, including factories and database utilities.
|
|
16
|
+
|
|
17
|
+
## Database Connection Pattern
|
|
18
|
+
|
|
19
|
+
Each domain is isolated. They have their own `db` instance and must be connected independently.
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
import { mongodbClient, municipalDataMongodbClient } from '@talkpilot/core-db';
|
|
23
|
+
|
|
24
|
+
// TalkPilot
|
|
25
|
+
await mongodbClient.connect(uri);
|
|
26
|
+
|
|
27
|
+
// Municipal
|
|
28
|
+
await municipalDataMongodbClient.connect(uri);
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Creating New Getters
|
|
32
|
+
|
|
33
|
+
1. **Location**: Place getters in the relevant domain folder (e.g., `src/talkpilot/agents/agents.getters.ts`).
|
|
34
|
+
2. **Naming**: Use `find...` for multiple results and `get...ById` for single results.
|
|
35
|
+
3. **Domain isolation**: Always use the `getDb()` function from the current domain's `index.ts`.
|
|
36
|
+
|
|
37
|
+
## Environment Validation
|
|
38
|
+
|
|
39
|
+
Always validate configuration "on-demand" within the `connect` methods using the validation utilities.
|
|
40
|
+
|
|
41
|
+
```typescript
|
|
42
|
+
import { validateConfig, validateMongoUri } from '../utils/validation';
|
|
43
|
+
|
|
44
|
+
async connect(uri?: string) {
|
|
45
|
+
const mongodbUri = uri || process.env.MONGO_URI;
|
|
46
|
+
validateConfig('MONGO_URI', mongodbUri);
|
|
47
|
+
validateMongoUri(mongodbUri!);
|
|
48
|
+
// ... connection logic
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Testing Standards
|
|
53
|
+
|
|
54
|
+
1. **In-Memory DB**: Use `mongodb-memory-server` for all tests. It is automatically initialized in `src/__tests__/setup.ts`.
|
|
55
|
+
2. **Factories**: Use the Fishery factories in `src/test-utils/factories/` to generate test data.
|
|
56
|
+
3. **Organization**: Place tests in a `__tests__` folder within the relevant domain.
|
|
57
|
+
|
|
58
|
+
```typescript
|
|
59
|
+
import { createAgent } from '../../../test-utils/factories';
|
|
60
|
+
|
|
61
|
+
it('should find agents', async () => {
|
|
62
|
+
const agent = createAgent({ name: 'Test' });
|
|
63
|
+
// ... test logic
|
|
64
|
+
});
|
|
65
|
+
```
|
package/AGENTS.md
CHANGED
|
@@ -1,49 +1,49 @@
|
|
|
1
|
-
# AI Agent Guide for core-db
|
|
2
|
-
|
|
3
|
-
Ground truth for AI coding agents in this repository. This is `@talkpilot/core-db` — the only package that should talk to Mongo. `.cursor/rules/development.mdc` exists but may lag (TalkPilot + Municipal only); do not expand those rules in an unrelated ticket.
|
|
4
|
-
|
|
5
|
-
## What this is
|
|
6
|
-
Shared Mongo layer: typed getters, schemas, factories, indexes. Consumed by TalkPilot, municipal, WebsiteTalk, and clinic services. Publishing a version here is how other repos pick up schema/getter changes.
|
|
7
|
-
|
|
8
|
-
## Coding philosophy
|
|
9
|
-
- Strict TypeScript. No `any`; use `unknown` and narrow.
|
|
10
|
-
- No narrating comments.
|
|
11
|
-
- Split types, getters, and schemas into separate files.
|
|
12
|
-
|
|
13
|
-
## Project structure
|
|
14
|
-
- `src/talkpilot/` — calls, flows, sessions, clients, phone numbers, subscriptions, …
|
|
15
|
-
- `src/municipal/` — cities, streets, tickets, departmentsSubjects, …
|
|
16
|
-
- `src/websitalk/` — scans, scanResources, websiteUrls.
|
|
17
|
-
- `src/configuration/` — prompts, models.
|
|
18
|
-
- `src/test-utils/` — Fishery factories and test DB helpers.
|
|
19
|
-
- `src/utils/` — validation, pagination, shared types.
|
|
20
|
-
- `dist/` is what consumers import — generated, tests excluded from the build.
|
|
21
|
-
|
|
22
|
-
## Copy this
|
|
23
|
-
New getter: `src/<domain>/<entity>/<entity>.types.ts` + `<entity>.getter.ts` (or `*.getters.ts`) + optional `<entity>.schema.ts` + barrel `index.ts` + `__tests__/<entity>.spec.ts`.
|
|
24
|
-
Export it from `src/index.ts`.
|
|
25
|
-
Examples: `src/talkpilot/calls/calls.getters.ts`, `src/talkpilot/phone_numbers/phone_numbers.getter.ts`.
|
|
26
|
-
|
|
27
|
-
Naming: `find*` for many, `get*ById` (or equivalent single-doc) for one. Always use that domain’s `getDb()` / collection helper — never another domain’s client. Exception already on disk: `src/talkpilot/calls/calls.statistics.getters.ts` imports municipal `tickets.statistics.getters` — do not “clean that up.”
|
|
28
|
-
|
|
29
|
-
## Where data lives
|
|
30
|
-
This repo **owns** `mongodb`. Four isolated clients — connect each independently:
|
|
31
|
-
|
|
32
|
-
- `mongodbClient` — TalkPilot
|
|
33
|
-
- `municipalDataMongodbClient` — municipal
|
|
34
|
-
- `websitalkMongodbClient` — WebsiteTalk
|
|
35
|
-
- `configurationMongodbClient` — configuration
|
|
36
|
-
|
|
37
|
-
Do not cross-import getters across domains, except the talkpilot call-stats → municipal tickets exception above.
|
|
38
|
-
|
|
39
|
-
## Do / don't
|
|
40
|
-
- Do not put HTTP, Express, or business orchestration here.
|
|
41
|
-
- Validate `MONGO_URI` (and siblings) on demand in `connect()`, using `src/utils/validation`.
|
|
42
|
-
- After a getter/schema change: bump package version, build, publish; then bump the consumer. Downstream pins skew — do not assume they are on latest.
|
|
43
|
-
- `prepare` runs `build` on install.
|
|
44
|
-
|
|
45
|
-
## Siblings
|
|
46
|
-
Every Node service should call getters from here. If a service is about to `getDb().collection` or `import from 'mongodb'`, the getter belongs in this PR first.
|
|
47
|
-
|
|
48
|
-
## Tests
|
|
49
|
-
Jest + `mongodb-memory-server` (`src/__tests__/setup.ts`). Factories in `src/test-utils/factories/`. Colocate `__tests__/` under the domain.
|
|
1
|
+
# AI Agent Guide for core-db
|
|
2
|
+
|
|
3
|
+
Ground truth for AI coding agents in this repository. This is `@talkpilot/core-db` — the only package that should talk to Mongo. `.cursor/rules/development.mdc` exists but may lag (TalkPilot + Municipal only); do not expand those rules in an unrelated ticket.
|
|
4
|
+
|
|
5
|
+
## What this is
|
|
6
|
+
Shared Mongo layer: typed getters, schemas, factories, indexes. Consumed by TalkPilot, municipal, WebsiteTalk, and clinic services. Publishing a version here is how other repos pick up schema/getter changes.
|
|
7
|
+
|
|
8
|
+
## Coding philosophy
|
|
9
|
+
- Strict TypeScript. No `any`; use `unknown` and narrow.
|
|
10
|
+
- No narrating comments.
|
|
11
|
+
- Split types, getters, and schemas into separate files.
|
|
12
|
+
|
|
13
|
+
## Project structure
|
|
14
|
+
- `src/talkpilot/` — calls, flows, sessions, clients, phone numbers, subscriptions, …
|
|
15
|
+
- `src/municipal/` — cities, streets, tickets, departmentsSubjects, …
|
|
16
|
+
- `src/websitalk/` — scans, scanResources, websiteUrls.
|
|
17
|
+
- `src/configuration/` — prompts, models.
|
|
18
|
+
- `src/test-utils/` — Fishery factories and test DB helpers.
|
|
19
|
+
- `src/utils/` — validation, pagination, shared types.
|
|
20
|
+
- `dist/` is what consumers import — generated, tests excluded from the build.
|
|
21
|
+
|
|
22
|
+
## Copy this
|
|
23
|
+
New getter: `src/<domain>/<entity>/<entity>.types.ts` + `<entity>.getter.ts` (or `*.getters.ts`) + optional `<entity>.schema.ts` + barrel `index.ts` + `__tests__/<entity>.spec.ts`.
|
|
24
|
+
Export it from `src/index.ts`.
|
|
25
|
+
Examples: `src/talkpilot/calls/calls.getters.ts`, `src/talkpilot/phone_numbers/phone_numbers.getter.ts`.
|
|
26
|
+
|
|
27
|
+
Naming: `find*` for many, `get*ById` (or equivalent single-doc) for one. Always use that domain’s `getDb()` / collection helper — never another domain’s client. Exception already on disk: `src/talkpilot/calls/calls.statistics.getters.ts` imports municipal `tickets.statistics.getters` — do not “clean that up.”
|
|
28
|
+
|
|
29
|
+
## Where data lives
|
|
30
|
+
This repo **owns** `mongodb`. Four isolated clients — connect each independently:
|
|
31
|
+
|
|
32
|
+
- `mongodbClient` — TalkPilot
|
|
33
|
+
- `municipalDataMongodbClient` — municipal
|
|
34
|
+
- `websitalkMongodbClient` — WebsiteTalk
|
|
35
|
+
- `configurationMongodbClient` — configuration
|
|
36
|
+
|
|
37
|
+
Do not cross-import getters across domains, except the talkpilot call-stats → municipal tickets exception above.
|
|
38
|
+
|
|
39
|
+
## Do / don't
|
|
40
|
+
- Do not put HTTP, Express, or business orchestration here.
|
|
41
|
+
- Validate `MONGO_URI` (and siblings) on demand in `connect()`, using `src/utils/validation`.
|
|
42
|
+
- After a getter/schema change: bump package version, build, publish; then bump the consumer. Downstream pins skew — do not assume they are on latest.
|
|
43
|
+
- `prepare` runs `build` on install.
|
|
44
|
+
|
|
45
|
+
## Siblings
|
|
46
|
+
Every Node service should call getters from here. If a service is about to `getDb().collection` or `import from 'mongodb'`, the getter belongs in this PR first.
|
|
47
|
+
|
|
48
|
+
## Tests
|
|
49
|
+
Jest + `mongodb-memory-server` (`src/__tests__/setup.ts`). Factories in `src/test-utils/factories/`. Colocate `__tests__/` under the domain.
|
package/DEVELOPMENT.md
CHANGED
|
@@ -1,141 +1,141 @@
|
|
|
1
|
-
# Development Guide
|
|
2
|
-
|
|
3
|
-
Welcome to the `core-db` development guide. This document explains how to set up, develop, and test this package.
|
|
4
|
-
|
|
5
|
-
## Getting Started
|
|
6
|
-
|
|
7
|
-
### Prerequisites
|
|
8
|
-
|
|
9
|
-
- Node.js (v18 or later)
|
|
10
|
-
- TypeScript
|
|
11
|
-
|
|
12
|
-
### Setup
|
|
13
|
-
|
|
14
|
-
1. Install dependencies:
|
|
15
|
-
```bash
|
|
16
|
-
npm install
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
2. Build the project:
|
|
20
|
-
```bash
|
|
21
|
-
npm run build
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
## Local Development
|
|
25
|
-
|
|
26
|
-
Use `npm pack` to test local changes in a consuming project.
|
|
27
|
-
|
|
28
|
-
1. In the `core-db` folder, build and pack:
|
|
29
|
-
```bash
|
|
30
|
-
npm run build && npm pack
|
|
31
|
-
```
|
|
32
|
-
This produces a file like `talkpilot-core-db-x.y.z.tgz` in the project root.
|
|
33
|
-
|
|
34
|
-
2. In the consuming project, install it:
|
|
35
|
-
```bash
|
|
36
|
-
npm install /path/to/core-db/talkpilot-core-db-x.y.z.tgz
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
3. After making further changes to `core-db`, repeat step 1 and reinstall in the consuming project.
|
|
40
|
-
|
|
41
|
-
## Adding a New Getter
|
|
42
|
-
|
|
43
|
-
1. **Define Types**: Add your data types in the relevant domain's `types.ts` file.
|
|
44
|
-
2. **Implement Getter**: Add the function in the `getters.ts` file.
|
|
45
|
-
3. **Export**: Ensure the getter is exported from the domain's `index.ts` and finally from the main `src/index.ts`.
|
|
46
|
-
4. **Test**: Create a test in the domain's `__tests__` folder.
|
|
47
|
-
|
|
48
|
-
## Signature Immutability
|
|
49
|
-
|
|
50
|
-
`core-db` is a shared package consumed by multiple services that may not all update at the same time. A signature change that looks harmless locally can silently break a service that hasn't picked up the new version yet.
|
|
51
|
-
|
|
52
|
-
**Rules:**
|
|
53
|
-
|
|
54
|
-
- **Never change an existing parameter's type or name.**
|
|
55
|
-
- **Never add a required parameter** to an existing function.
|
|
56
|
-
- **Never remove a function.** Mark it `@deprecated` instead (see below).
|
|
57
|
-
- **Safe additions only**: you may add optional parameters or parameters with defaults — existing callers will continue to compile without changes.
|
|
58
|
-
|
|
59
|
-
**Deprecating instead of deleting:**
|
|
60
|
-
|
|
61
|
-
When a function is no longer the right approach, mark it deprecated and explain why. Consumers can then migrate on their own schedule.
|
|
62
|
-
|
|
63
|
-
```ts
|
|
64
|
-
/**
|
|
65
|
-
* @deprecated Use `newFunction` instead — reason for the change.
|
|
66
|
-
*/
|
|
67
|
-
export const oldFunction = (...) => { ... };
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
The deprecation comment must include either the name of the replacement or a clear explanation of why the function was retired, so a consumer reading the warning knows exactly what to do.
|
|
71
|
-
|
|
72
|
-
## Testing
|
|
73
|
-
|
|
74
|
-
We use Jest with `mongodb-memory-server` for fast, isolated database tests.
|
|
75
|
-
|
|
76
|
-
### Running Tests
|
|
77
|
-
|
|
78
|
-
```bash
|
|
79
|
-
npm test
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
### Using Factories
|
|
83
|
-
|
|
84
|
-
Always use factories to generate test data to keep tests clean and maintainable.
|
|
85
|
-
|
|
86
|
-
```typescript
|
|
87
|
-
import { createCallDoc } from '../calls.getters';
|
|
88
|
-
import { createOutGoingCallDoc } from '../../../test-utils/factories';
|
|
89
|
-
|
|
90
|
-
it('should save a call', async () => {
|
|
91
|
-
const call = createOutGoingCallDoc({ callSid: 'CA123' });
|
|
92
|
-
await createCallDoc(call);
|
|
93
|
-
// ... assertions
|
|
94
|
-
});
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
## Build Process
|
|
98
|
-
|
|
99
|
-
The project is built using TypeScript (`tsc`). The output is generated in the `dist/` directory.
|
|
100
|
-
|
|
101
|
-
- `main`: `dist/index.js`
|
|
102
|
-
- `types`: `dist/index.d.ts`
|
|
103
|
-
|
|
104
|
-
The `prepare` script in `package.json` ensures that the project is built automatically when installed via a Git URL.
|
|
105
|
-
|
|
106
|
-
## Releasing a New Version
|
|
107
|
-
|
|
108
|
-
Publish **only after the PR is approved and merged** — never from an unreviewed branch. Then, from the merged `main`:
|
|
109
|
-
|
|
110
|
-
1. **Pull** the latest `main` so you publish exactly what was reviewed (see also [Branch Hygiene](#branch-hygiene)).
|
|
111
|
-
2. **Bump the version** with `npm version <patch|minor|major>` (or edit `package.json`). Never reuse a number that already exists on the registry — check first with `npm view @talkpilot/core-db versions`.
|
|
112
|
-
3. **Verify**: `npm run build` and `npm test` (the Pre-push checklist in the README).
|
|
113
|
-
4. **Publish**: `npm publish` (requires the shared token — see [Team Access & Authentication](#team-access--authentication)).
|
|
114
|
-
5. Downstream repos pick it up via `npm update @talkpilot/core-db` or their next container build.
|
|
115
|
-
|
|
116
|
-
Add a short release note for the version in the README (the version table and per-version section).
|
|
117
|
-
|
|
118
|
-
### If a published version turns out to be broken
|
|
119
|
-
|
|
120
|
-
Never republish or unpublish — a reused or missing number leaves a confusing gap in the registry. Instead, publish a **new** version with the fix, and add a one-line warning to the broken version's row in the README version table (e.g. "⚠️ do not use — <reason>; upgrade to <next version>") so consumers know to skip it.
|
|
121
|
-
|
|
122
|
-
## Team Access & Authentication
|
|
123
|
-
|
|
124
|
-
To allow the whole team to publish and install without adding individual npm accounts, we use a shared **npm Granular Access Token**.
|
|
125
|
-
|
|
126
|
-
### One-time Local Setup
|
|
127
|
-
|
|
128
|
-
Each developer needs to add the shared token to their local npm configuration. Do **NOT** add this to the project's `.npmrc` file, as it will be committed to Git.
|
|
129
|
-
|
|
130
|
-
1. Get the shared **npm Automation Token**.
|
|
131
|
-
2. Open (or create) your global npm configuration file:
|
|
132
|
-
```bash
|
|
133
|
-
nano ~/.npmrc
|
|
134
|
-
```
|
|
135
|
-
3. Add the following line (replace `[TOKEN]` with the actual token):
|
|
136
|
-
```text
|
|
137
|
-
//registry.npmjs.org/:_authToken=[TOKEN]
|
|
138
|
-
```
|
|
139
|
-
4. Save and exit.
|
|
140
|
-
|
|
141
|
-
Now you can run `npm publish` and `npm install` for scoped `@talkpilot` packages without being prompted for credentials.
|
|
1
|
+
# Development Guide
|
|
2
|
+
|
|
3
|
+
Welcome to the `core-db` development guide. This document explains how to set up, develop, and test this package.
|
|
4
|
+
|
|
5
|
+
## Getting Started
|
|
6
|
+
|
|
7
|
+
### Prerequisites
|
|
8
|
+
|
|
9
|
+
- Node.js (v18 or later)
|
|
10
|
+
- TypeScript
|
|
11
|
+
|
|
12
|
+
### Setup
|
|
13
|
+
|
|
14
|
+
1. Install dependencies:
|
|
15
|
+
```bash
|
|
16
|
+
npm install
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
2. Build the project:
|
|
20
|
+
```bash
|
|
21
|
+
npm run build
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Local Development
|
|
25
|
+
|
|
26
|
+
Use `npm pack` to test local changes in a consuming project.
|
|
27
|
+
|
|
28
|
+
1. In the `core-db` folder, build and pack:
|
|
29
|
+
```bash
|
|
30
|
+
npm run build && npm pack
|
|
31
|
+
```
|
|
32
|
+
This produces a file like `talkpilot-core-db-x.y.z.tgz` in the project root.
|
|
33
|
+
|
|
34
|
+
2. In the consuming project, install it:
|
|
35
|
+
```bash
|
|
36
|
+
npm install /path/to/core-db/talkpilot-core-db-x.y.z.tgz
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
3. After making further changes to `core-db`, repeat step 1 and reinstall in the consuming project.
|
|
40
|
+
|
|
41
|
+
## Adding a New Getter
|
|
42
|
+
|
|
43
|
+
1. **Define Types**: Add your data types in the relevant domain's `types.ts` file.
|
|
44
|
+
2. **Implement Getter**: Add the function in the `getters.ts` file.
|
|
45
|
+
3. **Export**: Ensure the getter is exported from the domain's `index.ts` and finally from the main `src/index.ts`.
|
|
46
|
+
4. **Test**: Create a test in the domain's `__tests__` folder.
|
|
47
|
+
|
|
48
|
+
## Signature Immutability
|
|
49
|
+
|
|
50
|
+
`core-db` is a shared package consumed by multiple services that may not all update at the same time. A signature change that looks harmless locally can silently break a service that hasn't picked up the new version yet.
|
|
51
|
+
|
|
52
|
+
**Rules:**
|
|
53
|
+
|
|
54
|
+
- **Never change an existing parameter's type or name.**
|
|
55
|
+
- **Never add a required parameter** to an existing function.
|
|
56
|
+
- **Never remove a function.** Mark it `@deprecated` instead (see below).
|
|
57
|
+
- **Safe additions only**: you may add optional parameters or parameters with defaults — existing callers will continue to compile without changes.
|
|
58
|
+
|
|
59
|
+
**Deprecating instead of deleting:**
|
|
60
|
+
|
|
61
|
+
When a function is no longer the right approach, mark it deprecated and explain why. Consumers can then migrate on their own schedule.
|
|
62
|
+
|
|
63
|
+
```ts
|
|
64
|
+
/**
|
|
65
|
+
* @deprecated Use `newFunction` instead — reason for the change.
|
|
66
|
+
*/
|
|
67
|
+
export const oldFunction = (...) => { ... };
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
The deprecation comment must include either the name of the replacement or a clear explanation of why the function was retired, so a consumer reading the warning knows exactly what to do.
|
|
71
|
+
|
|
72
|
+
## Testing
|
|
73
|
+
|
|
74
|
+
We use Jest with `mongodb-memory-server` for fast, isolated database tests.
|
|
75
|
+
|
|
76
|
+
### Running Tests
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
npm test
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Using Factories
|
|
83
|
+
|
|
84
|
+
Always use factories to generate test data to keep tests clean and maintainable.
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
import { createCallDoc } from '../calls.getters';
|
|
88
|
+
import { createOutGoingCallDoc } from '../../../test-utils/factories';
|
|
89
|
+
|
|
90
|
+
it('should save a call', async () => {
|
|
91
|
+
const call = createOutGoingCallDoc({ callSid: 'CA123' });
|
|
92
|
+
await createCallDoc(call);
|
|
93
|
+
// ... assertions
|
|
94
|
+
});
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Build Process
|
|
98
|
+
|
|
99
|
+
The project is built using TypeScript (`tsc`). The output is generated in the `dist/` directory.
|
|
100
|
+
|
|
101
|
+
- `main`: `dist/index.js`
|
|
102
|
+
- `types`: `dist/index.d.ts`
|
|
103
|
+
|
|
104
|
+
The `prepare` script in `package.json` ensures that the project is built automatically when installed via a Git URL.
|
|
105
|
+
|
|
106
|
+
## Releasing a New Version
|
|
107
|
+
|
|
108
|
+
Publish **only after the PR is approved and merged** — never from an unreviewed branch. Then, from the merged `main`:
|
|
109
|
+
|
|
110
|
+
1. **Pull** the latest `main` so you publish exactly what was reviewed (see also [Branch Hygiene](#branch-hygiene)).
|
|
111
|
+
2. **Bump the version** with `npm version <patch|minor|major>` (or edit `package.json`). Never reuse a number that already exists on the registry — check first with `npm view @talkpilot/core-db versions`.
|
|
112
|
+
3. **Verify**: `npm run build` and `npm test` (the Pre-push checklist in the README).
|
|
113
|
+
4. **Publish**: `npm publish` (requires the shared token — see [Team Access & Authentication](#team-access--authentication)).
|
|
114
|
+
5. Downstream repos pick it up via `npm update @talkpilot/core-db` or their next container build.
|
|
115
|
+
|
|
116
|
+
Add a short release note for the version in the README (the version table and per-version section).
|
|
117
|
+
|
|
118
|
+
### If a published version turns out to be broken
|
|
119
|
+
|
|
120
|
+
Never republish or unpublish — a reused or missing number leaves a confusing gap in the registry. Instead, publish a **new** version with the fix, and add a one-line warning to the broken version's row in the README version table (e.g. "⚠️ do not use — <reason>; upgrade to <next version>") so consumers know to skip it.
|
|
121
|
+
|
|
122
|
+
## Team Access & Authentication
|
|
123
|
+
|
|
124
|
+
To allow the whole team to publish and install without adding individual npm accounts, we use a shared **npm Granular Access Token**.
|
|
125
|
+
|
|
126
|
+
### One-time Local Setup
|
|
127
|
+
|
|
128
|
+
Each developer needs to add the shared token to their local npm configuration. Do **NOT** add this to the project's `.npmrc` file, as it will be committed to Git.
|
|
129
|
+
|
|
130
|
+
1. Get the shared **npm Automation Token**.
|
|
131
|
+
2. Open (or create) your global npm configuration file:
|
|
132
|
+
```bash
|
|
133
|
+
nano ~/.npmrc
|
|
134
|
+
```
|
|
135
|
+
3. Add the following line (replace `[TOKEN]` with the actual token):
|
|
136
|
+
```text
|
|
137
|
+
//registry.npmjs.org/:_authToken=[TOKEN]
|
|
138
|
+
```
|
|
139
|
+
4. Save and exit.
|
|
140
|
+
|
|
141
|
+
Now you can run `npm publish` and `npm install` for scoped `@talkpilot` packages without being prompted for credentials.
|
package/README.md
CHANGED
|
@@ -37,7 +37,6 @@ L1:# @talkpilot/core-db
|
|
|
37
37
|
- **TalkPilot domain** – Imports like `findAgents`, `getFlows`, `findCalls`, and `vectorSearchCalls` live in `src/talkpilot`. These functions are the canonical access pattern for call history, session metadata, and provider configs.
|
|
38
38
|
- **Municipal domain** – Helpers such as `findStreets`, `getMunicipalCities`, `findDepartmentSubjects`, and `createTicket` live under `src/municipal` and feed MIS workflows (street hints, subject matching, Ash Bina tickets).
|
|
39
39
|
- **Configuration domain** – `getPromptByName`, `findPrompts`, `getAllPrompts`, and `getPromptsByProduct` live under `src/configuration` and back MIS's `moked_106` prompt lookups (defaults, overridable per-client via `clientConfig.toolsPrompts`).
|
|
40
|
-
- **Websitalk domain** (`scans`, `websiteUrls`) – ⚠️ **Not included in `clientExistsInAnyCollection`/`deleteClientDataAcrossDomains`.** Those collections hold the client's URLs, which an external website-talk API uses as a lookup key to clean up its own Mongo collections *and* other, non-Mongo data stores tied to the client. Deleting a client fully requires calling that external API separately — see the warning on `deleteClientDataAcrossDomains` in `src/talkpilot/clients/clients.lifecycle.ts`.
|
|
41
40
|
|
|
42
41
|
## Environment variables
|
|
43
42
|
|
|
@@ -179,11 +178,10 @@ Refer to `DEVELOPMENT.md` for the full walkthrough, token instructions, and fact
|
|
|
179
178
|
| 1.3.47 | Added optional `accountOwnerEmail` field to `WebsiteTalkProduct` (CP-1715): the recipient for the end-of-call summary email, set once from the client's login email and editable in Settings. |
|
|
180
179
|
| 1.3.48 | Fixed `getScanPages` search (CP-1726): user search input was passed unescaped into MongoDB's `$regex`, so a URL/title containing regex-special characters (e.g. `?`) failed to match even when the document existed. Added `escapeRegex()` and applied it before building the `url`/`title` `$regex` filter. No API changes. |
|
|
181
180
|
| 1.3.49 | Internal tools configuration on flows (CP-1723): `Flow.internalTools` keyed by tool name (`enabled`, optional `maxCalls`, per-parameter `description`/`value` overrides) with matching `$jsonSchema` validator, plus `createFlow` / `updateFlowById` mutators and the `FlowUpdateParams` type so consumers stop writing to the `flows` collection directly. |
|
|
182
|
-
| 1.3.52 | Client-lifecycle support for the TalkPilot Dashboard (PE-869): `clientExistsInAnyCollection`/`deleteClientDataAcrossDomains` (dynamic scan across talkpilot/municipal domains only, no hardcoded collection list; `auditLogs` is excluded so a client's own deletion record survives its deletion), new `auditLogs` collection & `insertAuditLog`/`findAuditLogs`/`countAuditLogs`, `getAllClientCredits` on `clients`. Added `results` statistics getters for the dashboard: `aggregateActiveCallsSummary`, `aggregateTodayCallsSummary`, `aggregateClientCallStats`, `aggregateSessionCallStats`, and `findClientIdsByCallSids` (for backOffice-server). On `phone_numbers`: fixed `getClientPhones`/`getAllClientPhoneMappings` to deduplicate append-only history records instead of returning raw duplicate rows per client; added `getDistinctClientPhonePairs`, `findClientsByPhoneNumbers`, and `deletePhoneNumberRecords` (removes every record for a phone number, across all clients, once it's released back to Twilio). website-talk (`scans`/`websiteUrls`) is intentionally NOT touched by `deleteClientDataAcrossDomains` — see the Websitalk domain note above; callers must call the external website-talk deletion API separately. No breaking changes. |
|
|
183
181
|
| 1.3.57 | Phone-number bind getters: list by client, exclusive flow assign, unbind, and `flow_id` match for ObjectId or leftover string. `getClientByClientId`. |
|
|
184
182
|
| 1.3.61 | Optional `activeFlowId` on `WebsiteTalkProduct` (CP-1849). WebsiteTalk updates this flow instead of the flow on a phone number. |
|
|
185
183
|
| 1.3.62 | Pause/Resume support for WebsiteTalk scans (CP-1752): `PAUSED` and `CANCELED` added to `SCAN_STATUSES` (`PAUSED` deliberately excluded from `FINISHED_SCAN_STATUSES` — pausing isn't done, `CANCELED` is). Added `Scan.pausedAt`, tracked across pause/resume so elapsed-time display can freeze correctly instead of counting the paused duration. |
|
|
186
|
-
| 1.3.
|
|
184
|
+
| 1.3.64 | New `callTokenUsage` collection with `incrementCallTokenUsage` (CP-1810): per-call realtime token usage, one document per `callSid`. |
|
|
187
185
|
|
|
188
186
|
### 1.1.9
|
|
189
187
|
|
|
@@ -772,24 +770,6 @@ No — purely additive.
|
|
|
772
770
|
|
|
773
771
|
No API changes. **WTIS** (the only current consumer of `getScanPages`) should upgrade to 1.3.48 or later to pick up the fix.
|
|
774
772
|
|
|
775
|
-
### 1.3.52 — Client-lifecycle support for the TalkPilot Dashboard (PE-869)
|
|
776
|
-
|
|
777
|
-
Adds centralized client deletion across the talkpilot/municipal domains, with an audit trail, plus supporting getters for the client-management dashboard.
|
|
778
|
-
|
|
779
|
-
**Added**
|
|
780
|
-
|
|
781
|
-
| Area | What |
|
|
782
|
-
| --- | --- |
|
|
783
|
-
| `clients` | `clientExistsInAnyCollection` / `deleteClientDataAcrossDomains` — dynamically scan and delete a client's data across every talkpilot/municipal collection (no hardcoded collection list). `auditLogs` is always excluded, so a client's own deletion record survives its own deletion. `getAllClientCredits`. |
|
|
784
|
-
| `auditLogs` (new collection) | `insertAuditLog`, `findAuditLogs` (paginated), `countAuditLogs`. |
|
|
785
|
-
| `results` | `aggregateActiveCallsSummary`, `aggregateTodayCallsSummary`, `aggregateClientCallStats`, `aggregateSessionCallStats` — call-volume/status dashboards. `findClientIdsByCallSids` — resolves clientId per callSid, added for backOffice-server. |
|
|
786
|
-
| `phone_numbers` | Fixed `getClientPhones`/`getAllClientPhoneMappings` to deduplicate append-only history records. Added `getDistinctClientPhonePairs`, `findClientsByPhoneNumbers`, `deletePhoneNumberRecords` (clears every record for a number once released back to Twilio). |
|
|
787
|
-
|
|
788
|
-
⚠️ website-talk (`scans`/`websiteUrls`) is intentionally **not** touched by `deleteClientDataAcrossDomains` — see the Websitalk domain note above. Callers must call the external website-talk deletion API separately for a full client delete.
|
|
789
|
-
|
|
790
|
-
**Do I need to update my app?**
|
|
791
|
-
|
|
792
|
-
No — purely additive, no breaking changes. Consumers opt in by importing the new getters above.
|
|
793
773
|
### 1.3.57 — Phone-number bind getters
|
|
794
774
|
|
|
795
775
|
TalkPilot can bind any owned number to a flow without querying Mongo in the service layer. `flow_id` is matched as ObjectId or as a leftover string.
|
|
@@ -824,33 +804,6 @@ Optional `activeFlowId` on `WebsiteTalkProduct`. WTIS reads this field when it u
|
|
|
824
804
|
|
|
825
805
|
No — the field is optional. **WTIS** should upgrade to **1.3.61** so the call-script update can use it.
|
|
826
806
|
|
|
827
|
-
### 1.3.66 — Calls-based stats aggregations
|
|
828
|
-
|
|
829
|
-
Adds stats getters that read the flat `calls` collection directly instead of unwinding `results.calls[]`, with a full per-status breakdown instead of a fixed 5-status set.
|
|
830
|
-
|
|
831
|
-
**Added**
|
|
832
|
-
|
|
833
|
-
| Export | Purpose |
|
|
834
|
-
| --- | --- |
|
|
835
|
-
| `aggregateActiveCallsSummary` | Active-calls-right-now summary, from `calls`. |
|
|
836
|
-
| `aggregateTodayCallsSummary` | Status/type/minutes summary for a date range (or all-time with no range given), from `calls`. |
|
|
837
|
-
| `aggregateClientCallStats` | Per-client breakdown with a full per-status `statusCounts` map and `lastCallDate`, from `calls`. |
|
|
838
|
-
| `aggregateSessionCallStats` | Per-session breakdown with a full per-status `statusCounts` map, from `calls`. |
|
|
839
|
-
| `getAllClientsLastCallDate` | Last call date per client, from `calls`. |
|
|
840
|
-
| `findClientIdsByCallSids` | Resolves clientId per callSid, from `calls`. |
|
|
841
|
-
|
|
842
|
-
The session breakdown groups by `sessionId` (not `sessionName`) so a renamed session doesn't split its stats across two rows; the name shown is a live lookup against the current `sessions` collection.
|
|
843
|
-
|
|
844
|
-
⚠️ **Note:** the `calls` collection only reliably covers call volume from around late October 2025 onward (full per-status accuracy from mid-2026) — older history lives only in `results`. An "all time" aggregation on these getters will undercount clients whose history predates that cutover.
|
|
845
|
-
|
|
846
|
-
**Removed**
|
|
847
|
-
|
|
848
|
-
The `results`-based getters added in 1.3.52 (`aggregateActiveCallsSummary`, `aggregateTodayCallsSummary`, `aggregateClientCallStats`, `aggregateSessionCallStats`, `findClientIdsByCallSids`) are replaced by the `calls`-based getters above, under the same names. 1.3.52 was never released, so no consumer depended on them.
|
|
849
|
-
|
|
850
|
-
**Do I need to update my app?**
|
|
851
|
-
|
|
852
|
-
No — these are new getters, and the 1.3.52 ones they replace were never released, so nothing existing depends on either.
|
|
853
|
-
|
|
854
807
|
## 🛠 CI/CD & deployment
|
|
855
808
|
|
|
856
809
|
- This package is consumed by Cloud Build-based services (TalkPilot Server, MIS, CIS) as a dependency when Docker images are built. Keep `dist/` in sync with your builds because the compiled artifact is what downstream services install.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export declare const MODELS_COLLECTION = "models";
|
|
2
2
|
export declare const MODEL_CONFIG_DEFAULTS_CONTEXT_WINDOW = "contextWindow";
|
|
3
3
|
export declare const MODEL_TYPES: readonly ["realtime", "stt"];
|
|
4
|
-
export declare const REALTIME_MODEL_PROVIDERS: readonly ["openai", "gemini", "xai"];
|
|
4
|
+
export declare const REALTIME_MODEL_PROVIDERS: readonly ["openai", "gemini", "xai", "elevenlabs"];
|
|
5
5
|
export declare const STT_MODEL_PROVIDERS: readonly ["openai-stt", "google-stt", "deepgram-stt", "deepgram-flux", "elevenlabs-scribe", "gladia-stt"];
|
|
6
6
|
//# sourceMappingURL=models.constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.constants.d.ts","sourceRoot":"","sources":["../../../src/configuration/models/models.constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,WAAW,CAAC;AAE1C,eAAO,MAAM,oCAAoC,kBAAkB,CAAC;AAEpE,eAAO,MAAM,WAAW,8BAA+B,CAAC;AAExD,eAAO,MAAM,wBAAwB,
|
|
1
|
+
{"version":3,"file":"models.constants.d.ts","sourceRoot":"","sources":["../../../src/configuration/models/models.constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,WAAW,CAAC;AAE1C,eAAO,MAAM,oCAAoC,kBAAkB,CAAC;AAEpE,eAAO,MAAM,WAAW,8BAA+B,CAAC;AAExD,eAAO,MAAM,wBAAwB,oDAK3B,CAAC;AACX,eAAO,MAAM,mBAAmB,2GAOtB,CAAC"}
|
|
@@ -4,7 +4,12 @@ exports.STT_MODEL_PROVIDERS = exports.REALTIME_MODEL_PROVIDERS = exports.MODEL_T
|
|
|
4
4
|
exports.MODELS_COLLECTION = "models";
|
|
5
5
|
exports.MODEL_CONFIG_DEFAULTS_CONTEXT_WINDOW = "contextWindow";
|
|
6
6
|
exports.MODEL_TYPES = ["realtime", "stt"];
|
|
7
|
-
exports.REALTIME_MODEL_PROVIDERS = [
|
|
7
|
+
exports.REALTIME_MODEL_PROVIDERS = [
|
|
8
|
+
"openai",
|
|
9
|
+
"gemini",
|
|
10
|
+
"xai",
|
|
11
|
+
"elevenlabs",
|
|
12
|
+
];
|
|
8
13
|
exports.STT_MODEL_PROVIDERS = [
|
|
9
14
|
"openai-stt",
|
|
10
15
|
"google-stt",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.constants.js","sourceRoot":"","sources":["../../../src/configuration/models/models.constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,iBAAiB,GAAG,QAAQ,CAAC;AAE7B,QAAA,oCAAoC,GAAG,eAAe,CAAC;AAEvD,QAAA,WAAW,GAAG,CAAC,UAAU,EAAE,KAAK,CAAU,CAAC;AAE3C,QAAA,wBAAwB,GAAG,
|
|
1
|
+
{"version":3,"file":"models.constants.js","sourceRoot":"","sources":["../../../src/configuration/models/models.constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,iBAAiB,GAAG,QAAQ,CAAC;AAE7B,QAAA,oCAAoC,GAAG,eAAe,CAAC;AAEvD,QAAA,WAAW,GAAG,CAAC,UAAU,EAAE,KAAK,CAAU,CAAC;AAE3C,QAAA,wBAAwB,GAAG;IACtC,QAAQ;IACR,QAAQ;IACR,KAAK;IACL,YAAY;CACJ,CAAC;AACE,QAAA,mBAAmB,GAAG;IACjC,YAAY;IACZ,YAAY;IACZ,cAAc;IACd,eAAe;IACf,mBAAmB;IACnB,YAAY;CACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { AnyBulkWriteOperation, BulkWriteOptions, BulkWriteResult } from "mongodb";
|
|
2
|
+
import { DepartmentSubject } from "./departmentsSubjects.types";
|
|
3
|
+
/**
|
|
4
|
+
* Generic batch write for the departmentsSubjects collection — a thin passthrough to the
|
|
5
|
+
* driver's bulkWrite, with no diffing/key-building/business logic. `operations` must be
|
|
6
|
+
* non-empty (the driver throws on an empty batch). Errors (including partial failures under
|
|
7
|
+
* `{ ordered: false }`) propagate unchanged, so callers can still catch `MongoBulkWriteError`.
|
|
8
|
+
*/
|
|
9
|
+
export declare const bulkWriteDepartmentsSubjects: (operations: AnyBulkWriteOperation<DepartmentSubject>[], options?: BulkWriteOptions) => Promise<BulkWriteResult>;
|
|
10
|
+
//# sourceMappingURL=departmentsSubjects.setters.d.ts.map
|