@talkpilot/core-db 1.3.82 → 1.3.84
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 +28 -0
- package/dist/municipal/muniIssues/index.d.ts +1 -0
- package/dist/municipal/muniIssues/index.d.ts.map +1 -1
- package/dist/municipal/muniIssues/index.js +1 -0
- package/dist/municipal/muniIssues/index.js.map +1 -1
- package/dist/municipal/muniIssues/muniIssues.constants.d.ts +0 -2
- package/dist/municipal/muniIssues/muniIssues.constants.d.ts.map +1 -1
- package/dist/municipal/muniIssues/muniIssues.constants.js +0 -2
- package/dist/municipal/muniIssues/muniIssues.constants.js.map +1 -1
- package/dist/municipal/muniIssues/muniIssues.getters.d.ts +0 -2
- package/dist/municipal/muniIssues/muniIssues.getters.d.ts.map +1 -1
- package/dist/municipal/muniIssues/muniIssues.getters.js +7 -3
- package/dist/municipal/muniIssues/muniIssues.getters.js.map +1 -1
- package/dist/municipal/muniIssues/muniIssues.schema.d.ts.map +1 -1
- package/dist/municipal/muniIssues/muniIssues.schema.js +0 -1
- package/dist/municipal/muniIssues/muniIssues.schema.js.map +1 -1
- package/dist/municipal/muniIssues/muniIssues.setters.d.ts +0 -6
- package/dist/municipal/muniIssues/muniIssues.setters.d.ts.map +1 -1
- package/dist/municipal/muniIssues/muniIssues.setters.js +0 -6
- package/dist/municipal/muniIssues/muniIssues.setters.js.map +1 -1
- package/dist/municipal/muniIssues/muniIssues.types.d.ts +0 -2
- package/dist/municipal/muniIssues/muniIssues.types.d.ts.map +1 -1
- package/dist/municipal/muniIssues/muniIssues.utils.d.ts +3 -0
- package/dist/municipal/muniIssues/muniIssues.utils.d.ts.map +1 -0
- package/dist/municipal/muniIssues/muniIssues.utils.js +6 -0
- package/dist/municipal/muniIssues/muniIssues.utils.js.map +1 -0
- package/dist/talkpilot/calls/calls.constants.d.ts +7 -0
- package/dist/talkpilot/calls/calls.constants.d.ts.map +1 -1
- package/dist/talkpilot/calls/calls.constants.js +8 -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 +6 -1
- package/dist/talkpilot/calls/calls.getters.js.map +1 -1
- package/dist/talkpilot/calls/calls.types.d.ts +4 -2
- package/dist/talkpilot/calls/calls.types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/municipal/muniIssues/__tests__/muniIssues.getters.spec.ts +21 -0
- package/src/municipal/muniIssues/__tests__/muniIssues.setters.spec.ts +20 -0
- package/src/municipal/muniIssues/__tests__/muniIssues.utils.spec.ts +17 -0
- package/src/municipal/muniIssues/index.ts +1 -0
- package/src/municipal/muniIssues/muniIssues.constants.ts +0 -2
- package/src/municipal/muniIssues/muniIssues.getters.ts +8 -3
- package/src/municipal/muniIssues/muniIssues.schema.ts +0 -1
- package/src/municipal/muniIssues/muniIssues.setters.ts +0 -6
- package/src/municipal/muniIssues/muniIssues.types.ts +0 -2
- package/src/municipal/muniIssues/muniIssues.utils.ts +6 -0
- package/src/talkpilot/calls/__tests__/calls.spec.ts +48 -0
- package/src/talkpilot/calls/calls.constants.ts +8 -0
- package/src/talkpilot/calls/calls.getters.ts +19 -1
- package/src/talkpilot/calls/calls.types.ts +5 -1
package/README.md
CHANGED
|
@@ -184,6 +184,8 @@ Refer to `DEVELOPMENT.md` for the full walkthrough, token instructions, and fact
|
|
|
184
184
|
| 1.3.64 | New `callTokenUsage` collection with `incrementCallTokenUsage` (CP-1810): per-call realtime token usage, one document per `callSid`. |
|
|
185
185
|
| 1.3.65 | `Flow.beforeCallEvent` as an optional HTTP config object (`url` required; `timeoutMs`, `sendUserAuthToken`, `allowedKeys`, `wait`). `afterCallEvent` remains an optional Pub/Sub string. |
|
|
186
186
|
| 1.3.69 | Municipal `residents` collection: optional resident fields (`cityName`, `firstName`, `lastName`, `idNumber`, `phoneNumber`, `address`) with exact-match getters by phone, by idNumber, and by phone+idNumber (city-scoped). Schema + indexes exported; collection is created out of band. |
|
|
187
|
+
| 1.3.71 | Who ended a call (CP-1873): optional `Call.endedBy` (`system` / `agent` / `user`), `CallEndedByValues`, and `setCallEndedBy` (first write wins). **Breaking** vs 1.3.69–1.3.70: the value `resident` was replaced by `user`. |
|
|
188
|
+
| 1.3.74 | Added `human` to `CallEndedByValues` (CP-1873): a human agent ended the call, after a transfer or in a conference. |
|
|
187
189
|
| 1.3.82 | Complaint tracking on `muniIssues` (CP-1888): optional `status` / `response` / `updatedAt`; an editable TalkPilot response with up to `MUNI_ISSUE_MAX_RESPONSE_IMAGES` (5) `response.imageUrls` and `response.updatedAt`; `updateMuniIssueStatus`, `setMuniIssueResponse`, `findMuniIssuesByClient`, `countMuniIssuesByClient`, `getMuniIssueByIdForClient`; index `clientId_1_createdAt_-1`. |
|
|
188
190
|
|
|
189
191
|
### 1.1.9
|
|
@@ -807,6 +809,32 @@ Optional `activeFlowId` on `WebsiteTalkProduct`. WTIS reads this field when it u
|
|
|
807
809
|
|
|
808
810
|
No — the field is optional. **WTIS** should upgrade to **1.3.61** so the call-script update can use it.
|
|
809
811
|
|
|
812
|
+
### 1.3.71 — Who ended the call (CP-1873)
|
|
813
|
+
|
|
814
|
+
Records who ended a connected call. Unset for calls that never connected (busy, no-answer) and for calls moved to a conference.
|
|
815
|
+
|
|
816
|
+
**Added**
|
|
817
|
+
|
|
818
|
+
| Item | Purpose |
|
|
819
|
+
| --- | --- |
|
|
820
|
+
| `Call.endedBy` | `system` (our platform, e.g. silence timeout), `agent` (the bot ended the flow) or `user` (the caller hung up). |
|
|
821
|
+
| `CallEndedByValues` / `CallEndedBy` | Const object and the type derived from it, same pattern as `CallStatusValues`. |
|
|
822
|
+
| `setCallEndedBy(callSid, endedBy)` | Writes only if `endedBy` is not set yet; returns `true` when this call wrote it. |
|
|
823
|
+
|
|
824
|
+
`endedBy` is not part of `CallUpdateParams`, so `updateCallByCallSid` cannot overwrite it.
|
|
825
|
+
|
|
826
|
+
**Do I need to update my app?**
|
|
827
|
+
|
|
828
|
+
**TalkPilot Server** must upgrade to **1.3.71** to write the field. 1.3.69–1.3.70 used `resident` instead of `user` — don't use them.
|
|
829
|
+
|
|
830
|
+
### 1.3.74 — Human agent ended the call (CP-1873)
|
|
831
|
+
|
|
832
|
+
New `CallEndedByValues.Human` (`"human"`): a human agent ended the call, either after a transfer or in a conference.
|
|
833
|
+
|
|
834
|
+
**Do I need to update my app?**
|
|
835
|
+
|
|
836
|
+
No — purely additive. **TalkPilot Server** should upgrade to **1.3.74** to write it.
|
|
837
|
+
|
|
810
838
|
## 🛠 CI/CD & deployment
|
|
811
839
|
|
|
812
840
|
- This package is consumed by Cloud Build-based services (TalkPilot Server, MIS, CIS) as a dependency when Docker images are built. Keep `dist/` in sync with your builds because the compiled artifact is what downstream services install.
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export * from "./muniIssues.getters";
|
|
2
2
|
export * from "./muniIssues.setters";
|
|
3
3
|
export * from "./muniIssues.setup";
|
|
4
|
+
export * from "./muniIssues.utils";
|
|
4
5
|
export { MUNI_ISSUES_COLLECTION, MUNI_ISSUE_MAX_RESPONSE_IMAGES, MUNI_ISSUE_STATUSES, MUNI_ISSUE_SYNC_STATUSES, MUNI_ISSUE_TEXT_MAX_LENGTH, MUNI_ISSUE_NAME_MAX_LENGTH, } from "./muniIssues.constants";
|
|
5
6
|
export { muniIssuesJsonSchema, muniIssuesIndexes } from "./muniIssues.schema";
|
|
6
7
|
export type { MuniIssue, MuniIssueContent, MuniIssueJira, MuniIssueSyncStatus, MuniIssueStatus, MuniIssueResponse, CreateMuniIssueInput, SetMuniIssueResponseInput, FindMuniIssuesOptions, } from "./muniIssues.types";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/municipal/muniIssues/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,OAAO,EACL,sBAAsB,EACtB,8BAA8B,EAC9B,mBAAmB,EACnB,wBAAwB,EACxB,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC9E,YAAY,EACV,SAAS,EACT,gBAAgB,EAChB,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/municipal/muniIssues/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,OAAO,EACL,sBAAsB,EACtB,8BAA8B,EAC9B,mBAAmB,EACnB,wBAAwB,EACxB,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC9E,YAAY,EACV,SAAS,EACT,gBAAgB,EAChB,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC"}
|
|
@@ -18,6 +18,7 @@ exports.muniIssuesIndexes = exports.muniIssuesJsonSchema = exports.MUNI_ISSUE_NA
|
|
|
18
18
|
__exportStar(require("./muniIssues.getters"), exports);
|
|
19
19
|
__exportStar(require("./muniIssues.setters"), exports);
|
|
20
20
|
__exportStar(require("./muniIssues.setup"), exports);
|
|
21
|
+
__exportStar(require("./muniIssues.utils"), exports);
|
|
21
22
|
var muniIssues_constants_1 = require("./muniIssues.constants");
|
|
22
23
|
Object.defineProperty(exports, "MUNI_ISSUES_COLLECTION", { enumerable: true, get: function () { return muniIssues_constants_1.MUNI_ISSUES_COLLECTION; } });
|
|
23
24
|
Object.defineProperty(exports, "MUNI_ISSUE_MAX_RESPONSE_IMAGES", { enumerable: true, get: function () { return muniIssues_constants_1.MUNI_ISSUE_MAX_RESPONSE_IMAGES; } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/municipal/muniIssues/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,uDAAqC;AACrC,uDAAqC;AACrC,qDAAmC;AACnC,+DAOgC;AAN9B,8HAAA,sBAAsB,OAAA;AACtB,sIAAA,8BAA8B,OAAA;AAC9B,2HAAA,mBAAmB,OAAA;AACnB,gIAAA,wBAAwB,OAAA;AACxB,kIAAA,0BAA0B,OAAA;AAC1B,kIAAA,0BAA0B,OAAA;AAE5B,yDAA8E;AAArE,yHAAA,oBAAoB,OAAA;AAAE,sHAAA,iBAAiB,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/municipal/muniIssues/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,uDAAqC;AACrC,uDAAqC;AACrC,qDAAmC;AACnC,qDAAmC;AACnC,+DAOgC;AAN9B,8HAAA,sBAAsB,OAAA;AACtB,sIAAA,8BAA8B,OAAA;AAC9B,2HAAA,mBAAmB,OAAA;AACnB,gIAAA,wBAAwB,OAAA;AACxB,kIAAA,0BAA0B,OAAA;AAC1B,kIAAA,0BAA0B,OAAA;AAE5B,yDAA8E;AAArE,yHAAA,oBAAoB,OAAA;AAAE,sHAAA,iBAAiB,OAAA"}
|
|
@@ -2,9 +2,7 @@
|
|
|
2
2
|
export declare const MUNI_ISSUES_COLLECTION = "muniIssues";
|
|
3
3
|
/** Sync state of the issue's Jira ticket at write time. */
|
|
4
4
|
export declare const MUNI_ISSUE_SYNC_STATUSES: readonly ["created", "failed"];
|
|
5
|
-
/** Customer-facing complaint status, set manually by the TalkPilot team. */
|
|
6
5
|
export declare const MUNI_ISSUE_STATUSES: readonly ["in_review", "in_progress", "resolved", "no_issue_found"];
|
|
7
|
-
/** Max images on a single TalkPilot response. */
|
|
8
6
|
export declare const MUNI_ISSUE_MAX_RESPONSE_IMAGES = 5;
|
|
9
7
|
/** Max length for the long free-text fields — well above the ~2000-char target. */
|
|
10
8
|
export declare const MUNI_ISSUE_TEXT_MAX_LENGTH = 5000;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"muniIssues.constants.d.ts","sourceRoot":"","sources":["../../../src/municipal/muniIssues/muniIssues.constants.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,eAAO,MAAM,sBAAsB,eAAe,CAAC;AAEnD,2DAA2D;AAC3D,eAAO,MAAM,wBAAwB,gCAAiC,CAAC;AAEvE,
|
|
1
|
+
{"version":3,"file":"muniIssues.constants.d.ts","sourceRoot":"","sources":["../../../src/municipal/muniIssues/muniIssues.constants.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,eAAO,MAAM,sBAAsB,eAAe,CAAC;AAEnD,2DAA2D;AAC3D,eAAO,MAAM,wBAAwB,gCAAiC,CAAC;AAEvE,eAAO,MAAM,mBAAmB,qEAKtB,CAAC;AAEX,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAEhD,mFAAmF;AACnF,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAE/C,2EAA2E;AAC3E,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAE9C,uGAAuG;AACvG,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC,yEAAyE;AACzE,eAAO,MAAM,gBAAgB,EAAG,QAAiB,CAAC;AAClD,eAAO,MAAM,iBAAiB,EAAG,OAAgB,CAAC"}
|
|
@@ -5,14 +5,12 @@ exports.VALIDATION_ACTION = exports.VALIDATION_LEVEL = exports.NAMESPACE_EXISTS
|
|
|
5
5
|
exports.MUNI_ISSUES_COLLECTION = "muniIssues";
|
|
6
6
|
/** Sync state of the issue's Jira ticket at write time. */
|
|
7
7
|
exports.MUNI_ISSUE_SYNC_STATUSES = ["created", "failed"];
|
|
8
|
-
/** Customer-facing complaint status, set manually by the TalkPilot team. */
|
|
9
8
|
exports.MUNI_ISSUE_STATUSES = [
|
|
10
9
|
"in_review",
|
|
11
10
|
"in_progress",
|
|
12
11
|
"resolved",
|
|
13
12
|
"no_issue_found",
|
|
14
13
|
];
|
|
15
|
-
/** Max images on a single TalkPilot response. */
|
|
16
14
|
exports.MUNI_ISSUE_MAX_RESPONSE_IMAGES = 5;
|
|
17
15
|
/** Max length for the long free-text fields — well above the ~2000-char target. */
|
|
18
16
|
exports.MUNI_ISSUE_TEXT_MAX_LENGTH = 5000;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"muniIssues.constants.js","sourceRoot":"","sources":["../../../src/municipal/muniIssues/muniIssues.constants.ts"],"names":[],"mappings":";;;AAAA,2DAA2D;AAC9C,QAAA,sBAAsB,GAAG,YAAY,CAAC;AAEnD,2DAA2D;AAC9C,QAAA,wBAAwB,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"muniIssues.constants.js","sourceRoot":"","sources":["../../../src/municipal/muniIssues/muniIssues.constants.ts"],"names":[],"mappings":";;;AAAA,2DAA2D;AAC9C,QAAA,sBAAsB,GAAG,YAAY,CAAC;AAEnD,2DAA2D;AAC9C,QAAA,wBAAwB,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAU,CAAC;AAE1D,QAAA,mBAAmB,GAAG;IACjC,WAAW;IACX,aAAa;IACb,UAAU;IACV,gBAAgB;CACR,CAAC;AAEE,QAAA,8BAA8B,GAAG,CAAC,CAAC;AAEhD,mFAAmF;AACtE,QAAA,0BAA0B,GAAG,IAAI,CAAC;AAE/C,2EAA2E;AAC9D,QAAA,0BAA0B,GAAG,GAAG,CAAC;AAE9C,uGAAuG;AAC1F,QAAA,gBAAgB,GAAG,EAAE,CAAC;AAEnC,yEAAyE;AAC5D,QAAA,gBAAgB,GAAG,QAAiB,CAAC;AACrC,QAAA,iBAAiB,GAAG,OAAgB,CAAC"}
|
|
@@ -4,9 +4,7 @@ export declare const getMuniIssuesCollection: () => Collection<MuniIssue>;
|
|
|
4
4
|
export declare const generateMuniIssueId: () => ObjectId;
|
|
5
5
|
export declare const getMuniIssueById: (id: string) => Promise<MuniIssue | null>;
|
|
6
6
|
export declare const getMuniIssueByJiraKey: (jiraKey: string) => Promise<MuniIssue | null>;
|
|
7
|
-
/** A client's tracked issues, newest first. `limit` 0 means no limit (Mongo). */
|
|
8
7
|
export declare const findMuniIssuesByClient: (clientId: string, { answered, skip, limit }?: FindMuniIssuesOptions) => Promise<MuniIssue[]>;
|
|
9
8
|
export declare const countMuniIssuesByClient: (clientId: string, { answered }?: Pick<FindMuniIssuesOptions, "answered">) => Promise<number>;
|
|
10
|
-
/** One tracked issue, only if it belongs to the client. */
|
|
11
9
|
export declare const getMuniIssueByIdForClient: (id: string, clientId: string) => Promise<MuniIssue | null>;
|
|
12
10
|
//# sourceMappingURL=muniIssues.getters.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"muniIssues.getters.d.ts","sourceRoot":"","sources":["../../../src/municipal/muniIssues/muniIssues.getters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAU,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEvD,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGtE,eAAO,MAAM,uBAAuB,QAAO,UAAU,CAAC,SAAS,CAE9D,CAAC;AAEF,eAAO,MAAM,mBAAmB,QAAO,QAA0B,CAAC;AAElE,eAAO,MAAM,gBAAgB,GAC3B,IAAI,MAAM,KACT,OAAO,CAAC,SAAS,GAAG,IAAI,CAI1B,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,SAAS,MAAM,KACd,OAAO,CAAC,SAAS,GAAG,IAAI,CAE1B,CAAC;
|
|
1
|
+
{"version":3,"file":"muniIssues.getters.d.ts","sourceRoot":"","sources":["../../../src/municipal/muniIssues/muniIssues.getters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAU,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEvD,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGtE,eAAO,MAAM,uBAAuB,QAAO,UAAU,CAAC,SAAS,CAE9D,CAAC;AAEF,eAAO,MAAM,mBAAmB,QAAO,QAA0B,CAAC;AAElE,eAAO,MAAM,gBAAgB,GAC3B,IAAI,MAAM,KACT,OAAO,CAAC,SAAS,GAAG,IAAI,CAI1B,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,SAAS,MAAM,KACd,OAAO,CAAC,SAAS,GAAG,IAAI,CAE1B,CAAC;AAmBF,eAAO,MAAM,sBAAsB,GACjC,UAAU,MAAM,EAChB,4BAAmC,qBAA0B,KAC5D,OAAO,CAAC,SAAS,EAAE,CAOrB,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,UAAU,MAAM,EAChB,eAAc,IAAI,CAAC,qBAAqB,EAAE,UAAU,CAAM,KACzD,OAAO,CAAC,MAAM,CAIhB,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACpC,IAAI,MAAM,EACV,UAAU,MAAM,KACf,OAAO,CAAC,SAAS,GAAG,IAAI,CAM1B,CAAC"}
|
|
@@ -21,13 +21,18 @@ const getMuniIssueByJiraKey = async (jiraKey) => {
|
|
|
21
21
|
return (0, exports.getMuniIssuesCollection)().findOne({ "jira.key": jiraKey });
|
|
22
22
|
};
|
|
23
23
|
exports.getMuniIssueByJiraKey = getMuniIssueByJiraKey;
|
|
24
|
+
// Answered = the response has text or at least one image; a cleared response object stays in the document.
|
|
25
|
+
const responseHasContent = [
|
|
26
|
+
{ "response.text": { $nin: ["", null] } },
|
|
27
|
+
{ "response.imageUrls.0": { $exists: true } },
|
|
28
|
+
];
|
|
24
29
|
// Tracked issues of one client. Issues without a status predate complaint tracking and are excluded.
|
|
25
30
|
const clientIssuesFilter = (clientId, answered) => ({
|
|
26
31
|
clientId,
|
|
27
32
|
status: { $exists: true },
|
|
28
|
-
...(answered
|
|
33
|
+
...(answered === true && { $or: responseHasContent }),
|
|
34
|
+
...(answered === false && { $nor: responseHasContent }),
|
|
29
35
|
});
|
|
30
|
-
/** A client's tracked issues, newest first. `limit` 0 means no limit (Mongo). */
|
|
31
36
|
const findMuniIssuesByClient = async (clientId, { answered, skip = 0, limit = 0 } = {}) => {
|
|
32
37
|
return (0, exports.getMuniIssuesCollection)()
|
|
33
38
|
.find(clientIssuesFilter(clientId, answered))
|
|
@@ -41,7 +46,6 @@ const countMuniIssuesByClient = async (clientId, { answered } = {}) => {
|
|
|
41
46
|
return (0, exports.getMuniIssuesCollection)().countDocuments(clientIssuesFilter(clientId, answered));
|
|
42
47
|
};
|
|
43
48
|
exports.countMuniIssuesByClient = countMuniIssuesByClient;
|
|
44
|
-
/** One tracked issue, only if it belongs to the client. */
|
|
45
49
|
const getMuniIssueByIdForClient = async (id, clientId) => {
|
|
46
50
|
if (!mongodb_1.ObjectId.isValid(id))
|
|
47
51
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"muniIssues.getters.js","sourceRoot":"","sources":["../../../src/municipal/muniIssues/muniIssues.getters.ts"],"names":[],"mappings":";;;AAAA,qCAAuD;AACvD,oCAAiC;AAEjC,iEAAgE;AAEzD,MAAM,uBAAuB,GAAG,GAA0B,EAAE;IACjE,OAAO,IAAA,aAAK,GAAE,CAAC,UAAU,CAAY,6CAAsB,CAAC,CAAC;AAC/D,CAAC,CAAC;AAFW,QAAA,uBAAuB,2BAElC;AAEK,MAAM,mBAAmB,GAAG,GAAa,EAAE,CAAC,IAAI,kBAAQ,EAAE,CAAC;AAArD,QAAA,mBAAmB,uBAAkC;AAE3D,MAAM,gBAAgB,GAAG,KAAK,EACnC,EAAU,EACiB,EAAE;IAC7B,iFAAiF;IACjF,IAAI,CAAC,kBAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,IAAA,+BAAuB,GAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,kBAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACtE,CAAC,CAAC;AANW,QAAA,gBAAgB,oBAM3B;AAEK,MAAM,qBAAqB,GAAG,KAAK,EACxC,OAAe,EACY,EAAE;IAC7B,OAAO,IAAA,+BAAuB,GAAE,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;AACpE,CAAC,CAAC;AAJW,QAAA,qBAAqB,yBAIhC;AAEF,qGAAqG;AACrG,MAAM,kBAAkB,GAAG,CACzB,QAAgB,EAChB,QAAkB,EACC,EAAE,CAAC,CAAC;IACvB,QAAQ;IACR,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;IACzB,GAAG,CAAC,QAAQ,KAAK,
|
|
1
|
+
{"version":3,"file":"muniIssues.getters.js","sourceRoot":"","sources":["../../../src/municipal/muniIssues/muniIssues.getters.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"muniIssues.schema.d.ts","sourceRoot":"","sources":["../../../src/municipal/muniIssues/muniIssues.schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAS1D,eAAO,MAAM,oBAAoB,EAAE,QAmElC,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"muniIssues.schema.d.ts","sourceRoot":"","sources":["../../../src/municipal/muniIssues/muniIssues.schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAS1D,eAAO,MAAM,oBAAoB,EAAE,QAmElC,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,gBAAgB,EAM/C,CAAC"}
|
|
@@ -73,7 +73,6 @@ exports.muniIssuesJsonSchema = {
|
|
|
73
73
|
exports.muniIssuesIndexes = [
|
|
74
74
|
{ key: { callSid: 1 }, name: "callSid_1" },
|
|
75
75
|
{ key: { createdAt: -1 }, name: "createdAt_-1" },
|
|
76
|
-
// Complaint list: one municipality's issues, newest first.
|
|
77
76
|
{ key: { clientId: 1, createdAt: -1 }, name: "clientId_1_createdAt_-1" },
|
|
78
77
|
// Unique: one stored document per Jira ticket, guarding against duplicate writes.
|
|
79
78
|
{ key: { "jira.key": 1 }, name: "jira_key_unique", unique: true },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"muniIssues.schema.js","sourceRoot":"","sources":["../../../src/municipal/muniIssues/muniIssues.schema.ts"],"names":[],"mappings":";;;AACA,iEAMgC;AAEnB,QAAA,oBAAoB,GAAa;IAC5C,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE;QACR,SAAS;QACT,UAAU;QACV,UAAU;QACV,cAAc;QACd,MAAM;QACN,WAAW;KACZ;IACD,UAAU,EAAE;QACV,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;QAC/B,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;QAChC,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;QAChC,YAAY,EAAE;YACZ,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE;gBACR,YAAY;gBACZ,YAAY;gBACZ,kBAAkB;gBAClB,iBAAiB;aAClB;YACD,UAAU,EAAE;gBACV,UAAU,EAAE;oBACV,QAAQ,EAAE,QAAQ;oBAClB,SAAS,EAAE,iDAA0B;iBACtC;gBACD,UAAU,EAAE;oBACV,QAAQ,EAAE,QAAQ;oBAClB,SAAS,EAAE,iDAA0B;iBACtC;gBACD,gBAAgB,EAAE;oBAChB,QAAQ,EAAE,QAAQ;oBAClB,SAAS,EAAE,iDAA0B;iBACtC;gBACD,eAAe,EAAE;oBACf,QAAQ,EAAE,QAAQ;oBAClB,SAAS,EAAE,iDAA0B;iBACtC;aACF;SACF;QACD,IAAI,EAAE;YACJ,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC;YAC/B,UAAU,EAAE;gBACV,GAAG,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;gBAC3B,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,+CAAwB,CAAC,EAAE;aACpD;SACF;QACD,SAAS,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;QAC/B,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,0CAAmB,CAAC,EAAE;QAC1C,QAAQ,EAAE;YACR,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC;YAC/B,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,iDAA0B,EAAE;gBACnE,SAAS,EAAE;oBACT,QAAQ,EAAE,OAAO;oBACjB,QAAQ,EAAE,qDAA8B;oBACxC,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;iBAC9B;gBACD,SAAS,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;gBAC/B,SAAS,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;aAChC;SACF;QACD,SAAS,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;KAChC;CACF,CAAC;AAEW,QAAA,iBAAiB,GAAuB;IACnD,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;IAC1C,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE;IAChD,
|
|
1
|
+
{"version":3,"file":"muniIssues.schema.js","sourceRoot":"","sources":["../../../src/municipal/muniIssues/muniIssues.schema.ts"],"names":[],"mappings":";;;AACA,iEAMgC;AAEnB,QAAA,oBAAoB,GAAa;IAC5C,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE;QACR,SAAS;QACT,UAAU;QACV,UAAU;QACV,cAAc;QACd,MAAM;QACN,WAAW;KACZ;IACD,UAAU,EAAE;QACV,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;QAC/B,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;QAChC,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;QAChC,YAAY,EAAE;YACZ,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE;gBACR,YAAY;gBACZ,YAAY;gBACZ,kBAAkB;gBAClB,iBAAiB;aAClB;YACD,UAAU,EAAE;gBACV,UAAU,EAAE;oBACV,QAAQ,EAAE,QAAQ;oBAClB,SAAS,EAAE,iDAA0B;iBACtC;gBACD,UAAU,EAAE;oBACV,QAAQ,EAAE,QAAQ;oBAClB,SAAS,EAAE,iDAA0B;iBACtC;gBACD,gBAAgB,EAAE;oBAChB,QAAQ,EAAE,QAAQ;oBAClB,SAAS,EAAE,iDAA0B;iBACtC;gBACD,eAAe,EAAE;oBACf,QAAQ,EAAE,QAAQ;oBAClB,SAAS,EAAE,iDAA0B;iBACtC;aACF;SACF;QACD,IAAI,EAAE;YACJ,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC;YAC/B,UAAU,EAAE;gBACV,GAAG,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;gBAC3B,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,+CAAwB,CAAC,EAAE;aACpD;SACF;QACD,SAAS,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;QAC/B,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,0CAAmB,CAAC,EAAE;QAC1C,QAAQ,EAAE;YACR,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC;YAC/B,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,iDAA0B,EAAE;gBACnE,SAAS,EAAE;oBACT,QAAQ,EAAE,OAAO;oBACjB,QAAQ,EAAE,qDAA8B;oBACxC,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;iBAC9B;gBACD,SAAS,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;gBAC/B,SAAS,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;aAChC;SACF;QACD,SAAS,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;KAChC;CACF,CAAC;AAEW,QAAA,iBAAiB,GAAuB;IACnD,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;IAC1C,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE;IAChD,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE;IACxE,kFAAkF;IAClF,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,IAAI,EAAE;CAClE,CAAC"}
|
|
@@ -1,12 +1,6 @@
|
|
|
1
1
|
import { ObjectId } from "mongodb";
|
|
2
2
|
import { CreateMuniIssueInput, MuniIssueStatus, SetMuniIssueResponseInput } from "./muniIssues.types";
|
|
3
3
|
export declare const createMuniIssue: (issueData: CreateMuniIssueInput, id: ObjectId) => Promise<ObjectId>;
|
|
4
|
-
/** Changes the status of an issue, answered or not. Returns false if none matched. */
|
|
5
4
|
export declare const updateMuniIssueStatus: (id: string, clientId: string, status: MuniIssueStatus) => Promise<boolean>;
|
|
6
|
-
/**
|
|
7
|
-
* Saves the TalkPilot response, or replaces an existing one (text and images).
|
|
8
|
-
* Keeps the original `response.createdAt` and sets `response.updatedAt` on an edit.
|
|
9
|
-
* Returns false if none matched.
|
|
10
|
-
*/
|
|
11
5
|
export declare const setMuniIssueResponse: (id: string, clientId: string, { status, text, imageUrls }: SetMuniIssueResponseInput) => Promise<boolean>;
|
|
12
6
|
//# sourceMappingURL=muniIssues.setters.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"muniIssues.setters.d.ts","sourceRoot":"","sources":["../../../src/municipal/muniIssues/muniIssues.setters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EACL,oBAAoB,EAEpB,eAAe,EACf,yBAAyB,EAC1B,MAAM,oBAAoB,CAAC;AAK5B,eAAO,MAAM,eAAe,GAC1B,WAAW,oBAAoB,EAC/B,IAAI,QAAQ,KACX,OAAO,CAAC,QAAQ,CAiBlB,CAAC;AASF,
|
|
1
|
+
{"version":3,"file":"muniIssues.setters.d.ts","sourceRoot":"","sources":["../../../src/municipal/muniIssues/muniIssues.setters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EACL,oBAAoB,EAEpB,eAAe,EACf,yBAAyB,EAC1B,MAAM,oBAAoB,CAAC;AAK5B,eAAO,MAAM,eAAe,GAC1B,WAAW,oBAAoB,EAC/B,IAAI,QAAQ,KACX,OAAO,CAAC,QAAQ,CAiBlB,CAAC;AASF,eAAO,MAAM,qBAAqB,GAChC,IAAI,MAAM,EACV,UAAU,MAAM,EAChB,QAAQ,eAAe,KACtB,OAAO,CAAC,OAAO,CASjB,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,IAAI,MAAM,EACV,UAAU,MAAM,EAChB,6BAA6B,yBAAyB,KACrD,OAAO,CAAC,OAAO,CA2BjB,CAAC"}
|
|
@@ -29,7 +29,6 @@ const trackedIssueFilter = (id, clientId) => ({
|
|
|
29
29
|
clientId,
|
|
30
30
|
status: { $exists: true },
|
|
31
31
|
});
|
|
32
|
-
/** Changes the status of an issue, answered or not. Returns false if none matched. */
|
|
33
32
|
const updateMuniIssueStatus = async (id, clientId, status) => {
|
|
34
33
|
if (!mongodb_1.ObjectId.isValid(id))
|
|
35
34
|
return false;
|
|
@@ -38,11 +37,6 @@ const updateMuniIssueStatus = async (id, clientId, status) => {
|
|
|
38
37
|
return matchedCount > 0;
|
|
39
38
|
};
|
|
40
39
|
exports.updateMuniIssueStatus = updateMuniIssueStatus;
|
|
41
|
-
/**
|
|
42
|
-
* Saves the TalkPilot response, or replaces an existing one (text and images).
|
|
43
|
-
* Keeps the original `response.createdAt` and sets `response.updatedAt` on an edit.
|
|
44
|
-
* Returns false if none matched.
|
|
45
|
-
*/
|
|
46
40
|
const setMuniIssueResponse = async (id, clientId, { status, text, imageUrls }) => {
|
|
47
41
|
if (!mongodb_1.ObjectId.isValid(id))
|
|
48
42
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"muniIssues.setters.js","sourceRoot":"","sources":["../../../src/municipal/muniIssues/muniIssues.setters.ts"],"names":[],"mappings":";;;AAAA,qCAA2C;AAO3C,6DAA+D;AAC/D,yDAAoE;AAEpE,iHAAiH;AAC1G,MAAM,eAAe,GAAG,KAAK,EAClC,SAA+B,EAC/B,EAAY,EACO,EAAE;IACrB,MAAM,IAAA,iDAA8B,GAAE,CAAC;IAEvC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,KAAK,GAAc;QACvB,GAAG,EAAE,EAAE;QACP,GAAG,SAAS;QACZ,IAAI,EAAE;YACJ,GAAG,SAAS,CAAC,IAAI;YACjB,UAAU,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU,IAAI,SAAS;SACnD;QACD,MAAM,EAAE,WAAW;QACnB,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;KACf,CAAC;IACF,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,IAAA,4CAAuB,GAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACxE,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AApBW,QAAA,eAAe,mBAoB1B;AAEF,yFAAyF;AACzF,MAAM,kBAAkB,GAAG,CAAC,EAAU,EAAE,QAAgB,EAAqB,EAAE,CAAC,CAAC;IAC/E,GAAG,EAAE,IAAI,kBAAQ,CAAC,EAAE,CAAC;IACrB,QAAQ;IACR,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;CAC1B,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"muniIssues.setters.js","sourceRoot":"","sources":["../../../src/municipal/muniIssues/muniIssues.setters.ts"],"names":[],"mappings":";;;AAAA,qCAA2C;AAO3C,6DAA+D;AAC/D,yDAAoE;AAEpE,iHAAiH;AAC1G,MAAM,eAAe,GAAG,KAAK,EAClC,SAA+B,EAC/B,EAAY,EACO,EAAE;IACrB,MAAM,IAAA,iDAA8B,GAAE,CAAC;IAEvC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,KAAK,GAAc;QACvB,GAAG,EAAE,EAAE;QACP,GAAG,SAAS;QACZ,IAAI,EAAE;YACJ,GAAG,SAAS,CAAC,IAAI;YACjB,UAAU,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU,IAAI,SAAS;SACnD;QACD,MAAM,EAAE,WAAW;QACnB,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;KACf,CAAC;IACF,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,IAAA,4CAAuB,GAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACxE,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AApBW,QAAA,eAAe,mBAoB1B;AAEF,yFAAyF;AACzF,MAAM,kBAAkB,GAAG,CAAC,EAAU,EAAE,QAAgB,EAAqB,EAAE,CAAC,CAAC;IAC/E,GAAG,EAAE,IAAI,kBAAQ,CAAC,EAAE,CAAC;IACrB,QAAQ;IACR,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;CAC1B,CAAC,CAAC;AAEI,MAAM,qBAAqB,GAAG,KAAK,EACxC,EAAU,EACV,QAAgB,EAChB,MAAuB,EACL,EAAE;IACpB,IAAI,CAAC,kBAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,MAAM,IAAA,iDAA8B,GAAE,CAAC;IAEvC,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,IAAA,4CAAuB,GAAE,CAAC,SAAS,CAChE,kBAAkB,CAAC,EAAE,EAAE,QAAQ,CAAC,EAChC,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,EAAE,CAC5C,CAAC;IACF,OAAO,YAAY,GAAG,CAAC,CAAC;AAC1B,CAAC,CAAC;AAbW,QAAA,qBAAqB,yBAahC;AAEK,MAAM,oBAAoB,GAAG,KAAK,EACvC,EAAU,EACV,QAAgB,EAChB,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAA6B,EACpC,EAAE;IACpB,IAAI,CAAC,kBAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,MAAM,IAAA,iDAA8B,GAAE,CAAC;IAEvC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,gFAAgF;IAChF,0EAA0E;IAC1E,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,IAAA,4CAAuB,GAAE,CAAC,SAAS,CAChE,kBAAkB,CAAC,EAAE,EAAE,QAAQ,CAAC,EAChC;QACE;YACE,IAAI,EAAE;gBACJ,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;gBAC5B,SAAS,EAAE,GAAG;gBACd,QAAQ,EAAE;oBACR,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;oBACxB,SAAS,EAAE,EAAE,QAAQ,EAAE,SAAS,IAAI,EAAE,EAAE;oBACxC,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,qBAAqB,EAAE,GAAG,CAAC,EAAE;oBACpD,SAAS,EAAE;wBACT,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,qBAAqB,EAAE,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE,UAAU,CAAC;qBACtE;iBACF;aACF;SACF;KACF,CACF,CAAC;IACF,OAAO,YAAY,GAAG,CAAC,CAAC;AAC1B,CAAC,CAAC;AA/BW,QAAA,oBAAoB,wBA+B/B"}
|
|
@@ -3,7 +3,6 @@ import { CityName } from "../utils/types";
|
|
|
3
3
|
import { MUNI_ISSUE_STATUSES, MUNI_ISSUE_SYNC_STATUSES } from "./muniIssues.constants";
|
|
4
4
|
export type MuniIssueSyncStatus = (typeof MUNI_ISSUE_SYNC_STATUSES)[number];
|
|
5
5
|
export type MuniIssueStatus = (typeof MUNI_ISSUE_STATUSES)[number];
|
|
6
|
-
/** The TalkPilot response. Editable: `createdAt` is when it was first sent, `updatedAt` the last edit. */
|
|
7
6
|
export type MuniIssueResponse = {
|
|
8
7
|
text: string;
|
|
9
8
|
imageUrls?: string[];
|
|
@@ -43,7 +42,6 @@ export type SetMuniIssueResponseInput = {
|
|
|
43
42
|
text: string;
|
|
44
43
|
imageUrls?: string[];
|
|
45
44
|
};
|
|
46
|
-
/** `answered` filters by whether a TalkPilot response exists; omit it for all issues. */
|
|
47
45
|
export type FindMuniIssuesOptions = {
|
|
48
46
|
answered?: boolean;
|
|
49
47
|
skip?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"muniIssues.types.d.ts","sourceRoot":"","sources":["../../../src/municipal/muniIssues/muniIssues.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5E,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnE,
|
|
1
|
+
{"version":3,"file":"muniIssues.types.d.ts","sourceRoot":"","sources":["../../../src/municipal/muniIssues/muniIssues.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5E,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,mBAAmB,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,GAAG,EAAE,QAAQ,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,gBAAgB,CAAC;IAC/B,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,EAAE,IAAI,CAAC;IAGhB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB,CAAC;AAKF,MAAM,MAAM,oBAAoB,GAAG,IAAI,CACrC,SAAS,EACT,KAAK,GAAG,WAAW,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,CACnE,GAAG;IACF,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,mBAAmB,CAAA;KAAE,CAAC;CACzD,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,MAAM,EAAE,eAAe,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"muniIssues.utils.d.ts","sourceRoot":"","sources":["../../../src/municipal/muniIssues/muniIssues.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,eAAO,MAAM,2BAA2B,GACtC,WAAW,iBAAiB,KAC3B,OACgE,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.hasMuniIssueResponseContent = void 0;
|
|
4
|
+
const hasMuniIssueResponseContent = (response) => Boolean(response?.text) || (response?.imageUrls?.length ?? 0) > 0;
|
|
5
|
+
exports.hasMuniIssueResponseContent = hasMuniIssueResponseContent;
|
|
6
|
+
//# sourceMappingURL=muniIssues.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"muniIssues.utils.js","sourceRoot":"","sources":["../../../src/municipal/muniIssues/muniIssues.utils.ts"],"names":[],"mappings":";;;AAEO,MAAM,2BAA2B,GAAG,CACzC,QAA4B,EACnB,EAAE,CACX,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AAHvD,QAAA,2BAA2B,+BAG4B"}
|
|
@@ -32,4 +32,11 @@ export declare const CallStatusValues: {
|
|
|
32
32
|
readonly Canceled: "canceled";
|
|
33
33
|
};
|
|
34
34
|
export declare const ALL_CALL_STATUSES: ("in-progress" | "answered" | "no-answer" | "completed" | "busy" | "failed" | "canceled" | "initiated" | "ringing")[];
|
|
35
|
+
/** Who ended a connected call: our platform, the AI agent (end flow), the caller, or a human agent. */
|
|
36
|
+
export declare const CallEndedByValues: {
|
|
37
|
+
readonly System: "system";
|
|
38
|
+
readonly Agent: "agent";
|
|
39
|
+
readonly User: "user";
|
|
40
|
+
readonly HumanAgent: "humanAgent";
|
|
41
|
+
};
|
|
35
42
|
//# sourceMappingURL=calls.constants.d.ts.map
|
|
@@ -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,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,sCAAuC,CAAC;AAErE,4EAA4E;AAC5E,eAAO,MAAM,cAAc,mEAMjB,CAAC;AAEX,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;AAE9C,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAC9C,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAEhD,eAAO,MAAM,gBAAgB;;;;;;;;;;CAUnB,CAAC;AAEX,eAAO,MAAM,iBAAiB,uHAAkC,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,4EAA4E;AAC5E,eAAO,MAAM,cAAc,mEAMjB,CAAC;AAEX,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;AAE9C,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAC9C,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAEhD,eAAO,MAAM,gBAAgB;;;;;;;;;;CAUnB,CAAC;AAEX,eAAO,MAAM,iBAAiB,uHAAkC,CAAC;AAEjE,uGAAuG;AACvG,eAAO,MAAM,iBAAiB;;;;;CAKpB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ALL_CALL_STATUSES = exports.CallStatusValues = exports.TOOL_EXECUTIONS_DEFAULT_LIMIT = exports.TOOL_EXECUTIONS_DEFAULT_SKIP = exports.TREND_WEEK_BUCKET_MIN_MONTHS = exports.TREND_MONTH_BUCKET_MIN_MONTHS = exports.STATS_MAX_TIME_MS = exports.HOURS_PER_DAY = exports.FINAL_STATUSES = exports.IN_CALL_STATUSES = exports.CONFERENCE_ROLE_SUPERVISOR = exports.CONFERENCE_ROLE_CUSTOMER = void 0;
|
|
3
|
+
exports.CallEndedByValues = exports.ALL_CALL_STATUSES = exports.CallStatusValues = exports.TOOL_EXECUTIONS_DEFAULT_LIMIT = exports.TOOL_EXECUTIONS_DEFAULT_SKIP = exports.TREND_WEEK_BUCKET_MIN_MONTHS = exports.TREND_MONTH_BUCKET_MIN_MONTHS = exports.STATS_MAX_TIME_MS = exports.HOURS_PER_DAY = exports.FINAL_STATUSES = 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. */
|
|
@@ -41,4 +41,11 @@ exports.CallStatusValues = {
|
|
|
41
41
|
Canceled: "canceled",
|
|
42
42
|
};
|
|
43
43
|
exports.ALL_CALL_STATUSES = Object.values(exports.CallStatusValues);
|
|
44
|
+
/** Who ended a connected call: our platform, the AI agent (end flow), the caller, or a human agent. */
|
|
45
|
+
exports.CallEndedByValues = {
|
|
46
|
+
System: "system",
|
|
47
|
+
Agent: "agent",
|
|
48
|
+
User: "user",
|
|
49
|
+
HumanAgent: "humanAgent",
|
|
50
|
+
};
|
|
44
51
|
//# sourceMappingURL=calls.constants.js.map
|
|
@@ -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,wEAAwE;AAC3D,QAAA,gBAAgB,GAAG,CAAC,aAAa,EAAE,UAAU,CAAU,CAAC;AAErE,4EAA4E;AAC/D,QAAA,cAAc,GAAG;IAC5B,WAAW;IACX,WAAW;IACX,MAAM;IACN,QAAQ;IACR,UAAU;CACF,CAAC;AAEX,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;AAEjC,QAAA,4BAA4B,GAAG,CAAC,CAAC;AACjC,QAAA,6BAA6B,GAAG,EAAE,CAAC;AAEnC,QAAA,gBAAgB,GAAG;IAC9B,SAAS,EAAE,WAAW;IACtB,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,aAAa;IACzB,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;IACtB,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,WAAW;IACrB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;CACZ,CAAC;AAEE,QAAA,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,wBAAgB,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,4EAA4E;AAC/D,QAAA,cAAc,GAAG;IAC5B,WAAW;IACX,WAAW;IACX,MAAM;IACN,QAAQ;IACR,UAAU;CACF,CAAC;AAEX,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;AAEjC,QAAA,4BAA4B,GAAG,CAAC,CAAC;AACjC,QAAA,6BAA6B,GAAG,EAAE,CAAC;AAEnC,QAAA,gBAAgB,GAAG;IAC9B,SAAS,EAAE,WAAW;IACtB,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,aAAa;IACzB,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;IACtB,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,WAAW;IACrB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;CACZ,CAAC;AAEE,QAAA,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,wBAAgB,CAAC,CAAC;AAEjE,uGAAuG;AAC1F,QAAA,iBAAiB,GAAG;IAC/B,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE,YAAY;CAChB,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Call, CallDoc, CallQueryOptions, CallUpdateParams } from "../index";
|
|
2
|
-
import type { CountOpts, DateRange, ToolExecution, CallStatus } from "./calls.types";
|
|
2
|
+
import type { CountOpts, DateRange, ToolExecution, CallStatus, CallEndedBy } 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>;
|
|
@@ -13,6 +13,7 @@ export declare const getToolExecutionsByCallSid: (callSid: string, opts?: Pick<C
|
|
|
13
13
|
clientId?: string;
|
|
14
14
|
}) => Promise<ToolExecution[]>;
|
|
15
15
|
export declare const updateCallStatusByCallSid: (callSid: string, status: CallStatus) => Promise<CallDoc | null>;
|
|
16
|
+
export declare const setCallEndedBy: (callSid: string, endedBy: CallEndedBy) => Promise<boolean>;
|
|
16
17
|
export declare const pushToolExecution: (callSid: string, execution: ToolExecution) => Promise<void>;
|
|
17
18
|
export declare const getCallsByClientAndDateRange: (clientId: string, startDate: Date, endDate: Date) => Promise<import("mongodb").WithId<Call>[]>;
|
|
18
19
|
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,
|
|
1
|
+
{"version":3,"file":"calls.getters.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/calls/calls.getters.ts"],"names":[],"mappings":"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"}
|
|
@@ -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.updateCallStatusByCallSid = exports.getToolExecutionsByCallSid = 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.setCallEndedBy = exports.updateCallStatusByCallSid = exports.getToolExecutionsByCallSid = 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;
|
|
@@ -95,6 +95,11 @@ const getToolExecutionsByCallSid = async (callSid, opts) => {
|
|
|
95
95
|
exports.getToolExecutionsByCallSid = getToolExecutionsByCallSid;
|
|
96
96
|
const updateCallStatusByCallSid = async (callSid, status) => (0, exports.getCallsCollection)().findOneAndUpdate({ callSid }, { $set: { status, updatedAt: new Date() } }, { returnDocument: "after" });
|
|
97
97
|
exports.updateCallStatusByCallSid = updateCallStatusByCallSid;
|
|
98
|
+
const setCallEndedBy = async (callSid, endedBy) => {
|
|
99
|
+
const result = await (0, exports.getCallsCollection)().updateOne({ callSid, endedBy: { $exists: false } }, { $set: { endedBy, updatedAt: new Date() } });
|
|
100
|
+
return result.modifiedCount > 0;
|
|
101
|
+
};
|
|
102
|
+
exports.setCallEndedBy = setCallEndedBy;
|
|
98
103
|
const pushToolExecution = async (callSid, execution) => {
|
|
99
104
|
await (0, exports.getCallsCollection)().updateOne({ callSid }, { $push: { toolExecutions: execution } });
|
|
100
105
|
};
|
|
@@ -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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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { ObjectId, Sort, WithId } from "mongodb";
|
|
2
2
|
import { TranscriptionSegment } from "../results";
|
|
3
3
|
import { LeadProperty } from "../leads";
|
|
4
|
-
import { CallStatusValues, CONFERENCE_ROLE_CUSTOMER, CONFERENCE_ROLE_SUPERVISOR } from "./calls.constants";
|
|
4
|
+
import { CallEndedByValues, CallStatusValues, CONFERENCE_ROLE_CUSTOMER, CONFERENCE_ROLE_SUPERVISOR } from "./calls.constants";
|
|
5
5
|
export type ConferenceRole = typeof CONFERENCE_ROLE_CUSTOMER | typeof CONFERENCE_ROLE_SUPERVISOR | null;
|
|
6
6
|
export type CallStatus = (typeof CallStatusValues)[keyof typeof CallStatusValues];
|
|
7
|
+
export type CallEndedBy = (typeof CallEndedByValues)[keyof typeof CallEndedByValues];
|
|
7
8
|
/**
|
|
8
9
|
* Represents the call usage information with details about charging segments and quota impact.
|
|
9
10
|
*/
|
|
@@ -37,6 +38,7 @@ export type Call = {
|
|
|
37
38
|
isAnsweredByAnsweringMachine?: boolean;
|
|
38
39
|
agentHungUp?: boolean;
|
|
39
40
|
endReason?: string;
|
|
41
|
+
endedBy?: CallEndedBy;
|
|
40
42
|
conferenceName?: string | null;
|
|
41
43
|
conferenceSid?: string | null;
|
|
42
44
|
conferenceParticipantSid?: string | null;
|
|
@@ -115,7 +117,7 @@ export type CallsFilterParams = {
|
|
|
115
117
|
search?: string;
|
|
116
118
|
};
|
|
117
119
|
export type ImmutableCallFields = "customerPhoneNumber" | "agentPhoneNumber" | "isIncomingCall" | "isOutgoingCall" | "sessionId" | "callSid" | "flowId" | "clientId" | "runId" | "resultId" | "env" | "createdAt";
|
|
118
|
-
export type CallUpdateParams = Partial<Omit<Call, ImmutableCallFields>>;
|
|
120
|
+
export type CallUpdateParams = Partial<Omit<Call, ImmutableCallFields | "endedBy">>;
|
|
119
121
|
export type CallDoc = WithId<Call>;
|
|
120
122
|
/** @deprecated use DashboardHeatmapMetric instead */
|
|
121
123
|
export type CallsByHour = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calls.types.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/calls/calls.types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"calls.types.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/calls/calls.types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -52,6 +52,27 @@ describe("muniIssues getters (complaint tracking)", () => {
|
|
|
52
52
|
).toBe(answered);
|
|
53
53
|
expect(await findMuniIssuesByClient(CLIENT, { skip: 1, limit: 1 })).toHaveLength(1);
|
|
54
54
|
});
|
|
55
|
+
|
|
56
|
+
it("should treat a response with only images as answered and a cleared response as waiting", async () => {
|
|
57
|
+
const imagesOnly = await createIssue();
|
|
58
|
+
const cleared = await createIssue();
|
|
59
|
+
const textOnly = await createIssue();
|
|
60
|
+
await setMuniIssueResponse(imagesOnly, CLIENT, {
|
|
61
|
+
status: "resolved",
|
|
62
|
+
text: "",
|
|
63
|
+
imageUrls: ["https://example.com/a.png"],
|
|
64
|
+
});
|
|
65
|
+
await setMuniIssueResponse(cleared, CLIENT, { status: "resolved", text: "Done" });
|
|
66
|
+
await setMuniIssueResponse(cleared, CLIENT, { status: "resolved", text: "", imageUrls: [] });
|
|
67
|
+
await setMuniIssueResponse(textOnly, CLIENT, { status: "resolved", text: "Done" });
|
|
68
|
+
|
|
69
|
+
const answered = await findMuniIssuesByClient(CLIENT, { answered: true });
|
|
70
|
+
const waiting = await findMuniIssuesByClient(CLIENT, { answered: false });
|
|
71
|
+
|
|
72
|
+
expect(answered.map((i) => i._id.toString()).sort()).toEqual([imagesOnly, textOnly].sort());
|
|
73
|
+
expect(waiting.map((i) => i._id.toString())).toEqual([cleared]);
|
|
74
|
+
expect(await countMuniIssuesByClient(CLIENT, { answered: false })).toBe(1);
|
|
75
|
+
});
|
|
55
76
|
});
|
|
56
77
|
|
|
57
78
|
describe("getMuniIssueByIdForClient", () => {
|
|
@@ -173,6 +173,26 @@ describe("muniIssues setters", () => {
|
|
|
173
173
|
expect(issue?.response?.updatedAt).toBeInstanceOf(Date);
|
|
174
174
|
});
|
|
175
175
|
|
|
176
|
+
it("should save images without text, and keep a cleared response with its first-sent date", async () => {
|
|
177
|
+
const input = createMuniIssueInput();
|
|
178
|
+
const id = (await createMuniIssue(input, generateMuniIssueId())).toString();
|
|
179
|
+
|
|
180
|
+
await setMuniIssueResponse(id, input.clientId, {
|
|
181
|
+
status: "resolved",
|
|
182
|
+
text: "",
|
|
183
|
+
imageUrls: ["https://example.com/a.png"],
|
|
184
|
+
});
|
|
185
|
+
const issueWithImage = await getMuniIssueById(id);
|
|
186
|
+
await setMuniIssueResponse(id, input.clientId, { status: "resolved", text: "", imageUrls: [] });
|
|
187
|
+
|
|
188
|
+
const response = (await getMuniIssueById(id))?.response;
|
|
189
|
+
expect(issueWithImage?.response?.imageUrls).toEqual(["https://example.com/a.png"]);
|
|
190
|
+
expect(response?.text).toBe("");
|
|
191
|
+
expect(response?.imageUrls).toEqual([]);
|
|
192
|
+
expect(response?.createdAt).toEqual(issueWithImage?.response?.createdAt);
|
|
193
|
+
expect(response?.updatedAt).toBeInstanceOf(Date);
|
|
194
|
+
});
|
|
195
|
+
|
|
176
196
|
it("should store text starting with $ as plain text", async () => {
|
|
177
197
|
const input = createMuniIssueInput();
|
|
178
198
|
const id = (await createMuniIssue(input, generateMuniIssueId())).toString();
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { hasMuniIssueResponseContent } from "../muniIssues.utils";
|
|
2
|
+
|
|
3
|
+
describe("hasMuniIssueResponseContent", () => {
|
|
4
|
+
const base = { createdAt: new Date() };
|
|
5
|
+
|
|
6
|
+
it("should be true for text, images, or both", () => {
|
|
7
|
+
expect(hasMuniIssueResponseContent({ ...base, text: "Done" })).toBe(true);
|
|
8
|
+
expect(hasMuniIssueResponseContent({ ...base, text: "", imageUrls: ["a"] })).toBe(true);
|
|
9
|
+
expect(hasMuniIssueResponseContent({ ...base, text: "Done", imageUrls: ["a"] })).toBe(true);
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
it("should be false for no response or an empty one", () => {
|
|
13
|
+
expect(hasMuniIssueResponseContent(undefined)).toBe(false);
|
|
14
|
+
expect(hasMuniIssueResponseContent({ ...base, text: "" })).toBe(false);
|
|
15
|
+
expect(hasMuniIssueResponseContent({ ...base, text: "", imageUrls: [] })).toBe(false);
|
|
16
|
+
});
|
|
17
|
+
});
|
|
@@ -4,7 +4,6 @@ export const MUNI_ISSUES_COLLECTION = "muniIssues";
|
|
|
4
4
|
/** Sync state of the issue's Jira ticket at write time. */
|
|
5
5
|
export const MUNI_ISSUE_SYNC_STATUSES = ["created", "failed"] as const;
|
|
6
6
|
|
|
7
|
-
/** Customer-facing complaint status, set manually by the TalkPilot team. */
|
|
8
7
|
export const MUNI_ISSUE_STATUSES = [
|
|
9
8
|
"in_review",
|
|
10
9
|
"in_progress",
|
|
@@ -12,7 +11,6 @@ export const MUNI_ISSUE_STATUSES = [
|
|
|
12
11
|
"no_issue_found",
|
|
13
12
|
] as const;
|
|
14
13
|
|
|
15
|
-
/** Max images on a single TalkPilot response. */
|
|
16
14
|
export const MUNI_ISSUE_MAX_RESPONSE_IMAGES = 5;
|
|
17
15
|
|
|
18
16
|
/** Max length for the long free-text fields — well above the ~2000-char target. */
|
|
@@ -23,6 +23,12 @@ export const getMuniIssueByJiraKey = async (
|
|
|
23
23
|
return getMuniIssuesCollection().findOne({ "jira.key": jiraKey });
|
|
24
24
|
};
|
|
25
25
|
|
|
26
|
+
// Answered = the response has text or at least one image; a cleared response object stays in the document.
|
|
27
|
+
const responseHasContent: Filter<MuniIssue>[] = [
|
|
28
|
+
{ "response.text": { $nin: ["", null] } },
|
|
29
|
+
{ "response.imageUrls.0": { $exists: true } },
|
|
30
|
+
];
|
|
31
|
+
|
|
26
32
|
// Tracked issues of one client. Issues without a status predate complaint tracking and are excluded.
|
|
27
33
|
const clientIssuesFilter = (
|
|
28
34
|
clientId: string,
|
|
@@ -30,10 +36,10 @@ const clientIssuesFilter = (
|
|
|
30
36
|
): Filter<MuniIssue> => ({
|
|
31
37
|
clientId,
|
|
32
38
|
status: { $exists: true },
|
|
33
|
-
...(answered
|
|
39
|
+
...(answered === true && { $or: responseHasContent }),
|
|
40
|
+
...(answered === false && { $nor: responseHasContent }),
|
|
34
41
|
});
|
|
35
42
|
|
|
36
|
-
/** A client's tracked issues, newest first. `limit` 0 means no limit (Mongo). */
|
|
37
43
|
export const findMuniIssuesByClient = async (
|
|
38
44
|
clientId: string,
|
|
39
45
|
{ answered, skip = 0, limit = 0 }: FindMuniIssuesOptions = {},
|
|
@@ -55,7 +61,6 @@ export const countMuniIssuesByClient = async (
|
|
|
55
61
|
);
|
|
56
62
|
};
|
|
57
63
|
|
|
58
|
-
/** One tracked issue, only if it belongs to the client. */
|
|
59
64
|
export const getMuniIssueByIdForClient = async (
|
|
60
65
|
id: string,
|
|
61
66
|
clientId: string,
|
|
@@ -79,7 +79,6 @@ export const muniIssuesJsonSchema: Document = {
|
|
|
79
79
|
export const muniIssuesIndexes: IndexDescription[] = [
|
|
80
80
|
{ key: { callSid: 1 }, name: "callSid_1" },
|
|
81
81
|
{ key: { createdAt: -1 }, name: "createdAt_-1" },
|
|
82
|
-
// Complaint list: one municipality's issues, newest first.
|
|
83
82
|
{ key: { clientId: 1, createdAt: -1 }, name: "clientId_1_createdAt_-1" },
|
|
84
83
|
// Unique: one stored document per Jira ticket, guarding against duplicate writes.
|
|
85
84
|
{ key: { "jira.key": 1 }, name: "jira_key_unique", unique: true },
|
|
@@ -38,7 +38,6 @@ const trackedIssueFilter = (id: string, clientId: string): Filter<MuniIssue> =>
|
|
|
38
38
|
status: { $exists: true },
|
|
39
39
|
});
|
|
40
40
|
|
|
41
|
-
/** Changes the status of an issue, answered or not. Returns false if none matched. */
|
|
42
41
|
export const updateMuniIssueStatus = async (
|
|
43
42
|
id: string,
|
|
44
43
|
clientId: string,
|
|
@@ -54,11 +53,6 @@ export const updateMuniIssueStatus = async (
|
|
|
54
53
|
return matchedCount > 0;
|
|
55
54
|
};
|
|
56
55
|
|
|
57
|
-
/**
|
|
58
|
-
* Saves the TalkPilot response, or replaces an existing one (text and images).
|
|
59
|
-
* Keeps the original `response.createdAt` and sets `response.updatedAt` on an edit.
|
|
60
|
-
* Returns false if none matched.
|
|
61
|
-
*/
|
|
62
56
|
export const setMuniIssueResponse = async (
|
|
63
57
|
id: string,
|
|
64
58
|
clientId: string,
|
|
@@ -10,7 +10,6 @@ export type MuniIssueSyncStatus = (typeof MUNI_ISSUE_SYNC_STATUSES)[number];
|
|
|
10
10
|
|
|
11
11
|
export type MuniIssueStatus = (typeof MUNI_ISSUE_STATUSES)[number];
|
|
12
12
|
|
|
13
|
-
/** The TalkPilot response. Editable: `createdAt` is when it was first sent, `updatedAt` the last edit. */
|
|
14
13
|
export type MuniIssueResponse = {
|
|
15
14
|
text: string;
|
|
16
15
|
imageUrls?: string[];
|
|
@@ -61,7 +60,6 @@ export type SetMuniIssueResponseInput = {
|
|
|
61
60
|
imageUrls?: string[];
|
|
62
61
|
};
|
|
63
62
|
|
|
64
|
-
/** `answered` filters by whether a TalkPilot response exists; omit it for all issues. */
|
|
65
63
|
export type FindMuniIssuesOptions = {
|
|
66
64
|
answered?: boolean;
|
|
67
65
|
skip?: number;
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
pushToolExecution,
|
|
12
12
|
getToolExecutionsByCallSid,
|
|
13
13
|
updateCallStatusByCallSid,
|
|
14
|
+
setCallEndedBy,
|
|
14
15
|
} from "../calls.getters";
|
|
15
16
|
import type { ToolExecution, ToolExecutionStep } from "../calls.types";
|
|
16
17
|
import { ObjectId } from "mongodb";
|
|
@@ -74,6 +75,53 @@ describe("db.calls", () => {
|
|
|
74
75
|
});
|
|
75
76
|
});
|
|
76
77
|
|
|
78
|
+
describe("setCallEndedBy()", () => {
|
|
79
|
+
it("should set endedBy when it is not set yet", async () => {
|
|
80
|
+
const call = createOutGoingCallDoc();
|
|
81
|
+
await createCallDoc(call);
|
|
82
|
+
|
|
83
|
+
const written = await setCallEndedBy(call.callSid, "user");
|
|
84
|
+
|
|
85
|
+
expect(written).toBe(true);
|
|
86
|
+
expect(await getCallByCallSid(call.callSid)).toMatchObject({
|
|
87
|
+
endedBy: "user",
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
it("should keep the first value when called again", async () => {
|
|
92
|
+
const call = createOutGoingCallDoc();
|
|
93
|
+
await createCallDoc(call);
|
|
94
|
+
|
|
95
|
+
await setCallEndedBy(call.callSid, "user");
|
|
96
|
+
const written = await setCallEndedBy(call.callSid, "agent");
|
|
97
|
+
|
|
98
|
+
expect(written).toBe(false);
|
|
99
|
+
expect(await getCallByCallSid(call.callSid)).toMatchObject({
|
|
100
|
+
endedBy: "user",
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
it("should let only one of two concurrent writers win", async () => {
|
|
105
|
+
const call = createOutGoingCallDoc();
|
|
106
|
+
await createCallDoc(call);
|
|
107
|
+
|
|
108
|
+
const results = await Promise.all([
|
|
109
|
+
setCallEndedBy(call.callSid, "user"),
|
|
110
|
+
setCallEndedBy(call.callSid, "humanAgent"),
|
|
111
|
+
]);
|
|
112
|
+
|
|
113
|
+
expect(results.filter(Boolean)).toHaveLength(1);
|
|
114
|
+
const stored = await getCallByCallSid(call.callSid);
|
|
115
|
+
expect(stored?.endedBy).toBe(results[0] ? "user" : "humanAgent");
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
it("should return false when the call does not exist", async () => {
|
|
119
|
+
await expect(setCallEndedBy("nonexistent-sid", "system")).resolves.toBe(
|
|
120
|
+
false,
|
|
121
|
+
);
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
|
|
77
125
|
describe("findCallsByQuery()", () => {
|
|
78
126
|
it("should find calls by status with limit and sort", async () => {
|
|
79
127
|
const clientId = "client123";
|
|
@@ -47,3 +47,11 @@ export const CallStatusValues = {
|
|
|
47
47
|
} as const;
|
|
48
48
|
|
|
49
49
|
export const ALL_CALL_STATUSES = Object.values(CallStatusValues);
|
|
50
|
+
|
|
51
|
+
/** Who ended a connected call: our platform, the AI agent (end flow), the caller, or a human agent. */
|
|
52
|
+
export const CallEndedByValues = {
|
|
53
|
+
System: "system",
|
|
54
|
+
Agent: "agent",
|
|
55
|
+
User: "user",
|
|
56
|
+
HumanAgent: "humanAgent",
|
|
57
|
+
} as const;
|
|
@@ -5,7 +5,13 @@ import {
|
|
|
5
5
|
CallUpdateParams,
|
|
6
6
|
getDb,
|
|
7
7
|
} from "../index";
|
|
8
|
-
import type {
|
|
8
|
+
import type {
|
|
9
|
+
CountOpts,
|
|
10
|
+
DateRange,
|
|
11
|
+
ToolExecution,
|
|
12
|
+
CallStatus,
|
|
13
|
+
CallEndedBy,
|
|
14
|
+
} from "./calls.types";
|
|
9
15
|
import {
|
|
10
16
|
TOOL_EXECUTIONS_DEFAULT_LIMIT,
|
|
11
17
|
TOOL_EXECUTIONS_DEFAULT_SKIP,
|
|
@@ -89,6 +95,18 @@ export const updateCallStatusByCallSid = async (
|
|
|
89
95
|
{ returnDocument: "after" },
|
|
90
96
|
);
|
|
91
97
|
|
|
98
|
+
|
|
99
|
+
export const setCallEndedBy = async (
|
|
100
|
+
callSid: string,
|
|
101
|
+
endedBy: CallEndedBy,
|
|
102
|
+
): Promise<boolean> => {
|
|
103
|
+
const result = await getCallsCollection().updateOne(
|
|
104
|
+
{ callSid, endedBy: { $exists: false } },
|
|
105
|
+
{ $set: { endedBy, updatedAt: new Date() } },
|
|
106
|
+
);
|
|
107
|
+
return result.modifiedCount > 0;
|
|
108
|
+
};
|
|
109
|
+
|
|
92
110
|
export const pushToolExecution = async (
|
|
93
111
|
callSid: string,
|
|
94
112
|
execution: ToolExecution,
|
|
@@ -3,6 +3,7 @@ import { TranscriptionSegment } from "../results";
|
|
|
3
3
|
import { LeadProperty } from "../leads";
|
|
4
4
|
|
|
5
5
|
import {
|
|
6
|
+
CallEndedByValues,
|
|
6
7
|
CallStatusValues,
|
|
7
8
|
CONFERENCE_ROLE_CUSTOMER,
|
|
8
9
|
CONFERENCE_ROLE_SUPERVISOR,
|
|
@@ -15,6 +16,8 @@ export type ConferenceRole =
|
|
|
15
16
|
|
|
16
17
|
export type CallStatus = (typeof CallStatusValues)[keyof typeof CallStatusValues];
|
|
17
18
|
|
|
19
|
+
export type CallEndedBy = (typeof CallEndedByValues)[keyof typeof CallEndedByValues];
|
|
20
|
+
|
|
18
21
|
/**
|
|
19
22
|
* Represents the call usage information with details about charging segments and quota impact.
|
|
20
23
|
*/
|
|
@@ -49,6 +52,7 @@ export type Call = {
|
|
|
49
52
|
isAnsweredByAnsweringMachine?: boolean;
|
|
50
53
|
agentHungUp?: boolean;
|
|
51
54
|
endReason?: string;
|
|
55
|
+
endedBy?: CallEndedBy;
|
|
52
56
|
conferenceName?: string | null;
|
|
53
57
|
conferenceSid?: string | null;
|
|
54
58
|
conferenceParticipantSid?: string | null;
|
|
@@ -146,7 +150,7 @@ export type ImmutableCallFields =
|
|
|
146
150
|
| "env"
|
|
147
151
|
| "createdAt";
|
|
148
152
|
|
|
149
|
-
export type CallUpdateParams = Partial<Omit<Call, ImmutableCallFields>>;
|
|
153
|
+
export type CallUpdateParams = Partial<Omit<Call, ImmutableCallFields | "endedBy">>;
|
|
150
154
|
|
|
151
155
|
export type CallDoc = WithId<Call>;
|
|
152
156
|
|