@talkpilot/core-db 1.3.6 → 1.3.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/.cursor/rules/development.mdc +65 -65
  2. package/DEVELOPMENT.md +141 -141
  3. package/README.md +243 -190
  4. package/README_OLD.md +160 -160
  5. package/dist/municipal/tickets/tickets.statistics.getters.d.ts +4 -0
  6. package/dist/municipal/tickets/tickets.statistics.getters.d.ts.map +1 -1
  7. package/dist/municipal/tickets/tickets.statistics.getters.js +30 -3
  8. package/dist/municipal/tickets/tickets.statistics.getters.js.map +1 -1
  9. package/dist/talkpilot/calls/calls.dashboard.d.ts +3 -0
  10. package/dist/talkpilot/calls/calls.dashboard.d.ts.map +1 -0
  11. package/dist/talkpilot/calls/calls.dashboard.js +191 -0
  12. package/dist/talkpilot/calls/calls.dashboard.js.map +1 -0
  13. package/dist/talkpilot/calls/calls.statistics.getters.js +12 -15
  14. package/dist/talkpilot/calls/calls.statistics.getters.js.map +1 -1
  15. package/dist/talkpilot/calls/calls.statistics.types.d.ts +4 -1
  16. package/dist/talkpilot/calls/calls.statistics.types.d.ts.map +1 -1
  17. package/dist/talkpilot/flows/flows.schema.d.ts +3 -0
  18. package/dist/talkpilot/flows/flows.schema.d.ts.map +1 -1
  19. package/dist/talkpilot/flows/flows.schema.js +1 -0
  20. package/dist/talkpilot/flows/flows.schema.js.map +1 -1
  21. package/dist/talkpilot/flows/flows.types.d.ts +1 -0
  22. package/dist/talkpilot/flows/flows.types.d.ts.map +1 -1
  23. package/jest.config.js +20 -20
  24. package/package.json +46 -46
  25. package/src/connection.ts +54 -54
  26. package/src/index.ts +26 -26
  27. package/src/municipal/index.ts +22 -22
  28. package/src/municipal/muniIssues/__tests__/muniIssues.setters.spec.ts +92 -92
  29. package/src/municipal/muniIssues/__tests__/muniIssues.setup.spec.ts +92 -92
  30. package/src/municipal/muniIssues/index.ts +17 -17
  31. package/src/municipal/muniIssues/muniIssues.constants.ts +18 -18
  32. package/src/municipal/muniIssues/muniIssues.getters.ts +24 -24
  33. package/src/municipal/muniIssues/muniIssues.schema.ts +66 -66
  34. package/src/municipal/muniIssues/muniIssues.setters.ts +24 -24
  35. package/src/municipal/muniIssues/muniIssues.setup.ts +65 -65
  36. package/src/municipal/muniIssues/muniIssues.types.ts +37 -37
  37. package/src/municipal/tickets/__tests__/tickets.getters.spec.ts +30 -30
  38. package/src/municipal/tickets/__tests__/tickets.statistics.spec.ts +68 -51
  39. package/src/municipal/tickets/index.ts +3 -3
  40. package/src/municipal/tickets/tickets.constants.ts +8 -8
  41. package/src/municipal/tickets/tickets.getters.ts +121 -121
  42. package/src/municipal/tickets/tickets.statistics.aggregation.ts +96 -96
  43. package/src/municipal/tickets/tickets.statistics.getters.ts +109 -71
  44. package/src/municipal/tickets/tickets.types.ts +53 -53
  45. package/src/talkpilot/calls/__tests__/calls.dashboard.spec.ts +149 -149
  46. package/src/talkpilot/calls/__tests__/calls.statistics.spec.ts +351 -344
  47. package/src/talkpilot/calls/calls.constants.ts +20 -20
  48. package/src/talkpilot/calls/calls.statistics.getters.ts +587 -587
  49. package/src/talkpilot/calls/calls.statistics.types.ts +47 -44
  50. package/src/talkpilot/calls/calls.types.ts +119 -119
  51. package/src/talkpilot/calls/dashboard/calls.dashboard.ts +292 -292
  52. package/src/talkpilot/calls/dashboard/calls.dashboard.types.ts +57 -57
  53. package/src/talkpilot/calls/index.ts +6 -6
  54. package/src/talkpilot/clientsConfig/__tests__/clientsConfig.spec.ts +190 -190
  55. package/src/talkpilot/contextNotes/__tests__/contextNotes.getters.spec.ts +176 -176
  56. package/src/talkpilot/contextNotes/contextNotes.getters.ts +86 -86
  57. package/src/talkpilot/contextNotes/contextNotes.types.ts +20 -20
  58. package/src/talkpilot/contextNotes/index.ts +2 -2
  59. package/src/talkpilot/flows/__tests__/flows.schema.spec.ts +96 -71
  60. package/src/talkpilot/flows/flows.schema.ts +154 -153
  61. package/src/talkpilot/flows/flows.types.ts +187 -186
  62. package/src/talkpilot/index.ts +31 -31
  63. package/src/talkpilot/products/__tests__/products.getters.spec.ts +45 -45
  64. package/src/talkpilot/products/index.ts +2 -2
  65. package/src/talkpilot/products/products.getters.ts +12 -12
  66. package/src/talkpilot/products/products.types.ts +9 -9
  67. package/src/test-utils/db-utils.ts +26 -26
  68. package/src/test-utils/factories/index.ts +15 -15
  69. package/src/test-utils/factories/municipal/muniIssues.ts +32 -32
  70. package/src/test-utils/factories/talkpilot/contextNotes.ts +33 -33
  71. package/src/test-utils/factories/websitalk/scans.ts +23 -23
  72. package/src/utils/date.utils.ts +116 -116
  73. package/src/websitalk/index.ts +15 -15
  74. package/src/websitalk/mongodb-client.ts +61 -61
  75. package/src/websitalk/scans/__tests__/scans.spec.ts +218 -218
  76. package/src/websitalk/scans/index.ts +2 -2
  77. package/src/websitalk/scans/scans.getters.ts +113 -113
  78. package/src/websitalk/scans/scans.types.ts +53 -53
  79. package/tsconfig.json +23 -23
@@ -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/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.