@talkpilot/core-db 1.3.61 → 1.3.63

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 (76) hide show
  1. package/README.md +1 -0
  2. package/dist/configuration/models/models.constants.d.ts +1 -1
  3. package/dist/configuration/models/models.constants.d.ts.map +1 -1
  4. package/dist/configuration/models/models.constants.js +6 -1
  5. package/dist/configuration/models/models.constants.js.map +1 -1
  6. package/dist/index.d.ts +1 -0
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +1 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/municipal/departmentsSubjects/departmentsSubjects.setters.d.ts +10 -0
  11. package/dist/municipal/departmentsSubjects/departmentsSubjects.setters.d.ts.map +1 -0
  12. package/dist/municipal/departmentsSubjects/departmentsSubjects.setters.js +15 -0
  13. package/dist/municipal/departmentsSubjects/departmentsSubjects.setters.js.map +1 -0
  14. package/dist/municipal/streets/streets.setters.d.ts +10 -0
  15. package/dist/municipal/streets/streets.setters.d.ts.map +1 -0
  16. package/dist/municipal/streets/streets.setters.js +15 -0
  17. package/dist/municipal/streets/streets.setters.js.map +1 -0
  18. package/dist/reconcile/index.d.ts +5 -0
  19. package/dist/reconcile/index.d.ts.map +1 -0
  20. package/dist/reconcile/index.js +21 -0
  21. package/dist/reconcile/index.js.map +1 -0
  22. package/dist/reconcile/reconcile.diff.d.ts +4 -0
  23. package/dist/reconcile/reconcile.diff.d.ts.map +1 -0
  24. package/dist/reconcile/reconcile.diff.js +36 -0
  25. package/dist/reconcile/reconcile.diff.js.map +1 -0
  26. package/dist/reconcile/reconcile.execute.d.ts +7 -0
  27. package/dist/reconcile/reconcile.execute.d.ts.map +1 -0
  28. package/dist/reconcile/reconcile.execute.js +20 -0
  29. package/dist/reconcile/reconcile.execute.js.map +1 -0
  30. package/dist/reconcile/reconcile.ops.d.ts +12 -0
  31. package/dist/reconcile/reconcile.ops.d.ts.map +1 -0
  32. package/dist/reconcile/reconcile.ops.js +24 -0
  33. package/dist/reconcile/reconcile.ops.js.map +1 -0
  34. package/dist/reconcile/reconcile.types.d.ts +32 -0
  35. package/dist/reconcile/reconcile.types.d.ts.map +1 -0
  36. package/dist/reconcile/reconcile.types.js +3 -0
  37. package/dist/reconcile/reconcile.types.js.map +1 -0
  38. package/dist/test-utils/factories/websitalk/scans.d.ts.map +1 -1
  39. package/dist/test-utils/factories/websitalk/scans.js +1 -0
  40. package/dist/test-utils/factories/websitalk/scans.js.map +1 -1
  41. package/dist/websitalk/scanResources/scanResources.getters.d.ts +1 -0
  42. package/dist/websitalk/scanResources/scanResources.getters.d.ts.map +1 -1
  43. package/dist/websitalk/scanResources/scanResources.getters.js +6 -1
  44. package/dist/websitalk/scanResources/scanResources.getters.js.map +1 -1
  45. package/dist/websitalk/scans/scans.constants.d.ts +3 -1
  46. package/dist/websitalk/scans/scans.constants.d.ts.map +1 -1
  47. package/dist/websitalk/scans/scans.constants.js +3 -0
  48. package/dist/websitalk/scans/scans.constants.js.map +1 -1
  49. package/dist/websitalk/scans/scans.getters.d.ts +1 -0
  50. package/dist/websitalk/scans/scans.getters.d.ts.map +1 -1
  51. package/dist/websitalk/scans/scans.getters.js +7 -1
  52. package/dist/websitalk/scans/scans.getters.js.map +1 -1
  53. package/dist/websitalk/scans/scans.types.d.ts +1 -0
  54. package/dist/websitalk/scans/scans.types.d.ts.map +1 -1
  55. package/package.json +1 -1
  56. package/src/configuration/models/models.constants.ts +6 -1
  57. package/src/index.ts +1 -0
  58. package/src/test-utils/factories/websitalk/scans.ts +1 -0
  59. package/src/websitalk/scanResources/__tests__/scanResources.spec.ts +19 -0
  60. package/src/websitalk/scanResources/scanResources.getters.ts +7 -0
  61. package/src/websitalk/scans/__tests__/scans.spec.ts +49 -0
  62. package/src/websitalk/scans/scans.constants.ts +3 -0
  63. package/src/websitalk/scans/scans.getters.ts +6 -0
  64. package/src/websitalk/scans/scans.types.ts +3 -1
  65. package/dist/configuration/models/models.seed.d.ts +0 -5
  66. package/dist/configuration/models/models.seed.d.ts.map +0 -1
  67. package/dist/configuration/models/models.seed.js +0 -16
  68. package/dist/configuration/models/models.seed.js.map +0 -1
  69. package/dist/configuration/models/realtimeUiFields.constants.d.ts +0 -4
  70. package/dist/configuration/models/realtimeUiFields.constants.d.ts.map +0 -1
  71. package/dist/configuration/models/realtimeUiFields.constants.js +0 -80
  72. package/dist/configuration/models/realtimeUiFields.constants.js.map +0 -1
  73. package/dist/configuration/models/uiFields.types.d.ts +0 -29
  74. package/dist/configuration/models/uiFields.types.d.ts.map +0 -1
  75. package/dist/configuration/models/uiFields.types.js +0 -12
  76. package/dist/configuration/models/uiFields.types.js.map +0 -1
package/README.md CHANGED
@@ -180,6 +180,7 @@ Refer to `DEVELOPMENT.md` for the full walkthrough, token instructions, and fact
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
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
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. |
183
184
 
184
185
  ### 1.1.9
185
186
 
@@ -1,6 +1,6 @@
1
1
  export declare const MODELS_COLLECTION = "models";
2
2
  export declare const MODEL_CONFIG_DEFAULTS_CONTEXT_WINDOW = "contextWindow";
3
3
  export declare const MODEL_TYPES: readonly ["realtime", "stt"];
4
- export declare const REALTIME_MODEL_PROVIDERS: readonly ["openai", "gemini", "xai"];
4
+ export declare const REALTIME_MODEL_PROVIDERS: readonly ["openai", "gemini", "xai", "elevenlabs"];
5
5
  export declare const STT_MODEL_PROVIDERS: readonly ["openai-stt", "google-stt", "deepgram-stt", "deepgram-flux", "elevenlabs-scribe", "gladia-stt"];
6
6
  //# sourceMappingURL=models.constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"models.constants.d.ts","sourceRoot":"","sources":["../../../src/configuration/models/models.constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,WAAW,CAAC;AAE1C,eAAO,MAAM,oCAAoC,kBAAkB,CAAC;AAEpE,eAAO,MAAM,WAAW,8BAA+B,CAAC;AAExD,eAAO,MAAM,wBAAwB,sCAAuC,CAAC;AAC7E,eAAO,MAAM,mBAAmB,2GAOtB,CAAC"}
