@talkpilot/core-db 1.3.3 → 1.3.4

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 (150) hide show
  1. package/.claude/settings.local.json +7 -0
  2. package/README.md +30 -0
  3. package/dist/connection.d.ts.map +1 -1
  4. package/dist/connection.js +0 -10
  5. package/dist/connection.js.map +1 -1
  6. package/dist/index.d.ts +0 -3
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +1 -7
  9. package/dist/index.js.map +1 -1
  10. package/dist/municipal/tickets/index.d.ts +2 -1
  11. package/dist/municipal/tickets/index.d.ts.map +1 -1
  12. package/dist/municipal/tickets/index.js +1 -0
  13. package/dist/municipal/tickets/index.js.map +1 -1
  14. package/dist/municipal/tickets/tickets.constants.d.ts +7 -0
  15. package/dist/municipal/tickets/tickets.constants.d.ts.map +1 -0
  16. package/dist/municipal/tickets/tickets.constants.js +10 -0
  17. package/dist/municipal/tickets/tickets.constants.js.map +1 -0
  18. package/dist/municipal/tickets/tickets.deprecated.getters.d.ts +12 -0
  19. package/dist/municipal/tickets/tickets.deprecated.getters.d.ts.map +1 -0
  20. package/dist/municipal/tickets/tickets.deprecated.getters.js +131 -0
  21. package/dist/municipal/tickets/tickets.deprecated.getters.js.map +1 -0
  22. package/dist/municipal/tickets/tickets.getters.d.ts +0 -11
  23. package/dist/municipal/tickets/tickets.getters.d.ts.map +1 -1
  24. package/dist/municipal/tickets/tickets.getters.js +0 -128
  25. package/dist/municipal/tickets/tickets.getters.js.map +1 -1
  26. package/dist/municipal/tickets/tickets.statistics.aggregation.d.ts +35 -0
  27. package/dist/municipal/tickets/tickets.statistics.aggregation.d.ts.map +1 -0
  28. package/dist/municipal/tickets/tickets.statistics.aggregation.js +86 -0
  29. package/dist/municipal/tickets/tickets.statistics.aggregation.js.map +1 -0
  30. package/dist/municipal/tickets/tickets.statistics.dates.d.ts +7 -0
  31. package/dist/municipal/tickets/tickets.statistics.dates.d.ts.map +1 -0
  32. package/dist/municipal/tickets/tickets.statistics.dates.js +40 -0
  33. package/dist/municipal/tickets/tickets.statistics.dates.js.map +1 -0
  34. package/dist/municipal/tickets/tickets.statistics.getters.d.ts +8 -0
  35. package/dist/municipal/tickets/tickets.statistics.getters.d.ts.map +1 -0
  36. package/dist/municipal/tickets/tickets.statistics.getters.js +44 -0
  37. package/dist/municipal/tickets/tickets.statistics.getters.js.map +1 -0
  38. package/dist/municipal/tickets/tickets.statistics.pipeline.d.ts +53 -0
  39. package/dist/municipal/tickets/tickets.statistics.pipeline.d.ts.map +1 -0
  40. package/dist/municipal/tickets/tickets.statistics.pipeline.js +112 -0
  41. package/dist/municipal/tickets/tickets.statistics.pipeline.js.map +1 -0
  42. package/dist/municipal/tickets/tickets.statistics.utils.d.ts +7 -0
  43. package/dist/municipal/tickets/tickets.statistics.utils.d.ts.map +1 -0
  44. package/dist/municipal/tickets/tickets.statistics.utils.js +40 -0
  45. package/dist/municipal/tickets/tickets.statistics.utils.js.map +1 -0
  46. package/dist/municipal/tickets/tickets.types.d.ts +14 -5
  47. package/dist/municipal/tickets/tickets.types.d.ts.map +1 -1
  48. package/dist/talkpilot/calls/calls.constants.d.ts +17 -0
  49. package/dist/talkpilot/calls/calls.constants.d.ts.map +1 -0
  50. package/dist/talkpilot/calls/calls.constants.js +20 -0
  51. package/dist/talkpilot/calls/calls.constants.js.map +1 -0
  52. package/dist/talkpilot/calls/calls.statistics.getters.d.ts +28 -0
  53. package/dist/talkpilot/calls/calls.statistics.getters.d.ts.map +1 -0
  54. package/dist/talkpilot/calls/calls.statistics.getters.js +424 -0
  55. package/dist/talkpilot/calls/calls.statistics.getters.js.map +1 -0
  56. package/dist/talkpilot/calls/calls.statistics.ticketScope.d.ts +12 -0
  57. package/dist/talkpilot/calls/calls.statistics.ticketScope.d.ts.map +1 -0
  58. package/dist/talkpilot/calls/calls.statistics.ticketScope.js +37 -0
  59. package/dist/talkpilot/calls/calls.statistics.ticketScope.js.map +1 -0
  60. package/dist/talkpilot/calls/calls.statistics.tickets.d.ts +17 -0
  61. package/dist/talkpilot/calls/calls.statistics.tickets.d.ts.map +1 -0
  62. package/dist/talkpilot/calls/calls.statistics.tickets.js +33 -0
  63. package/dist/talkpilot/calls/calls.statistics.tickets.js.map +1 -0
  64. package/dist/talkpilot/calls/calls.statistics.types.d.ts +39 -0
  65. package/dist/talkpilot/calls/calls.statistics.types.d.ts.map +1 -0
  66. package/dist/{websitalk/scans/scans.types.js → talkpilot/calls/calls.statistics.types.js} +1 -1
  67. package/dist/talkpilot/calls/calls.statistics.types.js.map +1 -0
  68. package/dist/talkpilot/calls/calls.types.d.ts +1 -2
  69. package/dist/talkpilot/calls/calls.types.d.ts.map +1 -1
  70. package/dist/talkpilot/calls/calls.types.js +0 -3
  71. package/dist/talkpilot/calls/calls.types.js.map +1 -1
  72. package/dist/talkpilot/calls/dashboard/calls.dashboard.d.ts +33 -1
  73. package/dist/talkpilot/calls/dashboard/calls.dashboard.d.ts.map +1 -1
  74. package/dist/talkpilot/calls/dashboard/calls.dashboard.js +131 -146
  75. package/dist/talkpilot/calls/dashboard/calls.dashboard.js.map +1 -1
  76. package/dist/talkpilot/calls/dashboard/calls.dashboard.types.d.ts +27 -6
  77. package/dist/talkpilot/calls/dashboard/calls.dashboard.types.d.ts.map +1 -1
  78. package/dist/talkpilot/calls/index.d.ts +3 -0
  79. package/dist/talkpilot/calls/index.d.ts.map +1 -1
  80. package/dist/talkpilot/calls/index.js +3 -0
  81. package/dist/talkpilot/calls/index.js.map +1 -1
  82. package/dist/test-utils/db-utils.d.ts.map +1 -1
  83. package/dist/test-utils/db-utils.js +0 -2
  84. package/dist/test-utils/db-utils.js.map +1 -1
  85. package/dist/test-utils/factories/index.d.ts +0 -1
  86. package/dist/test-utils/factories/index.d.ts.map +1 -1
  87. package/dist/test-utils/factories/index.js +0 -1
  88. package/dist/test-utils/factories/index.js.map +1 -1
  89. package/dist/utils/date.utils.d.ts +49 -0
  90. package/dist/utils/date.utils.d.ts.map +1 -0
  91. package/dist/utils/date.utils.js +103 -0
  92. package/dist/utils/date.utils.js.map +1 -0
  93. package/dist/utils/statistics.aggregation.d.ts +20 -0
  94. package/dist/utils/statistics.aggregation.d.ts.map +1 -0
  95. package/dist/utils/statistics.aggregation.js +43 -0
  96. package/dist/utils/statistics.aggregation.js.map +1 -0
  97. package/package.json +1 -1
  98. package/src/connection.ts +0 -12
  99. package/src/index.ts +0 -9
  100. package/src/municipal/tickets/__tests__/tickets.getters.spec.ts +1 -37
  101. package/src/municipal/tickets/__tests__/tickets.statistics.spec.ts +51 -0
  102. package/src/municipal/tickets/index.ts +2 -1
  103. package/src/municipal/tickets/tickets.constants.ts +8 -0
  104. package/src/municipal/tickets/tickets.getters.ts +0 -140
  105. package/src/municipal/tickets/tickets.statistics.aggregation.ts +96 -0
  106. package/src/municipal/tickets/tickets.statistics.getters.ts +71 -0
  107. package/src/municipal/tickets/tickets.types.ts +19 -9
  108. package/src/talkpilot/calls/__tests__/calls.dashboard.spec.ts +8 -111
  109. package/src/talkpilot/calls/__tests__/calls.statistics.spec.ts +344 -0
  110. package/src/talkpilot/calls/calls.constants.ts +20 -0
  111. package/src/talkpilot/calls/calls.statistics.getters.ts +587 -0
  112. package/src/talkpilot/calls/calls.statistics.types.ts +44 -0
  113. package/src/talkpilot/calls/calls.types.ts +4 -2
  114. package/src/talkpilot/calls/dashboard/calls.dashboard.ts +148 -197
  115. package/src/talkpilot/calls/dashboard/calls.dashboard.types.ts +25 -12
  116. package/src/talkpilot/calls/index.ts +3 -0
  117. package/src/talkpilot/clientsConfig/__tests__/clientsConfig.spec.ts +7 -0
  118. package/src/test-utils/db-utils.ts +1 -3
  119. package/src/test-utils/factories/index.ts +0 -1
  120. package/src/utils/date.utils.ts +116 -0
  121. package/dist/test-utils/factories/websitalk/scans.d.ts +0 -5
  122. package/dist/test-utils/factories/websitalk/scans.d.ts.map +0 -1
  123. package/dist/test-utils/factories/websitalk/scans.js +0 -25
  124. package/dist/test-utils/factories/websitalk/scans.js.map +0 -1
  125. package/dist/websitalk/index.d.ts +0 -7
  126. package/dist/websitalk/index.d.ts.map +0 -1
  127. package/dist/websitalk/index.js +0 -34
  128. package/dist/websitalk/index.js.map +0 -1
  129. package/dist/websitalk/mongodb-client.d.ts +0 -13
  130. package/dist/websitalk/mongodb-client.d.ts.map +0 -1
  131. package/dist/websitalk/mongodb-client.js +0 -56
  132. package/dist/websitalk/mongodb-client.js.map +0 -1
  133. package/dist/websitalk/scans/index.d.ts +0 -3
  134. package/dist/websitalk/scans/index.d.ts.map +0 -1
  135. package/dist/websitalk/scans/index.js +0 -19
  136. package/dist/websitalk/scans/index.js.map +0 -1
  137. package/dist/websitalk/scans/scans.getters.d.ts +0 -12
  138. package/dist/websitalk/scans/scans.getters.d.ts.map +0 -1
  139. package/dist/websitalk/scans/scans.getters.js +0 -74
  140. package/dist/websitalk/scans/scans.getters.js.map +0 -1
  141. package/dist/websitalk/scans/scans.types.d.ts +0 -45
  142. package/dist/websitalk/scans/scans.types.d.ts.map +0 -1
  143. package/dist/websitalk/scans/scans.types.js.map +0 -1
  144. package/src/test-utils/factories/websitalk/scans.ts +0 -23
  145. package/src/websitalk/index.ts +0 -15
  146. package/src/websitalk/mongodb-client.ts +0 -61
  147. package/src/websitalk/scans/__tests__/scans.spec.ts +0 -218
  148. package/src/websitalk/scans/index.ts +0 -2
  149. package/src/websitalk/scans/scans.getters.ts +0 -113
  150. package/src/websitalk/scans/scans.types.ts +0 -53
