@talkpilot/core-db 1.3.18 → 1.3.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/README.md +48 -0
  2. package/dist/talkpilot/calls/calls.constants.d.ts +2 -0
  3. package/dist/talkpilot/calls/calls.constants.d.ts.map +1 -1
  4. package/dist/talkpilot/calls/calls.constants.js +9 -1
  5. package/dist/talkpilot/calls/calls.constants.js.map +1 -1
  6. package/dist/talkpilot/clientsConfig/clientsConfig.types.d.ts +1 -0
  7. package/dist/talkpilot/clientsConfig/clientsConfig.types.d.ts.map +1 -1
  8. package/dist/talkpilot/flows/flows.setter.d.ts +13 -0
  9. package/dist/talkpilot/flows/flows.setter.d.ts.map +1 -0
  10. package/dist/talkpilot/flows/flows.setter.js +90 -0
  11. package/dist/talkpilot/flows/flows.setter.js.map +1 -0
  12. package/dist/talkpilot/phone_numbers/phone_numbers.getter.d.ts +1 -0
  13. package/dist/talkpilot/phone_numbers/phone_numbers.getter.d.ts.map +1 -1
  14. package/dist/talkpilot/phone_numbers/phone_numbers.getter.js +8 -1
  15. package/dist/talkpilot/phone_numbers/phone_numbers.getter.js.map +1 -1
  16. package/dist/websitalk/websitalk.setup.d.ts +3 -0
  17. package/dist/websitalk/websitalk.setup.d.ts.map +1 -0
  18. package/dist/websitalk/websitalk.setup.js +34 -0
  19. package/dist/websitalk/websitalk.setup.js.map +1 -0
  20. package/dist/websitalk/websiteUrls/websiteUrls.constants.d.ts +2 -0
  21. package/dist/websitalk/websiteUrls/websiteUrls.constants.d.ts.map +1 -0
  22. package/dist/websitalk/websiteUrls/websiteUrls.constants.js +5 -0
  23. package/dist/websitalk/websiteUrls/websiteUrls.constants.js.map +1 -0
  24. package/package.json +1 -1
  25. package/src/talkpilot/calls/calls.constants.ts +9 -0
  26. package/src/talkpilot/clientsConfig/clientsConfig.types.ts +1 -0
  27. package/src/talkpilot/phone_numbers/phone_numbers.getter.ts +13 -0
package/README.md CHANGED
@@ -150,6 +150,8 @@ Refer to `DEVELOPMENT.md` for the full walkthrough, token instructions, and fact
150
150
  | 1.3.16 | Refactored WebsiteTalk scan status constants (CP-1372): `SCAN_STATUSES` object map, `FINISHED_SCAN_STATUSES` derived from it, `isInProgressScan` moved to `scans.utils`. No breaking API changes. |
151
151
  | 1.3.17 | Twilio call-status semantics for Websitalk dashboard: `inCallCount` KPI (`in-progress` + `answered`), `busy` is line-busy only; `updateCallStatusByCallSid`; expanded `CallStatus` union; `timeSavedMinutes` from `completed` only. |
152
152
  | 1.3.18 | WebsiteTalk multi-website API (CP-1372): ships `websiteUrls` module, scan getters by `websiteUrlId`, `activeScanId` getters on `clientsConfig`. **Note:** 1.3.17 did not include these — they landed after merge. **Breaking:** `WebsiteTalkProduct.defaultBaseUrl` removed from type. |
153
+ | 1.3.19 | WebsiteTalk flow provisioning (WTIS activate-scan): optional `flowId` on `WebsiteTalkProduct`; `bindClientPhoneToFlow(clientId, flowId)` sets `flow_id` on the client's primary `phone_numbers` document so inbound calls route to the provisioned TalkPilot flow. |
154
+ | 1.3.20 | `FINAL_STATUSES` constant for terminal Twilio call statuses (`no-answer`, `completed`, `busy`, `failed`, `canceled`) in `calls.constants`. |
153
155
  ### 1.1.9
154
156
 
155
157
  1. `npm run build`.
@@ -419,6 +421,52 @@ Ships the full persistence API for multi-website / multi-scan. Versions 1.3.15
419
421
 
420
422
  Yes — WTIS, CoreBrain, and CoreCrawler should upgrade to **1.3.18** and import the symbols above from `@talkpilot/core-db`. Stop reading `defaultBaseUrl` from `WebsiteTalkProduct`; use `websiteUrls` instead.
