@talkpilot/core-db 1.3.38 → 1.3.39
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/DEVELOPMENT.md +141 -141
- package/README.md +721 -721
- package/dist/talkpilot/clientsConfig/clientsConfig.constants.d.ts +3 -0
- package/dist/talkpilot/clientsConfig/clientsConfig.constants.d.ts.map +1 -0
- package/dist/talkpilot/clientsConfig/clientsConfig.constants.js +6 -0
- package/dist/talkpilot/clientsConfig/clientsConfig.constants.js.map +1 -0
- package/dist/talkpilot/clientsConfig/clientsConfig.getters.d.ts +39 -0
- package/dist/talkpilot/clientsConfig/clientsConfig.getters.d.ts.map +1 -1
- package/dist/talkpilot/clientsConfig/clientsConfig.getters.js +92 -1
- package/dist/talkpilot/clientsConfig/clientsConfig.getters.js.map +1 -1
- package/dist/talkpilot/clientsConfig/clientsConfig.types.d.ts +4 -0
- package/dist/talkpilot/clientsConfig/clientsConfig.types.d.ts.map +1 -1
- package/dist/talkpilot/clientsConfig/index.d.ts +1 -0
- package/dist/talkpilot/clientsConfig/index.d.ts.map +1 -1
- package/dist/talkpilot/clientsConfig/index.js +1 -0
- package/dist/talkpilot/clientsConfig/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/index.ts +25 -25
- package/src/configuration/models/models.constants.ts +13 -13
- package/src/configuration/models/models.getters.ts +53 -53
- package/src/configuration/models/models.types.ts +79 -79
- 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 +42 -42
- 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/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 -49
- package/src/talkpilot/calls/calls.getters.ts +277 -277
- 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 +134 -134
- 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 +16 -16
- 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 -18
- package/src/talkpilot/clients/index.ts +4 -4
- package/src/talkpilot/clientsConfig/__tests__/clientsConfig.getters.spec.ts +318 -0
- package/src/talkpilot/clientsConfig/__tests__/clientsConfig.spec.ts +212 -212
- package/src/talkpilot/clientsConfig/clientsConfig.constants.ts +2 -0
- package/src/talkpilot/clientsConfig/clientsConfig.getters.ts +116 -2
- package/src/talkpilot/clientsConfig/clientsConfig.types.ts +4 -0
- package/src/talkpilot/clientsConfig/index.ts +3 -2
- 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 +99 -99
- package/src/talkpilot/flows/flows.getter.ts +14 -14
- package/src/talkpilot/flows/flows.schema.ts +155 -155
- package/src/talkpilot/flows/flows.types.ts +189 -189
- package/src/talkpilot/flows/index.ts +2 -2
- 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 +31 -31
- 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 +282 -282
- package/src/talkpilot/phone_numbers/index.ts +2 -2
- package/src/talkpilot/phone_numbers/phone_numbers.getter.ts +176 -176
- package/src/talkpilot/phone_numbers/phone_numbers.schema.ts +17 -17
- package/src/talkpilot/phone_numbers/phone_numbers.types.ts +30 -30
- 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 +16 -16
- 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/scans.ts +24 -24
- 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 +16 -16
- package/src/websitalk/mongodb-client.ts +61 -61
- package/src/websitalk/scans/__tests__/scans.spec.ts +313 -313
- package/src/websitalk/scans/index.ts +4 -4
- package/src/websitalk/scans/scans.constants.ts +15 -15
- package/src/websitalk/scans/scans.getters.ts +160 -160
- package/src/websitalk/scans/scans.types.ts +45 -45
- 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/municipal/departmentsSubjects/departmentsSubjects.setters.d.ts +0 -10
- package/dist/municipal/departmentsSubjects/departmentsSubjects.setters.d.ts.map +0 -1
- package/dist/municipal/departmentsSubjects/departmentsSubjects.setters.js +0 -15
- package/dist/municipal/departmentsSubjects/departmentsSubjects.setters.js.map +0 -1
- package/dist/municipal/streets/streets.setters.d.ts +0 -10
- package/dist/municipal/streets/streets.setters.d.ts.map +0 -1
- package/dist/municipal/streets/streets.setters.js +0 -15
- package/dist/municipal/streets/streets.setters.js.map +0 -1
- package/dist/reconcile/index.d.ts +0 -5
- package/dist/reconcile/index.d.ts.map +0 -1
- package/dist/reconcile/index.js +0 -21
- package/dist/reconcile/index.js.map +0 -1
- package/dist/reconcile/reconcile.diff.d.ts +0 -4
- package/dist/reconcile/reconcile.diff.d.ts.map +0 -1
- package/dist/reconcile/reconcile.diff.js +0 -36
- package/dist/reconcile/reconcile.diff.js.map +0 -1
- package/dist/reconcile/reconcile.execute.d.ts +0 -7
- package/dist/reconcile/reconcile.execute.d.ts.map +0 -1
- package/dist/reconcile/reconcile.execute.js +0 -20
- package/dist/reconcile/reconcile.execute.js.map +0 -1
- package/dist/reconcile/reconcile.ops.d.ts +0 -12
- package/dist/reconcile/reconcile.ops.d.ts.map +0 -1
- package/dist/reconcile/reconcile.ops.js +0 -24
- package/dist/reconcile/reconcile.ops.js.map +0 -1
- package/dist/reconcile/reconcile.types.d.ts +0 -32
- package/dist/reconcile/reconcile.types.d.ts.map +0 -1
- package/dist/reconcile/reconcile.types.js +0 -3
- package/dist/reconcile/reconcile.types.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clientsConfig.constants.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/clientsConfig/clientsConfig.constants.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,eAAO,MAAM,gBAAgB,IAAI,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clientsConfig.constants.js","sourceRoot":"","sources":["../../../src/talkpilot/clientsConfig/clientsConfig.constants.ts"],"names":[],"mappings":";;;AAAA,gEAAgE;AACnD,QAAA,gBAAgB,GAAG,CAAC,CAAC"}
|
|
@@ -7,8 +7,47 @@ export declare const getClientConfigByPhone: (phone: string) => Promise<import("
|
|
|
7
7
|
export declare const createClientConfigDoc: (clientConfig: ClientConfigDoc) => Promise<void>;
|
|
8
8
|
export declare function updateProductConfig<K extends KnownProductKey>(clientId: string, productKey: K, updates: Partial<Products[K]>): Promise<void>;
|
|
9
9
|
export declare const getActiveScanId: (clientId: string) => Promise<string | undefined>;
|
|
10
|
+
/**
|
|
11
|
+
* Returns the client's active scan ids as a list.
|
|
12
|
+
* Falls back to wrapping the legacy singular `activeScanId` field when
|
|
13
|
+
* `activeScanIds` is absent — lets clients on the old field keep working
|
|
14
|
+
* without a data migration.
|
|
15
|
+
*/
|
|
16
|
+
export declare const getActiveScanIds: (clientId: string) => Promise<string[]>;
|
|
17
|
+
/**
|
|
18
|
+
* @deprecated Use `addActiveScanId` instead — supports multiple simultaneously
|
|
19
|
+
* active scans. This function overwrites the entire single-value field.
|
|
20
|
+
*/
|
|
10
21
|
export declare const updateActiveScanId: (clientId: string, scanId: string) => Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Adds a scan id to the client's active list. Writes the full list back
|
|
24
|
+
* (rather than a bare array append) so a client still on the legacy
|
|
25
|
+
* singular field gets migrated instead of silently losing it.
|
|
26
|
+
*/
|
|
27
|
+
export declare const addActiveScanId: (clientId: string, scanId: string) => Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* @deprecated Use `removeActiveScanId` instead — removes a single scan from
|
|
30
|
+
* the active list without clearing the others.
|
|
31
|
+
*/
|
|
11
32
|
export declare const clearActiveScanId: (clientId: string) => Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Removes a single scan id from the active list. Also clears the legacy
|
|
35
|
+
* singular field when it matches, so a not-yet-migrated client's removal
|
|
36
|
+
* actually takes effect instead of silently no-op'ing.
|
|
37
|
+
*/
|
|
38
|
+
export declare const removeActiveScanId: (clientId: string, scanId: string) => Promise<void>;
|
|
39
|
+
/** Returns the scan whose content seeds the phone call's opening description, if one is set. */
|
|
40
|
+
export declare const getPrimaryScanId: (clientId: string) => Promise<string | undefined>;
|
|
41
|
+
/**
|
|
42
|
+
* Sets the primary scan, replacing whatever was set before — exactly one
|
|
43
|
+
* primary scan at a time. Throws if the client doesn't exist.
|
|
44
|
+
*/
|
|
45
|
+
export declare const setPrimaryScanId: (clientId: string, scanId: string) => Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Clears the primary scan. Callers that need the opening description fall
|
|
48
|
+
* back to the first active scan. Throws if the client doesn't exist.
|
|
49
|
+
*/
|
|
50
|
+
export declare const clearPrimaryScanId: (clientId: string) => Promise<void>;
|
|
12
51
|
export declare function listClientIdsWithConfiguredQuota(): Promise<string[]>;
|
|
13
52
|
export declare function incrementClientQuotaUsage(clientId: string, amount?: number): Promise<void>;
|
|
14
53
|
export declare function resetClientQuotaUsage(clientId: string): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clientsConfig.getters.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/clientsConfig/clientsConfig.getters.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAGf,QAAQ,EAER,eAAe,EAChB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"clientsConfig.getters.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/clientsConfig/clientsConfig.getters.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAGf,QAAQ,EAER,eAAe,EAChB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,UAAU,EAAgB,MAAM,SAAS,CAAC;AAInD,eAAO,MAAM,0BAA0B,QAAO,UAAU,CAAC,eAAe,CAEvE,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,UAAU,MAAM,8DAE/C,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,UAAU,MAAM,KACf,OAAO,CAAC,MAAM,CAOhB,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAU,OAAO,MAAM,8DAIzD,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,cAAc,eAAe,KAC5B,OAAO,CAAC,IAAI,CAEd,CAAC;AAEF,wBAAsB,mBAAmB,CAAC,CAAC,SAAS,eAAe,EACjE,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,CAAC,EACb,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED,eAAO,MAAM,eAAe,GAC1B,UAAU,MAAM,KACf,OAAO,CAAC,MAAM,GAAG,SAAS,CAG5B,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,MAAM,EAAE,CAMzE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAC7B,UAAU,MAAM,EAChB,QAAQ,MAAM,KACb,OAAO,CAAC,IAAI,CAEd,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAC1B,UAAU,MAAM,EAChB,QAAQ,MAAM,KACb,OAAO,CAAC,IAAI,CAkBd,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,IAAI,CAQtE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAC7B,UAAU,MAAM,EAChB,QAAQ,MAAM,KACb,OAAO,CAAC,IAAI,CAYd,CAAC;AAEF,gGAAgG;AAChG,eAAO,MAAM,gBAAgB,GAC3B,UAAU,MAAM,KACf,OAAO,CAAC,MAAM,GAAG,SAAS,CAG5B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAC3B,UAAU,MAAM,EAChB,QAAQ,MAAM,KACb,OAAO,CAAC,IAAI,CAQd,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,IAAI,CAQvE,CAAC;AAEF,wBAAsB,gCAAgC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAO1E;AAED,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,MAAU,GACjB,OAAO,CAAC,IAAI,CAAC,CASf;AAED,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAW3E;AAED,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,EAClB,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,kCAAkC,CAAC"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.resetClientQuotaSettings = exports.markQuotaExpiredSent = exports.markQuotaAlertSent = exports.updateQuotaAlertsConfig = exports.getClientQuotaState = exports.clearActiveScanId = exports.updateActiveScanId = exports.getActiveScanId = exports.createClientConfigDoc = exports.getClientConfigByPhone = exports.getClientDisplayName = exports.getClientConfig = exports.getClientsConfigCollection = void 0;
|
|
3
|
+
exports.resetClientQuotaSettings = exports.markQuotaExpiredSent = exports.markQuotaAlertSent = exports.updateQuotaAlertsConfig = exports.getClientQuotaState = exports.clearPrimaryScanId = exports.setPrimaryScanId = exports.getPrimaryScanId = exports.removeActiveScanId = exports.clearActiveScanId = exports.addActiveScanId = exports.updateActiveScanId = exports.getActiveScanIds = exports.getActiveScanId = exports.createClientConfigDoc = exports.getClientConfigByPhone = exports.getClientDisplayName = exports.getClientConfig = exports.getClientsConfigCollection = void 0;
|
|
4
4
|
exports.updateProductConfig = updateProductConfig;
|
|
5
5
|
exports.listClientIdsWithConfiguredQuota = listClientIdsWithConfiguredQuota;
|
|
6
6
|
exports.incrementClientQuotaUsage = incrementClientQuotaUsage;
|
|
7
7
|
exports.resetClientQuotaUsage = resetClientQuotaUsage;
|
|
8
8
|
const index_1 = require("../index");
|
|
9
9
|
const clients_quota_getters_1 = require("../clients/clients.quota.getters");
|
|
10
|
+
const clientsConfig_constants_1 = require("./clientsConfig.constants");
|
|
10
11
|
const getClientsConfigCollection = () => {
|
|
11
12
|
return (0, index_1.getDb)().collection("clientsConfig");
|
|
12
13
|
};
|
|
@@ -50,10 +51,53 @@ const getActiveScanId = async (clientId) => {
|
|
|
50
51
|
return cfg?.products?.websiteTalk?.activeScanId;
|
|
51
52
|
};
|
|
52
53
|
exports.getActiveScanId = getActiveScanId;
|
|
54
|
+
/**
|
|
55
|
+
* Returns the client's active scan ids as a list.
|
|
56
|
+
* Falls back to wrapping the legacy singular `activeScanId` field when
|
|
57
|
+
* `activeScanIds` is absent — lets clients on the old field keep working
|
|
58
|
+
* without a data migration.
|
|
59
|
+
*/
|
|
60
|
+
const getActiveScanIds = async (clientId) => {
|
|
61
|
+
const cfg = await (0, exports.getClientConfig)(clientId);
|
|
62
|
+
const list = cfg?.products?.websiteTalk?.activeScanIds;
|
|
63
|
+
if (list && list.length > 0)
|
|
64
|
+
return list;
|
|
65
|
+
const legacy = cfg?.products?.websiteTalk?.activeScanId;
|
|
66
|
+
return legacy ? [legacy] : [];
|
|
67
|
+
};
|
|
68
|
+
exports.getActiveScanIds = getActiveScanIds;
|
|
69
|
+
/**
|
|
70
|
+
* @deprecated Use `addActiveScanId` instead — supports multiple simultaneously
|
|
71
|
+
* active scans. This function overwrites the entire single-value field.
|
|
72
|
+
*/
|
|
53
73
|
const updateActiveScanId = async (clientId, scanId) => {
|
|
54
74
|
await updateProductConfig(clientId, "websiteTalk", { activeScanId: scanId });
|
|
55
75
|
};
|
|
56
76
|
exports.updateActiveScanId = updateActiveScanId;
|
|
77
|
+
/**
|
|
78
|
+
* Adds a scan id to the client's active list. Writes the full list back
|
|
79
|
+
* (rather than a bare array append) so a client still on the legacy
|
|
80
|
+
* singular field gets migrated instead of silently losing it.
|
|
81
|
+
*/
|
|
82
|
+
const addActiveScanId = async (clientId, scanId) => {
|
|
83
|
+
const current = await (0, exports.getActiveScanIds)(clientId);
|
|
84
|
+
if (!current.includes(scanId) && current.length >= clientsConfig_constants_1.MAX_ACTIVE_SCANS) {
|
|
85
|
+
throw new Error(`Client ${clientId} already has the maximum of ${clientsConfig_constants_1.MAX_ACTIVE_SCANS} active scans`);
|
|
86
|
+
}
|
|
87
|
+
const next = current.includes(scanId) ? current : [...current, scanId];
|
|
88
|
+
const result = await (0, exports.getClientsConfigCollection)().updateOne({ clientId }, {
|
|
89
|
+
$set: { "products.websiteTalk.activeScanIds": next },
|
|
90
|
+
$unset: { "products.websiteTalk.activeScanId": "" },
|
|
91
|
+
});
|
|
92
|
+
if (result.matchedCount === 0) {
|
|
93
|
+
throw new Error(`No client config found for clientId: ${clientId}`);
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
exports.addActiveScanId = addActiveScanId;
|
|
97
|
+
/**
|
|
98
|
+
* @deprecated Use `removeActiveScanId` instead — removes a single scan from
|
|
99
|
+
* the active list without clearing the others.
|
|
100
|
+
*/
|
|
57
101
|
const clearActiveScanId = async (clientId) => {
|
|
58
102
|
const result = await (0, exports.getClientsConfigCollection)().updateOne({ clientId }, { $unset: { "products.websiteTalk.activeScanId": "" } });
|
|
59
103
|
if (result.matchedCount === 0) {
|
|
@@ -61,6 +105,53 @@ const clearActiveScanId = async (clientId) => {
|
|
|
61
105
|
}
|
|
62
106
|
};
|
|
63
107
|
exports.clearActiveScanId = clearActiveScanId;
|
|
108
|
+
/**
|
|
109
|
+
* Removes a single scan id from the active list. Also clears the legacy
|
|
110
|
+
* singular field when it matches, so a not-yet-migrated client's removal
|
|
111
|
+
* actually takes effect instead of silently no-op'ing.
|
|
112
|
+
*/
|
|
113
|
+
const removeActiveScanId = async (clientId, scanId) => {
|
|
114
|
+
const cfg = await (0, exports.getClientConfig)(clientId);
|
|
115
|
+
if (!cfg) {
|
|
116
|
+
throw new Error(`No client config found for clientId: ${clientId}`);
|
|
117
|
+
}
|
|
118
|
+
const updateOps = {
|
|
119
|
+
$pull: { "products.websiteTalk.activeScanIds": scanId },
|
|
120
|
+
};
|
|
121
|
+
if (cfg.products?.websiteTalk?.activeScanId === scanId) {
|
|
122
|
+
updateOps.$unset = { "products.websiteTalk.activeScanId": "" };
|
|
123
|
+
}
|
|
124
|
+
await (0, exports.getClientsConfigCollection)().updateOne({ clientId }, updateOps);
|
|
125
|
+
};
|
|
126
|
+
exports.removeActiveScanId = removeActiveScanId;
|
|
127
|
+
/** Returns the scan whose content seeds the phone call's opening description, if one is set. */
|
|
128
|
+
const getPrimaryScanId = async (clientId) => {
|
|
129
|
+
const cfg = await (0, exports.getClientConfig)(clientId);
|
|
130
|
+
return cfg?.products?.websiteTalk?.primaryScanId;
|
|
131
|
+
};
|
|
132
|
+
exports.getPrimaryScanId = getPrimaryScanId;
|
|
133
|
+
/**
|
|
134
|
+
* Sets the primary scan, replacing whatever was set before — exactly one
|
|
135
|
+
* primary scan at a time. Throws if the client doesn't exist.
|
|
136
|
+
*/
|
|
137
|
+
const setPrimaryScanId = async (clientId, scanId) => {
|
|
138
|
+
const result = await (0, exports.getClientsConfigCollection)().updateOne({ clientId }, { $set: { "products.websiteTalk.primaryScanId": scanId } });
|
|
139
|
+
if (result.matchedCount === 0) {
|
|
140
|
+
throw new Error(`No client config found for clientId: ${clientId}`);
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
exports.setPrimaryScanId = setPrimaryScanId;
|
|
144
|
+
/**
|
|
145
|
+
* Clears the primary scan. Callers that need the opening description fall
|
|
146
|
+
* back to the first active scan. Throws if the client doesn't exist.
|
|
147
|
+
*/
|
|
148
|
+
const clearPrimaryScanId = async (clientId) => {
|
|
149
|
+
const result = await (0, exports.getClientsConfigCollection)().updateOne({ clientId }, { $unset: { "products.websiteTalk.primaryScanId": "" } });
|
|
150
|
+
if (result.matchedCount === 0) {
|
|
151
|
+
throw new Error(`No client config found for clientId: ${clientId}`);
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
exports.clearPrimaryScanId = clearPrimaryScanId;
|
|
64
155
|
async function listClientIdsWithConfiguredQuota() {
|
|
65
156
|
const docs = await (0, exports.getClientsConfigCollection)()
|
|
66
157
|
.find({ "quota.totalQuota": { $exists: true, $ne: null } })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clientsConfig.getters.js","sourceRoot":"","sources":["../../../src/talkpilot/clientsConfig/clientsConfig.getters.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"clientsConfig.getters.js","sourceRoot":"","sources":["../../../src/talkpilot/clientsConfig/clientsConfig.getters.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,6 +48,10 @@ export type WebsiteTalkProduct = {
|
|
|
48
48
|
timezone: string;
|
|
49
49
|
language: string;
|
|
50
50
|
activeScanId?: string;
|
|
51
|
+
/** Up to MAX_ACTIVE_SCANS scan ids simultaneously serving RAG for phone calls. */
|
|
52
|
+
activeScanIds?: string[];
|
|
53
|
+
/** The single scan whose content seeds the phone call's opening description. */
|
|
54
|
+
primaryScanId?: string;
|
|
51
55
|
};
|
|
52
56
|
/** Product config for the clinics scheduling integration. */
|
|
53
57
|
export type ClinicsProduct = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clientsConfig.types.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/clientsConfig/clientsConfig.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAMhE,MAAM,MAAM,6BAA6B,GAAG;IAC1C,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACnD,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC7B,CAAC;AAEF,iGAAiG;AACjG,MAAM,MAAM,mBAAmB,GAAG;IAChC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,+BAA+B,CAAC,EAAE,MAAM,CAAC;IACzC,gCAAgC,CAAC,EAAE,MAAM,CAAC;CAC3C,CAAC;AAEF,yFAAyF;AACzF,MAAM,MAAM,cAAc,GAAG;IAC3B,2BAA2B,CAAC,EAAE,6BAA6B,CAAC;IAC5D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,YAAY,CAAC,EAAE,mBAAmB,CAAC;CACpC,CAAC;AAEF,eAAO,MAAM,kBAAkB,kDAIrB,CAAC;AACX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAElE,iCAAiC;AACjC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AAMF,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,yCAAyC;AACzC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"clientsConfig.types.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/clientsConfig/clientsConfig.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/clientsConfig/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/clientsConfig/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC"}
|
|
@@ -16,4 +16,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./clientsConfig.types"), exports);
|
|
18
18
|
__exportStar(require("./clientsConfig.getters"), exports);
|
|
19
|
+
__exportStar(require("./clientsConfig.constants"), exports);
|
|
19
20
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/talkpilot/clientsConfig/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC;AACtC,0DAAwC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/talkpilot/clientsConfig/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC;AACtC,0DAAwC;AACxC,4DAA0C"}
|
package/jest.config.js
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
/** @type {import('ts-jest').JestConfigWithTsJest} */
|
|
2
|
-
module.exports = {
|
|
3
|
-
preset: 'ts-jest',
|
|
4
|
-
testEnvironment: 'node',
|
|
5
|
-
roots: ['<rootDir>/src'],
|
|
6
|
-
testPathIgnorePatterns: ['<rootDir>/src/__tests__/legacy/'],
|
|
7
|
-
testMatch: ['**/__tests__/**/*.spec.ts', '**/*.spec.ts'],
|
|
8
|
-
transform: {
|
|
9
|
-
'^.+\\.tsx?$': ['ts-jest', {
|
|
10
|
-
tsconfig: 'tsconfig.json',
|
|
11
|
-
}],
|
|
12
|
-
},
|
|
13
|
-
setupFilesAfterEnv: ['<rootDir>/src/__tests__/setup.ts'],
|
|
14
|
-
maxWorkers: 1,
|
|
15
|
-
verbose: true,
|
|
16
|
-
forceExit: true,
|
|
17
|
-
clearMocks: true,
|
|
18
|
-
resetMocks: true,
|
|
19
|
-
restoreMocks: true,
|
|
20
|
-
};
|
|
1
|
+
/** @type {import('ts-jest').JestConfigWithTsJest} */
|
|
2
|
+
module.exports = {
|
|
3
|
+
preset: 'ts-jest',
|
|
4
|
+
testEnvironment: 'node',
|
|
5
|
+
roots: ['<rootDir>/src'],
|
|
6
|
+
testPathIgnorePatterns: ['<rootDir>/src/__tests__/legacy/'],
|
|
7
|
+
testMatch: ['**/__tests__/**/*.spec.ts', '**/*.spec.ts'],
|
|
8
|
+
transform: {
|
|
9
|
+
'^.+\\.tsx?$': ['ts-jest', {
|
|
10
|
+
tsconfig: 'tsconfig.json',
|
|
11
|
+
}],
|
|
12
|
+
},
|
|
13
|
+
setupFilesAfterEnv: ['<rootDir>/src/__tests__/setup.ts'],
|
|
14
|
+
maxWorkers: 1,
|
|
15
|
+
verbose: true,
|
|
16
|
+
forceExit: true,
|
|
17
|
+
clearMocks: true,
|
|
18
|
+
resetMocks: true,
|
|
19
|
+
restoreMocks: true,
|
|
20
|
+
};
|
package/package.json
CHANGED
|
@@ -1,46 +1,46 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@talkpilot/core-db",
|
|
3
|
-
"version": "1.3.
|
|
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.39",
|
|
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
|
+
}
|
package/src/__tests__/setup.ts
CHANGED
|
@@ -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
|
+
});
|