@talkpilot/core-db 1.3.16 → 1.3.18
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/README.md +164 -46
- package/dist/talkpilot/calls/calls.constants.d.ts +2 -0
- package/dist/talkpilot/calls/calls.constants.d.ts.map +1 -1
- package/dist/talkpilot/calls/calls.constants.js +3 -1
- package/dist/talkpilot/calls/calls.constants.js.map +1 -1
- package/dist/talkpilot/calls/calls.getters.d.ts +2 -1
- package/dist/talkpilot/calls/calls.getters.d.ts.map +1 -1
- package/dist/talkpilot/calls/calls.getters.js +3 -1
- package/dist/talkpilot/calls/calls.getters.js.map +1 -1
- package/dist/talkpilot/calls/calls.types.d.ts +2 -1
- package/dist/talkpilot/calls/calls.types.d.ts.map +1 -1
- package/dist/talkpilot/calls/dashboard/calls.dashboard.d.ts.map +1 -1
- package/dist/talkpilot/calls/dashboard/calls.dashboard.js +16 -13
- package/dist/talkpilot/calls/dashboard/calls.dashboard.js.map +1 -1
- package/dist/talkpilot/calls/dashboard/calls.dashboard.types.d.ts +2 -2
- package/dist/talkpilot/calls/dashboard/calls.dashboard.types.d.ts.map +1 -1
- package/dist/talkpilot/flows/flows.schema.d.ts +3 -0
- package/dist/talkpilot/flows/flows.schema.d.ts.map +1 -1
- package/dist/talkpilot/flows/flows.schema.js +1 -0
- package/dist/talkpilot/flows/flows.schema.js.map +1 -1
- package/dist/talkpilot/flows/flows.types.d.ts +2 -0
- package/dist/talkpilot/flows/flows.types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/talkpilot/calls/__tests__/calls.dashboard.spec.ts +81 -1
- package/src/talkpilot/calls/__tests__/calls.spec.ts +13 -0
- package/src/talkpilot/calls/calls.constants.ts +3 -0
- package/src/talkpilot/calls/calls.getters.ts +11 -1
- package/src/talkpilot/calls/calls.types.ts +12 -1
- package/src/talkpilot/calls/dashboard/calls.dashboard.ts +16 -13
- package/src/talkpilot/calls/dashboard/calls.dashboard.types.ts +2 -2
- package/src/talkpilot/flows/__tests__/flows.schema.spec.ts +3 -0
- package/src/talkpilot/flows/flows.schema.ts +1 -0
- package/src/talkpilot/flows/flows.types.ts +2 -0
- package/README_OLD.md +0 -160
- package/dist/websitalk/websitalk.setup.d.ts +0 -3
- package/dist/websitalk/websitalk.setup.d.ts.map +0 -1
- package/dist/websitalk/websitalk.setup.js +0 -34
- package/dist/websitalk/websitalk.setup.js.map +0 -1
- package/dist/websitalk/websiteUrls/websiteUrls.constants.d.ts +0 -2
- package/dist/websitalk/websiteUrls/websiteUrls.constants.d.ts.map +0 -1
- package/dist/websitalk/websiteUrls/websiteUrls.constants.js +0 -5
- package/dist/websitalk/websiteUrls/websiteUrls.constants.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
L1:# @talkpilot/core-db
|
|
2
2
|
|
|
3
|
+
[NPM Version](https://www.npmjs.com/package/@talkpilot/core-db)
|
|
3
4
|
`@talkpilot/core-db` is the shared TypeScript database package that wires TalkPilot APIs, municipal CRM integrations, and internal tools to a single, type-safe MongoDB surface. Every repo (MIS, CIS, TalkPilot Server, etc.) imports this package to avoid re-implementing connections, collections, or validation helpers.
|
|
4
5
|
|
|
5
6
|
## Purpose
|
|
@@ -33,13 +34,13 @@ L1:# @talkpilot/core-db
|
|
|
33
34
|
|
|
34
35
|
## Environment variables
|
|
35
36
|
|
|
36
|
-
| Variable
|
|
37
|
-
|
|
38
|
-
| `MONGO_URI`
|
|
39
|
-
| `MONGODB_URI`
|
|
40
|
-
| `TALKPILOT_DB_NAME`
|
|
41
|
-
| `MUNICIPAL_DB_NAME`
|
|
42
|
-
| `ENV`
|
|
37
|
+
| Variable | Purpose | Required |
|
|
38
|
+
|---------------------|-----------------------------------------------------------------------------------|----------|
|
|
39
|
+
| `MONGO_URI` | Primary MongoDB connection string for every domain (overridden by `MONGODB_URI`). | ✅ |
|
|
40
|
+
| `MONGODB_URI` | Alternate connection string used when Mongo needs a second URI parameter. | ✅ |
|
|
41
|
+
| `TALKPILOT_DB_NAME` | Optional override for the TalkPilot database name (defaults from URI path). | ❌ |
|
|
42
|
+
| `MUNICIPAL_DB_NAME` | Optional override for the municipal database name (defaults to `municipal-data`). | ❌ |
|
|
43
|
+
| `ENV` | Free-form label used in logs/validators (defaults to `unknown`). | ❌ |
|
|
43
44
|
|
|
44
45
|
If you pass a `uri` directly to `mongodbClient.connect()` or `municipalDataMongodbClient.connect()`, the client will prefer that value over the env vars.
|
|
45
46
|
|
|
@@ -131,20 +132,24 @@ Refer to `DEVELOPMENT.md` for the full walkthrough, token instructions, and fact
|
|
|
131
132
|
|
|
132
133
|
### Version history
|
|
133
134
|
|
|
134
|
-
| Version | Note
|
|
135
|
-
|
|
136
|
-
| 1.1.9 | Maintenance release (build, test, format).
|
|
137
|
-
| 1.3.4 | Added new statistics getters for call & ticket dashboards (CP-149): summary, trend, hourly, and routing for calls, plus open/draft/subject ticket stats. **Removed** the legacy getters `getTicketsCountByCityAndDateRange` and `getTicketsSubjectStats`.
|
|
135
|
+
| Version | Note |
|
|
136
|
+
|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
137
|
+
| 1.1.9 | Maintenance release (build, test, format). |
|
|
138
|
+
| 1.3.4 | Added new statistics getters for call & ticket dashboards (CP-149): summary, trend, hourly, and routing for calls, plus open/draft/subject ticket stats. **Removed** the legacy getters `getTicketsCountByCityAndDateRange` and `getTicketsSubjectStats`. |
|
|
138
139
|
| 1.3.5 | Added the `muniIssues` collection & module (CP-1115): the `MuniIssue` document type, `createMuniIssue` (accepts a caller-supplied `_id` for a two-way Jira link), `generateMuniIssueId`, `getMuniIssueById` / `getMuniIssueByJiraKey`, a `$jsonSchema` validator with indexes (unique `jira.key`), and `ensureMuniIssuesCollection` to provision it at boot. |
|
|
139
|
-
| 1.3.6 | Added `contextNotes` and `products` modules under `src/talkpilot/`.
|
|
140
|
-
| 1.3.7 | Added `disableGenericPrompt` optional boolean field to the `Flow` type and schema (CP-704).
|
|
141
|
-
| 1.3.8 | Ticket-count Map getters (CP-1200): deprecated `string[]` ticket getters and `CallsStatsFilter` fields, added `Map<string, number>` replacements; fixed ticket counting in `aggregateCallsSummary`.
|
|
142
|
-
| 1.3.9 | Fixed wrap-around hour filter boundary guards (CP-1166): excluded first-day morning calls and last-day evening calls from wrap-around windows.
|
|
143
|
-
| 1.3.10 | Added optional `isDraft` flag to `Ticket` (CP-1390): explicit draft marking with legacy fallback for existing tickets.
|
|
144
|
-
| 1.3.11 | Fixed pre-existing broken type declaration import in `clientsConfig.types.d.ts` that caused consumer `tsc` builds to fail.
|
|
145
|
-
| 1.3.12 | Added `callsWithTickets` to `CallsSummaryAggregation` (CP-1200): distinct call count with at least one open ticket, enabling accurate `ticketOpenRate` and `not_opened` calculations in consumers.
|
|
140
|
+
| 1.3.6 | Added `contextNotes` and `products` modules under `src/talkpilot/`. |
|
|
141
|
+
| 1.3.7 | Added `disableGenericPrompt` optional boolean field to the `Flow` type and schema (CP-704). |
|
|
142
|
+
| 1.3.8 | Ticket-count Map getters (CP-1200): deprecated `string[]` ticket getters and `CallsStatsFilter` fields, added `Map<string, number>` replacements; fixed ticket counting in `aggregateCallsSummary`. |
|
|
143
|
+
| 1.3.9 | Fixed wrap-around hour filter boundary guards (CP-1166): excluded first-day morning calls and last-day evening calls from wrap-around windows. |
|
|
144
|
+
| 1.3.10 | Added optional `isDraft` flag to `Ticket` (CP-1390): explicit draft marking with legacy fallback for existing tickets. |
|
|
145
|
+
| 1.3.11 | Fixed pre-existing broken type declaration import in `clientsConfig.types.d.ts` that caused consumer `tsc` builds to fail. |
|
|
146
|
+
| 1.3.12 | Added `callsWithTickets` to `CallsSummaryAggregation` (CP-1200): distinct call count with at least one open ticket, enabling accurate `ticketOpenRate` and `not_opened` calculations in consumers. |
|
|
147
|
+
| 1.3.13 | Faulty release (redundant). Published with `Flow.useRedisTranscription` at the flow level; superseded by 1.3.14. |
|
|
148
|
+
| 1.3.14 | Added `FlowTool.useRedisTranscription` optional flag to control whether cached Redis transcriptions are used (defaults to `false`). |
|
|
146
149
|
| 1.3.15 | Multi-scan support for WebsiteTalk (CP-1372): `websiteUrls` collection, `Scan.websiteUrlId`, `OVERWRITTEN` status, `activeScanId` on `WebsiteTalkProduct`. **Breaking:** `Scan.baseUrl` removed; `getActiveScanStatus` removed. |
|
|
147
|
-
|
|
150
|
+
| 1.3.16 | Refactored WebsiteTalk scan status constants (CP-1372): `SCAN_STATUSES` object map, `FINISHED_SCAN_STATUSES` derived from it, `isInProgressScan` moved to `scans.utils`. No breaking API changes. |
|
|
151
|
+
| 1.3.17 | Twilio call-status semantics for Websitalk dashboard: `inCallCount` KPI (`in-progress` + `answered`), `busy` is line-busy only; `updateCallStatusByCallSid`; expanded `CallStatus` union; `timeSavedMinutes` from `completed` only. |
|
|
152
|
+
| 1.3.18 | WebsiteTalk multi-website API (CP-1372): ships `websiteUrls` module, scan getters by `websiteUrlId`, `activeScanId` getters on `clientsConfig`. **Note:** 1.3.17 did not include these — they landed after merge. **Breaking:** `WebsiteTalkProduct.defaultBaseUrl` removed from type. |
|
|
148
153
|
### 1.1.9
|
|
149
154
|
|
|
150
155
|
1. `npm run build`.
|
|
@@ -157,11 +162,11 @@ New call statistics getters for dashboards (summary, trend, hourly, routing) and
|
|
|
157
162
|
|
|
158
163
|
**Removed**
|
|
159
164
|
|
|
160
|
-
| Removed
|
|
161
|
-
|
|
165
|
+
| Removed | Replacement |
|
|
166
|
+
|-------------------------------------|-----------------------------------------------------------------------------------------------------------------|
|
|
162
167
|
| `getTicketsCountByCityAndDateRange` | `aggregateCallsSummary` + `findCallSidTicketCountsByCity` — note: returns `Map<string, number>`, not `string[]` |
|
|
163
|
-
| `getTicketsSubjectStats`
|
|
164
|
-
| `SubjectStatsItem`
|
|
168
|
+
| `getTicketsSubjectStats` | `findSubjectsByCityAndDateRange` |
|
|
169
|
+
| `SubjectStatsItem` | `SubjectItem` |
|
|
165
170
|
|
|
166
171
|
**Do I need to update my app?**
|
|
167
172
|
|
|
@@ -173,13 +178,13 @@ New `muniIssues` module under `src/municipal/` for issues reported from the call
|
|
|
173
178
|
|
|
174
179
|
**Added**
|
|
175
180
|
|
|
176
|
-
| Export
|
|
177
|
-
|
|
178
|
-
| `MuniIssue` / `CreateMuniIssueInput`
|
|
179
|
-
| `createMuniIssue(input, id)`
|
|
180
|
-
| `generateMuniIssueId()`
|
|
181
|
-
| `getMuniIssueById` / `getMuniIssueByJiraKey` | Lookups by our id or by the Jira key.
|
|
182
|
-
| `ensureMuniIssuesCollection()`
|
|
181
|
+
| Export | Purpose |
|
|
182
|
+
|----------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
183
|
+
| `MuniIssue` / `CreateMuniIssueInput` | Document type and insert-input type (`issueContent` + `jira` domains). |
|
|
184
|
+
| `createMuniIssue(input, id)` | Insert an issue; requires a caller-supplied `_id` from MIS (via `generateMuniIssueId`) so it matches the id embedded in the Jira ticket (two-way link). |
|
|
185
|
+
| `generateMuniIssueId()` | Pre-generate the `_id` to pass to `createMuniIssue`. |
|
|
186
|
+
| `getMuniIssueById` / `getMuniIssueByJiraKey` | Lookups by our id or by the Jira key. |
|
|
187
|
+
| `ensureMuniIssuesCollection()` | Provision the `$jsonSchema` validator and indexes (unique `jira.key`); run once at MIS boot. |
|
|
183
188
|
|
|
184
189
|
**Do I need to update my app?**
|
|
185
190
|
|
|
@@ -193,13 +198,13 @@ No — purely additive. New consumers (MIS) import these from `@talkpilot/core-d
|
|
|
193
198
|
|
|
194
199
|
**Added**
|
|
195
200
|
|
|
196
|
-
| Export
|
|
197
|
-
|
|
198
|
-
| `getContextNotes(clientId, product)`
|
|
199
|
-
| `createContextNote(input)`
|
|
200
|
-
| `setContextNoteEntries(id, clientId, notes)` | Replace the notes list on an existing document.
|
|
201
|
+
| Export | Purpose |
|
|
202
|
+
|----------------------------------------------|-----------------------------------------------------------------|
|
|
203
|
+
| `getContextNotes(clientId, product)` | Fetch context note documents for a client/product pair. |
|
|
204
|
+
| `createContextNote(input)` | Insert a new context note document. |
|
|
205
|
+
| `setContextNoteEntries(id, clientId, notes)` | Replace the notes list on an existing document. |
|
|
201
206
|
| `setContextNoteConfig(id, clientId, config)` | Update `systemPrompt` and/or `product` on an existing document. |
|
|
202
|
-
| `getAllProducts()`
|
|
207
|
+
| `getAllProducts()` | Fetch the full product catalogue. |
|
|
203
208
|
|
|
204
209
|
**Do I need to update my app?**
|
|
205
210
|
|
|
@@ -211,8 +216,8 @@ Added an optional boolean field to the `Flow` type and MongoDB schema.
|
|
|
211
216
|
|
|
212
217
|
**Added**
|
|
213
218
|
|
|
214
|
-
| Export
|
|
215
|
-
|
|
219
|
+
| Export | Purpose |
|
|
220
|
+
|-----------------------------|------------------------------------------------------------------------------------------------------------------------------------------|
|
|
216
221
|
| `Flow.disableGenericPrompt` | Optional `boolean`. When `true`, disables the generic prompt for the flow. Existing flows without this field continue to work unchanged. |
|
|
217
222
|
|
|
218
223
|
**Do I need to update my app?**
|
|
@@ -225,12 +230,12 @@ Adds `Map<string, number>` ticket getters that return per-call ticket counts. Th
|
|
|
225
230
|
|
|
226
231
|
**Deprecated → Replacement**
|
|
227
232
|
|
|
228
|
-
| Deprecated
|
|
229
|
-
|
|
230
|
-
| `findCallSidsWithTicketsByCity`
|
|
231
|
-
| `findCallSidsWithDraftTicketsByCity`
|
|
232
|
-
| `CallsStatsFilter.callSidsWithTickets`
|
|
233
|
-
| `CallsStatsFilter.callSidsWithDraftTickets` | `CallsStatsFilter.callSidDraftTicketCounts`
|
|
233
|
+
| Deprecated | Replacement |
|
|
234
|
+
|---------------------------------------------|--------------------------------------------------------------|
|
|
235
|
+
| `findCallSidsWithTicketsByCity` | `findCallSidTicketCountsByCity` → `Map<string, number>` |
|
|
236
|
+
| `findCallSidsWithDraftTicketsByCity` | `findCallSidDraftTicketCountsByCity` → `Map<string, number>` |
|
|
237
|
+
| `CallsStatsFilter.callSidsWithTickets` | `CallsStatsFilter.callSidTicketCounts` |
|
|
238
|
+
| `CallsStatsFilter.callSidsWithDraftTickets` | `CallsStatsFilter.callSidDraftTicketCounts` |
|
|
234
239
|
|
|
235
240
|
**Do I need to update my app?**
|
|
236
241
|
|
|
@@ -255,8 +260,8 @@ Added an optional `isDraft` boolean field to the `Ticket` type.
|
|
|
255
260
|
|
|
256
261
|
**Added**
|
|
257
262
|
|
|
258
|
-
| Export
|
|
259
|
-
|
|
263
|
+
| Export | Purpose |
|
|
264
|
+
|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
260
265
|
| `Ticket.isDraft` | Optional `boolean`. When `true`, the ticket is a draft. When `false`, it is not. When absent (legacy tickets), draft detection falls back to the previous `event_subject_id` heuristic. |
|
|
261
266
|
|
|
262
267
|
**Affects:** `findCallSidDraftTicketCountsByCity`, `findCallSidsWithDraftTicketsByCity` (draft filtering in ticket statistics).
|
|
@@ -285,6 +290,18 @@ Added `callsWithTickets` to `CallsSummaryAggregation` — the number of distinct
|
|
|
285
290
|
|
|
286
291
|
Yes — replace `openTickets` with `callsWithTickets` wherever you compute `ticketOpenRate` or `not_opened`.
|
|
287
292
|
|
|
293
|
+
### 1.3.13 — Faulty release
|
|
294
|
+
|
|
295
|
+
This release incorrectly placed `useRedisTranscription` on `Flow` instead of `FlowTool`. It is redundant and should be skipped.
|
|
296
|
+
|
|
297
|
+
### 1.3.14 — Redis transcription flag
|
|
298
|
+
|
|
299
|
+
Added an optional `FlowTool.useRedisTranscription` boolean that tells consumers whether to read transcriptions from Redis. Defaults to `false` when omitted.
|
|
300
|
+
|
|
301
|
+
**Do I need to update my app?**
|
|
302
|
+
|
|
303
|
+
No — this flag is optional. Only update if you want to opt into the Redis transcription path.
|
|
304
|
+
|
|
288
305
|
### 1.3.15 — Multi-scan configuration (CP-1372)
|
|
289
306
|
|
|
290
307
|
Adds `websiteUrls` collection (CRUD getters), migrates scans from `baseUrl` to `websiteUrlId`, adds `OVERWRITTEN` scan status, and replaces `defaultBaseUrl`/`logoUrl` on `WebsiteTalkProduct` with `activeScanId` (+ getters).
|
|
@@ -301,6 +318,107 @@ Adds `websiteUrls` collection (CRUD getters), migrates scans from `baseUrl` to `
|
|
|
301
318
|
|
|
302
319
|
Yes — WTIS, CoreBrain, and CoreCrawler must adopt `websiteUrlId` and the new getters before upgrading.
|
|
303
320
|
|
|
321
|
+
### 1.3.16 — Scan status constants refactor (CP-1372)
|
|
322
|
+
|
|
323
|
+
Centralizes scan status values under a single `SCAN_STATUSES` object map and derives terminal statuses from it.
|
|
324
|
+
|
|
325
|
+
**Changed**
|
|
326
|
+
|
|
327
|
+
| Area | What |
|
|
328
|
+
| --- | --- |
|
|
329
|
+
| `SCAN_STATUSES` | Object map (`SCAN_STATUSES.CHECKING`, `SCAN_STATUSES.COMPLETED`, …) instead of separate exported string constants. |
|
|
330
|
+
| `FINISHED_SCAN_STATUSES` | Derived from `SCAN_STATUSES` (`COMPLETED`, `FAILED`, `OVERWRITTEN`). |
|
|
331
|
+
| `isInProgressScan` | Moved to `scans.utils.ts` (exported from `scans` index). |
|
|
332
|
+
| `ScanStatus` type | Derived from `(typeof SCAN_STATUSES)[keyof typeof SCAN_STATUSES]`. |
|
|
333
|
+
|
|
334
|
+
**Do I need to update my app?**
|
|
335
|
+
|
|
336
|
+
No — behavior is unchanged. If you imported removed aliases like `COMPLETED_SCAN_STATUS`, switch to `SCAN_STATUSES.COMPLETED` (or keep using string literals / `ScanStatus` type).
|
|
337
|
+
|
|
338
|
+
### 1.3.17 — Twilio call-status semantics (CP-1521)
|
|
339
|
+
|
|
340
|
+
Aligns dashboard KPIs and call-status updates with Twilio semantics so in-call counts update in real time.
|
|
341
|
+
|
|
342
|
+
**Added**
|
|
343
|
+
|
|
344
|
+
| Export | Purpose |
|
|
345
|
+
| --- | --- |
|
|
346
|
+
| `updateCallStatusByCallSid(callSid, status)` | Set the current call status by `callSid`. |
|
|
347
|
+
| `IN_CALL_STATUSES` | `["in-progress", "answered"]` — statuses counted as in-call. |
|
|
348
|
+
| `DashboardSummaryMetrics.inCallCount` | Replaces `busyCount`; counts in-progress + answered calls. |
|
|
349
|
+
|
|
350
|
+
**Changed**
|
|
351
|
+
|
|
352
|
+
| Area | What |
|
|
353
|
+
| --- | --- |
|
|
354
|
+
| Dashboard KPIs | `busyCount` → `inCallCount`; `busy` is line-busy only, not in-call. |
|
|
355
|
+
| `timeSavedMinutes` | Computed from `completed` calls only. |
|
|
356
|
+
| `CallStatus` union | Expanded for Twilio-aligned statuses. |
|
|
357
|
+
|
|
358
|
+
**Do I need to update my app?**
|
|
359
|
+
|
|
360
|
+
Yes — if you read `busyCount` from dashboard KPIs, switch to `inCallCount`.
|
|
361
|
+
|
|
362
|
+
### 1.3.18 — WebsiteTalk multi-website API (CP-1372)
|
|
363
|
+
|
|
364
|
+
Ships the full persistence API for multi-website / multi-scan. Versions 1.3.15–1.3.16 documented the design; **1.3.17 did not export these symbols** (CP-1372 merged into main after the 1.3.17 release). Upgrade to **1.3.18** if you see missing-export errors such as `getActiveScanId`, `getWebsiteUrlById`, or `WebsiteUrlDoc`.
|
|
365
|
+
|
|
366
|
+
**`websiteUrls` module**
|
|
367
|
+
|
|
368
|
+
| Export | Purpose |
|
|
369
|
+
| --- | --- |
|
|
370
|
+
| `WebsiteUrl` / `WebsiteUrlDoc` / `CreateWebsiteUrlInput` | Document types. |
|
|
371
|
+
| `getWebsiteUrlsCollection()` | Collection access. |
|
|
372
|
+
| `getWebsiteUrlsByClient(clientId)` | All websites for a client. |
|
|
373
|
+
| `getWebsiteUrlById(id)` | Lookup by id. |
|
|
374
|
+
| `findWebsiteUrls(filter?)` | Flexible query. |
|
|
375
|
+
| `createWebsiteUrl({ clientId, name, baseUrl })` | Create. |
|
|
376
|
+
| `updateWebsiteUrl(id, updates)` | Update `name` / `baseUrl`. |
|
|
377
|
+
| `deleteWebsiteUrl(id)` | Delete by id. |
|
|
378
|
+
|
|
379
|
+
**`clientsConfig` — selected scan**
|
|
380
|
+
|
|
381
|
+
| Export | Purpose |
|
|
382
|
+
| --- | --- |
|
|
383
|
+
| `getActiveScanId(clientId)` | Read `products.websiteTalk.activeScanId`. |
|
|
384
|
+
| `updateActiveScanId(clientId, scanId)` | Set the active scan for search. |
|
|
385
|
+
| `clearActiveScanId(clientId)` | Unset `activeScanId`. |
|
|
386
|
+
|
|
387
|
+
**`scans` — by `websiteUrlId`**
|
|
388
|
+
|
|
389
|
+
| Export | Purpose |
|
|
390
|
+
| --- | --- |
|
|
391
|
+
| `getScanById(id)` | Lookup by id. |
|
|
392
|
+
| `getScansByWebsiteUrl(websiteUrlId)` | All scans for a website. |
|
|
393
|
+
| `getLatestScanByWebsiteUrl(websiteUrlId)` | Most recent scan. |
|
|
394
|
+
| `getInProgressScanByWebsiteUrl(websiteUrlId)` | Latest scan if still in progress. |
|
|
395
|
+
| `findInProgressScansByClient(clientId)` | All in-progress scans for a client. |
|
|
396
|
+
| `hasScansForWebsiteUrl(websiteUrlId)` | Whether any scans exist. |
|
|
397
|
+
| `getLatestCompletedScanByWebsiteUrl(websiteUrlId)` | Most recent `COMPLETED` scan. |
|
|
398
|
+
| `updateScanDoc(scanId, updates)` | Partial update (e.g. mark `OVERWRITTEN`). |
|
|
399
|
+
| `deleteScansByWebsiteUrl(websiteUrlId)` | Delete all scans for a website. |
|
|
400
|
+
|
|
401
|
+
**Breaking / type changes**
|
|
402
|
+
|
|
403
|
+
| Removed | Replacement |
|
|
404
|
+
| --- | --- |
|
|
405
|
+
| `WebsiteTalkProduct.defaultBaseUrl` | `websiteUrls` collection (`name`, `baseUrl`) |
|
|
406
|
+
| `Scan.baseUrl` | `Scan.websiteUrlId` (see 1.3.15) |
|
|
407
|
+
|
|
408
|
+
**`OVERWRITTEN` scan status**
|
|
409
|
+
|
|
410
|
+
- `OVERWRITTEN` is part of `ScanStatus` / `SCAN_STATUSES`.
|
|
411
|
+
- Marking previous `COMPLETED` scans as overwritten is **not** done in `createScanDoc` — implement in the service layer (e.g. via `updateScanDoc`).
|
|
412
|
+
|
|
413
|
+
**Not in core-db (service layer)**
|
|
414
|
+
|
|
415
|
+
- `resolveActiveWebsiteContext` — join `activeScanId` → scan → websiteUrl.
|
|
416
|
+
- Migration from legacy `defaultBaseUrl`.
|
|
417
|
+
|
|
418
|
+
**Do I need to update my app?**
|
|
419
|
+
|
|
420
|
+
Yes — WTIS, CoreBrain, and CoreCrawler should upgrade to **1.3.18** and import the symbols above from `@talkpilot/core-db`. Stop reading `defaultBaseUrl` from `WebsiteTalkProduct`; use `websiteUrls` instead.
|
|
421
|
+
|
|
304
422
|
|
|
305
423
|
## 🛠 CI/CD & deployment
|
|
306
424
|
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
export declare const CONFERENCE_ROLE_CUSTOMER: "customer";
|
|
3
3
|
/** Supervisor role within a conference call. */
|
|
4
4
|
export declare const CONFERENCE_ROLE_SUPERVISOR: "supervisor";
|
|
5
|
+
/** Live call — «בשיחה». Excludes Twilio `busy` (line busy / «תפוס»). */
|
|
6
|
+
export declare const IN_CALL_STATUSES: readonly ["in-progress", "answered"];
|
|
5
7
|
/** Hours in a single day. */
|
|
6
8
|
export declare const HOURS_PER_DAY = 24;
|
|
7
9
|
/** Max execution time (ms) for calls statistics aggregations. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calls.constants.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/calls/calls.constants.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,eAAO,MAAM,wBAAwB,EAAG,UAAmB,CAAC;AAE5D,gDAAgD;AAChD,eAAO,MAAM,0BAA0B,EAAG,YAAqB,CAAC;AAEhE,6BAA6B;AAC7B,eAAO,MAAM,aAAa,KAAK,CAAC;AAEhC,iEAAiE;AACjE,eAAO,MAAM,iBAAiB,QAAS,CAAC;AAExC;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAC/C,eAAO,MAAM,4BAA4B,IAAI,CAAC"}
|
|
1
|
+
{"version":3,"file":"calls.constants.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/calls/calls.constants.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,eAAO,MAAM,wBAAwB,EAAG,UAAmB,CAAC;AAE5D,gDAAgD;AAChD,eAAO,MAAM,0BAA0B,EAAG,YAAqB,CAAC;AAEhE,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,sCAAuC,CAAC;AAErE,6BAA6B;AAC7B,eAAO,MAAM,aAAa,KAAK,CAAC;AAEhC,iEAAiE;AACjE,eAAO,MAAM,iBAAiB,QAAS,CAAC;AAExC;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAC/C,eAAO,MAAM,4BAA4B,IAAI,CAAC"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TREND_WEEK_BUCKET_MIN_MONTHS = exports.TREND_MONTH_BUCKET_MIN_MONTHS = exports.STATS_MAX_TIME_MS = exports.HOURS_PER_DAY = exports.CONFERENCE_ROLE_SUPERVISOR = exports.CONFERENCE_ROLE_CUSTOMER = void 0;
|
|
3
|
+
exports.TREND_WEEK_BUCKET_MIN_MONTHS = exports.TREND_MONTH_BUCKET_MIN_MONTHS = exports.STATS_MAX_TIME_MS = exports.HOURS_PER_DAY = exports.IN_CALL_STATUSES = exports.CONFERENCE_ROLE_SUPERVISOR = exports.CONFERENCE_ROLE_CUSTOMER = void 0;
|
|
4
4
|
/** Customer role within a conference call. */
|
|
5
5
|
exports.CONFERENCE_ROLE_CUSTOMER = "customer";
|
|
6
6
|
/** Supervisor role within a conference call. */
|
|
7
7
|
exports.CONFERENCE_ROLE_SUPERVISOR = "supervisor";
|
|
8
|
+
/** Live call — «בשיחה». Excludes Twilio `busy` (line busy / «תפוס»). */
|
|
9
|
+
exports.IN_CALL_STATUSES = ["in-progress", "answered"];
|
|
8
10
|
/** Hours in a single day. */
|
|
9
11
|
exports.HOURS_PER_DAY = 24;
|
|
10
12
|
/** Max execution time (ms) for calls statistics aggregations. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calls.constants.js","sourceRoot":"","sources":["../../../src/talkpilot/calls/calls.constants.ts"],"names":[],"mappings":";;;AAAA,8CAA8C;AACjC,QAAA,wBAAwB,GAAG,UAAmB,CAAC;AAE5D,gDAAgD;AACnC,QAAA,0BAA0B,GAAG,YAAqB,CAAC;AAEhE,6BAA6B;AAChB,QAAA,aAAa,GAAG,EAAE,CAAC;AAEhC,iEAAiE;AACpD,QAAA,iBAAiB,GAAG,MAAM,CAAC;AAExC;;;;;GAKG;AACU,QAAA,6BAA6B,GAAG,CAAC,CAAC;AAClC,QAAA,4BAA4B,GAAG,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"calls.constants.js","sourceRoot":"","sources":["../../../src/talkpilot/calls/calls.constants.ts"],"names":[],"mappings":";;;AAAA,8CAA8C;AACjC,QAAA,wBAAwB,GAAG,UAAmB,CAAC;AAE5D,gDAAgD;AACnC,QAAA,0BAA0B,GAAG,YAAqB,CAAC;AAEhE,wEAAwE;AAC3D,QAAA,gBAAgB,GAAG,CAAC,aAAa,EAAE,UAAU,CAAU,CAAC;AAErE,6BAA6B;AAChB,QAAA,aAAa,GAAG,EAAE,CAAC;AAEhC,iEAAiE;AACpD,QAAA,iBAAiB,GAAG,MAAM,CAAC;AAExC;;;;;GAKG;AACU,QAAA,6BAA6B,GAAG,CAAC,CAAC;AAClC,QAAA,4BAA4B,GAAG,CAAC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Call, CallDoc, CallQueryOptions, CallUpdateParams } from "../index";
|
|
2
|
-
import type { CountOpts, DateRange, ToolExecution } from "./calls.types";
|
|
2
|
+
import type { CountOpts, DateRange, ToolExecution, CallStatus } from "./calls.types";
|
|
3
3
|
import { Filter, ObjectId } from "mongodb";
|
|
4
4
|
import { DashboardHeatmapMetric } from "./dashboard/calls.dashboard.types";
|
|
5
5
|
export declare const getCallsCollection: () => import("mongodb").Collection<Call>;
|
|
@@ -9,6 +9,7 @@ export declare const getCallsByClient: (clientId: string) => Promise<import("mon
|
|
|
9
9
|
export declare const getCallsByFlow: (flowId: ObjectId) => Promise<import("mongodb").WithId<Call>[]>;
|
|
10
10
|
export declare const createCallDoc: (call: Omit<Call, "createdAt" | "updatedAt" | "env">) => Promise<import("mongodb").InsertOneResult<Call>>;
|
|
11
11
|
export declare const updateCallByCallSid: (callSid: string, updates: CallUpdateParams) => Promise<CallDoc | null>;
|
|
12
|
+
export declare const updateCallStatusByCallSid: (callSid: string, status: CallStatus) => Promise<CallDoc | null>;
|
|
12
13
|
export declare const pushToolExecution: (callSid: string, execution: ToolExecution) => Promise<void>;
|
|
13
14
|
export declare const getCallsByClientAndDateRange: (clientId: string, startDate: Date, endDate: Date) => Promise<import("mongodb").WithId<Call>[]>;
|
|
14
15
|
export declare const findCallsByQuery: (query: Filter<Call>, options?: CallQueryOptions) => Promise<CallDoc[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calls.getters.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/calls/calls.getters.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,OAAO,EACP,gBAAgB,EAChB,gBAAgB,EAEjB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"calls.getters.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/calls/calls.getters.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,OAAO,EACP,gBAAgB,EAChB,gBAAgB,EAEjB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAG3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAE3E,eAAO,MAAM,kBAAkB,0CAE9B,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,SAAS,MAAM,mDAE/C,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,aAAa,MAAM,8CAIxD,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,UAAU,MAAM,8CAEhD,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,QAAQ,QAAQ,8CAE9C,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,MAAM,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,WAAW,GAAG,KAAK,CAAC,qDAQpD,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,SAAS,MAAM,EACf,SAAS,gBAAgB,KACxB,OAAO,CAAC,OAAO,GAAG,IAAI,CAWxB,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACpC,SAAS,MAAM,EACf,QAAQ,UAAU,KACjB,OAAO,CAAC,OAAO,GAAG,IAAI,CAKtB,CAAC;AAEJ,eAAO,MAAM,iBAAiB,GAC5B,SAAS,MAAM,EACf,WAAW,aAAa,KACvB,OAAO,CAAC,IAAI,CAKd,CAAC;AAIF,eAAO,MAAM,4BAA4B,GACvC,UAAU,MAAM,EAChB,WAAW,IAAI,EACf,SAAS,IAAI,8CAWd,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,OAAO,MAAM,CAAC,IAAI,CAAC,EACnB,UAAU,gBAAgB,KACzB,OAAO,CAAC,OAAO,EAAE,CAGnB,CAAC;AAEF,eAAO,MAAM,UAAU,GAAU,OAAO,MAAM,CAAC,IAAI,CAAC,KAAG,OAAO,CAAC,MAAM,CAEpE,CAAC;AAEF,wBAAsB,wBAAwB,CAC5C,mBAAmB,EAAE,MAAM,EAC3B,IAAI,GAAE,SAAc,EACpB,KAAK,GAAE,SAAc,GACpB,OAAO,CAAC,MAAM,CAAC,CAoBjB;AAED,eAAO,MAAM,KAAK;qBACC,IAAI,SAAS,IAAI,KAAG,SAAS;sBAC9B,SAAS;qBACV,SAAS;qBAKT,SAAS;yBAKH,IAAI,KAAG,SAAS;CAItC,CAAC;AAEF,wBAAgB,UAAU,CAAC,CAAC,GAAE,IAAiB,GAAG,IAAI,CAIrD;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAInD;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CA2CjE;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,sBAAsB,EAAE,CAAC,CA2BnC"}
|
|
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.range = exports.countCalls = exports.findCallsByQuery = exports.getCallsByClientAndDateRange = exports.pushToolExecution = exports.updateCallByCallSid = exports.createCallDoc = exports.getCallsByFlow = exports.getCallsByClient = exports.getCallsByPhoneNumber = exports.getCallByCallSid = exports.getCallsCollection = void 0;
|
|
36
|
+
exports.range = exports.countCalls = exports.findCallsByQuery = exports.getCallsByClientAndDateRange = exports.pushToolExecution = exports.updateCallStatusByCallSid = exports.updateCallByCallSid = exports.createCallDoc = exports.getCallsByFlow = exports.getCallsByClient = exports.getCallsByPhoneNumber = exports.getCallByCallSid = exports.getCallsCollection = void 0;
|
|
37
37
|
exports.countCallsByPhoneInRange = countCallsByPhoneInRange;
|
|
38
38
|
exports.startOfDay = startOfDay;
|
|
39
39
|
exports.addDays = addDays;
|
|
@@ -82,6 +82,8 @@ const updateCallByCallSid = async (callSid, updates) => {
|
|
|
82
82
|
}, { returnDocument: "after" });
|
|
83
83
|
};
|
|
84
84
|
exports.updateCallByCallSid = updateCallByCallSid;
|
|
85
|
+
const updateCallStatusByCallSid = async (callSid, status) => (0, exports.getCallsCollection)().findOneAndUpdate({ callSid }, { $set: { status, updatedAt: new Date() } }, { returnDocument: "after" });
|
|
86
|
+
exports.updateCallStatusByCallSid = updateCallStatusByCallSid;
|
|
85
87
|
const pushToolExecution = async (callSid, execution) => {
|
|
86
88
|
await (0, exports.getCallsCollection)().updateOne({ callSid }, { $push: { toolExecutions: execution } });
|
|
87
89
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calls.getters.js","sourceRoot":"","sources":["../../../src/talkpilot/calls/calls.getters.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"calls.getters.js","sourceRoot":"","sources":["../../../src/talkpilot/calls/calls.getters.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import { TranscriptionSegment } from "../results";
|
|
|
3
3
|
import { LeadProperty } from "../leads";
|
|
4
4
|
import { CONFERENCE_ROLE_CUSTOMER, CONFERENCE_ROLE_SUPERVISOR } from "./calls.constants";
|
|
5
5
|
export type ConferenceRole = typeof CONFERENCE_ROLE_CUSTOMER | typeof CONFERENCE_ROLE_SUPERVISOR | null;
|
|
6
|
+
export type CallStatus = "initiated" | "ringing" | "in-progress" | "answered" | "completed" | "busy" | "no-answer" | "failed" | "canceled";
|
|
6
7
|
export type Call = {
|
|
7
8
|
callSid: string;
|
|
8
9
|
flowId: ObjectId;
|
|
@@ -16,7 +17,7 @@ export type Call = {
|
|
|
16
17
|
isOutgoingCall: boolean;
|
|
17
18
|
callLength: number;
|
|
18
19
|
transcription?: TranscriptionSegment[];
|
|
19
|
-
status?:
|
|
20
|
+
status?: CallStatus;
|
|
20
21
|
leads?: LeadProperty[];
|
|
21
22
|
summary?: string;
|
|
22
23
|
recordingUrl?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calls.types.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/calls/calls.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC3B,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,cAAc,GACtB,OAAO,wBAAwB,GAC/B,OAAO,0BAA0B,GACjC,IAAI,CAAC;AAET,MAAM,MAAM,IAAI,GAAG;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,QAAQ,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,QAAQ,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACvC,MAAM,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"calls.types.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/calls/calls.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calls.dashboard.d.ts","sourceRoot":"","sources":["../../../../src/talkpilot/calls/dashboard/calls.dashboard.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"calls.dashboard.d.ts","sourceRoot":"","sources":["../../../../src/talkpilot/calls/dashboard/calls.dashboard.ts"],"names":[],"mappings":"AAQA,OAAO,EAGL,oBAAoB,EACpB,uBAAuB,EAGxB,MAAM,yBAAyB,CAAC;AAEjC,YAAY,EACV,0BAA0B,EAC1B,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AAqMjC,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,uBAAuB,CAAC,CA0ElC"}
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.getDashboardStats = getDashboardStats;
|
|
7
7
|
const dayjs_1 = __importDefault(require("dayjs"));
|
|
8
8
|
const calls_getters_1 = require("../calls.getters");
|
|
9
|
+
const calls_constants_1 = require("../calls.constants");
|
|
9
10
|
const clientsConfig_1 = require("../../clientsConfig");
|
|
10
11
|
const utc_1 = __importDefault(require("dayjs/plugin/utc"));
|
|
11
12
|
const timezone_1 = __importDefault(require("dayjs/plugin/timezone"));
|
|
@@ -13,7 +14,7 @@ const isoWeek_1 = __importDefault(require("dayjs/plugin/isoWeek"));
|
|
|
13
14
|
const quarterOfYear_1 = __importDefault(require("dayjs/plugin/quarterOfYear"));
|
|
14
15
|
const DEFAULT_KPI_DATA = {
|
|
15
16
|
completedCount: 0,
|
|
16
|
-
|
|
17
|
+
inCallCount: 0,
|
|
17
18
|
answeredDuration: 0,
|
|
18
19
|
};
|
|
19
20
|
dayjs_1.default.extend(utc_1.default);
|
|
@@ -144,16 +145,14 @@ function buildKpisPipeline() {
|
|
|
144
145
|
completedCount: {
|
|
145
146
|
$sum: { $cond: [{ $eq: ["$status", "completed"] }, 1, 0] },
|
|
146
147
|
},
|
|
147
|
-
|
|
148
|
-
$sum: {
|
|
148
|
+
inCallCount: {
|
|
149
|
+
$sum: {
|
|
150
|
+
$cond: [{ $in: ["$status", [...calls_constants_1.IN_CALL_STATUSES]] }, 1, 0],
|
|
151
|
+
},
|
|
149
152
|
},
|
|
150
153
|
answeredDuration: {
|
|
151
154
|
$sum: {
|
|
152
|
-
$cond: [
|
|
153
|
-
{ $in: ["$status", ["completed", "busy"]] },
|
|
154
|
-
"$callLength",
|
|
155
|
-
0,
|
|
156
|
-
],
|
|
155
|
+
$cond: [{ $eq: ["$status", "completed"] }, "$callLength", 0],
|
|
157
156
|
},
|
|
158
157
|
},
|
|
159
158
|
},
|
|
@@ -200,14 +199,18 @@ async function getDashboardStats(params) {
|
|
|
200
199
|
.toArray();
|
|
201
200
|
const kpiData = aggregatedResult?.kpis?.[0] ?? DEFAULT_KPI_DATA;
|
|
202
201
|
const volumeDataRaw = aggregatedResult?.volumeData ?? [];
|
|
203
|
-
const
|
|
202
|
+
const completedCount = kpiData.completedCount;
|
|
203
|
+
const inCallCount = kpiData.inCallCount;
|
|
204
|
+
const totalCalls = completedCount + inCallCount;
|
|
204
205
|
const answeredDuration = kpiData.answeredDuration ?? 0;
|
|
205
206
|
const kpis = {
|
|
206
|
-
totalCalls
|
|
207
|
-
avgDurationSeconds:
|
|
207
|
+
totalCalls,
|
|
208
|
+
avgDurationSeconds: completedCount > 0
|
|
209
|
+
? Math.round(answeredDuration / completedCount)
|
|
210
|
+
: 0,
|
|
208
211
|
timeSavedMinutes: Math.round(answeredDuration / 60),
|
|
209
|
-
completedCount
|
|
210
|
-
|
|
212
|
+
completedCount,
|
|
213
|
+
inCallCount,
|
|
211
214
|
};
|
|
212
215
|
const bucketKeys = generateBucketKeys(startDateObj, endDateObj, granularity, timezone);
|
|
213
216
|
const volumeData = fillVolumeGaps(bucketKeys, volumeDataRaw.map((d) => ({ date: d._id, completed: d.completed })));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calls.dashboard.js","sourceRoot":"","sources":["../../../../src/talkpilot/calls/dashboard/calls.dashboard.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"calls.dashboard.js","sourceRoot":"","sources":["../../../../src/talkpilot/calls/dashboard/calls.dashboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,7 +12,7 @@ export type DashboardSummaryMetrics = {
|
|
|
12
12
|
avgDurationSeconds: number;
|
|
13
13
|
timeSavedMinutes: number;
|
|
14
14
|
completedCount: number;
|
|
15
|
-
|
|
15
|
+
inCallCount: number;
|
|
16
16
|
};
|
|
17
17
|
export type DashboardVisualData = {
|
|
18
18
|
volumeData: DashboardDailyTrendMetric[];
|
|
@@ -30,7 +30,7 @@ export type DashboardReportResponse = {
|
|
|
30
30
|
};
|
|
31
31
|
type RawKpiResult = {
|
|
32
32
|
completedCount: number;
|
|
33
|
-
|
|
33
|
+
inCallCount: number;
|
|
34
34
|
answeredDuration: number | null;
|
|
35
35
|
};
|
|
36
36
|
export type RawVolumeAggregationResult = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calls.dashboard.types.d.ts","sourceRoot":"","sources":["../../../../src/talkpilot/calls/dashboard/calls.dashboard.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAClC,MAAM,GACN,KAAK,GACL,MAAM,GACN,OAAO,GACP,SAAS,GACT,MAAM,CAAC;AAEX,MAAM,MAAM,uBAAuB,GAAG;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,
|
|
1
|
+
{"version":3,"file":"calls.dashboard.types.d.ts","sourceRoot":"","sources":["../../../../src/talkpilot/calls/dashboard/calls.dashboard.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAClC,MAAM,GACN,KAAK,GACL,MAAM,GACN,OAAO,GACP,SAAS,GACT,MAAM,CAAC;AAEX,MAAM,MAAM,uBAAuB,GAAG;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,UAAU,EAAE,yBAAyB,EAAE,CAAC;IACxC,iBAAiB,EAAE,0BAA0B,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,0BAA0B,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,uBAAuB,CAAC;IAC9B,MAAM,EAAE,mBAAmB,CAAC;CAC7B,CAAC;AACF,KAAK,YAAY,GAAG;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,UAAU,EAAE,0BAA0B,EAAE,CAAC;CAC1C"}
|
|
@@ -236,6 +236,9 @@ export declare const flowMongoSchema: {
|
|
|
236
236
|
readonly preventAudioDuringTool: {
|
|
237
237
|
readonly bsonType: "bool";
|
|
238
238
|
};
|
|
239
|
+
readonly useRedisTranscription: {
|
|
240
|
+
readonly bsonType: "bool";
|
|
241
|
+
};
|
|
239
242
|
readonly sendUserAuthToken: {
|
|
240
243
|
readonly bsonType: "bool";
|
|
241
244
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flows.schema.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/flows/flows.schema.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe
|
|
1
|
+
{"version":3,"file":"flows.schema.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/flows/flows.schema.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0JlB,CAAC"}
|
|
@@ -141,6 +141,7 @@ exports.flowMongoSchema = {
|
|
|
141
141
|
parameters: { bsonType: "object" },
|
|
142
142
|
bodyFormat: { bsonType: "string", enum: ["json", "form-data"] },
|
|
143
143
|
preventAudioDuringTool: { bsonType: "bool" },
|
|
144
|
+
useRedisTranscription: { bsonType: "bool" },
|
|
144
145
|
sendUserAuthToken: { bsonType: "bool" },
|
|
145
146
|
runInBackground: { bsonType: "bool" },
|
|
146
147
|
backgroundToolType: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flows.schema.js","sourceRoot":"","sources":["../../../src/talkpilot/flows/flows.schema.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"flows.schema.js","sourceRoot":"","sources":["../../../src/talkpilot/flows/flows.schema.ts"],"names":[],"mappings":";;;AAAa,QAAA,eAAe,GAAG;IAC7B,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE;QACR,UAAU;QACV,oBAAoB;QACpB,iBAAiB;QACjB,cAAc;KACf;IACD,UAAU,EAAE;QACV,GAAG,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE;QAC7B,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;QAChC,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;QAChC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;QAC1C,eAAe,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;QACvC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;QAC1C,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE;QACvC,oBAAoB,EAAE;YACpB,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;YAC5B,UAAU,EAAE;gBACV,aAAa,EAAE;oBACb,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;oBAC5B,UAAU,EAAE;wBACV,2BAA2B,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;wBACjD,yBAAyB,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;wBACjD,4BAA4B,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;wBACpD,uBAAuB,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;qBAChD;oBACD,oBAAoB,EAAE,KAAK;iBAC5B;gBACD,OAAO,EAAE;oBACP,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;oBAC5B,UAAU,EAAE;wBACV,sBAAsB,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;wBAC5C,0BAA0B,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;wBAClD,uBAAuB,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;wBAC/C,2BAA2B,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;wBACnD,wBAAwB,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;wBAChD,wBAAwB,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;qBACjD;oBACD,oBAAoB,EAAE,KAAK;iBAC5B;gBACD,eAAe,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;aACtC;YACD,oBAAoB,EAAE,KAAK;SAC5B;QACD,YAAY,EAAE;YACZ,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE;gBACL,QAAQ,EAAE,QAAQ;gBAClB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC;gBAC5C,UAAU,EAAE;oBACV,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;oBAC1B,IAAI,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;oBAC5B,IAAI,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;oBAC5B,aAAa,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE;oBAC/C,UAAU,EAAE;wBACV,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;wBAC3B,KAAK,EAAE;4BACL,QAAQ,EAAE,QAAQ;4BAClB,QAAQ,EAAE,CAAC,iBAAiB,CAAC;4BAC7B,UAAU,EAAE;gCACV,eAAe,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;gCACvC,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE;gCAC1C,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE;6BACrC;yBACF;qBACF;oBACD,eAAe,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE;oBACjD,YAAY,EAAE;wBACZ,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;wBAC5B,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;qBAC3C;oBACD,QAAQ,EAAE;wBACR,QAAQ,EAAE,QAAQ;wBAClB,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;wBACpB,UAAU,EAAE;4BACV,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;4BACzB,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;yBAC1B;qBACF;oBACD,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE;oBACtC,QAAQ,EAAE;wBACR,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;wBAC3B,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;qBAC9B;oBACD,YAAY,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE;oBAC9C,YAAY,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE;iBAC/C;aACF;SACF;QACD,KAAK,EAAE;YACL,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;YAC3B,KAAK,EAAE;gBACL,QAAQ,EAAE,QAAQ;gBAClB,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC;gBACpC,UAAU,EAAE;oBACV,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;oBAC1B,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;oBAC9B,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;oBAC9B,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE;iBACxC;aACF;SACF;QACD,QAAQ,EAAE;YACR,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;YAC3B,KAAK,EAAE;gBACL,QAAQ,EAAE,QAAQ;gBAClB,QAAQ,EAAE,CAAC,KAAK,CAAC;gBACjB,UAAU,EAAE;oBACV,GAAG,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;oBAC3B,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;iBAC/B;aACF;SACF;QACD,cAAc,EAAE;YACd,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;YAC3B,KAAK,EAAE;gBACL,QAAQ,EAAE,QAAQ;gBAClB,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC;gBACjC,UAAU,EAAE;oBACV,IAAI,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;oBAC5B,WAAW,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;iBACpC;aACF;SACF;QACD,KAAK,EAAE;YACL,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;YAC3B,KAAK,EAAE;gBACL,QAAQ,EAAE,QAAQ;gBAClB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,CAAC;gBACvD,UAAU,EAAE;oBACV,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;oBAC1B,IAAI,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;oBAC5B,WAAW,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;oBACnC,GAAG,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;oBAC3B,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;oBAC9B,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;oBAC/B,UAAU,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;oBAClC,UAAU,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE;oBAC/D,sBAAsB,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;oBAC5C,qBAAqB,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;oBAC3C,iBAAiB,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;oBACvC,eAAe,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;oBACrC,kBAAkB,EAAE;wBAClB,QAAQ,EAAE,QAAQ;wBAClB,IAAI,EAAE,CAAC,sBAAsB,EAAE,oBAAoB,CAAC;qBACrD;oBACD,kCAAkC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;iBAC3D;gBACD,oBAAoB,EAAE,KAAK;aAC5B;SACF;KACF;IACD,oBAAoB,EAAE,KAAK;CACnB,CAAC"}
|
|
@@ -59,6 +59,8 @@ export type FlowTool = {
|
|
|
59
59
|
parameters: Record<string, unknown>;
|
|
60
60
|
bodyFormat?: "json" | "form-data";
|
|
61
61
|
preventAudioDuringTool?: boolean;
|
|
62
|
+
/** When true, prefer cached transcription from Redis (default: false). */
|
|
63
|
+
useRedisTranscription?: boolean;
|
|
62
64
|
sendUserAuthToken?: boolean;
|
|
63
65
|
runInBackground?: boolean;
|
|
64
66
|
backgroundToolType?: "backgroundToolAlways" | "backgroundToolOnce";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flows.types.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/flows/flows.types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"flows.types.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/flows/flows.types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -35,7 +35,7 @@ describe("getDashboardStats", () => {
|
|
|
35
35
|
expect(result.kpis.totalCalls).toBe(0);
|
|
36
36
|
expect(result.kpis.completedCount).toBe(0);
|
|
37
37
|
expect(result.kpis.avgDurationSeconds).toBe(0);
|
|
38
|
-
expect(result.kpis.
|
|
38
|
+
expect(result.kpis.inCallCount).toBe(0);
|
|
39
39
|
expect(result.kpis.timeSavedMinutes).toBe(0);
|
|
40
40
|
// ~30 day range -> daily buckets, gap-filled with zeros across the whole range
|
|
41
41
|
expect(result.charts.volumeGranularity).toBe("day");
|
|
@@ -146,4 +146,84 @@ describe("getDashboardStats", () => {
|
|
|
146
146
|
const empty = result.charts.volumeData.filter((d) => d.completed === 0);
|
|
147
147
|
expect(empty).toHaveLength(22);
|
|
148
148
|
});
|
|
149
|
+
|
|
150
|
+
it("should count in-progress and answered as inCallCount, not completed", async () => {
|
|
151
|
+
const clientId = "client-dash-in-call";
|
|
152
|
+
|
|
153
|
+
await getClientsConfigCollection().insertOne({
|
|
154
|
+
clientId,
|
|
155
|
+
timezone: "UTC",
|
|
156
|
+
products: {},
|
|
157
|
+
} as any);
|
|
158
|
+
|
|
159
|
+
await getCallsCollection().insertMany([
|
|
160
|
+
{
|
|
161
|
+
clientId,
|
|
162
|
+
status: "in-progress",
|
|
163
|
+
callLength: 30,
|
|
164
|
+
createdAt: new Date("2026-05-10T10:00:00Z"),
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
clientId,
|
|
168
|
+
status: "answered",
|
|
169
|
+
callLength: 45,
|
|
170
|
+
createdAt: new Date("2026-05-10T11:00:00Z"),
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
clientId,
|
|
174
|
+
status: "completed",
|
|
175
|
+
callLength: 120,
|
|
176
|
+
createdAt: new Date("2026-05-10T12:00:00Z"),
|
|
177
|
+
},
|
|
178
|
+
] as any);
|
|
179
|
+
|
|
180
|
+
const result = await getDashboardStats({
|
|
181
|
+
clientId,
|
|
182
|
+
startDate: "2026-05-01T00:00:00.000Z",
|
|
183
|
+
endDate: "2026-05-31T23:59:59.999Z",
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
expect(result.kpis.inCallCount).toBe(2);
|
|
187
|
+
expect(result.kpis.completedCount).toBe(1);
|
|
188
|
+
expect(result.kpis.totalCalls).toBe(3);
|
|
189
|
+
expect(result.kpis.avgDurationSeconds).toBe(120);
|
|
190
|
+
expect(result.kpis.timeSavedMinutes).toBe(2);
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
it("should not count physical busy status as inCall or answered duration", async () => {
|
|
194
|
+
const clientId = "client-dash-busy";
|
|
195
|
+
|
|
196
|
+
await getClientsConfigCollection().insertOne({
|
|
197
|
+
clientId,
|
|
198
|
+
timezone: "UTC",
|
|
199
|
+
products: {},
|
|
200
|
+
} as any);
|
|
201
|
+
|
|
202
|
+
await getCallsCollection().insertMany([
|
|
203
|
+
{
|
|
204
|
+
clientId,
|
|
205
|
+
status: "busy",
|
|
206
|
+
callLength: 60,
|
|
207
|
+
createdAt: new Date("2026-05-10T10:00:00Z"),
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
clientId,
|
|
211
|
+
status: "completed",
|
|
212
|
+
callLength: 90,
|
|
213
|
+
createdAt: new Date("2026-05-10T11:00:00Z"),
|
|
214
|
+
},
|
|
215
|
+
] as any);
|
|
216
|
+
|
|
217
|
+
const result = await getDashboardStats({
|
|
218
|
+
clientId,
|
|
219
|
+
startDate: "2026-05-01T00:00:00.000Z",
|
|
220
|
+
endDate: "2026-05-31T23:59:59.999Z",
|
|
221
|
+
});
|
|
222
|
+
|
|
223
|
+
expect(result.kpis.inCallCount).toBe(0);
|
|
224
|
+
expect(result.kpis.completedCount).toBe(1);
|
|
225
|
+
expect(result.kpis.totalCalls).toBe(1);
|
|
226
|
+
expect(result.kpis.avgDurationSeconds).toBe(90);
|
|
227
|
+
expect(result.kpis.timeSavedMinutes).toBe(2);
|
|
228
|
+
});
|
|
149
229
|
});
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
getCallsByClientAndDateRange,
|
|
10
10
|
getCallsCollection,
|
|
11
11
|
pushToolExecution,
|
|
12
|
+
updateCallStatusByCallSid,
|
|
12
13
|
} from "../calls.getters";
|
|
13
14
|
import type { ToolExecution } from "../calls.types";
|
|
14
15
|
import { ObjectId } from "mongodb";
|
|
@@ -60,6 +61,18 @@ describe("db.calls", () => {
|
|
|
60
61
|
expect(result.some((c) => c.callSid === call.callSid)).toBe(true);
|
|
61
62
|
});
|
|
62
63
|
|
|
64
|
+
it("should set current status only via updateCallStatusByCallSid", async () => {
|
|
65
|
+
const call = createOutGoingCallDoc({ status: "ringing" });
|
|
66
|
+
await createCallDoc(call);
|
|
67
|
+
|
|
68
|
+
const updated = await updateCallStatusByCallSid(call.callSid, "in-progress");
|
|
69
|
+
|
|
70
|
+
expect(updated?.status).toBe("in-progress");
|
|
71
|
+
expect(await getCallByCallSid(call.callSid)).toMatchObject({
|
|
72
|
+
status: "in-progress",
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
|
|
63
76
|
describe("findCallsByQuery()", () => {
|
|
64
77
|
it("should find calls by status with limit and sort", async () => {
|
|
65
78
|
const clientId = "client123";
|
|
@@ -4,6 +4,9 @@ export const CONFERENCE_ROLE_CUSTOMER = "customer" as const;
|
|
|
4
4
|
/** Supervisor role within a conference call. */
|
|
5
5
|
export const CONFERENCE_ROLE_SUPERVISOR = "supervisor" as const;
|
|
6
6
|
|
|
7
|
+
/** Live call — «בשיחה». Excludes Twilio `busy` (line busy / «תפוס»). */
|
|
8
|
+
export const IN_CALL_STATUSES = ["in-progress", "answered"] as const;
|
|
9
|
+
|
|
7
10
|
/** Hours in a single day. */
|
|
8
11
|
export const HOURS_PER_DAY = 24;
|
|
9
12
|
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
CallUpdateParams,
|
|
6
6
|
getDb,
|
|
7
7
|
} from "../index";
|
|
8
|
-
import type { CountOpts, DateRange, ToolExecution } from "./calls.types";
|
|
8
|
+
import type { CountOpts, DateRange, ToolExecution, CallStatus } from "./calls.types";
|
|
9
9
|
import { Filter, ObjectId } from "mongodb";
|
|
10
10
|
import * as process from "node:process";
|
|
11
11
|
import { applyQueryOptions } from "../utils/query.utils";
|
|
@@ -60,6 +60,16 @@ export const updateCallByCallSid = async (
|
|
|
60
60
|
);
|
|
61
61
|
};
|
|
62
62
|
|
|
63
|
+
export const updateCallStatusByCallSid = async (
|
|
64
|
+
callSid: string,
|
|
65
|
+
status: CallStatus,
|
|
66
|
+
): Promise<CallDoc | null> =>
|
|
67
|
+
getCallsCollection().findOneAndUpdate(
|
|
68
|
+
{ callSid },
|
|
69
|
+
{ $set: { status, updatedAt: new Date() } },
|
|
70
|
+
{ returnDocument: "after" },
|
|
71
|
+
);
|
|
72
|
+
|
|
63
73
|
export const pushToolExecution = async (
|
|
64
74
|
callSid: string,
|
|
65
75
|
execution: ToolExecution,
|
|
@@ -12,6 +12,17 @@ export type ConferenceRole =
|
|
|
12
12
|
| typeof CONFERENCE_ROLE_SUPERVISOR
|
|
13
13
|
| null;
|
|
14
14
|
|
|
15
|
+
export type CallStatus =
|
|
16
|
+
| "initiated"
|
|
17
|
+
| "ringing"
|
|
18
|
+
| "in-progress"
|
|
19
|
+
| "answered"
|
|
20
|
+
| "completed"
|
|
21
|
+
| "busy"
|
|
22
|
+
| "no-answer"
|
|
23
|
+
| "failed"
|
|
24
|
+
| "canceled";
|
|
25
|
+
|
|
15
26
|
export type Call = {
|
|
16
27
|
callSid: string;
|
|
17
28
|
flowId: ObjectId;
|
|
@@ -25,7 +36,7 @@ export type Call = {
|
|
|
25
36
|
isOutgoingCall: boolean;
|
|
26
37
|
callLength: number;
|
|
27
38
|
transcription?: TranscriptionSegment[];
|
|
28
|
-
status?:
|
|
39
|
+
status?: CallStatus;
|
|
29
40
|
leads?: LeadProperty[];
|
|
30
41
|
summary?: string;
|
|
31
42
|
recordingUrl?: string;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import dayjs from "dayjs";
|
|
2
2
|
import { getCallsCollection } from "../calls.getters";
|
|
3
|
+
import { IN_CALL_STATUSES } from "../calls.constants";
|
|
3
4
|
import { getClientConfig } from "../../clientsConfig";
|
|
4
5
|
import utc from "dayjs/plugin/utc";
|
|
5
6
|
import timezonePlugin from "dayjs/plugin/timezone";
|
|
@@ -22,7 +23,7 @@ export type {
|
|
|
22
23
|
|
|
23
24
|
const DEFAULT_KPI_DATA = {
|
|
24
25
|
completedCount: 0,
|
|
25
|
-
|
|
26
|
+
inCallCount: 0,
|
|
26
27
|
answeredDuration: 0,
|
|
27
28
|
};
|
|
28
29
|
|
|
@@ -183,16 +184,14 @@ function buildKpisPipeline() {
|
|
|
183
184
|
completedCount: {
|
|
184
185
|
$sum: { $cond: [{ $eq: ["$status", "completed"] }, 1, 0] },
|
|
185
186
|
},
|
|
186
|
-
|
|
187
|
-
$sum: {
|
|
187
|
+
inCallCount: {
|
|
188
|
+
$sum: {
|
|
189
|
+
$cond: [{ $in: ["$status", [...IN_CALL_STATUSES]] }, 1, 0],
|
|
190
|
+
},
|
|
188
191
|
},
|
|
189
192
|
answeredDuration: {
|
|
190
193
|
$sum: {
|
|
191
|
-
$cond: [
|
|
192
|
-
{ $in: ["$status", ["completed", "busy"]] },
|
|
193
|
-
"$callLength",
|
|
194
|
-
0,
|
|
195
|
-
],
|
|
194
|
+
$cond: [{ $eq: ["$status", "completed"] }, "$callLength", 0],
|
|
196
195
|
},
|
|
197
196
|
},
|
|
198
197
|
},
|
|
@@ -258,16 +257,20 @@ export async function getDashboardStats(
|
|
|
258
257
|
const kpiData = aggregatedResult?.kpis?.[0] ?? DEFAULT_KPI_DATA;
|
|
259
258
|
const volumeDataRaw = aggregatedResult?.volumeData ?? [];
|
|
260
259
|
|
|
261
|
-
const
|
|
260
|
+
const completedCount = kpiData.completedCount;
|
|
261
|
+
const inCallCount = kpiData.inCallCount;
|
|
262
|
+
const totalCalls = completedCount + inCallCount;
|
|
262
263
|
const answeredDuration = kpiData.answeredDuration ?? 0;
|
|
263
264
|
|
|
264
265
|
const kpis: DashboardSummaryMetrics = {
|
|
265
|
-
totalCalls
|
|
266
|
+
totalCalls,
|
|
266
267
|
avgDurationSeconds:
|
|
267
|
-
|
|
268
|
+
completedCount > 0
|
|
269
|
+
? Math.round(answeredDuration / completedCount)
|
|
270
|
+
: 0,
|
|
268
271
|
timeSavedMinutes: Math.round(answeredDuration / 60),
|
|
269
|
-
completedCount
|
|
270
|
-
|
|
272
|
+
completedCount,
|
|
273
|
+
inCallCount,
|
|
271
274
|
};
|
|
272
275
|
|
|
273
276
|
const bucketKeys = generateBucketKeys(
|
|
@@ -21,7 +21,7 @@ export type DashboardSummaryMetrics = {
|
|
|
21
21
|
avgDurationSeconds: number;
|
|
22
22
|
timeSavedMinutes: number;
|
|
23
23
|
completedCount: number;
|
|
24
|
-
|
|
24
|
+
inCallCount: number;
|
|
25
25
|
};
|
|
26
26
|
|
|
27
27
|
export type DashboardVisualData = {
|
|
@@ -42,7 +42,7 @@ export type DashboardReportResponse = {
|
|
|
42
42
|
};
|
|
43
43
|
type RawKpiResult = {
|
|
44
44
|
completedCount: number;
|
|
45
|
-
|
|
45
|
+
inCallCount: number;
|
|
46
46
|
answeredDuration: number | null;
|
|
47
47
|
};
|
|
48
48
|
|
|
@@ -79,6 +79,9 @@ describe("flowMongoSchema", () => {
|
|
|
79
79
|
expect(toolItem.properties).toHaveProperty("runInBackground");
|
|
80
80
|
expect(toolItem.properties.runInBackground.bsonType).toBe("bool");
|
|
81
81
|
|
|
82
|
+
expect(toolItem.properties).toHaveProperty("useRedisTranscription");
|
|
83
|
+
expect(toolItem.properties.useRedisTranscription.bsonType).toBe("bool");
|
|
84
|
+
|
|
82
85
|
expect(toolItem.properties).toHaveProperty("backgroundToolType");
|
|
83
86
|
expect(toolItem.properties.backgroundToolType.bsonType).toBe("string");
|
|
84
87
|
expect(toolItem.properties.backgroundToolType.enum).toEqual([
|
|
@@ -138,6 +138,7 @@ export const flowMongoSchema = {
|
|
|
138
138
|
parameters: { bsonType: "object" },
|
|
139
139
|
bodyFormat: { bsonType: "string", enum: ["json", "form-data"] },
|
|
140
140
|
preventAudioDuringTool: { bsonType: "bool" },
|
|
141
|
+
useRedisTranscription: { bsonType: "bool" },
|
|
141
142
|
sendUserAuthToken: { bsonType: "bool" },
|
|
142
143
|
runInBackground: { bsonType: "bool" },
|
|
143
144
|
backgroundToolType: {
|
|
@@ -71,6 +71,8 @@ export type FlowTool = {
|
|
|
71
71
|
parameters: Record<string, unknown>;
|
|
72
72
|
bodyFormat?: "json" | "form-data";
|
|
73
73
|
preventAudioDuringTool?: boolean;
|
|
74
|
+
/** When true, prefer cached transcription from Redis (default: false). */
|
|
75
|
+
useRedisTranscription?: boolean;
|
|
74
76
|
sendUserAuthToken?: boolean;
|
|
75
77
|
runInBackground?: boolean;
|
|
76
78
|
backgroundToolType?: "backgroundToolAlways" | "backgroundToolOnce";
|
package/README_OLD.md
DELETED
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
# @talkpilot/core-db
|
|
2
|
-
|
|
3
|
-
[NPM Version](https://www.npmjs.com/package/@talkpilot/core-db)
|
|
4
|
-
|
|
5
|
-
A TypeScript-based core database management package designed to provide centralized database connections, ORM integrations, and client utilities for other projects. This package manages connections to both **TalkPilot** and **Municipal** MongoDB databases.
|
|
6
|
-
|
|
7
|
-
## Features
|
|
8
|
-
|
|
9
|
-
- 🚀 **Multi-Domain Database Management**: Centralized handlers for both TalkPilot and Municipal Data domains.
|
|
10
|
-
- 📦 **Reusable Getters**: Standardized functions for fetching data from various collections (calls, agents, leads, cities, etc.).
|
|
11
|
-
- 🏗️ **Type-safe**: Built with TypeScript for full type safety across all your database interactions.
|
|
12
|
-
- 🛠️ **Environment Aware**: Configurable via environment variables or explicit parameters.
|
|
13
|
-
|
|
14
|
-
## Installation
|
|
15
|
-
|
|
16
|
-
This package is intended to be used as a dependency in other projects. If you're working locally, you can install it using a file path:
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
# In your other project:
|
|
20
|
-
npm install /path/to/core-db
|
|
21
|
-
# or if published to a registry:
|
|
22
|
-
npm install @talkpilot/core-db
|
|
23
|
-
# or via GitHub
|
|
24
|
-
npm install github:talkpilot/core-db
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
## Quick Start
|
|
28
|
-
|
|
29
|
-
### 1. Initialize Database Connections
|
|
30
|
-
|
|
31
|
-
You must initialize the database clients before using any of the getters.
|
|
32
|
-
|
|
33
|
-
```typescript
|
|
34
|
-
import { mongodbClient, municipalDataMongodbClient } from '@talkpilot/core-db';
|
|
35
|
-
|
|
36
|
-
async function bootstrap() {
|
|
37
|
-
// Initialize TalkPilot DB
|
|
38
|
-
await mongodbClient.connect(process.env.TALKPILOT_MONGO_URI);
|
|
39
|
-
|
|
40
|
-
// Initialize Municipal Data DB (optional)
|
|
41
|
-
await municipalDataMongodbClient.connect(process.env.MUNICIPAL_MONGO_URI);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
bootstrap().catch(console.error);
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
### 2. Using Getters
|
|
48
|
-
|
|
49
|
-
Once initialized, you can import and use any of the exported database getters.
|
|
50
|
-
|
|
51
|
-
```typescript
|
|
52
|
-
import { findAgents, findCities } from '@talkpilot/core-db';
|
|
53
|
-
|
|
54
|
-
async function getSummary() {
|
|
55
|
-
// Get all agents from TalkPilot DB
|
|
56
|
-
const agents = await findAgents();
|
|
57
|
-
console.log('Total Agents:', agents.length);
|
|
58
|
-
|
|
59
|
-
// Get all cities from Municipal Data DB
|
|
60
|
-
const cities = await findCities();
|
|
61
|
-
console.log('Total Cities:', cities.length);
|
|
62
|
-
}
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
## Available Domains
|
|
66
|
-
|
|
67
|
-
The package exports two main sets of tools:
|
|
68
|
-
|
|
69
|
-
### TalkPilot Domain
|
|
70
|
-
|
|
71
|
-
Includes access to:
|
|
72
|
-
|
|
73
|
-
- `agents`, `calls`, `clients`, `flows`, `leads`, `phone_numbers`, `plans`, `results`, `sessions`, `subscriptions`, etc.
|
|
74
|
-
- Exported as root level functions or via `mongodbClient`.
|
|
75
|
-
|
|
76
|
-
### Municipal Domain
|
|
77
|
-
|
|
78
|
-
Includes access to:
|
|
79
|
-
|
|
80
|
-
- `cities`, `streets`, `departmentsSubjects`, `tickets`.
|
|
81
|
-
- Functions are prefixed where necessary or accessible via `getMunicipalDataDb`.
|
|
82
|
-
|
|
83
|
-
## Environment Variables
|
|
84
|
-
|
|
85
|
-
The clients will automatically attempt to use the following environment variables if no URI is provided to the `connect()` method:
|
|
86
|
-
|
|
87
|
-
- `MONGO_URI` or `MONGODB_URI`: Primary MongoDB connection string.
|
|
88
|
-
- `MONGODB_DB_NAME`: Database name (defaults to 'municipal-data' for the municipal client if not specified).
|
|
89
|
-
|
|
90
|
-
## Development
|
|
91
|
-
|
|
92
|
-
### Setup
|
|
93
|
-
|
|
94
|
-
1. Clone the repository and install dependencies:
|
|
95
|
-
```bash
|
|
96
|
-
git clone https://github.com/talkpilot/core-db.git
|
|
97
|
-
cd core-db
|
|
98
|
-
npm install
|
|
99
|
-
```
|
|
100
|
-
2. Build the project:
|
|
101
|
-
```bash
|
|
102
|
-
npm run build
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
This will generate the `dist/` directory with the compiled JavaScript and type definitions.
|
|
106
|
-
|
|
107
|
-
### Publishing New Versions
|
|
108
|
-
|
|
109
|
-
To publish a new version of the package:
|
|
110
|
-
|
|
111
|
-
1. **Test your changes**:
|
|
112
|
-
```bash
|
|
113
|
-
npm test
|
|
114
|
-
```
|
|
115
|
-
2. **Update the version**:
|
|
116
|
-
```bash
|
|
117
|
-
# Bumps patch version (0.1.0 -> 0.1.1)
|
|
118
|
-
npm version patch
|
|
119
|
-
# Or for minor changes (0.1.0 -> 0.2.0)
|
|
120
|
-
# npm version minor
|
|
121
|
-
# Or for major changes (0.1.0 -> 1.0.0)
|
|
122
|
-
# npm version major
|
|
123
|
-
```
|
|
124
|
-
3. **Publish to npm**:
|
|
125
|
-
Ensure you have the shared team token in your `~/.npmrc` (see [Development Guide](./DEVELOPMENT.md#team-access--authentication)).
|
|
126
|
-
4. **Update in other repos**:
|
|
127
|
-
```bash
|
|
128
|
-
npm update @talkpilot/core-db
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
## License
|
|
132
|
-
|
|
133
|
-
MIT
|
|
134
|
-
|
|
135
|
-
---
|
|
136
|
-
|
|
137
|
-
**Interested in contributing?** Check out our [Development Guide](./DEVELOPMENT.md) for standards and setup instructions.
|
|
138
|
-
|
|
139
|
-
## Release Notes
|
|
140
|
-
|
|
141
|
-
### 1.1.9
|
|
142
|
-
|
|
143
|
-
- `getPhoneNumbersForFlows(clientId)` — lists each phone number linked to a flow for that client (newest first), with `flowId`, `phoneNumber`, and `isPrimary`.
|
|
144
|
-
### 1.1.5
|
|
145
|
-
|
|
146
|
-
- `createPurchasedPhoneNumber` for API-bought numbers (Twilio/Telnyx metadata); optional `flowId` until linked to a flow. Types/schema updated accordingly.
|
|
147
|
-
|
|
148
|
-
### 1.0.16
|
|
149
|
-
|
|
150
|
-
- Fixed critical issues present in version 1.0.15.
|
|
151
|
-
- **Warning**: Version 1.0.15 is bugged and should not be used. Please use at least version 1.0.16.
|
|
152
|
-
|
|
153
|
-
### 1.0.20
|
|
154
|
-
|
|
155
|
-
- Added to Moked106Config this param: withNeedAttentionCalls
|
|
156
|
-
- withNeedAttentionCalls?: boolean
|
|
157
|
-
|
|
158
|
-
### 1.0.27
|
|
159
|
-
- Added an optional `language` field to `ClientConfig` (e.g. Hebrew/English/Russian/French/Spanish) and updated tests.
|
|
160
|
-
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"websitalk.setup.d.ts","sourceRoot":"","sources":["../../src/websitalk/websitalk.setup.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,sBAAsB,QAAa,OAAO,CAAC,IAAI,CAW3D,CAAC;AAIF,eAAO,MAAM,0BAA0B,QAAO,OAAO,CAAC,IAAI,CAWzD,CAAC"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ensureWebsitalkIndexesOnce = exports.ensureWebsitalkIndexes = void 0;
|
|
4
|
-
const index_1 = require("./index");
|
|
5
|
-
const scans_getters_1 = require("./scans/scans.getters");
|
|
6
|
-
const websiteUrls_getters_1 = require("./websiteUrls/websiteUrls.getters");
|
|
7
|
-
const ensureWebsitalkIndexes = async () => {
|
|
8
|
-
await (0, index_1.getDb)().collection(websiteUrls_getters_1.WEBSITE_URLS_COLLECTION).createIndex({ clientId: 1 });
|
|
9
|
-
await (0, scans_getters_1.getScansCollection)().createIndexes([
|
|
10
|
-
{ key: { clientId: 1, createdAt: -1 } },
|
|
11
|
-
{ key: { websiteUrlId: 1, createdAt: -1 } },
|
|
12
|
-
{
|
|
13
|
-
key: { websiteUrlId: 1, status: 1 },
|
|
14
|
-
unique: true,
|
|
15
|
-
partialFilterExpression: { status: "COMPLETED" },
|
|
16
|
-
},
|
|
17
|
-
]);
|
|
18
|
-
};
|
|
19
|
-
exports.ensureWebsitalkIndexes = ensureWebsitalkIndexes;
|
|
20
|
-
const provisioningByDb = new WeakMap();
|
|
21
|
-
const ensureWebsitalkIndexesOnce = () => {
|
|
22
|
-
const db = (0, index_1.getDb)();
|
|
23
|
-
let provisioning = provisioningByDb.get(db);
|
|
24
|
-
if (!provisioning) {
|
|
25
|
-
provisioning = (0, exports.ensureWebsitalkIndexes)().catch((err) => {
|
|
26
|
-
provisioningByDb.delete(db);
|
|
27
|
-
throw err;
|
|
28
|
-
});
|
|
29
|
-
provisioningByDb.set(db, provisioning);
|
|
30
|
-
}
|
|
31
|
-
return provisioning;
|
|
32
|
-
};
|
|
33
|
-
exports.ensureWebsitalkIndexesOnce = ensureWebsitalkIndexesOnce;
|
|
34
|
-
//# sourceMappingURL=websitalk.setup.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"websitalk.setup.js","sourceRoot":"","sources":["../../src/websitalk/websitalk.setup.ts"],"names":[],"mappings":";;;AACA,mCAAgC;AAChC,yDAA2D;AAC3D,2EAA4E;AAErE,MAAM,sBAAsB,GAAG,KAAK,IAAmB,EAAE;IAC9D,MAAM,IAAA,aAAK,GAAE,CAAC,UAAU,CAAC,6CAAuB,CAAC,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/E,MAAM,IAAA,kCAAkB,GAAE,CAAC,aAAa,CAAC;QACvC,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;QACvC,EAAE,GAAG,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;QAC3C;YACE,GAAG,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;YACnC,MAAM,EAAE,IAAI;YACZ,uBAAuB,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;SACjD;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAXW,QAAA,sBAAsB,0BAWjC;AAEF,MAAM,gBAAgB,GAAG,IAAI,OAAO,EAAqB,CAAC;AAEnD,MAAM,0BAA0B,GAAG,GAAkB,EAAE;IAC5D,MAAM,EAAE,GAAG,IAAA,aAAK,GAAE,CAAC;IACnB,IAAI,YAAY,GAAG,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5C,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,YAAY,GAAG,IAAA,8BAAsB,GAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACpD,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC5B,MAAM,GAAG,CAAC;QACZ,CAAC,CAAC,CAAC;QACH,gBAAgB,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC;AAXW,QAAA,0BAA0B,8BAWrC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"websiteUrls.constants.d.ts","sourceRoot":"","sources":["../../../src/websitalk/websiteUrls/websiteUrls.constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,uBAAuB,gBAAgB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"websiteUrls.constants.js","sourceRoot":"","sources":["../../../src/websitalk/websiteUrls/websiteUrls.constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,uBAAuB,GAAG,aAAa,CAAC"}
|