421
423
 
424
+ ### 1.3.19 — WebsiteTalk flow provisioning (WTIS activate-scan)
425
+
426
+ Persists the TalkPilot flow id on the client product config and links the client's primary phone number to that flow so inbound calls use the WebsiteTalk flow after `activate-scan`.
427
+
428
+ **`clientsConfig` — `WebsiteTalkProduct`**
429
+
430
+ | Field | Purpose |
431
+ | --- | --- |
432
+ | `WebsiteTalkProduct.flowId?` | Optional TalkPilot flow `_id` (hex string). Set by WTIS after `POST /flows/add_new_flow`; reused on later activations via `PUT /flows/edit_flow/:id`. |
433
+
434
+ **`phone_numbers`**
435
+
436
+ | Export | Purpose |
437
+ | --- | --- |
438
+ | `bindClientPhoneToFlow(clientId, flowId)` | Updates the **primary** `phone_numbers` row for `clientId`, setting `flow_id` to the given TalkPilot flow. Throws if no primary phone exists. |
439
+
440
+ **Typical service-layer flow (WTIS)**
441
+
442
+ 1. Build flow payload from template + `companyInfo` (generated at activate time).
443
+ 2. Create or update the flow via TalkPilot Server API (`add_new_flow` / `edit_flow`).
444
+ 3. On first create: `updateProductConfig(clientId, "websiteTalk", { flowId })`.
445
+ 4. `bindClientPhoneToFlow(clientId, flowId)` — ensure the phone routes to the flow.
446
+ 5. `updateActiveScanId(clientId, scanId)` — point search at the activated scan.
447
+
448
+ **Not in core-db (service layer)**
449
+
450
+ - Flow template substitution, Claude `companyInfo` generation, Firebase Storage template download, TalkPilot flow create/update HTTP calls.
451
+
452
+ **Do I need to update my app?**
453
+
454
+ No — purely additive. **WTIS** should upgrade to **1.3.19** (or later) and import `bindClientPhoneToFlow` plus `WebsiteTalkProduct.flowId` when implementing activate-scan flow provisioning.
455
+
456
+ ### 1.3.20 — `FINAL_STATUSES` call-status constant
457
+
458
+ Centralizes terminal Twilio call statuses so consumers (e.g. TalkPilot Server `callResultService`) don't duplicate the list locally.
459
+
460
+ **Added**
461
+
462
+ | Export | Purpose |
463
+ | --- | --- |
464
+ | `FINAL_STATUSES` | `["no-answer", "completed", "busy", "failed", "canceled"]` — statuses where no further Twilio callbacks are expected. Pair with `IN_CALL_STATUSES` for live vs terminal semantics. |
465
+
466
+ **Do I need to update my app?**
467
+
468
+ No — purely additive. Replace local `FINAL_STATUSES` arrays with `import { FINAL_STATUSES } from "@talkpilot/core-db"` when convenient.
469
+
422
470
 
423
471
  ## 🛠 CI/CD & deployment
424
472
 
@@ -4,6 +4,8 @@ export declare const CONFERENCE_ROLE_CUSTOMER: "customer";
4
4
  export declare const CONFERENCE_ROLE_SUPERVISOR: "supervisor";
5
5
  /** Live call — «בשיחה». Excludes Twilio `busy` (line busy / «תפוס»). */
6
6
  export declare const IN_CALL_STATUSES: readonly ["in-progress", "answered"];
7
+ /** Terminal Twilio call statuses — no further status callbacks expected. */
8
+ export declare const FINAL_STATUSES: readonly ["no-answer", "completed", "busy", "failed", "canceled"];
7
9
  /** Hours in a single day. */
8
10
  export declare const HOURS_PER_DAY = 24;
9
11
  /** Max execution time (ms) for calls statistics aggregations. */
