@talkpilot/core-db 1.3.60 → 1.3.62

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 CHANGED
@@ -178,7 +178,9 @@ Refer to `DEVELOPMENT.md` for the full walkthrough, token instructions, and fact
178
178
  | 1.3.47 | Added optional `accountOwnerEmail` field to `WebsiteTalkProduct` (CP-1715): the recipient for the end-of-call summary email, set once from the client's login email and editable in Settings. |
179
179
  | 1.3.48 | Fixed `getScanPages` search (CP-1726): user search input was passed unescaped into MongoDB's `$regex`, so a URL/title containing regex-special characters (e.g. `?`) failed to match even when the document existed. Added `escapeRegex()` and applied it before building the `url`/`title` `$regex` filter. No API changes. |
180
180
  | 1.3.49 | Internal tools configuration on flows (CP-1723): `Flow.internalTools` keyed by tool name (`enabled`, optional `maxCalls`, per-parameter `description`/`value` overrides) with matching `$jsonSchema` validator, plus `createFlow` / `updateFlowById` mutators and the `FlowUpdateParams` type so consumers stop writing to the `flows` collection directly. |
181
- | 1.3.58 | Pause/Resume support for WebsiteTalk scans (CP-1752): `PAUSED` and `CANCELED` added to `SCAN_STATUSES` (`PAUSED` deliberately excluded from `FINISHED_SCAN_STATUSES` — pausing isn't done, `CANCELED` is). Added `Scan.pausedAt`, tracked across pause/resume so elapsed-time display can freeze correctly instead of counting the paused duration. |
181
+ | 1.3.57 | Phone-number bind getters: list by client, exclusive flow assign, unbind, and `flow_id` match for ObjectId or leftover string. `getClientByClientId`. |
182
+ | 1.3.61 | Optional `activeFlowId` on `WebsiteTalkProduct` (CP-1849). WebsiteTalk updates this flow instead of the flow on a phone number. |
183
+ | 1.3.62 | Pause/Resume support for WebsiteTalk scans (CP-1752): `PAUSED` and `CANCELED` added to `SCAN_STATUSES` (`PAUSED` deliberately excluded from `FINISHED_SCAN_STATUSES` — pausing isn't done, `CANCELED` is). Added `Scan.pausedAt`, tracked across pause/resume so elapsed-time display can freeze correctly instead of counting the paused duration. |
182
184
 
183
185
  ### 1.1.9
184
186
 
@@ -767,6 +769,40 @@ No — purely additive.
767
769
 
768
770
  No API changes. **WTIS** (the only current consumer of `getScanPages`) should upgrade to 1.3.48 or later to pick up the fix.
769
771
 
772
+ ### 1.3.57 — Phone-number bind getters
773
+
774
+ TalkPilot can bind any owned number to a flow without querying Mongo in the service layer. `flow_id` is matched as ObjectId or as a leftover string.
775
+
776
+ **Added**
777
+
778
+ | Export | Purpose |
779
+ | --- | --- |
780
+ | `getClientByClientId(clientId)` | Fetch a client by `clientId`. |
781
+ | `findPhoneNumbersByClientId(clientId)` | All `phone_numbers` for a client. |
782
+ | `getOwnedPhoneNumber(clientId, phoneNumber)` | One number that belongs to the client, or `null`. |
783
+ | `getPhoneNumberByClientAndFlow(clientId, flowId)` | Number bound to that flow for that client. |
784
+ | `clearPhoneNumberFlow(clientId, phoneNumber)` | Unset `flow_id` on one number. |
785
+ | `assignExclusiveFlow(clientId, phoneNumber, flowId)` | Bind the number and clear the same flow on the client's other numbers. |
786
+ | `unbindFlowFromClientNumbers(clientId, flowId)` | Unset `flow_id` on every number of that client pointing at the flow. |
787
+
788
+ **Do I need to update my app?**
789
+
790
+ No — purely additive. **TalkPilot Server** should upgrade to **1.3.57** for multi-number bind/list.
791
+
792
+ ### 1.3.61 — WebsiteTalk active flow (CP-1849)
793
+
794
+ Optional `activeFlowId` on `WebsiteTalkProduct`. WTIS reads this field when it updates the call script, instead of the flow attached to a phone number.
795
+
796
+ **Added**
797
+
798
+ | Field | Purpose |
799
+ | --- | --- |
800
+ | `WebsiteTalkProduct.activeFlowId` | TalkPilot flow id edited by Update flow. |
801
+
802
+ **Do I need to update my app?**
803
+
804
+ No — the field is optional. **WTIS** should upgrade to **1.3.61** so the call-script update can use it.
805
+
770
806
  ## 🛠 CI/CD & deployment
771
807
 
772
808
  - 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.
@@ -2,4 +2,5 @@ import { Client } from "../index";
2
2
  import { Collection } from "mongodb";
3
3
  export declare const getClientsCollection: () => Collection<Client>;
4
4
  export declare const getClientByAPIKey: (apiKey: string) => Promise<Client | null>;
5
+ export declare const getClientByClientId: (clientId: string) => Promise<Client | null>;
5
6
  //# sourceMappingURL=clients.getters.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"clients.getters.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/clients/clients.getters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,eAAO,MAAM,oBAAoB,QAAO,UAAU,CAAC,MAAM,CAExD,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,MAAM,KACb,OAAO,CAAC,MAAM,GAAG,IAAI,CAMvB,CAAC"}
1
+ {"version":3,"file":"clients.getters.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/clients/clients.getters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,eAAO,MAAM,oBAAoB,QAAO,UAAU,CAAC,MAAM,CAExD,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,MAAM,KACb,OAAO,CAAC,MAAM,GAAG,IAAI,CAMvB,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,UAAU,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAC9B,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getClientByAPIKey = exports.getClientsCollection = void 0;
3
+ exports.getClientByClientId = exports.getClientByAPIKey = exports.getClientsCollection = void 0;
4
4
  const index_1 = require("../index");
5
5
  const getClientsCollection = () => {
6
6
  return (0, index_1.getDb)().collection("clients");
@@ -14,4 +14,6 @@ const getClientByAPIKey = async (apiKey) => {
14
14
  return client ? client : null;
15
15
  };
16
16
  exports.getClientByAPIKey = getClientByAPIKey;
17
+ const getClientByClientId = (clientId) => (0, exports.getClientsCollection)().findOne({ clientId });
18
+ exports.getClientByClientId = getClientByClientId;
17
19
  //# sourceMappingURL=clients.getters.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"clients.getters.js","sourceRoot":"","sources":["../../../src/talkpilot/clients/clients.getters.ts"],"names":[],"mappings":";;;AAAA,oCAAyC;AAGlC,MAAM,oBAAoB,GAAG,GAAuB,EAAE;IAC3D,OAAO,IAAA,aAAK,GAAE,CAAC,UAAU,CAAS,SAAS,CAAC,CAAC;AAC/C,CAAC,CAAC;AAFW,QAAA,oBAAoB,wBAE/B;AAEK,MAAM,iBAAiB,GAAG,KAAK,EACpC,MAAc,EACU,EAAE;IAC1B,MAAM,MAAM,GAAG,MAAM,IAAA,4BAAoB,GAAE,CAAC,OAAO,CAAC;QAClD,MAAM;QACN,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AAChC,CAAC,CAAC;AARW,QAAA,iBAAiB,qBAQ5B"}
1
+ {"version":3,"file":"clients.getters.js","sourceRoot":"","sources":["../../../src/talkpilot/clients/clients.getters.ts"],"names":[],"mappings":";;;AAAA,oCAAyC;AAGlC,MAAM,oBAAoB,GAAG,GAAuB,EAAE;IAC3D,OAAO,IAAA,aAAK,GAAE,CAAC,UAAU,CAAS,SAAS,CAAC,CAAC;AAC/C,CAAC,CAAC;AAFW,QAAA,oBAAoB,wBAE/B;AAEK,MAAM,iBAAiB,GAAG,KAAK,EACpC,MAAc,EACU,EAAE;IAC1B,MAAM,MAAM,GAAG,MAAM,IAAA,4BAAoB,GAAE,CAAC,OAAO,CAAC;QAClD,MAAM;QACN,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AAChC,CAAC,CAAC;AARW,QAAA,iBAAiB,qBAQ5B;AAEK,MAAM,mBAAmB,GAAG,CAAC,QAAgB,EAA0B,EAAE,CAC9E,IAAA,4BAAoB,GAAE,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AADlC,QAAA,mBAAmB,uBACe"}
@@ -52,6 +52,7 @@ export type WebsiteTalkProduct = {
52
52
  activeScanIds?: string[];
53
53
  /** The single scan whose content seeds the phone call's opening description. */
54
54
  primaryScanId?: string;
55
+ activeFlowId?: string;
55
56
  accountOwnerEmail?: string;
56
57
  };
57
58
  /** Product config for the clinics scheduling integration. */
@@ -1 +1 @@
1
- {"version":3,"file":"clientsConfig.types.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/clientsConfig/clientsConfig.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"clientsConfig.types.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/clientsConfig/clientsConfig.types.ts"],"names":[],"mappings":"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"}
@@ -13,4 +13,10 @@ export declare const createPurchasedPhoneNumber: (phoneNumber: string, providerP
13
13
  export declare const findClientByPhoneNumber: (phoneNumber: string) => Promise<Client>;
14
14
  export declare const getPrimaryPhoneFlowId: (clientId: string) => Promise<string | null>;
15
15
  export declare const bindClientPhoneToFlow: (clientId: string, flowId: string) => Promise<void>;
16
+ export declare const findPhoneNumbersByClientId: (clientId: string) => Promise<PhoneNumber[]>;
17
+ export declare const getOwnedPhoneNumber: (clientId: string, phoneNumber: string) => Promise<PhoneNumber | null>;
18
+ export declare const getPhoneNumberByClientAndFlow: (clientId: string, flowId: string) => Promise<PhoneNumber | null>;
19
+ export declare const clearPhoneNumberFlow: (clientId: string, phoneNumber: string) => Promise<void>;
20
+ export declare const assignExclusiveFlow: (clientId: string, phoneNumber: string, flowId: string) => Promise<void>;
21
+ export declare const unbindFlowFromClientNumbers: (clientId: string, flowId: string) => Promise<void>;
16
22
  //# sourceMappingURL=phone_numbers.getter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"phone_numbers.getter.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/phone_numbers/phone_numbers.getter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EACL,MAAM,EAMP,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,wBAAwB,EACxB,WAAW,EACX,mBAAmB,EACnB,6BAA6B,EAC9B,MAAM,uBAAuB,CAAC;AAE/B,eAAO,MAAM,yBAAyB,QAAO,UAAU,CAAC,WAAW,CACjB,CAAC;AAEnD,eAAO,MAAM,yBAAyB,GACpC,aAAa,MAAM,KAClB,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAwBpC,CAAC;AAEF,eAAO,MAAM,2BAA2B,GACtC,UAAU,MAAM,KACf,OAAO,CAAC,MAAM,GAAG,IAAI,CASvB,CAAC;AAEF,eAAO,MAAM,oBAAoB,aAZrB,MAAM,KACf,OAAO,CAAC,MAAM,GAAG,IAAI,CAWuC,CAAC;AAEhE,eAAO,MAAM,kBAAkB,GAC7B,UAAU,MAAM,EAChB,YAAY,OAAO,KAClB,OAAO,CAAC,WAAW,GAAG,IAAI,CAK5B,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,UAAU,MAAM,KACf,OAAO,CAAC,wBAAwB,EAAE,CAepC,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,aAAa,MAAM,EACnB,QAAQ,MAAM,EACd,UAAU,MAAM,KACf,OAAO,CAAC,WAAW,CAerB,CAAC;AAEF,yFAAyF;AACzF,eAAO,MAAM,0BAA0B,GACrC,aAAa,MAAM,EACnB,iBAAiB,6BAA6B,EAC9C,UAAU,MAAM,EAChB,SAAS,MAAM,GAAG,IAAI,KACrB,OAAO,CAAC,WAAW,CA0BrB,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,aAAa,MAAM,KAClB,OAAO,CAAC,MAAM,CAShB,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAGnF,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,UAAU,MAAM,EAChB,QAAQ,MAAM,KACb,OAAO,CAAC,IAAI,CAQd,CAAC"}
1
+ {"version":3,"file":"phone_numbers.getter.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/phone_numbers/phone_numbers.getter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EACL,MAAM,EAMP,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,wBAAwB,EACxB,WAAW,EACX,mBAAmB,EACnB,6BAA6B,EAC9B,MAAM,uBAAuB,CAAC;AAG/B,eAAO,MAAM,yBAAyB,QAAO,UAAU,CAAC,WAAW,CACjB,CAAC;AAEnD,eAAO,MAAM,yBAAyB,GACpC,aAAa,MAAM,KAClB,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAwBpC,CAAC;AAEF,eAAO,MAAM,2BAA2B,GACtC,UAAU,MAAM,KACf,OAAO,CAAC,MAAM,GAAG,IAAI,CASvB,CAAC;AAEF,eAAO,MAAM,oBAAoB,aAZrB,MAAM,KACf,OAAO,CAAC,MAAM,GAAG,IAAI,CAWuC,CAAC;AAEhE,eAAO,MAAM,kBAAkB,GAC7B,UAAU,MAAM,EAChB,YAAY,OAAO,KAClB,OAAO,CAAC,WAAW,GAAG,IAAI,CAK5B,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,UAAU,MAAM,KACf,OAAO,CAAC,wBAAwB,EAAE,CAepC,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,aAAa,MAAM,EACnB,QAAQ,MAAM,EACd,UAAU,MAAM,KACf,OAAO,CAAC,WAAW,CAerB,CAAC;AAEF,yFAAyF;AACzF,eAAO,MAAM,0BAA0B,GACrC,aAAa,MAAM,EACnB,iBAAiB,6BAA6B,EAC9C,UAAU,MAAM,EAChB,SAAS,MAAM,GAAG,IAAI,KACrB,OAAO,CAAC,WAAW,CA0BrB,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,aAAa,MAAM,KAClB,OAAO,CAAC,MAAM,CAShB,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAGnF,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,UAAU,MAAM,EAChB,QAAQ,MAAM,KACb,OAAO,CAAC,IAAI,CAQd,CAAC;AAEF,eAAO,MAAM,0BAA0B,GACrC,UAAU,MAAM,KACf,OAAO,CAAC,WAAW,EAAE,CAC6C,CAAC;AAEtE,eAAO,MAAM,mBAAmB,GAC9B,UAAU,MAAM,EAChB,aAAa,MAAM,KAClB,OAAO,CAAC,WAAW,GAAG,IAAI,CAIzB,CAAC;AAEL,eAAO,MAAM,6BAA6B,GACxC,UAAU,MAAM,EAChB,QAAQ,MAAM,KACb,OAAO,CAAC,WAAW,GAAG,IAAI,CAIzB,CAAC;AAEL,eAAO,MAAM,oBAAoB,GAC/B,UAAU,MAAM,EAChB,aAAa,MAAM,KAClB,OAAO,CAAC,IAAI,CAKd,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,UAAU,MAAM,EAChB,aAAa,MAAM,EACnB,QAAQ,MAAM,KACb,OAAO,CAAC,IAAI,CAcd,CAAC;AAEF,eAAO,MAAM,2BAA2B,GACtC,UAAU,MAAM,EAChB,QAAQ,MAAM,KACb,OAAO,CAAC,IAAI,CAKd,CAAC"}
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.bindClientPhoneToFlow = exports.getPrimaryPhoneFlowId = exports.findClientByPhoneNumber = exports.createPurchasedPhoneNumber = exports.createPhoneNumberEntity = exports.getPhoneNumbersForFlows = exports.getClientPhoneData = exports.getClientPhoneNumber = exports.getClientPrimaryPhoneNumber = exports.getPhoneDataByPhoneNumber = exports.getPhoneNumbersCollection = void 0;
3
+ exports.unbindFlowFromClientNumbers = exports.assignExclusiveFlow = exports.clearPhoneNumberFlow = exports.getPhoneNumberByClientAndFlow = exports.getOwnedPhoneNumber = exports.findPhoneNumbersByClientId = exports.bindClientPhoneToFlow = exports.getPrimaryPhoneFlowId = exports.findClientByPhoneNumber = exports.createPurchasedPhoneNumber = exports.createPhoneNumberEntity = exports.getPhoneNumbersForFlows = exports.getClientPhoneData = exports.getClientPhoneNumber = exports.getClientPrimaryPhoneNumber = exports.getPhoneDataByPhoneNumber = exports.getPhoneNumbersCollection = void 0;
4
4
  const index_1 = require("../index");
5
+ const phone_numbers_utils_1 = require("./phone_numbers.utils");
5
6
  const getPhoneNumbersCollection = () => (0, index_1.getDb)().collection("phone_numbers");
6
7
  exports.getPhoneNumbersCollection = getPhoneNumbersCollection;
7
8
  const getPhoneDataByPhoneNumber = async (phoneNumber) => {
@@ -125,4 +126,34 @@ const bindClientPhoneToFlow = async (clientId, flowId) => {
125
126
  }
126
127
  };
127
128
  exports.bindClientPhoneToFlow = bindClientPhoneToFlow;
129
+ const findPhoneNumbersByClientId = (clientId) => (0, exports.getPhoneNumbersCollection)().find({ client_id: clientId }).toArray();
130
+ exports.findPhoneNumbersByClientId = findPhoneNumbersByClientId;
131
+ const getOwnedPhoneNumber = (clientId, phoneNumber) => (0, exports.getPhoneNumbersCollection)().findOne({
132
+ client_id: clientId,
133
+ phone_number: phoneNumber,
134
+ });
135
+ exports.getOwnedPhoneNumber = getOwnedPhoneNumber;
136
+ const getPhoneNumberByClientAndFlow = (clientId, flowId) => (0, exports.getPhoneNumbersCollection)().findOne({
137
+ client_id: clientId,
138
+ $or: (0, phone_numbers_utils_1.flowIdAsObjectIdOrString)(flowId),
139
+ });
140
+ exports.getPhoneNumberByClientAndFlow = getPhoneNumberByClientAndFlow;
141
+ const clearPhoneNumberFlow = async (clientId, phoneNumber) => {
142
+ await (0, exports.getPhoneNumbersCollection)().updateOne({ client_id: clientId, phone_number: phoneNumber }, { $unset: { flow_id: "" }, $set: { updatedAt: new Date() } });
143
+ };
144
+ exports.clearPhoneNumberFlow = clearPhoneNumberFlow;
145
+ const assignExclusiveFlow = async (clientId, phoneNumber, flowId) => {
146
+ const collection = (0, exports.getPhoneNumbersCollection)();
147
+ await collection.updateMany({
148
+ client_id: clientId,
149
+ phone_number: { $ne: phoneNumber },
150
+ $or: (0, phone_numbers_utils_1.flowIdAsObjectIdOrString)(flowId),
151
+ }, { $unset: { flow_id: "" }, $set: { updatedAt: new Date() } });
152
+ await collection.updateOne({ client_id: clientId, phone_number: phoneNumber }, { $set: { flow_id: new index_1.ObjectId(flowId), updatedAt: new Date() } });
153
+ };
154
+ exports.assignExclusiveFlow = assignExclusiveFlow;
155
+ const unbindFlowFromClientNumbers = async (clientId, flowId) => {
156
+ await (0, exports.getPhoneNumbersCollection)().updateMany({ client_id: clientId, $or: (0, phone_numbers_utils_1.flowIdAsObjectIdOrString)(flowId) }, { $unset: { flow_id: "" }, $set: { updatedAt: new Date() } });
157
+ };
158
+ exports.unbindFlowFromClientNumbers = unbindFlowFromClientNumbers;
128
159
  //# sourceMappingURL=phone_numbers.getter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"phone_numbers.getter.js","sourceRoot":"","sources":["../../../src/talkpilot/phone_numbers/phone_numbers.getter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"phone_numbers.getter.js","sourceRoot":"","sources":["../../../src/talkpilot/phone_numbers/phone_numbers.getter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { ObjectId } from "mongodb";
2
+ /** Older phone_numbers rows stored flow_id as a string. */
3
+ export declare const flowIdAsObjectIdOrString: (flowId: string) => Array<{
4
+ flow_id: ObjectId;
5
+ }>;
6
+ //# sourceMappingURL=phone_numbers.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phone_numbers.utils.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/phone_numbers/phone_numbers.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,2DAA2D;AAC3D,eAAO,MAAM,wBAAwB,GACnC,QAAQ,MAAM,KACb,KAAK,CAAC;IAAE,OAAO,EAAE,QAAQ,CAAA;CAAE,CAG7B,CAAC"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.flowIdAsObjectIdOrString = void 0;
4
+ const mongodb_1 = require("mongodb");
5
+ /** Older phone_numbers rows stored flow_id as a string. */
6
+ const flowIdAsObjectIdOrString = (flowId) => [
7
+ { flow_id: new mongodb_1.ObjectId(flowId) },
8
+ { flow_id: flowId },
9
+ ];
10
+ exports.flowIdAsObjectIdOrString = flowIdAsObjectIdOrString;
11
+ //# sourceMappingURL=phone_numbers.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phone_numbers.utils.js","sourceRoot":"","sources":["../../../src/talkpilot/phone_numbers/phone_numbers.utils.ts"],"names":[],"mappings":";;;AAAA,qCAAmC;AAEnC,2DAA2D;AACpD,MAAM,wBAAwB,GAAG,CACtC,MAAc,EACgB,EAAE,CAAC;IACjC,EAAE,OAAO,EAAE,IAAI,kBAAQ,CAAC,MAAM,CAAC,EAAE;IACjC,EAAE,OAAO,EAAE,MAA6B,EAAE;CAC3C,CAAC;AALW,QAAA,wBAAwB,4BAKnC"}
@@ -1 +1 @@
1
- {"version":3,"file":"scans.types.d.ts","sourceRoot":"","sources":["../../../src/websitalk/scans/scans.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC;AAE5E,MAAM,MAAM,eAAe,GAAG;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,MAAM,EAAE,UAAU,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,UAAU,EAAE,eAAe,CAAC;IAC5B,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAKhB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAKvB,WAAW,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"scans.types.d.ts","sourceRoot":"","sources":["../../../src/websitalk/scans/scans.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC;AAE5E,MAAM,MAAM,eAAe,GAAG;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,MAAM,EAAE,UAAU,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,UAAU,EAAE,eAAe,CAAC;IAC5B,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAEhB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAKvB,WAAW,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@talkpilot/core-db",
3
- "version": "1.3.60",
3
+ "version": "1.3.62",
4
4
  "description": "Core database package for centralized connections and ORM integration.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -14,3 +14,6 @@ export const getClientByAPIKey = async (
14
14
  });
15
15
  return client ? client : null;
16
16
  };
17
+
18
+ export const getClientByClientId = (clientId: string): Promise<Client | null> =>
19
+ getClientsCollection().findOne({ clientId });
@@ -68,6 +68,7 @@ export type WebsiteTalkProduct = {
68
68
  activeScanIds?: string[];
69
69
  /** The single scan whose content seeds the phone call's opening description. */
70
70
  primaryScanId?: string;
71
+ activeFlowId?: string;
71
72
  accountOwnerEmail?: string;
72
73
  };
73
74
 
@@ -7,6 +7,12 @@ import {
7
7
  createPhoneNumberEntity,
8
8
  createPurchasedPhoneNumber,
9
9
  getPrimaryPhoneFlowId,
10
+ findPhoneNumbersByClientId,
11
+ getOwnedPhoneNumber,
12
+ getPhoneNumberByClientAndFlow,
13
+ clearPhoneNumberFlow,
14
+ assignExclusiveFlow,
15
+ unbindFlowFromClientNumbers,
10
16
  } from "../phone_numbers.getter";
11
17
  import { getFlowsCollection } from "../../flows/flows.getter";
12
18
  import { createFlow, createPhoneNumber } from "../../../test-utils/factories";
@@ -272,11 +278,253 @@ describe("db.phoneNumbers", () => {
272
278
 
273
279
  it("returns null when primary phone has no flow_id", async () => {
274
280
  const clientId = "phoneNoFlow";
275
- const phone = createPhoneNumber({ client_id: clientId, is_primary: true });
281
+ const phone = createPhoneNumber({
282
+ client_id: clientId,
283
+ is_primary: true,
284
+ });
276
285
  delete phone.flow_id;
277
286
  await getPhoneNumbersCollection().insertOne(phone);
278
287
 
279
288
  expect(await getPrimaryPhoneFlowId(clientId)).toBeNull();
280
289
  });
281
290
  });
291
+
292
+ describe("findPhoneNumbersByClientId", () => {
293
+ it("returns only that client's numbers", async () => {
294
+ const clientId = "list-client";
295
+ await getPhoneNumbersCollection().insertMany([
296
+ createPhoneNumber({ client_id: clientId, phone_number: "+100" }),
297
+ createPhoneNumber({ client_id: clientId, phone_number: "+200" }),
298
+ createPhoneNumber({
299
+ client_id: "other-list-client",
300
+ phone_number: "+300",
301
+ }),
302
+ ]);
303
+
304
+ const docs = await findPhoneNumbersByClientId(clientId);
305
+ expect(docs.map((doc) => doc.phone_number).sort()).toEqual([
306
+ "+100",
307
+ "+200",
308
+ ]);
309
+ });
310
+ });
311
+
312
+ describe("getOwnedPhoneNumber", () => {
313
+ it("returns the number when it belongs to the client", async () => {
314
+ await getPhoneNumbersCollection().insertOne(
315
+ createPhoneNumber({
316
+ client_id: "owned-client",
317
+ phone_number: "+111",
318
+ }),
319
+ );
320
+
321
+ const doc = await getOwnedPhoneNumber("owned-client", "+111");
322
+ expect(doc?.phone_number).toBe("+111");
323
+ });
324
+
325
+ it("returns null when the number belongs to another client", async () => {
326
+ await getPhoneNumbersCollection().insertOne(
327
+ createPhoneNumber({
328
+ client_id: "owned-other",
329
+ phone_number: "+111",
330
+ }),
331
+ );
332
+
333
+ expect(await getOwnedPhoneNumber("owned-client", "+111")).toBeNull();
334
+ });
335
+ });
336
+
337
+ describe("getPhoneNumberByClientAndFlow", () => {
338
+ it("finds a number bound with ObjectId flow_id", async () => {
339
+ const clientId = "flow-oid-client";
340
+ const flowId = new ObjectId();
341
+ await getPhoneNumbersCollection().insertOne(
342
+ createPhoneNumber({
343
+ client_id: clientId,
344
+ phone_number: "+oid",
345
+ flow_id: flowId,
346
+ }),
347
+ );
348
+
349
+ expect(
350
+ (await getPhoneNumberByClientAndFlow(clientId, flowId.toHexString()))
351
+ ?.phone_number,
352
+ ).toBe("+oid");
353
+ });
354
+
355
+ it("finds a number bound with string-stored flow_id", async () => {
356
+ const clientId = "flow-str-client";
357
+ const flowId = new ObjectId();
358
+ const doc = createPhoneNumber({
359
+ client_id: clientId,
360
+ phone_number: "+str",
361
+ });
362
+ delete doc.flow_id;
363
+ await getPhoneNumbersCollection().insertOne({
364
+ ...doc,
365
+ flow_id: flowId.toHexString() as unknown as ObjectId,
366
+ });
367
+
368
+ expect(
369
+ (await getPhoneNumberByClientAndFlow(clientId, flowId.toHexString()))
370
+ ?.phone_number,
371
+ ).toBe("+str");
372
+ });
373
+
374
+ it("returns null for another client's bind", async () => {
375
+ const flowId = new ObjectId();
376
+ await getPhoneNumbersCollection().insertOne(
377
+ createPhoneNumber({
378
+ client_id: "flow-other-client",
379
+ flow_id: flowId,
380
+ }),
381
+ );
382
+
383
+ expect(
384
+ await getPhoneNumberByClientAndFlow(
385
+ "flow-lookup-client",
386
+ flowId.toHexString(),
387
+ ),
388
+ ).toBeNull();
389
+ });
390
+ });
391
+
392
+ describe("assignExclusiveFlow", () => {
393
+ it("binds the number and unsets the same client's previous bind", async () => {
394
+ const clientId = "exclusive-client";
395
+ const flowId = new ObjectId();
396
+ await getPhoneNumbersCollection().insertMany([
397
+ createPhoneNumber({
398
+ client_id: clientId,
399
+ phone_number: "+old",
400
+ flow_id: flowId,
401
+ }),
402
+ createPhoneNumber({
403
+ client_id: clientId,
404
+ phone_number: "+new",
405
+ }),
406
+ createPhoneNumber({
407
+ client_id: "exclusive-other",
408
+ phone_number: "+other",
409
+ flow_id: flowId,
410
+ }),
411
+ ]);
412
+
413
+ await assignExclusiveFlow(clientId, "+new", flowId.toHexString());
414
+
415
+ const [oldDoc, newDoc, otherDoc] = await Promise.all([
416
+ getPhoneNumbersCollection().findOne({ phone_number: "+old" }),
417
+ getPhoneNumbersCollection().findOne({ phone_number: "+new" }),
418
+ getPhoneNumbersCollection().findOne({ phone_number: "+other" }),
419
+ ]);
420
+ expect(oldDoc?.flow_id).toBeUndefined();
421
+ expect(newDoc?.flow_id?.toString()).toBe(flowId.toHexString());
422
+ expect(otherDoc?.flow_id?.toString()).toBe(flowId.toHexString());
423
+ });
424
+
425
+ it("steals when the previous bind stored flow_id as a string", async () => {
426
+ const clientId = "exclusive-string-client";
427
+ const flowId = new ObjectId();
428
+ const previous = createPhoneNumber({
429
+ client_id: clientId,
430
+ phone_number: "+old-str",
431
+ });
432
+ delete previous.flow_id;
433
+ await getPhoneNumbersCollection().insertMany([
434
+ {
435
+ ...previous,
436
+ flow_id: flowId.toHexString() as unknown as ObjectId,
437
+ },
438
+ createPhoneNumber({
439
+ client_id: clientId,
440
+ phone_number: "+new-str",
441
+ }),
442
+ ]);
443
+
444
+ await assignExclusiveFlow(clientId, "+new-str", flowId.toHexString());
445
+
446
+ const [oldDoc, newDoc] = await Promise.all([
447
+ getPhoneNumbersCollection().findOne({ phone_number: "+old-str" }),
448
+ getPhoneNumbersCollection().findOne({ phone_number: "+new-str" }),
449
+ ]);
450
+ expect(oldDoc?.flow_id).toBeUndefined();
451
+ expect(newDoc?.flow_id?.toString()).toBe(flowId.toHexString());
452
+ });
453
+ });
454
+
455
+ describe("clearPhoneNumberFlow", () => {
456
+ it("unsets flow_id on that number only", async () => {
457
+ const clientId = "clear-client";
458
+ const flowA = new ObjectId();
459
+ const flowB = new ObjectId();
460
+ await getPhoneNumbersCollection().insertMany([
461
+ createPhoneNumber({
462
+ client_id: clientId,
463
+ phone_number: "+a",
464
+ flow_id: flowA,
465
+ }),
466
+ createPhoneNumber({
467
+ client_id: clientId,
468
+ phone_number: "+b",
469
+ flow_id: flowB,
470
+ }),
471
+ ]);
472
+
473
+ await clearPhoneNumberFlow(clientId, "+a");
474
+
475
+ const [a, b] = await Promise.all([
476
+ getPhoneNumbersCollection().findOne({ phone_number: "+a" }),
477
+ getPhoneNumbersCollection().findOne({ phone_number: "+b" }),
478
+ ]);
479
+ expect(a?.flow_id).toBeUndefined();
480
+ expect(b?.flow_id?.toString()).toBe(flowB.toHexString());
481
+ });
482
+ });
483
+
484
+ describe("unbindFlowFromClientNumbers", () => {
485
+ it("clears ObjectId and string-stored flow_id for that client only", async () => {
486
+ const clientId = "unbind-client";
487
+ const flowId = new ObjectId();
488
+ const otherFlowId = new ObjectId();
489
+ const stringDoc = createPhoneNumber({
490
+ client_id: clientId,
491
+ phone_number: "+str-unbind",
492
+ });
493
+ delete stringDoc.flow_id;
494
+ await getPhoneNumbersCollection().insertMany([
495
+ createPhoneNumber({
496
+ client_id: clientId,
497
+ phone_number: "+oid-unbind",
498
+ flow_id: flowId,
499
+ }),
500
+ {
501
+ ...stringDoc,
502
+ flow_id: flowId.toHexString() as unknown as ObjectId,
503
+ },
504
+ createPhoneNumber({
505
+ client_id: clientId,
506
+ phone_number: "+keep",
507
+ flow_id: otherFlowId,
508
+ }),
509
+ createPhoneNumber({
510
+ client_id: "unbind-other",
511
+ phone_number: "+other-keep",
512
+ flow_id: flowId,
513
+ }),
514
+ ]);
515
+
516
+ await unbindFlowFromClientNumbers(clientId, flowId.toHexString());
517
+
518
+ const [oidDoc, strDoc, keep, other] = await Promise.all([
519
+ getPhoneNumbersCollection().findOne({ phone_number: "+oid-unbind" }),
520
+ getPhoneNumbersCollection().findOne({ phone_number: "+str-unbind" }),
521
+ getPhoneNumbersCollection().findOne({ phone_number: "+keep" }),
522
+ getPhoneNumbersCollection().findOne({ phone_number: "+other-keep" }),
523
+ ]);
524
+ expect(oidDoc?.flow_id).toBeUndefined();
525
+ expect(strDoc?.flow_id).toBeUndefined();
526
+ expect(keep?.flow_id?.toString()).toBe(otherFlowId.toHexString());
527
+ expect(other?.flow_id?.toString()).toBe(flowId.toHexString());
528
+ });
529
+ });
282
530
  });
@@ -13,6 +13,7 @@ import {
13
13
  PhoneNumberWithFlow,
14
14
  PurchasedPhoneProviderPayload,
15
15
  } from "./phone_numbers.types";
16
+ import { flowIdAsObjectIdOrString } from "./phone_numbers.utils";
16
17
 
17
18
  export const getPhoneNumbersCollection = (): Collection<PhoneNumber> =>
18
19
  getDb().collection<PhoneNumber>("phone_numbers");
@@ -174,3 +175,66 @@ export const bindClientPhoneToFlow = async (
174
175
  throw new Error(`No primary phone number found for client: ${clientId}`);
175
176
  }
176
177
  };
178
+
179
+ export const findPhoneNumbersByClientId = (
180
+ clientId: string,
181
+ ): Promise<PhoneNumber[]> =>
182
+ getPhoneNumbersCollection().find({ client_id: clientId }).toArray();
183
+
184
+ export const getOwnedPhoneNumber = (
185
+ clientId: string,
186
+ phoneNumber: string,
187
+ ): Promise<PhoneNumber | null> =>
188
+ getPhoneNumbersCollection().findOne({
189
+ client_id: clientId,
190
+ phone_number: phoneNumber,
191
+ });
192
+
193
+ export const getPhoneNumberByClientAndFlow = (
194
+ clientId: string,
195
+ flowId: string,
196
+ ): Promise<PhoneNumber | null> =>
197
+ getPhoneNumbersCollection().findOne({
198
+ client_id: clientId,
199
+ $or: flowIdAsObjectIdOrString(flowId),
200
+ });
201
+
202
+ export const clearPhoneNumberFlow = async (
203
+ clientId: string,
204
+ phoneNumber: string,
205
+ ): Promise<void> => {
206
+ await getPhoneNumbersCollection().updateOne(
207
+ { client_id: clientId, phone_number: phoneNumber },
208
+ { $unset: { flow_id: "" }, $set: { updatedAt: new Date() } },
209
+ );
210
+ };
211
+
212
+ export const assignExclusiveFlow = async (
213
+ clientId: string,
214
+ phoneNumber: string,
215
+ flowId: string,
216
+ ): Promise<void> => {
217
+ const collection = getPhoneNumbersCollection();
218
+ await collection.updateMany(
219
+ {
220
+ client_id: clientId,
221
+ phone_number: { $ne: phoneNumber },
222
+ $or: flowIdAsObjectIdOrString(flowId),
223
+ },
224
+ { $unset: { flow_id: "" }, $set: { updatedAt: new Date() } },
225
+ );
226
+ await collection.updateOne(
227
+ { client_id: clientId, phone_number: phoneNumber },
228
+ { $set: { flow_id: new ObjectId(flowId), updatedAt: new Date() } },
229
+ );
230
+ };
231
+
232
+ export const unbindFlowFromClientNumbers = async (
233
+ clientId: string,
234
+ flowId: string,
235
+ ): Promise<void> => {
236
+ await getPhoneNumbersCollection().updateMany(
237
+ { client_id: clientId, $or: flowIdAsObjectIdOrString(flowId) },
238
+ { $unset: { flow_id: "" }, $set: { updatedAt: new Date() } },
239
+ );
240
+ };
@@ -0,0 +1,9 @@
1
+ import { ObjectId } from "mongodb";
2
+
3
+ /** Older phone_numbers rows stored flow_id as a string. */
4
+ export const flowIdAsObjectIdOrString = (
5
+ flowId: string,
6
+ ): Array<{ flow_id: ObjectId }> => [
7
+ { flow_id: new ObjectId(flowId) },
8
+ { flow_id: flowId as unknown as ObjectId },
9
+ ];
@@ -43,9 +43,6 @@ export type Scan = {
43
43
  createdAt: Date;
44
44
  updatedAt: Date;
45
45
 
46
- // startedAt: set once at scan creation (WTIS). pausedAt: set/cleared across
47
- // pause/resume (WTIS) and, unlike the fields below, IS read mid-scan — it's
48
- // how an active scan's elapsed-time display freezes correctly while PAUSED.
49
46
  startedAt?: Date;
50
47
  pausedAt?: Date | null;
51
48