@@ -1,25 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.scanFactory = void 0;
4
- exports.createScanFixture = createScanFixture;
5
- const fishery_1 = require("fishery");
6
- const faker_1 = require("@faker-js/faker");
7
- exports.scanFactory = fishery_1.Factory.define(() => ({
8
- clientId: faker_1.faker.string.uuid(),
9
- baseUrl: faker_1.faker.internet.url(),
10
- status: "CHECKING",
11
- activeTasksCount: 0,
12
- pagesScanned: 0,
13
- pagesSkipped: 0,
14
- skipped: [],
15
- siteChrome: {
16
- url: faker_1.faker.internet.url(),
17
- sourceType: "site_chrome",
18
- },
19
- createdAt: new Date(),
20
- updatedAt: new Date(),
21
- }));
22
- function createScanFixture(overrides) {
23
- return exports.scanFactory.build(overrides);
24
- }
25
- //# sourceMappingURL=scans.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scans.js","sourceRoot":"","sources":["../../../../src/test-utils/factories/websitalk/scans.ts"],"names":[],"mappings":";;;AAoBA,8CAEC;AAtBD,qCAAkC;AAClC,2CAAwC;AAG3B,QAAA,WAAW,GAAG,iBAAO,CAAC,MAAM,CAAO,GAAG,EAAE,CAAC,CAAC;IACrD,QAAQ,EAAE,aAAK,CAAC,MAAM,CAAC,IAAI,EAAE;IAC7B,OAAO,EAAE,aAAK,CAAC,QAAQ,CAAC,GAAG,EAAE;IAC7B,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;CACtB,CAAC,CAAC,CAAC;AAEJ,SAAgB,iBAAiB,CAAC,SAAyB;IACzD,OAAO,mBAAW,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACtC,CAAC"}
@@ -1,7 +0,0 @@
1
- import { Db, ObjectId as MongoObjectId } from "mongodb";
2
- export * from "./scans";
3
- export { websitalkMongodbClient } from "./mongodb-client";
4
- export declare const setDb: (d: Db) => void;
5
- export declare const getDb: () => Db;
6
- export declare const ObjectId: typeof MongoObjectId;
7
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/websitalk/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,QAAQ,IAAI,aAAa,EAAE,MAAM,SAAS,CAAC;AAExD,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAG1D,eAAO,MAAM,KAAK,GAAI,GAAG,EAAE,SAE1B,CAAC;AAEF,eAAO,MAAM,KAAK,QAAO,EAGxB,CAAC;AACF,eAAO,MAAM,QAAQ,sBAAgB,CAAC"}
@@ -1,34 +0,0 @@
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
- exports.ObjectId = exports.getDb = exports.setDb = exports.websitalkMongodbClient = void 0;
18
- const mongodb_1 = require("mongodb");
19
- __exportStar(require("./scans"), exports);
20
- var mongodb_client_1 = require("./mongodb-client");
21
- Object.defineProperty(exports, "websitalkMongodbClient", { enumerable: true, get: function () { return mongodb_client_1.websitalkMongodbClient; } });
22
- let db;
23
- const setDb = (d) => {
24
- db = d;
25
- };
26
- exports.setDb = setDb;
27
- const getDb = () => {
28
- if (!db)
29
- throw new Error("Website Talk DB not initialised");
30
- return db;
31
- };
32
- exports.getDb = getDb;
33
- exports.ObjectId = mongodb_1.ObjectId;
34
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/websitalk/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,qCAAwD;AAExD,0CAAwB;AACxB,mDAA0D;AAAjD,wHAAA,sBAAsB,OAAA;AAE/B,IAAI,EAAM,CAAC;AACJ,MAAM,KAAK,GAAG,CAAC,CAAK,EAAE,EAAE;IAC7B,EAAE,GAAG,CAAC,CAAC;AACT,CAAC,CAAC;AAFW,QAAA,KAAK,SAEhB;AAEK,MAAM,KAAK,GAAG,GAAO,EAAE;IAC5B,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAC5D,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAHW,QAAA,KAAK,SAGhB;AACW,QAAA,QAAQ,GAAG,kBAAa,CAAC"}
@@ -1,13 +0,0 @@
1
- import { Db } from "mongodb";
2
- declare class WebsitalkMongoDBClient {
3
- private client;
4
- private db;
5
- private readonly defaultDbName;
6
- connect(uri?: string, dbName?: string): Promise<void>;
7
- disconnect(): Promise<void>;
8
- getDb(): Db;
9
- isConnected(): boolean;
10
- }
11
- export declare const websitalkMongodbClient: WebsitalkMongoDBClient;
12
- export {};
13
- //# sourceMappingURL=mongodb-client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mongodb-client.d.ts","sourceRoot":"","sources":["../../src/websitalk/mongodb-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,EAAE,EAAE,MAAM,SAAS,CAAC;AAI1C,cAAM,sBAAsB;IAC1B,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,EAAE,CAAmB;IAC7B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkB;IAE1C,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBrD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAcjC,KAAK,IAAI,EAAE;IASX,WAAW,IAAI,OAAO;CAGvB;AAED,eAAO,MAAM,sBAAsB,wBAA+B,CAAC"}
@@ -1,56 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.websitalkMongodbClient = void 0;
4
- const mongodb_1 = require("mongodb");
5
- const index_1 = require("./index");
6
- const validation_1 = require("../utils/validation");
7
- class WebsitalkMongoDBClient {
8
- client = null;
9
- db = null;
10
- defaultDbName = "website-talk";
11
- async connect(uri, dbName) {
12
- if (this.client) {
13
- return;
14
- }
15
- const mongodbUri = uri || process.env.MONGO_URI || process.env.MONGODB_URI;
16
- (0, validation_1.validateConfig)("MONGO_URI", mongodbUri);
17
- (0, validation_1.validateMongoUri)(mongodbUri);
18
- try {
19
- this.client = new mongodb_1.MongoClient(mongodbUri);
20
- await this.client.connect();
21
- const targetDbName = dbName || process.env.WEBSITALK_DB_NAME || this.defaultDbName;
22
- this.db = this.client.db(targetDbName);
23
- (0, index_1.setDb)(this.db);
24
- console.info(`[core-db] Website Talk MongoDB connected: ${targetDbName}`);
25
- }
26
- catch (error) {
27
- console.error("[core-db] Website Talk connection failed", error);
28
- throw error;
29
- }
30
- }
31
- async disconnect() {
32
- if (this.client) {
33
- try {
34
- await this.client.close();
35
- this.client = null;
36
- this.db = null;
37
- console.info("Website Talk MongoDB disconnected successfully");
38
- }
39
- catch (error) {
40
- console.error("[core-db] Website Talk disconnection failed", error);
41
- throw error;
42
- }
43
- }
44
- }
45
- getDb() {
46
- if (!this.db) {
47
- throw new Error("Website Talk database not initialized. Call connect() first.");
48
- }
49
- return this.db;
50
- }
51
- isConnected() {
52
- return this.client !== null && this.client !== undefined;
53
- }
54
- }
55
- exports.websitalkMongodbClient = new WebsitalkMongoDBClient();
56
- //# sourceMappingURL=mongodb-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mongodb-client.js","sourceRoot":"","sources":["../../src/websitalk/mongodb-client.ts"],"names":[],"mappings":";;;AAAA,qCAA0C;AAC1C,mCAAgC;AAChC,oDAAuE;AAEvE,MAAM,sBAAsB;IAClB,MAAM,GAAuB,IAAI,CAAC;IAClC,EAAE,GAAc,IAAI,CAAC;IACZ,aAAa,GAAG,cAAc,CAAC;IAEhD,KAAK,CAAC,OAAO,CAAC,GAAY,EAAE,MAAe;QACzC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;QAC3E,IAAA,2BAAc,EAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QACxC,IAAA,6BAAgB,EAAC,UAAW,CAAC,CAAC;QAE9B,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,GAAG,IAAI,qBAAW,CAAC,UAAW,CAAC,CAAC;YAC3C,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC5B,MAAM,YAAY,GAChB,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,IAAI,CAAC,aAAa,CAAC;YAChE,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;YACvC,IAAA,aAAK,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,6CAA6C,YAAY,EAAE,CAAC,CAAC;QAC5E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC,CAAC;YACjE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;gBACnB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;YACjE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,6CAA6C,EAAE,KAAK,CAAC,CAAC;gBACpE,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,8DAA8D,CAC/D,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC;IAC3D,CAAC;CACF;AAEY,QAAA,sBAAsB,GAAG,IAAI,sBAAsB,EAAE,CAAC"}
@@ -1,3 +0,0 @@
1
- export * from "./scans.getters";
2
- export * from "./scans.types";
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/websitalk/scans/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC"}
@@ -1,19 +0,0 @@
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("./scans.getters"), exports);
18
- __exportStar(require("./scans.types"), exports);
19
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/websitalk/scans/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,gDAA8B"}
@@ -1,12 +0,0 @@
1
- import { Collection, Filter, ObjectId } from "mongodb";
2
- import { QueryOptions } from "../../talkpilot/utils/query.utils";
3
- import type { ActiveScanStatus, Scan, ScanDoc } from "./scans.types";
4
- export declare const getScansCollection: () => Collection<Scan>;
5
- export declare const getScansByClientAndDateRange: (clientId: string, startDate: Date, endDate: Date) => Promise<ScanDoc[]>;
6
- export declare const getScanFieldsByClientAndDateRange: <K extends keyof Scan>(clientId: string, startDate: Date, endDate: Date, fields: K[]) => Promise<Pick<ScanDoc, "_id" | K>[]>;
7
- export declare const createScanDoc: (scan: Pick<Scan, "clientId" | "baseUrl" | "notifyPhoneNumber">) => Promise<import("mongodb").InsertOneResult<Scan>>;
8
- export declare const getActiveScanStatus: (clientId: string) => Promise<ActiveScanStatus>;
9
- export declare const updateScanDoc: (scanId: ObjectId, updates: Partial<Omit<Scan, "clientId" | "createdAt">>) => Promise<ScanDoc | null>;
10
- export declare const findScansByQuery: (query: Filter<Scan>, options?: QueryOptions) => Promise<ScanDoc[]>;
11
- export declare const countScans: (query: Filter<Scan>) => Promise<number>;
12
- //# sourceMappingURL=scans.getters.d.ts.map
@@ -1 +0,0 @@
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,EACV,gBAAgB,EAChB,IAAI,EACJ,OAAO,EAER,MAAM,eAAe,CAAC;AAEvB,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,SAAS,GAAG,mBAAmB,CAAC,qDAa/D,CAAC;AAIF,eAAO,MAAM,mBAAmB,GAC9B,UAAU,MAAM,KACf,OAAO,CAAC,gBAAgB,CAW1B,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"}
@@ -1,74 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.countScans = exports.findScansByQuery = exports.updateScanDoc = exports.getActiveScanStatus = exports.createScanDoc = exports.getScanFieldsByClientAndDateRange = exports.getScansByClientAndDateRange = exports.getScansCollection = void 0;
4
- const index_1 = require("../index");
5
- const query_utils_1 = require("../../talkpilot/utils/query.utils");
6
- const getScansCollection = () => {
7
- return (0, index_1.getDb)().collection("scans");
8
- };
9
- exports.getScansCollection = getScansCollection;
10
- const getScansByClientAndDateRange = (clientId, startDate, endDate) => {
11
- return (0, exports.getScansCollection)()
12
- .find({
13
- clientId,
14
- createdAt: {
15
- $gte: startDate,
16
- $lte: endDate,
17
- },
18
- })
19
- .toArray();
20
- };
21
- exports.getScansByClientAndDateRange = getScansByClientAndDateRange;
22
- const getScanFieldsByClientAndDateRange = (clientId, startDate, endDate, fields) => {
23
- const projection = fields.reduce((acc, field) => {
24
- acc[field] = 1;
25
- return acc;
26
- }, {});
27
- return (0, exports.getScansCollection)()
28
- .find({
29
- clientId,
30
- createdAt: {
31
- $gte: startDate,
32
- $lte: endDate,
33
- },
34
- }, { projection })
35
- .toArray();
36
- };
37
- exports.getScanFieldsByClientAndDateRange = getScanFieldsByClientAndDateRange;
38
- const createScanDoc = (scan) => {
39
- return (0, exports.getScansCollection)().insertOne({
40
- ...scan,
41
- status: "CHECKING",
42
- activeTasksCount: 0,
43
- pagesScanned: 0,
44
- pagesSkipped: 0,
45
- skipped: [],
46
- siteChrome: {},
47
- createdAt: new Date(),
48
- updatedAt: new Date(),
49
- });
50
- };
51
- exports.createScanDoc = createScanDoc;
52
- const FINISHED_SCAN_STATUSES = ["COMPLETED", "FAILED"];
53
- const getActiveScanStatus = async (clientId) => {
54
- const latestScan = await (0, exports.getScansCollection)().findOne({ clientId }, { sort: { createdAt: -1 } });
55
- if (!latestScan || FINISHED_SCAN_STATUSES.includes(latestScan.status)) {
56
- return { isActive: false };
57
- }
58
- return { isActive: true, status: latestScan.status };
59
- };
60
- exports.getActiveScanStatus = getActiveScanStatus;
61
- const updateScanDoc = async (scanId, updates) => {
62
- return await (0, exports.getScansCollection)().findOneAndUpdate({ _id: scanId }, { $set: { ...updates, updatedAt: new Date() } }, { returnDocument: "after" });
63
- };
64
- exports.updateScanDoc = updateScanDoc;
65
- const findScansByQuery = async (query, options) => {
66
- const cursor = (0, exports.getScansCollection)().find(query);
67
- return await (0, query_utils_1.applyQueryOptions)(cursor, options).toArray();
68
- };
69
- exports.findScansByQuery = findScansByQuery;
70
- const countScans = async (query) => {
71
- return (0, exports.getScansCollection)().countDocuments(query);
72
- };
73
- exports.countScans = countScans;
74
- //# sourceMappingURL=scans.getters.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scans.getters.js","sourceRoot":"","sources":["../../../src/websitalk/scans/scans.getters.ts"],"names":[],"mappings":";;;AACA,oCAAiC;AACjC,mEAG2C;AAQpC,MAAM,kBAAkB,GAAG,GAAqB,EAAE;IACvD,OAAO,IAAA,aAAK,GAAE,CAAC,UAAU,CAAO,OAAO,CAAC,CAAC;AAC3C,CAAC,CAAC;AAFW,QAAA,kBAAkB,sBAE7B;AAEK,MAAM,4BAA4B,GAAG,CAC1C,QAAgB,EAChB,SAAe,EACf,OAAa,EACO,EAAE;IACtB,OAAO,IAAA,0BAAkB,GAAE;SACxB,IAAI,CAAC;QACJ,QAAQ;QACR,SAAS,EAAE;YACT,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,OAAO;SACd;KACF,CAAC;SACD,OAAO,EAAE,CAAC;AACf,CAAC,CAAC;AAdW,QAAA,4BAA4B,gCAcvC;AAEK,MAAM,iCAAiC,GAAG,CAC/C,QAAgB,EAChB,SAAe,EACf,OAAa,EACb,MAAW,EAC0B,EAAE;IACvC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAoB,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QACjE,GAAG,CAAC,KAAe,CAAC,GAAG,CAAC,CAAC;QACzB,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,IAAA,0BAAkB,GAAE;SACxB,IAAI,CACH;QACE,QAAQ;QACR,SAAS,EAAE;YACT,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,OAAO;SACd;KACF,EACD,EAAE,UAAU,EAAE,CACf;SACA,OAAO,EAAyC,CAAC;AACtD,CAAC,CAAC;AAvBW,QAAA,iCAAiC,qCAuB5C;AAEK,MAAM,aAAa,GAAG,CAC3B,IAA8D,EAC9D,EAAE;IACF,OAAO,IAAA,0BAAkB,GAAE,CAAC,SAAS,CAAC;QACpC,GAAG,IAAI;QACP,MAAM,EAAE,UAAU;QAClB,gBAAgB,EAAE,CAAC;QACnB,YAAY,EAAE,CAAC;QACf,YAAY,EAAE,CAAC;QACf,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,EAAwB;QACpC,SAAS,EAAE,IAAI,IAAI,EAAE;QACrB,SAAS,EAAE,IAAI,IAAI,EAAE;KACtB,CAAC,CAAC;AACL,CAAC,CAAC;AAdW,QAAA,aAAa,iBAcxB;AAEF,MAAM,sBAAsB,GAAiB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;AAE9D,MAAM,mBAAmB,GAAG,KAAK,EACtC,QAAgB,EACW,EAAE;IAC7B,MAAM,UAAU,GAAG,MAAM,IAAA,0BAAkB,GAAE,CAAC,OAAO,CACnD,EAAE,QAAQ,EAAE,EACZ,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAC5B,CAAC;IAEF,IAAI,CAAC,UAAU,IAAI,sBAAsB,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACtE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC7B,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC;AACvD,CAAC,CAAC;AAbW,QAAA,mBAAmB,uBAa9B;AAEK,MAAM,aAAa,GAAG,KAAK,EAChC,MAAgB,EAChB,OAAsD,EAC7B,EAAE;IAC3B,OAAO,MAAM,IAAA,0BAAkB,GAAE,CAAC,gBAAgB,CAChD,EAAE,GAAG,EAAE,MAAM,EAAE,EACf,EAAE,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,EAAE,EAC/C,EAAE,cAAc,EAAE,OAAO,EAAE,CAC5B,CAAC;AACJ,CAAC,CAAC;AATW,QAAA,aAAa,iBASxB;AAEK,MAAM,gBAAgB,GAAG,KAAK,EACnC,KAAmB,EACnB,OAAsB,EACF,EAAE;IACtB,MAAM,MAAM,GAAG,IAAA,0BAAkB,GAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,OAAO,MAAM,IAAA,+BAAiB,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;AAC5D,CAAC,CAAC;AANW,QAAA,gBAAgB,oBAM3B;AAEK,MAAM,UAAU,GAAG,KAAK,EAAE,KAAmB,EAAmB,EAAE;IACvE,OAAO,IAAA,0BAAkB,GAAE,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AACpD,CAAC,CAAC;AAFW,QAAA,UAAU,cAErB"}
@@ -1,45 +0,0 @@
1
- import { WithId } from "mongodb";
2
- export type ScanStatus = "CHECKING" | "PREPARING" | "SCANNING" | "PROCESSING" | "COMPLETED" | "FAILED";
3
- export type ActiveScanStatus = {
4
- isActive: true;
5
- status: ScanStatus;
6
- } | {
7
- isActive: false;
8
- };
9
- export type SiteChromeEntry = {
10
- url: string;
11
- urlCanonical?: string | null;
12
- title?: string | null;
13
- h1?: string | null;
14
- language?: string | null;
15
- sourceType?: string | null;
16
- status?: string | null;
17
- context?: string | null;
18
- contentHash?: string | null;
19
- errorMessage?: string | null;
20
- breadcrumbs?: unknown;
21
- description?: string | null;
22
- sourceUrl?: string | null;
23
- fetchedAt?: Date | null;
24
- createdAt?: Date;
25
- updatedAt?: Date;
26
- };
27
- export type SkippedEntry = {
28
- path: string;
29
- reason: string;
30
- };
31
- export type Scan = {
32
- clientId: string;
33
- baseUrl: string;
34
- notifyPhoneNumber?: string | null;
35
- status: ScanStatus;
36
- activeTasksCount: number;
37
- pagesScanned: number;
38
- pagesSkipped: number;
39
- skipped: SkippedEntry[];
40
- siteChrome: SiteChromeEntry;
41
- createdAt: Date;
42
- updatedAt: Date;
43
- };
44
- export type ScanDoc = WithId<Scan>;
45
- //# sourceMappingURL=scans.types.d.ts.map
@@ -1 +0,0 @@
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,MAAM,MAAM,UAAU,GAClB,UAAU,GACV,WAAW,GACX,UAAU,GACV,YAAY,GACZ,WAAW,GACX,QAAQ,CAAC;AAEb,MAAM,MAAM,gBAAgB,GACxB;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GACtC;IAAE,QAAQ,EAAE,KAAK,CAAA;CAAE,CAAC;AAExB,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,OAAO,EAAE,MAAM,CAAC;IAChB,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,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,UAAU,EAAE,eAAe,CAAC;IAC5B,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"scans.types.js","sourceRoot":"","sources":["../../../src/websitalk/scans/scans.types.ts"],"names":[],"mappings":""}
@@ -1,23 +0,0 @@
1
- import { Factory } from "fishery";
2
- import { faker } from "@faker-js/faker";
3
- import type { Scan } from "../../../websitalk";
4
-
5
- export const scanFactory = Factory.define<Scan>(() => ({
6
- clientId: faker.string.uuid(),
7
- baseUrl: faker.internet.url(),
8
- status: "CHECKING",
9
- activeTasksCount: 0,
10
- pagesScanned: 0,
11
- pagesSkipped: 0,
12
- skipped: [],
13
- siteChrome: {
14
- url: faker.internet.url(),
15
- sourceType: "site_chrome",
16
- },
17
- createdAt: new Date(),
18
- updatedAt: new Date(),
19
- }));
20
-
21
- export function createScanFixture(overrides?: Partial<Scan>): Scan {
22
- return scanFactory.build(overrides);
23
- }
@@ -1,15 +0,0 @@
1
- import { Db, ObjectId as MongoObjectId } from "mongodb";
2
-
3
- export * from "./scans";
4
- export { websitalkMongodbClient } from "./mongodb-client";
5
-
6
- let db: Db;
7
- export const setDb = (d: Db) => {
8
- db = d;
9
- };
10
-
11
- export const getDb = (): Db => {
12
- if (!db) throw new Error("Website Talk DB not initialised");
13
- return db;
14
- };
15
- export const ObjectId = MongoObjectId;
@@ -1,61 +0,0 @@
1
- import { MongoClient, Db } from "mongodb";
2
- import { setDb } from "./index";
3
- import { validateConfig, validateMongoUri } from "../utils/validation";
4
-
5
- class WebsitalkMongoDBClient {
6
- private client: MongoClient | null = null;
7
- private db: Db | null = null;
8
- private readonly defaultDbName = "website-talk";
9
-
10
- async connect(uri?: string, dbName?: string): Promise<void> {
11
- if (this.client) {
12
- return;
13
- }
14
-
15
- const mongodbUri = uri || process.env.MONGO_URI || process.env.MONGODB_URI;
16
- validateConfig("MONGO_URI", mongodbUri);
17
- validateMongoUri(mongodbUri!);
18
-
19
- try {
20
- this.client = new MongoClient(mongodbUri!);
21
- await this.client.connect();
22
- const targetDbName =
23
- dbName || process.env.WEBSITALK_DB_NAME || this.defaultDbName;
24
- this.db = this.client.db(targetDbName);
25
- setDb(this.db);
26
- console.info(`[core-db] Website Talk MongoDB connected: ${targetDbName}`);
27
- } catch (error) {
28
- console.error("[core-db] Website Talk connection failed", error);
29
- throw error;
30
- }
31
- }
32
-
33
- async disconnect(): Promise<void> {
34
- if (this.client) {
35
- try {
36
- await this.client.close();
37
- this.client = null;
38
- this.db = null;
39
- console.info("Website Talk MongoDB disconnected successfully");
40
- } catch (error) {
41
- console.error("[core-db] Website Talk disconnection failed", error);
42
- throw error;
43
- }
44
- }
45
- }
46
-
47
- getDb(): Db {
48
- if (!this.db) {
49
- throw new Error(
50
- "Website Talk database not initialized. Call connect() first.",
51
- );
52
- }
53
- return this.db;
54
- }
55
-
56
- isConnected(): boolean {
57
- return this.client !== null && this.client !== undefined;
58
- }
59
- }
60
-
61
- export const websitalkMongodbClient = new WebsitalkMongoDBClient();