@@ -1 +1 @@
1
- {"version":3,"file":"calls.constants.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/calls/calls.constants.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,eAAO,MAAM,wBAAwB,EAAG,UAAmB,CAAC;AAE5D,gDAAgD;AAChD,eAAO,MAAM,0BAA0B,EAAG,YAAqB,CAAC;AAEhE,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,sCAAuC,CAAC;AAErE,6BAA6B;AAC7B,eAAO,MAAM,aAAa,KAAK,CAAC;AAEhC,iEAAiE;AACjE,eAAO,MAAM,iBAAiB,QAAS,CAAC;AAExC;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAC/C,eAAO,MAAM,4BAA4B,IAAI,CAAC"}
1
+ {"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"}
@@ -1,12 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TREND_WEEK_BUCKET_MIN_MONTHS = exports.TREND_MONTH_BUCKET_MIN_MONTHS = exports.STATS_MAX_TIME_MS = exports.HOURS_PER_DAY = exports.IN_CALL_STATUSES = exports.CONFERENCE_ROLE_SUPERVISOR = exports.CONFERENCE_ROLE_CUSTOMER = void 0;
3
+ exports.TREND_WEEK_BUCKET_MIN_MONTHS = exports.TREND_MONTH_BUCKET_MIN_MONTHS = exports.STATS_MAX_TIME_MS = exports.HOURS_PER_DAY = exports.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. */
7
7
  exports.CONFERENCE_ROLE_SUPERVISOR = "supervisor";
8
8
  /** Live call — «בשיחה». Excludes Twilio `busy` (line busy / «תפוס»). */
9
9
  exports.IN_CALL_STATUSES = ["in-progress", "answered"];
10
+ /** Terminal Twilio call statuses — no further status callbacks expected. */
11
+ exports.FINAL_STATUSES = [
12
+ "no-answer",
13
+ "completed",
14
+ "busy",
15
+ "failed",
16
+ "canceled",
17
+ ];
10
18
  /** Hours in a single day. */
11
19
  exports.HOURS_PER_DAY = 24;
12
20
  /** Max execution time (ms) for calls statistics aggregations. */
@@ -1 +1 @@
1
- {"version":3,"file":"calls.constants.js","sourceRoot":"","sources":["../../../src/talkpilot/calls/calls.constants.ts"],"names":[],"mappings":";;;AAAA,8CAA8C;AACjC,QAAA,wBAAwB,GAAG,UAAmB,CAAC;AAE5D,gDAAgD;AACnC,QAAA,0BAA0B,GAAG,YAAqB,CAAC;AAEhE,wEAAwE;AAC3D,QAAA,gBAAgB,GAAG,CAAC,aAAa,EAAE,UAAU,CAAU,CAAC;AAErE,6BAA6B;AAChB,QAAA,aAAa,GAAG,EAAE,CAAC;AAEhC,iEAAiE;AACpD,QAAA,iBAAiB,GAAG,MAAM,CAAC;AAExC;;;;;GAKG;AACU,QAAA,6BAA6B,GAAG,CAAC,CAAC;AAClC,QAAA,4BAA4B,GAAG,CAAC,CAAC"}
1
+ {"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"}
@@ -46,6 +46,7 @@ export type WebsiteTalkProduct = {
46
46
  timezone: string;
47
47
  language: string;
48
48
  activeScanId?: string;
49
+ flowId?: string;
49
50
  };
50
51
  /** Product config for the clinics scheduling integration. */