1
+ {"version":3,"file":"models.constants.d.ts","sourceRoot":"","sources":["../../../src/configuration/models/models.constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,WAAW,CAAC;AAE1C,eAAO,MAAM,oCAAoC,kBAAkB,CAAC;AAEpE,eAAO,MAAM,WAAW,8BAA+B,CAAC;AAExD,eAAO,MAAM,wBAAwB,oDAK3B,CAAC;AACX,eAAO,MAAM,mBAAmB,2GAOtB,CAAC"}
@@ -4,7 +4,12 @@ exports.STT_MODEL_PROVIDERS = exports.REALTIME_MODEL_PROVIDERS = exports.MODEL_T
4
4
  exports.MODELS_COLLECTION = "models";
5
5
  exports.MODEL_CONFIG_DEFAULTS_CONTEXT_WINDOW = "contextWindow";
6
6
  exports.MODEL_TYPES = ["realtime", "stt"];
7
- exports.REALTIME_MODEL_PROVIDERS = ["openai", "gemini", "xai"];
7
+ exports.REALTIME_MODEL_PROVIDERS = [
8
+ "openai",
9
+ "gemini",
10
+ "xai",
11
+ "elevenlabs",
12
+ ];
8
13
  exports.STT_MODEL_PROVIDERS = [
9
14
  "openai-stt",
10
15
  "google-stt",
@@ -1 +1 @@
1
- {"version":3,"file":"models.constants.js","sourceRoot":"","sources":["../../../src/configuration/models/models.constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,iBAAiB,GAAG,QAAQ,CAAC;AAE7B,QAAA,oCAAoC,GAAG,eAAe,CAAC;AAEvD,QAAA,WAAW,GAAG,CAAC,UAAU,EAAE,KAAK,CAAU,CAAC;AAE3C,QAAA,wBAAwB,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAU,CAAC;AAChE,QAAA,mBAAmB,GAAG;IACjC,YAAY;IACZ,YAAY;IACZ,cAAc;IACd,eAAe;IACf,mBAAmB;IACnB,YAAY;CACJ,CAAC"}
1
+ {"version":3,"file":"models.constants.js","sourceRoot":"","sources":["../../../src/configuration/models/models.constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,iBAAiB,GAAG,QAAQ,CAAC;AAE7B,QAAA,oCAAoC,GAAG,eAAe,CAAC;AAEvD,QAAA,WAAW,GAAG,CAAC,UAAU,EAAE,KAAK,CAAU,CAAC;AAE3C,QAAA,wBAAwB,GAAG;IACtC,QAAQ;IACR,QAAQ;IACR,KAAK;IACL,YAAY;CACJ,CAAC;AACE,QAAA,mBAAmB,GAAG;IACjC,YAAY;IACZ,YAAY;IACZ,cAAc;IACd,eAAe;IACf,mBAAmB;IACnB,YAAY;CACJ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -11,6 +11,7 @@ export * from "./municipal/muniIssues";
11
11
  export * from "./municipal/utils/types";
12
12
  export { websitalkMongodbClient, getDb as getWebsitalkDb, setDb as setWebsitalkDb, ObjectId as WebsitalkObjectId, } from "./websitalk";
13
13
  export * from "./websitalk/scans/scans.getters";
14
+ export * from "./websitalk/scans/scans.constants";
14
15
  export type * from "./websitalk/scans/scans.types";
15
16
  export * from "./websitalk/scanResources";
16
17
  export * from "./websitalk/websiteUrls";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAE5B,OAAO,EACL,0BAA0B,EAC1B,KAAK,IAAI,kBAAkB,EAC3B,KAAK,IAAI,kBAAkB,EAC3B,QAAQ,IAAI,qBAAqB,GAClC,MAAM,aAAa,CAAC;AACrB,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iCAAiC,CAAC;AAChD,cAAc,qBAAqB,CAAC;AACpC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AAExC,OAAO,EACL,sBAAsB,EACtB,KAAK,IAAI,cAAc,EACvB,KAAK,IAAI,cAAc,EACvB,QAAQ,IAAI,iBAAiB,GAC9B,MAAM,aAAa,CAAC;AACrB,cAAc,iCAAiC,CAAC;AAChD,mBAAmB,+BAA+B,CAAC;AACnD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6DAA6D,CAAC;AAC5E,cAAc,2DAA2D,CAAC;AAC1E,mBAAmB,yDAAyD,CAAC;AAE7E,OAAO,EACL,0BAA0B,EAC1B,KAAK,IAAI,kBAAkB,EAC3B,KAAK,IAAI,kBAAkB,GAC5B,MAAM,iBAAiB,CAAC;AACzB,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gCAAgC,CAAC;AAE/C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,YAAY,EAAE,qBAAqB,IAAI,WAAW,EAAE,MAAM,SAAS,CAAC;AACpE,OAAO,EAAE,mBAAmB,IAAI,cAAc,EAAE,MAAM,SAAS,CAAC;AAChE,YAAY,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAE5B,OAAO,EACL,0BAA0B,EAC1B,KAAK,IAAI,kBAAkB,EAC3B,KAAK,IAAI,kBAAkB,EAC3B,QAAQ,IAAI,qBAAqB,GAClC,MAAM,aAAa,CAAC;AACrB,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iCAAiC,CAAC;AAChD,cAAc,qBAAqB,CAAC;AACpC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AAExC,OAAO,EACL,sBAAsB,EACtB,KAAK,IAAI,cAAc,EACvB,KAAK,IAAI,cAAc,EACvB,QAAQ,IAAI,iBAAiB,GAC9B,MAAM,aAAa,CAAC;AACrB,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,mBAAmB,+BAA+B,CAAC;AACnD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6DAA6D,CAAC;AAC5E,cAAc,2DAA2D,CAAC;AAC1E,mBAAmB,yDAAyD,CAAC;AAE7E,OAAO,EACL,0BAA0B,EAC1B,KAAK,IAAI,kBAAkB,EAC3B,KAAK,IAAI,kBAAkB,GAC5B,MAAM,iBAAiB,CAAC;AACzB,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gCAAgC,CAAC;AAE/C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,YAAY,EAAE,qBAAqB,IAAI,WAAW,EAAE,MAAM,SAAS,CAAC;AACpE,OAAO,EAAE,mBAAmB,IAAI,cAAc,EAAE,MAAM,SAAS,CAAC;AAChE,YAAY,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC"}
package/dist/index.js CHANGED
@@ -37,6 +37,7 @@ Object.defineProperty(exports, "getWebsitalkDb", { enumerable: true, get: functi
37
37
  Object.defineProperty(exports, "setWebsitalkDb", { enumerable: true, get: function () { return websitalk_1.setDb; } });
38
38
  Object.defineProperty(exports, "WebsitalkObjectId", { enumerable: true, get: function () { return websitalk_1.ObjectId; } });
39
39
  __exportStar(require("./websitalk/scans/scans.getters"), exports);
40
+ __exportStar(require("./websitalk/scans/scans.constants"), exports);
40
41
  __exportStar(require("./websitalk/scanResources"), exports);
41
42
  __exportStar(require("./websitalk/websiteUrls"), exports);
42
43
  __exportStar(require("./websitalk/knowledgeDocuments/knowledgeDocuments.constants"), exports);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,uBAAuB;AACvB,8CAA4B;AAC5B,+CAA6B;AAC7B,8CAA4B;AAE5B,yCAKqB;AAJnB,uHAAA,0BAA0B,OAAA;AAC1B,+GAAA,KAAK,OAAsB;AAC3B,+GAAA,KAAK,OAAsB;AAC3B,kHAAA,QAAQ,OAAyB;AAEnC,qDAAmC;AACnC,sDAAoC;AACpC,kEAAgD;AAChD,sDAAoC;AACpC,iEAA+C;AAC/C,yDAAuC;AACvC,0DAAwC;AAExC,yCAKqB;AAJnB,mHAAA,sBAAsB,OAAA;AACtB,2GAAA,KAAK,OAAkB;AACvB,2GAAA,KAAK,OAAkB;AACvB,8GAAA,QAAQ,OAAqB;AAE/B,kEAAgD;AAEhD,4DAA0C;AAC1C,0DAAwC;AACxC,8FAA4E;AAC5E,4FAA0E;AAG1E,iDAIyB;AAHvB,2HAAA,0BAA0B,OAAA;AAC1B,mHAAA,KAAK,OAAsB;AAC3B,mHAAA,KAAK,OAAsB;AAE7B,0DAAwC;AACxC,yDAAuC;AACvC,iEAA+C;AAE/C,mCAAmC;AAA1B,mGAAA,QAAQ,OAAA;AAGjB,mCAAgE;AAAvD,yGAAA,mBAAmB,OAAkB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,uBAAuB;AACvB,8CAA4B;AAC5B,+CAA6B;AAC7B,8CAA4B;AAE5B,yCAKqB;AAJnB,uHAAA,0BAA0B,OAAA;AAC1B,+GAAA,KAAK,OAAsB;AAC3B,+GAAA,KAAK,OAAsB;AAC3B,kHAAA,QAAQ,OAAyB;AAEnC,qDAAmC;AACnC,sDAAoC;AACpC,kEAAgD;AAChD,sDAAoC;AACpC,iEAA+C;AAC/C,yDAAuC;AACvC,0DAAwC;AAExC,yCAKqB;AAJnB,mHAAA,sBAAsB,OAAA;AACtB,2GAAA,KAAK,OAAkB;AACvB,2GAAA,KAAK,OAAkB;AACvB,8GAAA,QAAQ,OAAqB;AAE/B,kEAAgD;AAChD,oEAAkD;AAElD,4DAA0C;AAC1C,0DAAwC;AACxC,8FAA4E;AAC5E,4FAA0E;AAG1E,iDAIyB;AAHvB,2HAAA,0BAA0B,OAAA;AAC1B,mHAAA,KAAK,OAAsB;AAC3B,mHAAA,KAAK,OAAsB;AAE7B,0DAAwC;AACxC,yDAAuC;AACvC,iEAA+C;AAE/C,mCAAmC;AAA1B,mGAAA,QAAQ,OAAA;AAGjB,mCAAgE;AAAvD,yGAAA,mBAAmB,OAAkB"}
@@ -0,0 +1,10 @@
1
+ import { AnyBulkWriteOperation, BulkWriteOptions, BulkWriteResult } from "mongodb";
2
+ import { DepartmentSubject } from "./departmentsSubjects.types";
3
+ /**
4
+ * Generic batch write for the departmentsSubjects collection — a thin passthrough to the
5
+ * driver's bulkWrite, with no diffing/key-building/business logic. `operations` must be
6
+ * non-empty (the driver throws on an empty batch). Errors (including partial failures under
7
+ * `{ ordered: false }`) propagate unchanged, so callers can still catch `MongoBulkWriteError`.
8
+ */
9
+ export declare const bulkWriteDepartmentsSubjects: (operations: AnyBulkWriteOperation<DepartmentSubject>[], options?: BulkWriteOptions) => Promise<BulkWriteResult>;
10
+ //# sourceMappingURL=departmentsSubjects.setters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"departmentsSubjects.setters.d.ts","sourceRoot":"","sources":["../../../src/municipal/departmentsSubjects/departmentsSubjects.setters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAGhE;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,GACvC,YAAY,qBAAqB,CAAC,iBAAiB,CAAC,EAAE,EACtD,UAAU,gBAAgB,KACzB,OAAO,CAAC,eAAe,CAEzB,CAAC"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.bulkWriteDepartmentsSubjects = void 0;
4
+ const departmentsSubjects_getters_1 = require("./departmentsSubjects.getters");
5
+ /**
6
+ * Generic batch write for the departmentsSubjects collection — a thin passthrough to the
7
+ * driver's bulkWrite, with no diffing/key-building/business logic. `operations` must be
8
+ * non-empty (the driver throws on an empty batch). Errors (including partial failures under
9
+ * `{ ordered: false }`) propagate unchanged, so callers can still catch `MongoBulkWriteError`.
10
+ */
11
+ const bulkWriteDepartmentsSubjects = async (operations, options) => {
12
+ return (0, departmentsSubjects_getters_1.getDepartmentsSubjectsCollection)().bulkWrite(operations, options);
13
+ };
14
+ exports.bulkWriteDepartmentsSubjects = bulkWriteDepartmentsSubjects;
15
+ //# sourceMappingURL=departmentsSubjects.setters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"departmentsSubjects.setters.js","sourceRoot":"","sources":["../../../src/municipal/departmentsSubjects/departmentsSubjects.setters.ts"],"names":[],"mappings":";;;AAEA,+EAAiF;AAEjF;;;;;GAKG;AACI,MAAM,4BAA4B,GAAG,KAAK,EAC/C,UAAsD,EACtD,OAA0B,EACA,EAAE;IAC5B,OAAO,IAAA,8DAAgC,GAAE,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC3E,CAAC,CAAC;AALW,QAAA,4BAA4B,gCAKvC"}
@@ -0,0 +1,10 @@
1
+ import { AnyBulkWriteOperation, BulkWriteOptions, BulkWriteResult } from "mongodb";
2
+ import { Street } from "./streets.types";
3
+ /**
4
+ * Generic batch write for the streets collection — a thin passthrough to the driver's
5
+ * bulkWrite, with no diffing/key-building/business logic. `operations` must be non-empty
6
+ * (the driver throws on an empty batch). Errors (including partial failures under
7
+ * `{ ordered: false }`) propagate unchanged, so callers can still catch `MongoBulkWriteError`.
8
+ */
9
+ export declare const bulkWriteStreets: (operations: AnyBulkWriteOperation<Street>[], options?: BulkWriteOptions) => Promise<BulkWriteResult>;
10
+ //# sourceMappingURL=streets.setters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streets.setters.d.ts","sourceRoot":"","sources":["../../../src/municipal/streets/streets.setters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AACnF,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAGzC;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAC3B,YAAY,qBAAqB,CAAC,MAAM,CAAC,EAAE,EAC3C,UAAU,gBAAgB,KACzB,OAAO,CAAC,eAAe,CAEzB,CAAC"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.bulkWriteStreets = void 0;
4
+ const streets_getters_1 = require("./streets.getters");
5
+ /**
6
+ * Generic batch write for the streets collection — a thin passthrough to the driver's
7
+ * bulkWrite, with no diffing/key-building/business logic. `operations` must be non-empty
8
+ * (the driver throws on an empty batch). Errors (including partial failures under
9
+ * `{ ordered: false }`) propagate unchanged, so callers can still catch `MongoBulkWriteError`.
10
+ */
11
+ const bulkWriteStreets = async (operations, options) => {
12
+ return (0, streets_getters_1.getStreetsCollection)().bulkWrite(operations, options);
13
+ };
14
+ exports.bulkWriteStreets = bulkWriteStreets;
15
+ //# sourceMappingURL=streets.setters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streets.setters.js","sourceRoot":"","sources":["../../../src/municipal/streets/streets.setters.ts"],"names":[],"mappings":";;;AAEA,uDAAyD;AAEzD;;;;;GAKG;AACI,MAAM,gBAAgB,GAAG,KAAK,EACnC,UAA2C,EAC3C,OAA0B,EACA,EAAE;IAC5B,OAAO,IAAA,sCAAoB,GAAE,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC/D,CAAC,CAAC;AALW,QAAA,gBAAgB,oBAK3B"}
@@ -0,0 +1,5 @@
1
+ export * from "./reconcile.types";
2
+ export * from "./reconcile.ops";
3
+ export * from "./reconcile.diff";
4
+ export * from "./reconcile.execute";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reconcile/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./reconcile.types"), exports);
18
+ __exportStar(require("./reconcile.ops"), exports);
19
+ __exportStar(require("./reconcile.diff"), exports);
20
+ __exportStar(require("./reconcile.execute"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/reconcile/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,kDAAgC;AAChC,mDAAiC;AACjC,sDAAoC"}
@@ -0,0 +1,4 @@
1
+ import { Document } from "mongodb";
2
+ import { ReconcileConfig, ReconcileDiffResult } from "./reconcile.types";
3
+ export declare function computeReconcileDiff<TSource, TDb extends Document, TKey extends string | number>(config: ReconcileConfig<TSource, TDb, TKey>, now?: Date): ReconcileDiffResult<TDb>;
4
+ //# sourceMappingURL=reconcile.diff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile.diff.d.ts","sourceRoot":"","sources":["../../src/reconcile/reconcile.diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAEzE,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,GAAG,SAAS,QAAQ,EAAE,IAAI,SAAS,MAAM,GAAG,MAAM,EAC9F,MAAM,EAAE,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EAC3C,GAAG,GAAE,IAAiB,GACrB,mBAAmB,CAAC,GAAG,CAAC,CA8C1B"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.computeReconcileDiff = computeReconcileDiff;
4
+ function computeReconcileDiff(config, now = new Date()) {
5
+ const { source, dbRecords, getSourceKey, getDbKey, buildInsertOp, buildUpdateOp, buildDeactivateOp, shouldDeactivate = () => true, } = config;
6
+ const dbByKey = new Map(dbRecords.map((dbRecord) => [getDbKey(dbRecord), dbRecord]));
7
+ const sourceKeys = new Set();
8
+ const bulkOps = [];
9
+ const counts = { inserted: 0, updated: 0, deactivated: 0, exists: 0 };
10
+ for (const sourceRecord of source) {
11
+ const key = getSourceKey(sourceRecord);
12
+ sourceKeys.add(key);
13
+ const dbRecord = dbByKey.get(key);
14
+ if (!dbRecord) {
15
+ bulkOps.push(buildInsertOp(sourceRecord, now));
16
+ counts.inserted++;
17
+ continue;
18
+ }
19
+ const updateOp = buildUpdateOp(sourceRecord, dbRecord, now);
20
+ if (updateOp) {
21
+ bulkOps.push(updateOp);
22
+ counts.updated++;
23
+ }
24
+ else {
25
+ counts.exists++;
26
+ }
27
+ }
28
+ for (const dbRecord of dbRecords) {
29
+ if (!sourceKeys.has(getDbKey(dbRecord)) && shouldDeactivate(dbRecord)) {
30
+ bulkOps.push(buildDeactivateOp(dbRecord, now));
31
+ counts.deactivated++;
32
+ }
33
+ }
34
+ return { bulkOps, counts };
35
+ }
36
+ //# sourceMappingURL=reconcile.diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile.diff.js","sourceRoot":"","sources":["../../src/reconcile/reconcile.diff.ts"],"names":[],"mappings":";;AAGA,oDAiDC;AAjDD,SAAgB,oBAAoB,CAClC,MAA2C,EAC3C,MAAY,IAAI,IAAI,EAAE;IAEtB,MAAM,EACJ,MAAM,EACN,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,gBAAgB,GAAG,GAAG,EAAE,CAAC,IAAI,GAC9B,GAAG,MAAM,CAAC;IAEX,MAAM,OAAO,GAAG,IAAI,GAAG,CAAY,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAChG,MAAM,UAAU,GAAG,IAAI,GAAG,EAAQ,CAAC;IAEnC,MAAM,OAAO,GAAwC,EAAE,CAAC;IACxD,MAAM,MAAM,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IAEtE,KAAK,MAAM,YAAY,IAAI,MAAM,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;QACvC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAElC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,QAAQ,EAAE,CAAC;YAClB,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,aAAa,CAAC,YAAY,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC5D,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvB,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtE,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { BulkWriteOptions, Collection, Document } from "mongodb";
2
+ import { BulkWriteOp } from "./reconcile.types";
3
+ export interface ExecuteReconcileBulkWriteResult {
4
+ errors: string[];
5
+ }
6
+ export declare function executeReconcileBulkWrite<TDb extends Document>(collection: Collection<TDb>, bulkOps: BulkWriteOp<TDb>[], options?: BulkWriteOptions): Promise<ExecuteReconcileBulkWriteResult>;
7
+ //# sourceMappingURL=reconcile.execute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile.execute.d.ts","sourceRoot":"","sources":["../../src/reconcile/reconcile.execute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,QAAQ,EAAuB,MAAM,SAAS,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,WAAW,+BAA+B;IAC9C,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAsB,yBAAyB,CAAC,GAAG,SAAS,QAAQ,EAClE,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,EAC3B,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,EAC3B,OAAO,GAAE,gBAAqC,GAC7C,OAAO,CAAC,+BAA+B,CAAC,CAa1C"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.executeReconcileBulkWrite = executeReconcileBulkWrite;
4
+ const mongodb_1 = require("mongodb");
5
+ async function executeReconcileBulkWrite(collection, bulkOps, options = { ordered: false }) {
6
+ if (bulkOps.length === 0)
7
+ return { errors: [] };
8
+ try {
9
+ await collection.bulkWrite(bulkOps, options);
10
+ return { errors: [] };
11
+ }
12
+ catch (err) {
13
+ if (err instanceof mongodb_1.MongoBulkWriteError) {
14
+ const writeErrors = [err.writeErrors].flat();
15
+ return { errors: writeErrors.map((writeError) => `Write error: ${writeError.errmsg}`) };
16
+ }
17
+ return { errors: [err instanceof Error ? err.message : String(err)] };
18
+ }
19
+ }
20
+ //# sourceMappingURL=reconcile.execute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile.execute.js","sourceRoot":"","sources":["../../src/reconcile/reconcile.execute.ts"],"names":[],"mappings":";;AAOA,8DAiBC;AAxBD,qCAAsF;AAO/E,KAAK,UAAU,yBAAyB,CAC7C,UAA2B,EAC3B,OAA2B,EAC3B,UAA4B,EAAE,OAAO,EAAE,KAAK,EAAE;IAE9C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAEhD,IAAI,CAAC;QACH,MAAM,UAAU,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7C,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,6BAAmB,EAAE,CAAC;YACvC,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7C,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,gBAAgB,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;QAC1F,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;IACxE,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { Document, Filter } from "mongodb";
2
+ import { BulkWriteOp } from "./reconcile.types";
3
+ /**
4
+ * updateOne with a plain $set — e.g. a deactivation:
5
+ * buildSetOp({ _id }, { isActive: false, updatedAt: now })
6
+ */
7
+ export declare function buildSetOp<T extends Document>(filter: Filter<T>, setFields: Partial<T>): BulkWriteOp<T>;
8
+ /**
9
+ * updateOne with $set + $setOnInsert + upsert:true.
10
+ */
11
+ export declare function buildUpsertOp<T extends Document>(filter: Filter<T>, setFields: Partial<T>, setOnInsertFields?: Partial<T>): BulkWriteOp<T>;
12
+ //# sourceMappingURL=reconcile.ops.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile.ops.d.ts","sourceRoot":"","sources":["../../src/reconcile/reconcile.ops.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAEvG;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,QAAQ,EAC9C,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EACjB,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,EACrB,iBAAiB,GAAE,OAAO,CAAC,CAAC,CAAM,GACjC,WAAW,CAAC,CAAC,CAAC,CAQhB"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildSetOp = buildSetOp;
4
+ exports.buildUpsertOp = buildUpsertOp;
5
+ /**
6
+ * updateOne with a plain $set — e.g. a deactivation:
7
+ * buildSetOp({ _id }, { isActive: false, updatedAt: now })
8
+ */
9
+ function buildSetOp(filter, setFields) {
10
+ return { updateOne: { filter, update: { $set: setFields } } };
11
+ }
12
+ /**
13
+ * updateOne with $set + $setOnInsert + upsert:true.
14
+ */
15
+ function buildUpsertOp(filter, setFields, setOnInsertFields = {}) {
16
+ return {
17
+ updateOne: {
18
+ filter,
19
+ update: { $set: setFields, $setOnInsert: setOnInsertFields },
20
+ upsert: true,
21
+ },
22
+ };
23
+ }
24
+ //# sourceMappingURL=reconcile.ops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile.ops.js","sourceRoot":"","sources":["../../src/reconcile/reconcile.ops.ts"],"names":[],"mappings":";;AAOA,gCAEC;AAKD,sCAYC;AAvBD;;;GAGG;AACH,SAAgB,UAAU,CAAqB,MAAiB,EAAE,SAAqB;IACrF,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;AAChE,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa,CAC3B,MAAiB,EACjB,SAAqB,EACrB,oBAAgC,EAAE;IAElC,OAAO;QACL,SAAS,EAAE;YACT,MAAM;YACN,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,iBAAiB,EAAE;YAC5D,MAAM,EAAE,IAAI;SACb;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { AnyBulkWriteOperation, Document } from "mongodb";
2
+ export type BulkWriteOp<T extends Document> = AnyBulkWriteOperation<T>;
3
+ export interface ReconcileCounts {
4
+ inserted: number;
5
+ updated: number;
6
+ deactivated: number;
7
+ exists: number;
8
+ }
9
+ export interface ReconcileDiffResult<TDb extends Document> {
10
+ bulkOps: BulkWriteOp<TDb>[];
11
+ counts: ReconcileCounts;
12
+ }
13
+ export interface ReconcileConfig<TSource, TDb extends Document, TKey extends string | number> {
14
+ source: TSource[];
15
+ dbRecords: TDb[];
16
+ getSourceKey: (source: TSource) => TKey;
17
+ getDbKey: (dbRecord: TDb) => TKey;
18
+ buildInsertOp: (source: TSource, now: Date) => BulkWriteOp<TDb>;
19
+ /** Return null when unchanged — counted as `exists`, no op emitted. */
20
+ buildUpdateOp: (source: TSource, existing: TDb, now: Date) => BulkWriteOp<TDb> | null;
21
+ /**
22
+ * Called for every dbRecord missing from source (and passing shouldDeactivate).
23
+ * The caller decides the op shape entirely — typically via buildSetOp.
24
+ */
25
+ buildDeactivateOp: (dbRecord: TDb, now: Date) => BulkWriteOp<TDb>;
26
+ /**
27
+ * Whether a missing dbRecord should even be considered for deactivation.
28
+ * Defaults to always true — core-db has no opinion on what "already inactive" means.
29
+ */
30
+ shouldDeactivate?: (dbRecord: TDb) => boolean;
31
+ }
32
+ //# sourceMappingURL=reconcile.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile.types.d.ts","sourceRoot":"","sources":["../../src/reconcile/reconcile.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE1D,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,QAAQ,IAAI,qBAAqB,CAAC,CAAC,CAAC,CAAC;AAEvE,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB,CAAC,GAAG,SAAS,QAAQ;IACvD,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;IAC5B,MAAM,EAAE,eAAe,CAAC;CACzB;AAED,MAAM,WAAW,eAAe,CAAC,OAAO,EAAE,GAAG,SAAS,QAAQ,EAAE,IAAI,SAAS,MAAM,GAAG,MAAM;IAC1F,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,SAAS,EAAE,GAAG,EAAE,CAAC;IACjB,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,QAAQ,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,IAAI,CAAC;IAClC,aAAa,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,KAAK,WAAW,CAAC,GAAG,CAAC,CAAC;IAChE,uEAAuE;IACvE,aAAa,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IACtF;;;OAGG;IACH,iBAAiB,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,WAAW,CAAC,GAAG,CAAC,CAAC;IAClE;;;OAGG;IACH,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,OAAO,CAAC;CAC/C"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=reconcile.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile.types.js","sourceRoot":"","sources":["../../src/reconcile/reconcile.types.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"scans.d.ts","sourceRoot":"","sources":["../../../../src/test-utils/factories/websitalk/scans.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE/C,eAAO,MAAM,WAAW,qEAmBrB,CAAC;AAEJ,wBAAgB,iBAAiB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAEjE"}
1
+ {"version":3,"file":"scans.d.ts","sourceRoot":"","sources":["../../../../src/test-utils/factories/websitalk/scans.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE/C,eAAO,MAAM,WAAW,qEAoBrB,CAAC;AAEJ,wBAAgB,iBAAiB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAEjE"}
@@ -20,6 +20,7 @@ exports.scanFactory = fishery_1.Factory.define(() => ({
20
20
  createdAt: new Date(),
21
21
  updatedAt: new Date(),
22
22
  startedAt: new Date(),
23
+ pausedAt: null,
23
24
  completedAt: null,
24
25
  pagesCompleted: 0,
25
26
  pagesFailedPermanent: 0,
@@ -1 +1 @@
1
- {"version":3,"file":"scans.js","sourceRoot":"","sources":["../../../../src/test-utils/factories/websitalk/scans.ts"],"names":[],"mappings":";;;AA0BA,8CAEC;AA5BD,qCAAkC;AAClC,2CAAwC;AACxC,qCAAmC;AAGtB,QAAA,WAAW,GAAG,iBAAO,CAAC,MAAM,CAAO,GAAG,EAAE,CAAC,CAAC;IACrD,QAAQ,EAAE,aAAK,CAAC,MAAM,CAAC,IAAI,EAAE;IAC7B,YAAY,EAAE,IAAI,kBAAQ,EAAE,CAAC,QAAQ,EAAE;IACvC,MAAM,EAAE,UAAU;IAClB,gBAAgB,EAAE,CAAC;IACnB,YAAY,EAAE,CAAC;IACf,YAAY,EAAE,CAAC;IACf,OAAO,EAAE,EAAE;IACX,UAAU,EAAE;QACV,GAAG,EAAE,aAAK,CAAC,QAAQ,CAAC,GAAG,EAAE;QACzB,UAAU,EAAE,aAAa;KAC1B;IACD,SAAS,EAAE,IAAI,IAAI,EAAE;IACrB,SAAS,EAAE,IAAI,IAAI,EAAE;IACrB,SAAS,EAAE,IAAI,IAAI,EAAE;IACrB,WAAW,EAAE,IAAI;IACjB,cAAc,EAAE,CAAC;IACjB,oBAAoB,EAAE,CAAC;IACvB,cAAc,EAAE,CAAC;CAClB,CAAC,CAAC,CAAC;AAEJ,SAAgB,iBAAiB,CAAC,SAAyB;IACzD,OAAO,mBAAW,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACtC,CAAC"}
1
+ {"version":3,"file":"scans.js","sourceRoot":"","sources":["../../../../src/test-utils/factories/websitalk/scans.ts"],"names":[],"mappings":";;;AA2BA,8CAEC;AA7BD,qCAAkC;AAClC,2CAAwC;AACxC,qCAAmC;AAGtB,QAAA,WAAW,GAAG,iBAAO,CAAC,MAAM,CAAO,GAAG,EAAE,CAAC,CAAC;IACrD,QAAQ,EAAE,aAAK,CAAC,MAAM,CAAC,IAAI,EAAE;IAC7B,YAAY,EAAE,IAAI,kBAAQ,EAAE,CAAC,QAAQ,EAAE;IACvC,MAAM,EAAE,UAAU;IAClB,gBAAgB,EAAE,CAAC;IACnB,YAAY,EAAE,CAAC;IACf,YAAY,EAAE,CAAC;IACf,OAAO,EAAE,EAAE;IACX,UAAU,EAAE;QACV,GAAG,EAAE,aAAK,CAAC,QAAQ,CAAC,GAAG,EAAE;QACzB,UAAU,EAAE,aAAa;KAC1B;IACD,SAAS,EAAE,IAAI,IAAI,EAAE;IACrB,SAAS,EAAE,IAAI,IAAI,EAAE;IACrB,SAAS,EAAE,IAAI,IAAI,EAAE;IACrB,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE,IAAI;IACjB,cAAc,EAAE,CAAC;IACjB,oBAAoB,EAAE,CAAC;IACvB,cAAc,EAAE,CAAC;CAClB,CAAC,CAAC,CAAC;AAEJ,SAAgB,iBAAiB,CAAC,SAAyB;IACzD,OAAO,mBAAW,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACtC,CAAC"}
@@ -6,4 +6,5 @@ export declare const getScanResourceCountsByScanIds: (scanIds: string[]) => Prom
6
6
  export declare const listPageSummariesByScanIds: (scanIds: string[]) => Promise<ScanResourcePageSummary[]>;
7
7
  export declare const getScanPages: (query: ScanPagesQuery) => Promise<PagedResult<ScanResourceBoardProjection>>;
8
8
  export declare const getScanResourceById: (scanId: string, pageId: string) => Promise<ScanResourceDoc | null>;
9
+ export declare const deleteScanResourcesByScanId: (scanId: string) => Promise<number>;
9
10
  //# sourceMappingURL=scanResources.getters.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scanResources.getters.d.ts","sourceRoot":"","sources":["../../../src/websitalk/scanResources/scanResources.getters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAoB,MAAM,SAAS,CAAC;AAUvD,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,YAAY,EACZ,2BAA2B,EAC3B,eAAe,EACf,uBAAuB,EACvB,aAAa,EACd,MAAM,uBAAuB,CAAC;AAQ/B,eAAO,MAAM,0BAA0B,QAAO,UAAU,CAAC,YAAY,CACR,CAAC;AAE9D,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,MAAM,KACb,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAYhD,CAAC;AAEF,eAAO,MAAM,8BAA8B,GACzC,SAAS,MAAM,EAAE,KAChB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAWhC,CAAC;AAEF,eAAO,MAAM,0BAA0B,GACrC,SAAS,MAAM,EAAE,KAChB,OAAO,CAAC,uBAAuB,EAAE,CAYnC,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,OAAO,cAAc,KACpB,OAAO,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAoClD,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,MAAM,EACd,QAAQ,MAAM,KACb,OAAO,CAAC,eAAe,GAAG,IAAI,CAC4C,CAAC"}
1
+ {"version":3,"file":"scanResources.getters.d.ts","sourceRoot":"","sources":["../../../src/websitalk/scanResources/scanResources.getters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAoB,MAAM,SAAS,CAAC;AAUvD,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,YAAY,EACZ,2BAA2B,EAC3B,eAAe,EACf,uBAAuB,EACvB,aAAa,EACd,MAAM,uBAAuB,CAAC;AAQ/B,eAAO,MAAM,0BAA0B,QAAO,UAAU,CAAC,YAAY,CACR,CAAC;AAE9D,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,MAAM,KACb,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAYhD,CAAC;AAEF,eAAO,MAAM,8BAA8B,GACzC,SAAS,MAAM,EAAE,KAChB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAWhC,CAAC;AAEF,eAAO,MAAM,0BAA0B,GACrC,SAAS,MAAM,EAAE,KAChB,OAAO,CAAC,uBAAuB,EAAE,CAYnC,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,OAAO,cAAc,KACpB,OAAO,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAoClD,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,MAAM,EACd,QAAQ,MAAM,KACb,OAAO,CAAC,eAAe,GAAG,IAAI,CAC4C,CAAC;AAE9E,eAAO,MAAM,2BAA2B,GACtC,QAAQ,MAAM,KACb,OAAO,CAAC,MAAM,CAGhB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getScanResourceById = exports.getScanPages = exports.listPageSummariesByScanIds = exports.getScanResourceCountsByScanIds = exports.getScanKpiCounts = exports.getScanResourcesCollection = void 0;
3
+ exports.deleteScanResourcesByScanId = exports.getScanResourceById = exports.getScanPages = exports.listPageSummariesByScanIds = exports.getScanResourceCountsByScanIds = exports.getScanKpiCounts = exports.getScanResourcesCollection = void 0;
4
4
  const mongodb_1 = require("mongodb");
5
5
  const index_1 = require("../index");
6
6
  const scanResources_constants_1 = require("./scanResources.constants");
@@ -77,4 +77,9 @@ const getScanPages = async (query) => {
77
77
  exports.getScanPages = getScanPages;
78
78
  const getScanResourceById = async (scanId, pageId) => (0, exports.getScanResourcesCollection)().findOne({ scanId, _id: new mongodb_1.ObjectId(pageId) });
79
79
  exports.getScanResourceById = getScanResourceById;
80
+ const deleteScanResourcesByScanId = async (scanId) => {
81
+ const result = await (0, exports.getScanResourcesCollection)().deleteMany({ scanId });
82
+ return result.deletedCount;
83
+ };
84
+ exports.deleteScanResourcesByScanId = deleteScanResourcesByScanId;
80
85
  //# sourceMappingURL=scanResources.getters.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scanResources.getters.js","sourceRoot":"","sources":["../../../src/websitalk/scanResources/scanResources.getters.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scanResources.getters.js","sourceRoot":"","sources":["../../../src/websitalk/scanResources/scanResources.getters.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,8 @@ export declare const SCAN_STATUSES: {
6
6
  readonly COMPLETED: "COMPLETED";
7
7
  readonly FAILED: "FAILED";
8
8
  readonly OVERWRITTEN: "OVERWRITTEN";
9
+ readonly PAUSED: "PAUSED";
10
+ readonly CANCELED: "CANCELED";
9
11
  };
10
- export declare const FINISHED_SCAN_STATUSES: readonly ["COMPLETED", "FAILED", "OVERWRITTEN"];
12
+ export declare const FINISHED_SCAN_STATUSES: readonly ["COMPLETED", "FAILED", "OVERWRITTEN", "CANCELED"];
11
13
  //# sourceMappingURL=scans.constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scans.constants.d.ts","sourceRoot":"","sources":["../../../src/websitalk/scans/scans.constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa;;;;;;;;CAQhB,CAAC;AAEX,eAAO,MAAM,sBAAsB,iDAIzB,CAAC"}
1
+ {"version":3,"file":"scans.constants.d.ts","sourceRoot":"","sources":["../../../src/websitalk/scans/scans.constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa;;;;;;;;;;CAUhB,CAAC;AAEX,eAAO,MAAM,sBAAsB,6DAKzB,CAAC"}
@@ -9,10 +9,13 @@ exports.SCAN_STATUSES = {
9
9
  COMPLETED: "COMPLETED",
10
10
  FAILED: "FAILED",
11
11
  OVERWRITTEN: "OVERWRITTEN",
12
+ PAUSED: "PAUSED",
13
+ CANCELED: "CANCELED",
12
14
  };
13
15
  exports.FINISHED_SCAN_STATUSES = [
14
16
  exports.SCAN_STATUSES.COMPLETED,
15
17
  exports.SCAN_STATUSES.FAILED,
16
18
  exports.SCAN_STATUSES.OVERWRITTEN,
19
+ exports.SCAN_STATUSES.CANCELED,
17
20
  ];
18
21
  //# sourceMappingURL=scans.constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scans.constants.js","sourceRoot":"","sources":["../../../src/websitalk/scans/scans.constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,aAAa,GAAG;IAC3B,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;IACpB,UAAU,EAAE,YAAY;IACxB,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,aAAa;CAClB,CAAC;AAEE,QAAA,sBAAsB,GAAG;IACpC,qBAAa,CAAC,SAAS;IACvB,qBAAa,CAAC,MAAM;IACpB,qBAAa,CAAC,WAAW;CACjB,CAAC"}
1
+ {"version":3,"file":"scans.constants.js","sourceRoot":"","sources":["../../../src/websitalk/scans/scans.constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,aAAa,GAAG;IAC3B,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;IACpB,UAAU,EAAE,YAAY;IACxB,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,aAAa;IAC1B,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;CACZ,CAAC;AAEE,QAAA,sBAAsB,GAAG;IACpC,qBAAa,CAAC,SAAS;IACvB,qBAAa,CAAC,MAAM;IACpB,qBAAa,CAAC,WAAW;IACzB,qBAAa,CAAC,QAAQ;CACd,CAAC"}
@@ -16,4 +16,5 @@ export declare const countScans: (query: Filter<Scan>) => Promise<number>;
16
16
  export declare const hasScansForWebsiteUrl: (websiteUrlId: string) => Promise<boolean>;
17
17
  export declare const getLatestCompletedScanByWebsiteUrl: (websiteUrlId: string) => Promise<ScanDoc | null>;
18
18
  export declare const deleteScansByWebsiteUrl: (websiteUrlId: string) => Promise<number>;
19
+ export declare const deleteScanById: (scanId: ObjectId) => Promise<boolean>;
19
20
  //# sourceMappingURL=scans.getters.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scans.getters.d.ts","sourceRoot":"","sources":["../../../src/websitalk/scans/scans.getters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEvD,OAAO,EAEL,YAAY,EACb,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAInD,eAAO,MAAM,kBAAkB,QAAO,UAAU,CAAC,IAAI,CAEpD,CAAC;AAEF,eAAO,MAAM,4BAA4B,GACvC,UAAU,MAAM,EAChB,WAAW,IAAI,EACf,SAAS,IAAI,KACZ,OAAO,CAAC,OAAO,EAAE,CAUnB,CAAC;AAEF,eAAO,MAAM,iCAAiC,GAAI,CAAC,SAAS,MAAM,IAAI,EACpE,UAAU,MAAM,EAChB,WAAW,IAAI,EACf,SAAS,IAAI,EACb,QAAQ,CAAC,EAAE,KACV,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,CAkBpC,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,MAAM,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc,CAAC,GAC3C,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC,qDAmB3C,CAAC;AAEF,eAAO,MAAM,WAAW,GAAU,IAAI,MAAM,KAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAEpE,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,cAAc,MAAM,KACnB,OAAO,CAAC,OAAO,EAAE,CAKnB,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACpC,cAAc,MAAM,KACnB,OAAO,CAAC,OAAO,GAAG,IAAI,CAKxB,CAAC;AAEF,eAAO,MAAM,6BAA6B,GACxC,cAAc,MAAM,KACnB,OAAO,CAAC,OAAO,GAAG,IAAI,CAMxB,CAAC;AAEF,eAAO,MAAM,2BAA2B,GACtC,UAAU,MAAM,KACf,OAAO,CAAC,OAAO,EAAE,CAQnB,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,QAAQ,QAAQ,EAChB,SAAS,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW,CAAC,CAAC,KACrD,OAAO,CAAC,OAAO,GAAG,IAAI,CAMxB,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,OAAO,MAAM,CAAC,IAAI,CAAC,EACnB,UAAU,YAAY,KACrB,OAAO,CAAC,OAAO,EAAE,CAGnB,CAAC;AAEF,eAAO,MAAM,UAAU,GAAU,OAAO,MAAM,CAAC,IAAI,CAAC,KAAG,OAAO,CAAC,MAAM,CAEpE,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,cAAc,MAAM,KACnB,OAAO,CAAC,OAAO,CAEjB,CAAC;AAEF,eAAO,MAAM,kCAAkC,GAC7C,cAAc,MAAM,KACnB,OAAO,CAAC,OAAO,GAAG,IAAI,CAKxB,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,cAAc,MAAM,KACnB,OAAO,CAAC,MAAM,CAGhB,CAAC"}
1
+ {"version":3,"file":"scans.getters.d.ts","sourceRoot":"","sources":["../../../src/websitalk/scans/scans.getters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEvD,OAAO,EAEL,YAAY,EACb,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAInD,eAAO,MAAM,kBAAkB,QAAO,UAAU,CAAC,IAAI,CAEpD,CAAC;AAEF,eAAO,MAAM,4BAA4B,GACvC,UAAU,MAAM,EAChB,WAAW,IAAI,EACf,SAAS,IAAI,KACZ,OAAO,CAAC,OAAO,EAAE,CAUnB,CAAC;AAEF,eAAO,MAAM,iCAAiC,GAAI,CAAC,SAAS,MAAM,IAAI,EACpE,UAAU,MAAM,EAChB,WAAW,IAAI,EACf,SAAS,IAAI,EACb,QAAQ,CAAC,EAAE,KACV,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,CAkBpC,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,MAAM,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc,CAAC,GAC3C,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC,qDAoB3C,CAAC;AAEF,eAAO,MAAM,WAAW,GAAU,IAAI,MAAM,KAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAEpE,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,cAAc,MAAM,KACnB,OAAO,CAAC,OAAO,EAAE,CAKnB,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACpC,cAAc,MAAM,KACnB,OAAO,CAAC,OAAO,GAAG,IAAI,CAKxB,CAAC;AAEF,eAAO,MAAM,6BAA6B,GACxC,cAAc,MAAM,KACnB,OAAO,CAAC,OAAO,GAAG,IAAI,CAMxB,CAAC;AAEF,eAAO,MAAM,2BAA2B,GACtC,UAAU,MAAM,KACf,OAAO,CAAC,OAAO,EAAE,CAQnB,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,QAAQ,QAAQ,EAChB,SAAS,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW,CAAC,CAAC,KACrD,OAAO,CAAC,OAAO,GAAG,IAAI,CAMxB,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,OAAO,MAAM,CAAC,IAAI,CAAC,EACnB,UAAU,YAAY,KACrB,OAAO,CAAC,OAAO,EAAE,CAGnB,CAAC;AAEF,eAAO,MAAM,UAAU,GAAU,OAAO,MAAM,CAAC,IAAI,CAAC,KAAG,OAAO,CAAC,MAAM,CAEpE,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,cAAc,MAAM,KACnB,OAAO,CAAC,OAAO,CAEjB,CAAC;AAEF,eAAO,MAAM,kCAAkC,GAC7C,cAAc,MAAM,KACnB,OAAO,CAAC,OAAO,GAAG,IAAI,CAKxB,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,cAAc,MAAM,KACnB,OAAO,CAAC,MAAM,CAGhB,CAAC;AAEF,eAAO,MAAM,cAAc,GAAU,QAAQ,QAAQ,KAAG,OAAO,CAAC,OAAO,CAGtE,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.deleteScansByWebsiteUrl = exports.getLatestCompletedScanByWebsiteUrl = exports.hasScansForWebsiteUrl = exports.countScans = exports.findScansByQuery = exports.updateScanDoc = exports.findInProgressScansByClient = exports.getInProgressScanByWebsiteUrl = exports.getLatestScanByWebsiteUrl = exports.getScansByWebsiteUrl = exports.getScanById = exports.createScanDoc = exports.getScanFieldsByClientAndDateRange = exports.getScansByClientAndDateRange = exports.getScansCollection = void 0;
3
+ exports.deleteScanById = exports.deleteScansByWebsiteUrl = exports.getLatestCompletedScanByWebsiteUrl = exports.hasScansForWebsiteUrl = exports.countScans = exports.findScansByQuery = exports.updateScanDoc = exports.findInProgressScansByClient = exports.getInProgressScanByWebsiteUrl = exports.getLatestScanByWebsiteUrl = exports.getScansByWebsiteUrl = exports.getScanById = exports.createScanDoc = exports.getScanFieldsByClientAndDateRange = exports.getScansByClientAndDateRange = exports.getScansCollection = void 0;
4
4
  const mongodb_1 = require("mongodb");
5
5
  const index_1 = require("../index");
6
6
  const query_utils_1 = require("../../talkpilot/utils/query.utils");
@@ -51,6 +51,7 @@ const createScanDoc = (scan) => {
51
51
  createdAt: now,
52
52
  updatedAt: now,
53
53
  startedAt: now,
54
+ pausedAt: null,
54
55
  completedAt: null,
55
56
  pagesCompleted: 0,
56
57
  pagesFailedPermanent: 0,
@@ -117,4 +118,9 @@ const deleteScansByWebsiteUrl = async (websiteUrlId) => {
117
118
  return result.deletedCount;
118
119
  };
119
120
  exports.deleteScansByWebsiteUrl = deleteScansByWebsiteUrl;
121
+ const deleteScanById = async (scanId) => {
122
+ const result = await (0, exports.getScansCollection)().deleteOne({ _id: scanId });
123
+ return result.deletedCount > 0;
124
+ };
125
+ exports.deleteScanById = deleteScanById;
120
126
  //# sourceMappingURL=scans.getters.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scans.getters.js","sourceRoot":"","sources":["../../../src/websitalk/scans/scans.getters.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scans.getters.js","sourceRoot":"","sources":["../../../src/websitalk/scans/scans.getters.ts"],"names":[],"mappings":"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"}
@@ -38,6 +38,7 @@ export type Scan = {
38
38
  createdAt: Date;
39
39
  updatedAt: Date;
40
40
  startedAt?: Date;
41
+ pausedAt?: Date | null;
41
42
  completedAt?: Date | null;
42
43
  pagesCompleted?: number;
43
44
  pagesFailedPermanent?: number;
@@ -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,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.61",
3
+ "version": "1.3.63",
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",
@@ -4,7 +4,12 @@ export const MODEL_CONFIG_DEFAULTS_CONTEXT_WINDOW = "contextWindow";
4
4
 
5
5
  export const MODEL_TYPES = ["realtime", "stt"] as const;
6
6
 
7
- export const REALTIME_MODEL_PROVIDERS = ["openai", "gemini", "xai"] as const;
7
+ export const REALTIME_MODEL_PROVIDERS = [
8
+ "openai",
9
+ "gemini",
10
+ "xai",
11
+ "elevenlabs",
12
+ ] as const;
8
13
  export const STT_MODEL_PROVIDERS = [
9
14
  "openai-stt",
10
15
  "google-stt",
package/src/index.ts CHANGED
@@ -24,6 +24,7 @@ export {
24
24
  ObjectId as WebsitalkObjectId,
25
25
  } from "./websitalk";
26
26
  export * from "./websitalk/scans/scans.getters";
27
+ export * from "./websitalk/scans/scans.constants";
27
28
  export type * from "./websitalk/scans/scans.types";
28
29
  export * from "./websitalk/scanResources";
29
30
  export * from "./websitalk/websiteUrls";
@@ -18,6 +18,7 @@ export const scanFactory = Factory.define<Scan>(() => ({
18
18
  createdAt: new Date(),
19
19
  updatedAt: new Date(),
20
20
  startedAt: new Date(),
21
+ pausedAt: null,
21
22
  completedAt: null,
22
23
  pagesCompleted: 0,
23
24
  pagesFailedPermanent: 0,
@@ -5,6 +5,7 @@ import {
5
5
  getScanPages,
6
6
  getScanResourceById,
7
7
  getScanResourceCountsByScanIds,
8
+ deleteScanResourcesByScanId,
8
9
  listPageSummariesByScanIds,
9
10
  } from "../scanResources.getters";
10
11
  import { URL_TASK_STATUSES } from "../scanResources.constants";
@@ -245,4 +246,22 @@ describe("db.websitalk.scanResources", () => {
245
246
  expect(result).toBeNull();
246
247
  });
247
248
  });
249
+
250
+ describe("deleteScanResourcesByScanId()", () => {
251
+ it("should delete all resources for the scan and return the count", async () => {
252
+ const scanId = new ObjectId().toString();
253
+ await getScanResourcesCollection().insertMany([
254
+ createScanResourceFixture({ scanId }),
255
+ createScanResourceFixture({ scanId }),
256
+ createScanResourceFixture({ scanId: new ObjectId().toString() }),
257
+ ]);
258
+
259
+ const deleted = await deleteScanResourcesByScanId(scanId);
260
+
261
+ expect(deleted).toBe(2);
262
+ expect(
263
+ await getScanResourcesCollection().countDocuments({ scanId }),
264
+ ).toBe(0);
265
+ });
266
+ });
248
267
  });
@@ -119,3 +119,10 @@ export const getScanResourceById = async (
119
119
  pageId: string,
120
120
  ): Promise<ScanResourceDoc | null> =>
121
121
  getScanResourcesCollection().findOne({ scanId, _id: new ObjectId(pageId) });
122
+
123
+ export const deleteScanResourcesByScanId = async (
124
+ scanId: string,
125
+ ): Promise<number> => {
126
+ const result = await getScanResourcesCollection().deleteMany({ scanId });
127
+ return result.deletedCount;
128
+ };
@@ -12,7 +12,9 @@ import {
12
12
  getInProgressScanByWebsiteUrl,
13
13
  getLatestCompletedScanByWebsiteUrl,
14
14
  deleteScansByWebsiteUrl,
15
+ deleteScanById,
15
16
  } from "../scans.getters";
17
+ import { FINISHED_SCAN_STATUSES, SCAN_STATUSES } from "../scans.constants";
16
18
  import { createScanFixture } from "../../../test-utils/factories";
17
19
  import { ObjectId } from "mongodb";
18
20
 
@@ -138,12 +140,33 @@ describe("db.websitalk.scans", () => {
138
140
  pagesSkipped: 0,
139
141
  skipped: [],
140
142
  siteChrome: {},
143
+ pausedAt: null,
141
144
  });
142
145
  expect(result?.createdAt).toBeInstanceOf(Date);
143
146
  expect(result?.updatedAt).toBeInstanceOf(Date);
144
147
  });
145
148
  });
146
149
 
150
+ describe("pausedAt", () => {
151
+ it("is set on pause and cleared back to null on resume, via updateScanDoc", async () => {
152
+ const scan = createScanFixture({ status: "SCANNING", pausedAt: null });
153
+ const { insertedId } = await getScansCollection().insertOne(scan);
154
+
155
+ const pausedAt = new Date();
156
+ const paused = await updateScanDoc(insertedId, {
157
+ status: "PAUSED",
158
+ pausedAt,
159
+ });
160
+ expect(paused?.pausedAt).toEqual(pausedAt);
161
+
162
+ const resumed = await updateScanDoc(insertedId, {
163
+ status: "SCANNING",
164
+ pausedAt: null,
165
+ });
166
+ expect(resumed?.pausedAt).toBeNull();
167
+ });
168
+ });
169
+
147
170
  describe("updateScanDoc()", () => {
148
171
  it("should update the given fields and bump updatedAt", async () => {
149
172
  const scan = createScanFixture({ status: "SCANNING", pagesScanned: 0 });
@@ -310,4 +333,30 @@ describe("db.websitalk.scans", () => {
310
333
  expect(await countScans({ websiteUrlId })).toBe(0);
311
334
  });
312
335
  });
336
+
337
+ describe("deleteScanById()", () => {
338
+ it("should delete the scan and return true", async () => {
339
+ const { insertedId } =
340
+ await getScansCollection().insertOne(createScanFixture());
341
+
342
+ expect(await deleteScanById(insertedId)).toBe(true);
343
+ expect(
344
+ await getScansCollection().findOne({ _id: insertedId }),
345
+ ).toBeNull();
346
+ });
347
+
348
+ it("should return false when the scan does not exist", async () => {
349
+ expect(await deleteScanById(new ObjectId())).toBe(false);
350
+ });
351
+ });
352
+
353
+ describe("FINISHED_SCAN_STATUSES", () => {
354
+ it("should include CANCELED — canceling is final, not resumable", () => {
355
+ expect(FINISHED_SCAN_STATUSES).toContain(SCAN_STATUSES.CANCELED);
356
+ });
357
+
358
+ it("should NOT include PAUSED — pausing is reversible", () => {
359
+ expect(FINISHED_SCAN_STATUSES).not.toContain(SCAN_STATUSES.PAUSED);
360
+ });
361
+ });
313
362
  });
@@ -6,10 +6,13 @@ export const SCAN_STATUSES = {
6
6
  COMPLETED: "COMPLETED",
7
7
  FAILED: "FAILED",
8
8
  OVERWRITTEN: "OVERWRITTEN",
9
+ PAUSED: "PAUSED",
10
+ CANCELED: "CANCELED",
9
11
  } as const;
10
12
 
11
13
  export const FINISHED_SCAN_STATUSES = [
12
14
  SCAN_STATUSES.COMPLETED,
13
15
  SCAN_STATUSES.FAILED,
14
16
  SCAN_STATUSES.OVERWRITTEN,
17
+ SCAN_STATUSES.CANCELED,
15
18
  ] as const;
@@ -69,6 +69,7 @@ export const createScanDoc = (
69
69
  createdAt: now,
70
70
  updatedAt: now,
71
71
  startedAt: now,
72
+ pausedAt: null,
72
73
  completedAt: null,
73
74
  pagesCompleted: 0,
74
75
  pagesFailedPermanent: 0,
@@ -164,3 +165,8 @@ export const deleteScansByWebsiteUrl = async (
164
165
  const result = await getScansCollection().deleteMany({ websiteUrlId });
165
166
  return result.deletedCount;
166
167
  };
168
+
169
+ export const deleteScanById = async (scanId: ObjectId): Promise<boolean> => {
170
+ const result = await getScansCollection().deleteOne({ _id: scanId });
171
+ return result.deletedCount > 0;
172
+ };
@@ -43,10 +43,12 @@ export type Scan = {
43
43
  createdAt: Date;
44
44
  updatedAt: Date;
45
45
 
46
+ startedAt?: Date;
47
+ pausedAt?: Date | null;
48
+
46
49
  // Terminal-only snapshot, written once at finalize (Brain, outside core-db).
47
50
  // Never read for live progress — an active scan's KPIs must come from
48
51
  // getScanKpiCounts, not these fields, which are not kept in sync mid-scan.
49
- startedAt?: Date;
50
52
  completedAt?: Date | null;
51
53
  pagesCompleted?: number;
52
54
  pagesFailedPermanent?: number;
@@ -1,5 +0,0 @@
1
- export declare const seedRealtimeUiFields: () => Promise<{
2
- openaiMatched: number;
3
- geminiMatched: number;
4
- }>;
5
- //# sourceMappingURL=models.seed.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"models.seed.d.ts","sourceRoot":"","sources":["../../../src/configuration/models/models.seed.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,oBAAoB,QAAa,OAAO,CAAC;IACpD,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB,CAcA,CAAC"}
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.seedRealtimeUiFields = void 0;
4
- const models_getters_1 = require("./models.getters");
5
- const realtimeUiFields_constants_1 = require("./realtimeUiFields.constants");
6
- const seedRealtimeUiFields = async () => {
7
- const now = new Date();
8
- const openai = await (0, models_getters_1.getModelsCollection)().updateMany({ type: "realtime", provider: "openai" }, { $set: { uiFields: realtimeUiFields_constants_1.OPENAI_REALTIME_UI_FIELDS, updatedAt: now } });
9
- const gemini = await (0, models_getters_1.getModelsCollection)().updateMany({ type: "realtime", provider: "gemini" }, { $set: { uiFields: realtimeUiFields_constants_1.GEMINI_REALTIME_UI_FIELDS, updatedAt: now } });
10
- return {
11
- openaiMatched: openai.matchedCount,
12
- geminiMatched: gemini.matchedCount,
13
- };
14
- };
15
- exports.seedRealtimeUiFields = seedRealtimeUiFields;
16
- //# sourceMappingURL=models.seed.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"models.seed.js","sourceRoot":"","sources":["../../../src/configuration/models/models.seed.ts"],"names":[],"mappings":";;;AAEA,qDAAuD;AAEvD,6EAGsC;AAE/B,MAAM,oBAAoB,GAAG,KAAK,IAGtC,EAAE;IACH,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,MAAM,GAAG,MAAM,IAAA,oCAAmB,GAAE,CAAC,UAAU,CACnD,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAsB,EAC5D,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,sDAAyB,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,CAClE,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,IAAA,oCAAmB,GAAE,CAAC,UAAU,CACnD,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAsB,EAC5D,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,sDAAyB,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,CAClE,CAAC;IACF,OAAO;QACL,aAAa,EAAE,MAAM,CAAC,YAAY;QAClC,aAAa,EAAE,MAAM,CAAC,YAAY;KACnC,CAAC;AACJ,CAAC,CAAC;AAjBW,QAAA,oBAAoB,wBAiB/B"}
@@ -1,4 +0,0 @@
1
- import { UiField } from "./uiFields.types";
2
- export declare const OPENAI_REALTIME_UI_FIELDS: UiField[];
3
- export declare const GEMINI_REALTIME_UI_FIELDS: UiField[];
4
- //# sourceMappingURL=realtimeUiFields.constants.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"realtimeUiFields.constants.d.ts","sourceRoot":"","sources":["../../../src/configuration/models/realtimeUiFields.constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AA0B3C,eAAO,MAAM,yBAAyB,EAAE,OAAO,EAyC9C,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,OAAO,EAW9C,CAAC"}
@@ -1,80 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.GEMINI_REALTIME_UI_FIELDS = exports.OPENAI_REALTIME_UI_FIELDS = void 0;
4
- const DEFAULT_SERVER_VAD = {
5
- type: "server_vad",
6
- threshold: 0.7,
7
- silence_duration_ms: 600,
8
- prefix_padding_ms: 300,
9
- };
10
- const SHARED_REALTIME_UI_FIELDS = [
11
- {
12
- key: "disableInterrupt",
13
- type: "switch",
14
- label: "אפשר לקטוע את הבוט בזמן שהוא מדבר",
15
- default: false,
16
- invert: true,
17
- },
18
- {
19
- key: "ignoreUserAudioUntilFirstTurnDone",
20
- type: "switch",
21
- label: "התעלמות מדיבור המשתמש עד לסיום משפט הפתיחה של הבוט",
22
- default: true,
23
- visibleWhen: { key: "disableInterrupt", equals: false },
24
- },
25
- ];
26
- exports.OPENAI_REALTIME_UI_FIELDS = [
27
- {
28
- key: "reasoningEffort",
29
- type: "select",
30
- label: "רמת חשיבה (Reasoning)",
31
- default: "",
32
- options: [
33
- { value: "", label: "none" },
34
- { value: "minimal", label: "Minimal (לטנציה נמוכה)" },
35
- { value: "low", label: "Low (מומלץ)" },
36
- { value: "medium", label: "Medium" },
37
- { value: "high", label: "High" },
38
- ],
39
- },
40
- {
41
- key: "speed",
42
- type: "slider",
43
- label: "מהירות דיבור",
44
- default: 0.375,
45
- min: 0,
46
- max: 1,
47
- step: 0.01,
48
- marks: [
49
- { value: 0, label: "איטי" },
50
- { value: 1, label: "מהיר" },
51
- ],
52
- },
53
- {
54
- key: "enableUserAudioBuckets",
55
- type: "checkbox",
56
- label: "שמירת אודיו של המשתמש במאגר",
57
- default: false,
58
- },
59
- ...SHARED_REALTIME_UI_FIELDS,
60
- {
61
- key: "turn_detection",
62
- type: "turnDetection",
63
- label: "הגדרות",
64
- default: DEFAULT_SERVER_VAD,
65
- visibleWhen: { key: "disableInterrupt", equals: false },
66
- },
67
- ];
68
- exports.GEMINI_REALTIME_UI_FIELDS = [
69
- {
70
- key: "temperature",
71
- type: "number",
72
- label: "Temperature",
73
- default: 0.7,
74
- min: 0,
75
- max: 2,
76
- step: 0.1,
77
- },
78
- ...SHARED_REALTIME_UI_FIELDS,
79
- ];
80
- //# sourceMappingURL=realtimeUiFields.constants.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"realtimeUiFields.constants.js","sourceRoot":"","sources":["../../../src/configuration/models/realtimeUiFields.constants.ts"],"names":[],"mappings":";;;AAEA,MAAM,kBAAkB,GAAG;IACzB,IAAI,EAAE,YAAY;IAClB,SAAS,EAAE,GAAG;IACd,mBAAmB,EAAE,GAAG;IACxB,iBAAiB,EAAE,GAAG;CACvB,CAAC;AAEF,MAAM,yBAAyB,GAAc;IAC3C;QACE,GAAG,EAAE,kBAAkB;QACvB,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,mCAAmC;QAC1C,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,IAAI;KACb;IACD;QACE,GAAG,EAAE,mCAAmC;QACxC,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,oDAAoD;QAC3D,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,EAAE,GAAG,EAAE,kBAAkB,EAAE,MAAM,EAAE,KAAK,EAAE;KACxD;CACF,CAAC;AAEW,QAAA,yBAAyB,GAAc;IAClD;QACE,GAAG,EAAE,iBAAiB;QACtB,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,uBAAuB;QAC9B,OAAO,EAAE,EAAE;QACX,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;YAC5B,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,wBAAwB,EAAE;YACrD,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE;YACtC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;YACpC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;SACjC;KACF;IACD;QACE,GAAG,EAAE,OAAO;QACZ,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,cAAc;QACrB,OAAO,EAAE,KAAK;QACd,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,KAAK,EAAE;YACL,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE;YAC3B,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE;SAC5B;KACF;IACD;QACE,GAAG,EAAE,wBAAwB;QAC7B,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,6BAA6B;QACpC,OAAO,EAAE,KAAK;KACf;IACD,GAAG,yBAAyB;IAC5B;QACE,GAAG,EAAE,gBAAgB;QACrB,IAAI,EAAE,eAAe;QACrB,KAAK,EAAE,QAAQ;QACf,OAAO,EAAE,kBAAkB;QAC3B,WAAW,EAAE,EAAE,GAAG,EAAE,kBAAkB,EAAE,MAAM,EAAE,KAAK,EAAE;KACxD;CACF,CAAC;AAEW,QAAA,yBAAyB,GAAc;IAClD;QACE,GAAG,EAAE,aAAa;QAClB,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,aAAa;QACpB,OAAO,EAAE,GAAG;QACZ,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,GAAG;KACV;IACD,GAAG,yBAAyB;CAC7B,CAAC"}
@@ -1,29 +0,0 @@
1
- export declare const UI_FIELD_TYPES: readonly ["number", "slider", "select", "checkbox", "switch", "turnDetection"];
2
- export type UiFieldType = (typeof UI_FIELD_TYPES)[number];
3
- export type UiFieldOption = {
4
- value: string;
5
- label: string;
6
- };
7
- export type UiFieldVisibleWhen = {
8
- key: string;
9
- equals: unknown;
10
- };
11
- /** Recipe the dashboard uses to pick a widget for one saved `aiProvider` key. */
12
- export type UiField = {
13
- key: string;
14
- type: UiFieldType;
15
- label: string;
16
- default?: unknown;
17
- min?: number;
18
- max?: number;
19
- step?: number;
20
- options?: UiFieldOption[];
21
- marks?: {
22
- value: number;
23
- label: string;
24
- }[];
25
- /** When true, a switch/checkbox displays the inverse of the stored value. */
26
- invert?: boolean;
27
- visibleWhen?: UiFieldVisibleWhen;
28
- };
29
- //# sourceMappingURL=uiFields.types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"uiFields.types.d.ts","sourceRoot":"","sources":["../../../src/configuration/models/uiFields.types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,gFAOjB,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1D,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,iFAAiF;AACjF,MAAM,MAAM,OAAO,GAAG;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3C,6EAA6E;IAC7E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,kBAAkB,CAAC;CAClC,CAAC"}
@@ -1,12 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.UI_FIELD_TYPES = void 0;
4
- exports.UI_FIELD_TYPES = [
5
- "number",
6
- "slider",
7
- "select",
8
- "checkbox",
9
- "switch",
10
- "turnDetection",
11
- ];
12
- //# sourceMappingURL=uiFields.types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"uiFields.types.js","sourceRoot":"","sources":["../../../src/configuration/models/uiFields.types.ts"],"names":[],"mappings":";;;AAAa,QAAA,cAAc,GAAG;IAC5B,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,eAAe;CACP,CAAC"}