51
52
  export type ClinicsProduct = {
@@ -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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"}
@@ -0,0 +1,13 @@
1
+ import type { Flow } from "./flows.types";
2
+ export type FlowTemplateParams = {
3
+ companyName: string;
4
+ companyInfo: string;
5
+ language: string;
6
+ wtisBaseUrl: string;
7
+ };
8
+ export declare const extractCompanyInfoFromFlow: (flow: Flow) => string;
9
+ type FlowTemplateFields = Omit<Flow, "_id" | "clientId" | "createdAt" | "updatedAt">;
10
+ export declare const applyFlowClientParams: (flow: Flow, params: FlowTemplateParams) => FlowTemplateFields;
11
+ export declare const substituteFlowTemplate: (template: Flow, params: FlowTemplateParams) => FlowTemplateFields;
12
+ export {};
13
+ //# sourceMappingURL=flows.setter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flows.setter.d.ts","sourceRoot":"","sources":["../../../src/talkpilot/flows/flows.setter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,MAAM,MAAM,kBAAkB,GAAG;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AA2BF,eAAO,MAAM,0BAA0B,GAAI,MAAM,IAAI,KAAG,MAUvD,CAAC;AAgBF,KAAK,kBAAkB,GAAG,IAAI,CAC5B,IAAI,EACJ,KAAK,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,CAC/C,CAAC;AAKF,eAAO,MAAM,qBAAqB,GAChC,MAAM,IAAI,EACV,QAAQ,kBAAkB,KACzB,kBA+CF,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,UAAU,IAAI,EACd,QAAQ,kBAAkB,KACzB,kBAkCF,CAAC"}
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.substituteFlowTemplate = exports.applyFlowClientParams = exports.extractCompanyInfoFromFlow = void 0;
4
+ const PLACEHOLDER_RE = /\{\{(\w+)\}\}/g;
5
+ const substituteInString = (value, params) => value.replace(PLACEHOLDER_RE, (_, key) => params[key] ?? `{{${key}}}`);
6
+ const substituteDeep = (value, params) => {
7
+ if (typeof value === "string")
8
+ return substituteInString(value, params);
9
+ if (Array.isArray(value))
10
+ return value.map((item) => substituteDeep(item, params));
11
+ if (value && typeof value === "object") {
12
+ return Object.fromEntries(Object.entries(value).map(([key, item]) => [
13
+ key,
14
+ substituteDeep(item, params),
15
+ ]));
16
+ }
17
+ return value;
18
+ };
19
+ const extractCompanyInfoFromFlow = (flow) => {
20
+ if (!flow.freeTextContent)
21
+ return "";
22
+ try {
23
+ const parsed = JSON.parse(flow.freeTextContent);
24
+ return parsed.config?.companyInfo ?? "";
25
+ }
26
+ catch {
27
+ return "";
28
+ }
29
+ };
30
+ exports.extractCompanyInfoFromFlow = extractCompanyInfoFromFlow;
31
+ const applyFreeTextContentParams = (freeTextContent, params) => {
32
+ const parsed = JSON.parse(freeTextContent);
33
+ const substituted = substituteDeep(parsed, {
34
+ companyName: params.companyName,
35
+ companyInfo: params.companyInfo,
36
+ language: params.language,
37
+ wtisBaseUrl: params.wtisBaseUrl,
38
+ });
39
+ return JSON.stringify(substituted, null, 2);
40
+ };
41
+ const webSearchUrl = (wtisBaseUrl) => `${wtisBaseUrl.replace(/\/$/, "")}/api/v1/websitalk/search`;
42
+ const applyFlowClientParams = (flow, params) => {
43
+ const { _id: _omitId, clientId: _omitClientId, createdAt: _omitCreatedAt, updatedAt: _omitUpdatedAt, freeTextContent, tools, ...rest } = flow;
44
+ const result = {
45
+ ...rest,
46
+ flowName: `${params.companyName} - website talk`,
47
+ products: flow.products ?? ["websiteTalk"],
48
+ };
49
+ if (freeTextContent) {
50
+ const parsed = JSON.parse(freeTextContent);
51
+ result.freeTextContent = JSON.stringify({
52
+ ...parsed,
53
+ config: {
54
+ ...parsed.config,
55
+ companyName: params.companyName,
56
+ companyInfo: params.companyInfo,
57
+ },
58
+ agent: { ...parsed.agent, language: params.language },
59
+ }, null, 2);
60
+ }
61
+ if (tools?.length) {
62
+ const searchUrl = webSearchUrl(params.wtisBaseUrl);
63
+ result.tools = tools.map((tool) => tool.id === "webSearch" || tool.name === "webSearch"
64
+ ? { ...tool, url: searchUrl }
65
+ : tool);
66
+ }
67
+ return result;
68
+ };
69
+ exports.applyFlowClientParams = applyFlowClientParams;
70
+ const substituteFlowTemplate = (template, params) => {
71
+ const placeholderParams = {
72
+ companyName: params.companyName,
73
+ wtisBaseUrl: params.wtisBaseUrl,
74
+ };
75
+ const { _id: _omitId, clientId: _omitClientId, createdAt: _omitCreatedAt, updatedAt: _omitUpdatedAt, freeTextContent, flowName, tools, ...rest } = template;
76
+ const flow = {
77
+ ...rest,
78
+ flowName: substituteInString(flowName, placeholderParams),
79
+ products: ["websiteTalk"],
80
+ };
81
+ if (freeTextContent) {
82
+ flow.freeTextContent = applyFreeTextContentParams(freeTextContent, params);
83
+ }
84
+ if (tools?.length) {
85
+ flow.tools = tools.map((tool) => substituteDeep(tool, placeholderParams));
86
+ }
87
+ return flow;
88
+ };
89
+ exports.substituteFlowTemplate = substituteFlowTemplate;
90
+ //# sourceMappingURL=flows.setter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flows.setter.js","sourceRoot":"","sources":["../../../src/talkpilot/flows/flows.setter.ts"],"names":[],"mappings":"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"}
@@ -11,4 +11,5 @@ export declare const createPhoneNumberEntity: (phoneNumber: string, flowId: stri
11
11
  /** API-purchased number; `flowId` may be omitted until the number is bound to a flow. */
12
12
  export declare const createPurchasedPhoneNumber: (phoneNumber: string, providerPayload: PurchasedPhoneProviderPayload, clientId: string, flowId?: string | null) => Promise<PhoneNumber>;
13
13
  export declare const findClientByPhoneNumber: (phoneNumber: string) => Promise<Client>;
14
+ export declare const bindClientPhoneToFlow: (clientId: string, flowId: string) => Promise<void>;
14
15
  //# 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"}
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,GAChC,UAAU,MAAM,EAChB,QAAQ,MAAM,KACb,OAAO,CAAC,IAAI,CAQd,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.findClientByPhoneNumber = exports.createPurchasedPhoneNumber = exports.createPhoneNumberEntity = exports.getPhoneNumbersForFlows = exports.getClientPhoneData = exports.getClientPhoneNumber = exports.getClientPrimaryPhoneNumber = exports.getPhoneDataByPhoneNumber = exports.getPhoneNumbersCollection = void 0;
3
+ exports.bindClientPhoneToFlow = 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
5
  const getPhoneNumbersCollection = () => (0, index_1.getDb)().collection("phone_numbers");
6
6
  exports.getPhoneNumbersCollection = getPhoneNumbersCollection;
@@ -113,4 +113,11 @@ const findClientByPhoneNumber = async (phoneNumber) => {
113
113
  return client;
114
114
  };
115
115
  exports.findClientByPhoneNumber = findClientByPhoneNumber;
116
+ const bindClientPhoneToFlow = async (clientId, flowId) => {
117
+ const result = await (0, exports.getPhoneNumbersCollection)().updateOne({ client_id: clientId, is_primary: true }, { $set: { flow_id: new index_1.ObjectId(flowId), updatedAt: new Date() } });
118
+ if (result.matchedCount === 0) {
119
+ throw new Error(`No primary phone number found for client: ${clientId}`);
120
+ }
121
+ };
122
+ exports.bindClientPhoneToFlow = bindClientPhoneToFlow;
116
123
  //# 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,3 @@
1
+ export declare const ensureWebsitalkIndexes: () => Promise<void>;
2
+ export declare const ensureWebsitalkIndexesOnce: () => Promise<void>;
3
+ //# sourceMappingURL=websitalk.setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websitalk.setup.d.ts","sourceRoot":"","sources":["../../src/websitalk/websitalk.setup.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,sBAAsB,QAAa,OAAO,CAAC,IAAI,CAW3D,CAAC;AAIF,eAAO,MAAM,0BAA0B,QAAO,OAAO,CAAC,IAAI,CAWzD,CAAC"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ensureWebsitalkIndexesOnce = exports.ensureWebsitalkIndexes = void 0;
4
+ const index_1 = require("./index");
5
+ const scans_getters_1 = require("./scans/scans.getters");
6
+ const websiteUrls_getters_1 = require("./websiteUrls/websiteUrls.getters");
7
+ const ensureWebsitalkIndexes = async () => {
8
+ await (0, index_1.getDb)().collection(websiteUrls_getters_1.WEBSITE_URLS_COLLECTION).createIndex({ clientId: 1 });
9
+ await (0, scans_getters_1.getScansCollection)().createIndexes([
10
+ { key: { clientId: 1, createdAt: -1 } },
11
+ { key: { websiteUrlId: 1, createdAt: -1 } },
12
+ {
13
+ key: { websiteUrlId: 1, status: 1 },
14
+ unique: true,
15
+ partialFilterExpression: { status: "COMPLETED" },
16
+ },
17
+ ]);
18
+ };
19
+ exports.ensureWebsitalkIndexes = ensureWebsitalkIndexes;
20
+ const provisioningByDb = new WeakMap();
21
+ const ensureWebsitalkIndexesOnce = () => {
22
+ const db = (0, index_1.getDb)();
23
+ let provisioning = provisioningByDb.get(db);
24
+ if (!provisioning) {
25
+ provisioning = (0, exports.ensureWebsitalkIndexes)().catch((err) => {
26
+ provisioningByDb.delete(db);
27
+ throw err;
28
+ });
29
+ provisioningByDb.set(db, provisioning);
30
+ }
31
+ return provisioning;
32
+ };
33
+ exports.ensureWebsitalkIndexesOnce = ensureWebsitalkIndexesOnce;
34
+ //# sourceMappingURL=websitalk.setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websitalk.setup.js","sourceRoot":"","sources":["../../src/websitalk/websitalk.setup.ts"],"names":[],"mappings":";;;AACA,mCAAgC;AAChC,yDAA2D;AAC3D,2EAA4E;AAErE,MAAM,sBAAsB,GAAG,KAAK,IAAmB,EAAE;IAC9D,MAAM,IAAA,aAAK,GAAE,CAAC,UAAU,CAAC,6CAAuB,CAAC,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/E,MAAM,IAAA,kCAAkB,GAAE,CAAC,aAAa,CAAC;QACvC,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;QACvC,EAAE,GAAG,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;QAC3C;YACE,GAAG,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;YACnC,MAAM,EAAE,IAAI;YACZ,uBAAuB,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;SACjD;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAXW,QAAA,sBAAsB,0BAWjC;AAEF,MAAM,gBAAgB,GAAG,IAAI,OAAO,EAAqB,CAAC;AAEnD,MAAM,0BAA0B,GAAG,GAAkB,EAAE;IAC5D,MAAM,EAAE,GAAG,IAAA,aAAK,GAAE,CAAC;IACnB,IAAI,YAAY,GAAG,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5C,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,YAAY,GAAG,IAAA,8BAAsB,GAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACpD,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC5B,MAAM,GAAG,CAAC;QACZ,CAAC,CAAC,CAAC;QACH,gBAAgB,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC;AAXW,QAAA,0BAA0B,8BAWrC"}
@@ -0,0 +1,2 @@
1
+ export declare const WEBSITE_URLS_COLLECTION = "websiteUrls";
2
+ //# sourceMappingURL=websiteUrls.constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websiteUrls.constants.d.ts","sourceRoot":"","sources":["../../../src/websitalk/websiteUrls/websiteUrls.constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,uBAAuB,gBAAgB,CAAC"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WEBSITE_URLS_COLLECTION = void 0;
4
+ exports.WEBSITE_URLS_COLLECTION = "websiteUrls";
5
+ //# sourceMappingURL=websiteUrls.constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websiteUrls.constants.js","sourceRoot":"","sources":["../../../src/websitalk/websiteUrls/websiteUrls.constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,uBAAuB,GAAG,aAAa,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@talkpilot/core-db",
3
- "version": "1.3.18",
3
+ "version": "1.3.20",
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",
@@ -7,6 +7,15 @@ export const CONFERENCE_ROLE_SUPERVISOR = "supervisor" as const;
7
7
  /** Live call — «בשיחה». Excludes Twilio `busy` (line busy / «תפוס»). */
8
8
  export const IN_CALL_STATUSES = ["in-progress", "answered"] as const;
9
9
 
10
+ /** Terminal Twilio call statuses — no further status callbacks expected. */
11
+ export const FINAL_STATUSES = [
12
+ "no-answer",
13
+ "completed",
14
+ "busy",
15
+ "failed",
16
+ "canceled",
17
+ ] as const;
18
+
10
19
  /** Hours in a single day. */
11
20
  export const HOURS_PER_DAY = 24;
12
21
 
@@ -62,6 +62,7 @@ export type WebsiteTalkProduct = {
62
62
  timezone: string;
63
63
  language: string;
64
64
  activeScanId?: string;
65
+ flowId?: string;
65
66
  };
66
67
 
67
68
  // ---------------------------------------------------------------------------
@@ -156,3 +156,16 @@ export const findClientByPhoneNumber = async (
156
156
  if (!client) throw new Error("Failed to get client");
157
157
  return client;
158
158
  };
159
+
160
+ export const bindClientPhoneToFlow = async (
161
+ clientId: string,
162
+ flowId: string,
163
+ ): Promise<void> => {
164
+ const result = await getPhoneNumbersCollection().updateOne(
165
+ { client_id: clientId, is_primary: true },
166
+ { $set: { flow_id: new ObjectId(flowId), updatedAt: new Date() } },
167
+ );
168
+ if (result.matchedCount === 0) {
169
+ throw new Error(`No primary phone number found for client: ${clientId}`);
170
+ }
171
+ };