@talkpilot/core-db 1.3.4 → 1.3.5

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 (110) hide show
  1. package/.claude/settings.local.json +5 -1
  2. package/DEVELOPMENT.md +28 -0
  3. package/README.md +21 -0
  4. package/dist/connection.d.ts.map +1 -1
  5. package/dist/connection.js +10 -0
  6. package/dist/connection.js.map +1 -1
  7. package/dist/index.d.ts +4 -0
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +8 -1
  10. package/dist/index.js.map +1 -1
  11. package/dist/municipal/index.d.ts +1 -0
  12. package/dist/municipal/index.d.ts.map +1 -1
  13. package/dist/municipal/index.js +1 -0
  14. package/dist/municipal/index.js.map +1 -1
  15. package/dist/municipal/muniIssues/index.d.ts +7 -0
  16. package/dist/municipal/muniIssues/index.d.ts.map +1 -0
  17. package/dist/municipal/muniIssues/index.js +29 -0
  18. package/dist/municipal/muniIssues/index.js.map +1 -0
  19. package/dist/municipal/muniIssues/muniIssues.constants.d.ts +14 -0
  20. package/dist/municipal/muniIssues/muniIssues.constants.d.ts.map +1 -0
  21. package/dist/municipal/muniIssues/muniIssues.constants.js +17 -0
  22. package/dist/municipal/muniIssues/muniIssues.constants.js.map +1 -0
  23. package/dist/municipal/muniIssues/muniIssues.getters.d.ts +7 -0
  24. package/dist/municipal/muniIssues/muniIssues.getters.d.ts.map +1 -0
  25. package/dist/municipal/muniIssues/muniIssues.getters.js +24 -0
  26. package/dist/municipal/muniIssues/muniIssues.getters.js.map +1 -0
  27. package/dist/municipal/muniIssues/muniIssues.schema.d.ts +4 -0
  28. package/dist/municipal/muniIssues/muniIssues.schema.d.ts.map +1 -0
  29. package/dist/municipal/muniIssues/muniIssues.schema.js +63 -0
  30. package/dist/municipal/muniIssues/muniIssues.schema.js.map +1 -0
  31. package/dist/municipal/muniIssues/muniIssues.setters.d.ts +4 -0
  32. package/dist/municipal/muniIssues/muniIssues.setters.d.ts.map +1 -0
  33. package/dist/municipal/muniIssues/muniIssues.setters.js +22 -0
  34. package/dist/municipal/muniIssues/muniIssues.setters.js.map +1 -0
  35. package/dist/municipal/muniIssues/muniIssues.setup.d.ts +3 -0
  36. package/dist/municipal/muniIssues/muniIssues.setup.d.ts.map +1 -0
  37. package/dist/municipal/muniIssues/muniIssues.setup.js +61 -0
  38. package/dist/municipal/muniIssues/muniIssues.setup.js.map +1 -0
  39. package/dist/municipal/muniIssues/muniIssues.types.d.ts +30 -0
  40. package/dist/municipal/muniIssues/muniIssues.types.d.ts.map +1 -0
  41. package/dist/municipal/muniIssues/muniIssues.types.js +3 -0
  42. package/dist/municipal/muniIssues/muniIssues.types.js.map +1 -0
  43. package/dist/talkpilot/calls/dashboard/calls.dashboard.d.ts +1 -33
  44. package/dist/talkpilot/calls/dashboard/calls.dashboard.d.ts.map +1 -1
  45. package/dist/talkpilot/calls/dashboard/calls.dashboard.js +146 -131
  46. package/dist/talkpilot/calls/dashboard/calls.dashboard.js.map +1 -1
  47. package/dist/talkpilot/calls/dashboard/calls.dashboard.types.d.ts +6 -27
  48. package/dist/talkpilot/calls/dashboard/calls.dashboard.types.d.ts.map +1 -1
  49. package/dist/test-utils/db-utils.d.ts.map +1 -1
  50. package/dist/test-utils/db-utils.js +2 -0
  51. package/dist/test-utils/db-utils.js.map +1 -1
  52. package/dist/test-utils/factories/index.d.ts +2 -0
  53. package/dist/test-utils/factories/index.d.ts.map +1 -1
  54. package/dist/test-utils/factories/index.js +2 -0
  55. package/dist/test-utils/factories/index.js.map +1 -1
  56. package/dist/test-utils/factories/municipal/muniIssues.d.ts +10 -0
  57. package/dist/test-utils/factories/municipal/muniIssues.d.ts.map +1 -0
  58. package/dist/test-utils/factories/municipal/muniIssues.js +30 -0
  59. package/dist/test-utils/factories/municipal/muniIssues.js.map +1 -0
  60. package/dist/test-utils/factories/websitalk/scans.d.ts +5 -0
  61. package/dist/test-utils/factories/websitalk/scans.d.ts.map +1 -0
  62. package/dist/test-utils/factories/websitalk/scans.js +25 -0
  63. package/dist/test-utils/factories/websitalk/scans.js.map +1 -0
  64. package/dist/websitalk/index.d.ts +7 -0
  65. package/dist/websitalk/index.d.ts.map +1 -0
  66. package/dist/websitalk/index.js +34 -0
  67. package/dist/websitalk/index.js.map +1 -0
  68. package/dist/websitalk/mongodb-client.d.ts +13 -0
  69. package/dist/websitalk/mongodb-client.d.ts.map +1 -0
  70. package/dist/websitalk/mongodb-client.js +56 -0
  71. package/dist/websitalk/mongodb-client.js.map +1 -0
  72. package/dist/websitalk/scans/index.d.ts +3 -0
  73. package/dist/websitalk/scans/index.d.ts.map +1 -0
  74. package/dist/websitalk/scans/index.js +19 -0
  75. package/dist/websitalk/scans/index.js.map +1 -0
  76. package/dist/websitalk/scans/scans.getters.d.ts +12 -0
  77. package/dist/websitalk/scans/scans.getters.d.ts.map +1 -0
  78. package/dist/websitalk/scans/scans.getters.js +74 -0
  79. package/dist/websitalk/scans/scans.getters.js.map +1 -0
  80. package/dist/websitalk/scans/scans.types.d.ts +45 -0
  81. package/dist/websitalk/scans/scans.types.d.ts.map +1 -0
  82. package/dist/websitalk/scans/scans.types.js +3 -0
  83. package/dist/websitalk/scans/scans.types.js.map +1 -0
  84. package/package.json +1 -1
  85. package/src/connection.ts +12 -0
  86. package/src/index.ts +10 -0
  87. package/src/municipal/index.ts +1 -0
  88. package/src/municipal/muniIssues/__tests__/muniIssues.setters.spec.ts +92 -0
  89. package/src/municipal/muniIssues/__tests__/muniIssues.setup.spec.ts +92 -0
  90. package/src/municipal/muniIssues/index.ts +17 -0
  91. package/src/municipal/muniIssues/muniIssues.constants.ts +18 -0
  92. package/src/municipal/muniIssues/muniIssues.getters.ts +24 -0
  93. package/src/municipal/muniIssues/muniIssues.schema.ts +66 -0
  94. package/src/municipal/muniIssues/muniIssues.setters.ts +24 -0
  95. package/src/municipal/muniIssues/muniIssues.setup.ts +65 -0
  96. package/src/municipal/muniIssues/muniIssues.types.ts +37 -0
  97. package/src/talkpilot/calls/__tests__/calls.dashboard.spec.ts +111 -8
  98. package/src/talkpilot/calls/dashboard/calls.dashboard.ts +197 -148
  99. package/src/talkpilot/calls/dashboard/calls.dashboard.types.ts +12 -25
  100. package/src/talkpilot/clientsConfig/__tests__/clientsConfig.spec.ts +0 -7
  101. package/src/test-utils/db-utils.ts +3 -1
  102. package/src/test-utils/factories/index.ts +2 -0
  103. package/src/test-utils/factories/municipal/muniIssues.ts +32 -0
  104. package/src/test-utils/factories/websitalk/scans.ts +23 -0
  105. package/src/websitalk/index.ts +15 -0
  106. package/src/websitalk/mongodb-client.ts +61 -0
  107. package/src/websitalk/scans/__tests__/scans.spec.ts +218 -0
  108. package/src/websitalk/scans/index.ts +2 -0
  109. package/src/websitalk/scans/scans.getters.ts +113 -0
  110. package/src/websitalk/scans/scans.types.ts +53 -0
@@ -1,36 +1,4 @@
1
1
  import { DashboardReportQuery, DashboardReportResponse } from "./calls.dashboard.types";
2
- import { CallLengthThresholds } from "src/utils/shared.types";
3
- export declare function buildCallLengthBucketsPipeline(thresholds: CallLengthThresholds): {
4
- $group: {
5
- _id: null;
6
- short: {
7
- $sum: {
8
- $cond: (number | {
9
- $lt: (string | number)[];
10
- })[];
11
- };
12
- };
13
- medium: {
14
- $sum: {
15
- $cond: (number | {
16
- $and: ({
17
- $gte: (string | number)[];
18
- $lte?: undefined;
19
- } | {
20
- $lte: (string | number)[];
21
- $gte?: undefined;
22
- })[];
23
- })[];
24
- };
25
- };
26
- long: {
27
- $sum: {
28
- $cond: (number | {
29
- $gt: (string | number)[];
30
- })[];
31
- };
32
- };
33
- };
34
- }[];
2
+ export type { DashboardVolumeGranularity, DashboardReportQuery, DashboardReportResponse, } from "./calls.dashboard.types";
35
3
  export declare function getDashboardStats(params: DashboardReportQuery): Promise<DashboardReportResponse>;
36
4
  //# sourceMappingURL=calls.dashboard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"calls.dashboard.d.ts","sourceRoot":"","sources":["../../../../src/talkpilot/calls/dashboard/calls.dashboard.ts"],"names":[],"mappings":"AAKA,OAAO,EAIL,oBAAoB,EACpB,uBAAuB,EAIxB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AA+E9D,wBAAgB,8BAA8B,CAC5C,UAAU,EAAE,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA+BjC;AAgCD,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,uBAAuB,CAAC,CAkFlC"}
1
+ {"version":3,"file":"calls.dashboard.d.ts","sourceRoot":"","sources":["../../../../src/talkpilot/calls/dashboard/calls.dashboard.ts"],"names":[],"mappings":"AAOA,OAAO,EAGL,oBAAoB,EACpB,uBAAuB,EAGxB,MAAM,yBAAyB,CAAC;AAEjC,YAAY,EACV,0BAA0B,EAC1B,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AAuMjC,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,uBAAuB,CAAC,CAsElC"}
@@ -3,58 +3,168 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.buildCallLengthBucketsPipeline = buildCallLengthBucketsPipeline;
7
6
  exports.getDashboardStats = getDashboardStats;
8
7
  const dayjs_1 = __importDefault(require("dayjs"));
9
8
  const calls_getters_1 = require("../calls.getters");
10
9
  const clientsConfig_1 = require("../../clientsConfig");
11
10
  const utc_1 = __importDefault(require("dayjs/plugin/utc"));
12
11
  const timezone_1 = __importDefault(require("dayjs/plugin/timezone"));
12
+ const isoWeek_1 = __importDefault(require("dayjs/plugin/isoWeek"));
13
+ const quarterOfYear_1 = __importDefault(require("dayjs/plugin/quarterOfYear"));
13
14
  const DEFAULT_KPI_DATA = {
14
- totalCalls: 0,
15
- totalDuration: 0,
16
15
  completedCount: 0,
17
- failedCount: 0,
18
- noAnswerCount: 0,
19
16
  busyCount: 0,
17
+ answeredDuration: 0,
20
18
  };
21
19
  dayjs_1.default.extend(utc_1.default);
22
20
  dayjs_1.default.extend(timezone_1.default);
21
+ dayjs_1.default.extend(isoWeek_1.default);
22
+ dayjs_1.default.extend(quarterOfYear_1.default);
23
+ const BUCKET_UNIT = {
24
+ hour: "hour",
25
+ day: "day",
26
+ week: "isoWeek",
27
+ month: "month",
28
+ quarter: "quarter",
29
+ year: "year",
30
+ };
31
+ function formatBucketKey(bucketStart, granularity) {
32
+ switch (granularity) {
33
+ case "hour":
34
+ return bucketStart.format("YYYY-MM-DDTHH:00");
35
+ case "day":
36
+ case "week":
37
+ return bucketStart.format("YYYY-MM-DD");
38
+ case "month":
39
+ return bucketStart.format("YYYY-MM");
40
+ case "quarter":
41
+ return `${bucketStart.format("YYYY")}-Q${bucketStart.quarter()}`;
42
+ case "year":
43
+ return bucketStart.format("YYYY");
44
+ }
45
+ }
46
+ function generateBucketKeys(startDateObj, endDateObj, granularity, timezone) {
47
+ const unitName = BUCKET_UNIT[granularity];
48
+ const startOfUnit = unitName;
49
+ const stepUnit = (unitName === "isoWeek" ? "week" : unitName);
50
+ const end = (0, dayjs_1.default)(endDateObj).tz(timezone);
51
+ let cursor = (0, dayjs_1.default)(startDateObj).tz(timezone).startOf(startOfUnit);
52
+ const keys = [];
53
+ while (cursor.isBefore(end) || cursor.isSame(end, startOfUnit)) {
54
+ keys.push(formatBucketKey(cursor, granularity));
55
+ cursor = cursor.add(1, stepUnit);
56
+ }
57
+ return keys;
58
+ }
59
+ function fillVolumeGaps(bucketKeys, volumeDataRaw) {
60
+ const completedByKey = new Map(volumeDataRaw.map((d) => [d.date, d.completed]));
61
+ return bucketKeys.map((date) => ({
62
+ date,
63
+ completed: completedByKey.get(date) ?? 0,
64
+ }));
65
+ }
66
+ function resolveVolumeGranularity(startDateObj, endDateObj) {
67
+ const spanDays = (0, dayjs_1.default)(endDateObj).diff((0, dayjs_1.default)(startDateObj), "day");
68
+ if (spanDays <= 2)
69
+ return "hour";
70
+ if (spanDays <= 60)
71
+ return "day";
72
+ if (spanDays <= 365)
73
+ return "week";
74
+ if (spanDays <= 730)
75
+ return "month";
76
+ if (spanDays <= 1460)
77
+ return "quarter";
78
+ return "year";
79
+ }
80
+ const VOLUME_DATE_FORMATS = {
81
+ hour: "%Y-%m-%dT%H:00",
82
+ day: "%Y-%m-%d",
83
+ month: "%Y-%m",
84
+ year: "%Y",
85
+ };
86
+ function buildVolumeBucketIdExpression(timezone, granularity) {
87
+ if (granularity === "week") {
88
+ return {
89
+ $dateToString: {
90
+ format: "%Y-%m-%d",
91
+ date: {
92
+ $dateTrunc: {
93
+ date: "$createdAt",
94
+ unit: "week",
95
+ timezone,
96
+ startOfWeek: "monday",
97
+ },
98
+ },
99
+ timezone,
100
+ },
101
+ };
102
+ }
103
+ if (granularity === "quarter") {
104
+ return {
105
+ $concat: [
106
+ { $toString: { $year: { date: "$createdAt", timezone } } },
107
+ "-Q",
108
+ {
109
+ $toString: {
110
+ $add: [
111
+ {
112
+ $trunc: {
113
+ $divide: [
114
+ {
115
+ $subtract: [
116
+ { $month: { date: "$createdAt", timezone } },
117
+ 1,
118
+ ],
119
+ },
120
+ 3,
121
+ ],
122
+ },
123
+ },
124
+ 1,
125
+ ],
126
+ },
127
+ },
128
+ ],
129
+ };
130
+ }
131
+ return {
132
+ $dateToString: {
133
+ format: VOLUME_DATE_FORMATS[granularity],
134
+ date: "$createdAt",
135
+ timezone,
136
+ },
137
+ };
138
+ }
23
139
  function buildKpisPipeline() {
24
140
  return [
25
141
  {
26
142
  $group: {
27
143
  _id: null,
28
- totalCalls: { $sum: 1 },
29
- totalDuration: { $sum: "$callLength" },
30
144
  completedCount: {
31
145
  $sum: { $cond: [{ $eq: ["$status", "completed"] }, 1, 0] },
32
146
  },
33
- failedCount: {
34
- $sum: { $cond: [{ $eq: ["$status", "failed"] }, 1, 0] },
35
- },
36
- noAnswerCount: {
37
- $sum: { $cond: [{ $eq: ["$status", "no-answer"] }, 1, 0] },
38
- },
39
147
  busyCount: {
40
148
  $sum: { $cond: [{ $eq: ["$status", "busy"] }, 1, 0] },
41
149
  },
150
+ answeredDuration: {
151
+ $sum: {
152
+ $cond: [
153
+ { $in: ["$status", ["completed", "busy"]] },
154
+ "$callLength",
155
+ 0,
156
+ ],
157
+ },
158
+ },
42
159
  },
43
160
  },
44
161
  ];
45
162
  }
46
- function buildDailyDataPipeline(timezone) {
163
+ function buildVolumeDataPipeline(timezone, granularity) {
47
164
  return [
48
165
  {
49
166
  $group: {
50
- _id: {
51
- $dateToString: {
52
- format: "%Y-%m-%d",
53
- date: "$createdAt",
54
- timezone: timezone,
55
- },
56
- },
57
- count: { $sum: 1 },
167
+ _id: buildVolumeBucketIdExpression(timezone, granularity),
58
168
  completed: {
59
169
  $sum: { $cond: [{ $eq: ["$status", "completed"] }, 1, 0] },
60
170
  },
@@ -63,86 +173,13 @@ function buildDailyDataPipeline(timezone) {
63
173
  { $sort: { _id: 1 } },
64
174
  ];
65
175
  }
66
- function buildHourlyDataPipeline(timezone) {
67
- return [
68
- {
69
- $group: {
70
- _id: {
71
- day: {
72
- $dateToString: {
73
- format: "%Y-%m-%d",
74
- date: "$createdAt",
75
- timezone: timezone,
76
- },
77
- },
78
- hour: { $hour: { date: "$createdAt", timezone: timezone } },
79
- },
80
- count: { $sum: 1 },
81
- },
82
- },
83
- ];
84
- }
85
- function buildCallLengthBucketsPipeline(thresholds) {
86
- const { shortThreshold, mediumThreshold } = thresholds;
87
- return [
88
- {
89
- $group: {
90
- _id: null,
91
- short: {
92
- $sum: { $cond: [{ $lt: ["$callLength", shortThreshold] }, 1, 0] },
93
- },
94
- medium: {
95
- $sum: {
96
- $cond: [
97
- {
98
- $and: [
99
- { $gte: ["$callLength", shortThreshold] },
100
- { $lte: ["$callLength", mediumThreshold] },
101
- ],
102
- },
103
- 1,
104
- 0,
105
- ],
106
- },
107
- },
108
- long: {
109
- $sum: { $cond: [{ $gt: ["$callLength", mediumThreshold] }, 1, 0] },
110
- },
111
- },
112
- },
113
- ];
114
- }
115
- function buildHeatmapData(hourlyDataRaw) {
116
- const heatmapMap = new Map();
117
- for (const bucket of hourlyDataRaw) {
118
- const dayKey = bucket._id.day;
119
- const hour = bucket._id.hour;
120
- if (!heatmapMap.has(dayKey))
121
- heatmapMap.set(dayKey, new Map());
122
- heatmapMap.get(dayKey).set(hour, bucket.count);
123
- }
124
- const toSortedBuckets = (map) => Array.from(map.entries())
125
- .sort(([a], [b]) => a - b)
126
- .map(([h, c]) => ({
127
- hour: h,
128
- calls: c,
129
- }));
130
- const heatmap = {};
131
- for (const [day, hourMap] of Array.from(heatmapMap.entries()).sort()) {
132
- heatmap[day] = toSortedBuckets(hourMap);
133
- }
134
- return heatmap;
135
- }
136
176
  async function getDashboardStats(params) {
137
- const { clientId, startDate, endDate } = params;
177
+ const { clientId, startDate, endDate, granularity: requestedGranularity, } = params;
138
178
  const clientConfig = await (0, clientsConfig_1.getClientConfig)(clientId);
139
179
  const timezone = clientConfig?.timezone ?? "UTC";
140
- const startDateObj = dayjs_1.default.tz(startDate, timezone).startOf("day").toDate();
141
- const endDateObj = dayjs_1.default.tz(endDate, timezone).endOf("day").toDate();
142
- const thresholds = {
143
- shortThreshold: clientConfig?.callLengthThresholds?.shortThreshold ?? 60,
144
- mediumThreshold: clientConfig?.callLengthThresholds?.mediumThreshold ?? 180,
145
- };
180
+ const startDateObj = (0, dayjs_1.default)(startDate).tz(timezone).startOf("day").toDate();
181
+ const endDateObj = (0, dayjs_1.default)(endDate).tz(timezone).endOf("day").toDate();
182
+ const granularity = requestedGranularity ?? resolveVolumeGranularity(startDateObj, endDateObj);
146
183
  const pipeline = [
147
184
  {
148
185
  $match: {
@@ -153,9 +190,7 @@ async function getDashboardStats(params) {
153
190
  {
154
191
  $facet: {
155
192
  kpis: buildKpisPipeline(),
156
- dailyData: buildDailyDataPipeline(timezone),
157
- hourlyData: buildHourlyDataPipeline(timezone),
158
- callLengthBuckets: buildCallLengthBucketsPipeline(thresholds),
193
+ volumeData: buildVolumeDataPipeline(timezone, granularity),
159
194
  },
160
195
  },
161
196
  ];
@@ -164,43 +199,23 @@ async function getDashboardStats(params) {
164
199
  .aggregate(pipeline)
165
200
  .toArray();
166
201
  const kpiData = aggregatedResult?.kpis?.[0] ?? DEFAULT_KPI_DATA;
167
- const dailyDataRaw = aggregatedResult?.dailyData ?? [];
168
- const hourlyDataRaw = aggregatedResult?.hourlyData ?? [];
169
- const callLengthRaw = aggregatedResult?.callLengthBuckets?.[0] ?? {
170
- short: 0,
171
- medium: 0,
172
- long: 0,
173
- };
202
+ const volumeDataRaw = aggregatedResult?.volumeData ?? [];
203
+ const answeredCount = kpiData.completedCount + kpiData.busyCount;
204
+ const answeredDuration = kpiData.answeredDuration ?? 0;
174
205
  const kpis = {
175
- totalCalls: kpiData.totalCalls,
176
- avgDurationSeconds: kpiData.totalCalls > 0
177
- ? Math.round((kpiData.totalDuration ?? 0) / kpiData.totalCalls)
178
- : 0,
179
- timeSavedMinutes: Math.round((kpiData.totalDuration ?? 0) / 60),
180
- successRate: kpiData.totalCalls > 0
181
- ? Math.round((kpiData.completedCount / kpiData.totalCalls) * 1000) / 10
182
- : 0,
206
+ totalCalls: answeredCount,
207
+ avgDurationSeconds: answeredCount > 0 ? Math.round(answeredDuration / answeredCount) : 0,
208
+ timeSavedMinutes: Math.round(answeredDuration / 60),
183
209
  completedCount: kpiData.completedCount,
184
- failedCount: kpiData.failedCount,
185
- noAnswerCount: kpiData.noAnswerCount,
186
210
  busyCount: kpiData.busyCount,
187
211
  };
188
- const volumeData = dailyDataRaw.map((d) => ({
189
- date: d._id,
190
- count: d.count,
191
- completed: d.completed,
192
- }));
193
- const heatmap = buildHeatmapData(hourlyDataRaw);
212
+ const bucketKeys = generateBucketKeys(startDateObj, endDateObj, granularity, timezone);
213
+ const volumeData = fillVolumeGaps(bucketKeys, volumeDataRaw.map((d) => ({ date: d._id, completed: d.completed })));
194
214
  const response = {
195
215
  kpis,
196
216
  charts: {
197
217
  volumeData,
198
- heatmap,
199
- callLengthBuckets: {
200
- short: callLengthRaw.short,
201
- medium: callLengthRaw.medium,
202
- long: callLengthRaw.long,
203
- },
218
+ volumeGranularity: granularity,
204
219
  },
205
220
  };
206
221
  return response;
@@ -1 +1 @@
1
- {"version":3,"file":"calls.dashboard.js","sourceRoot":"","sources":["../../../../src/talkpilot/calls/dashboard/calls.dashboard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"calls.dashboard.js","sourceRoot":"","sources":["../../../../src/talkpilot/calls/dashboard/calls.dashboard.ts"],"names":[],"mappings":"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"}
@@ -4,63 +4,42 @@ export type DashboardHeatmapMetric = {
4
4
  };
5
5
  export type DashboardDailyTrendMetric = {
6
6
  date: string;
7
- count: number;
8
7
  completed: number;
9
8
  };
10
- export type DashboardDurationSegments = {
11
- short: number;
12
- medium: number;
13
- long: number;
14
- };
9
+ export type DashboardVolumeGranularity = "hour" | "day" | "week" | "month" | "quarter" | "year";
15
10
  export type DashboardSummaryMetrics = {
16
11
  totalCalls: number;
17
12
  avgDurationSeconds: number;
18
13
  timeSavedMinutes: number;
19
- successRate: number;
20
14
  completedCount: number;
21
- failedCount: number;
22
- noAnswerCount: number;
23
15
  busyCount: number;
24
16
  };
25
17
  export type DashboardVisualData = {
26
18
  volumeData: DashboardDailyTrendMetric[];
27
- heatmap: Record<string, DashboardHeatmapMetric[]>;
28
- callLengthBuckets: DashboardDurationSegments;
19
+ volumeGranularity: DashboardVolumeGranularity;
29
20
  };
30
21
  export type DashboardReportQuery = {
31
22
  clientId: string;
32
23
  startDate: string;
33
24
  endDate: string;
25
+ granularity?: DashboardVolumeGranularity;
34
26
  };
35
27
  export type DashboardReportResponse = {
36
28
  kpis: DashboardSummaryMetrics;
37
29
  charts: DashboardVisualData;
38
30
  };
39
31
  type RawKpiResult = {
40
- totalCalls: number;
41
- totalDuration: number | null;
42
32
  completedCount: number;
43
- failedCount: number;
44
- noAnswerCount: number;
45
33
  busyCount: number;
34
+ answeredDuration: number | null;
46
35
  };
47
- export type RawDailyAggregationResult = {
36
+ export type RawVolumeAggregationResult = {
48
37
  _id: string;
49
- count: number;
50
38
  completed: number;
51
39
  };
52
- export type RawHourlyAggregationResult = {
53
- _id: {
54
- day: string;
55
- hour: number;
56
- };
57
- count: number;
58
- };
59
40
  export interface DashboardAggregationResult {
60
41
  kpis: RawKpiResult[];
61
- dailyData: RawDailyAggregationResult[];
62
- hourlyData: RawHourlyAggregationResult[];
63
- callLengthBuckets: DashboardDurationSegments[];
42
+ volumeData: RawVolumeAggregationResult[];
64
43
  }
65
44
  export {};
66
45
  //# sourceMappingURL=calls.dashboard.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"calls.dashboard.types.d.ts","sourceRoot":"","sources":["../../../../src/talkpilot/calls/dashboard/calls.dashboard.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,UAAU,EAAE,yBAAyB,EAAE,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,EAAE,CAAC,CAAC;IAClD,iBAAiB,EAAE,yBAAyB,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,uBAAuB,CAAC;IAC9B,MAAM,EAAE,mBAAmB,CAAC;CAC7B,CAAC;AACF,KAAK,YAAY,GAAG;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,GAAG,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,SAAS,EAAE,yBAAyB,EAAE,CAAC;IACvC,UAAU,EAAE,0BAA0B,EAAE,CAAC;IACzC,iBAAiB,EAAE,yBAAyB,EAAE,CAAC;CAChD"}
1
+ {"version":3,"file":"calls.dashboard.types.d.ts","sourceRoot":"","sources":["../../../../src/talkpilot/calls/dashboard/calls.dashboard.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAClC,MAAM,GACN,KAAK,GACL,MAAM,GACN,OAAO,GACP,SAAS,GACT,MAAM,CAAC;AAEX,MAAM,MAAM,uBAAuB,GAAG;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,UAAU,EAAE,yBAAyB,EAAE,CAAC;IACxC,iBAAiB,EAAE,0BAA0B,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,0BAA0B,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,uBAAuB,CAAC;IAC9B,MAAM,EAAE,mBAAmB,CAAC;CAC7B,CAAC;AACF,KAAK,YAAY,GAAG;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,UAAU,EAAE,0BAA0B,EAAE,CAAC;CAC1C"}
@@ -1 +1 @@
1
- {"version":3,"file":"db-utils.d.ts","sourceRoot":"","sources":["../../src/test-utils/db-utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,EAAE,EAAE,MAAM,SAAS,CAAC;AAM1C,wBAAsB,UAAU,IAAI,OAAO,CAAC,EAAE,CAAC,CAW9C;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAGjD"}
1
+ {"version":3,"file":"db-utils.d.ts","sourceRoot":"","sources":["../../src/test-utils/db-utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,EAAE,EAAE,MAAM,SAAS,CAAC;AAM1C,wBAAsB,UAAU,IAAI,OAAO,CAAC,EAAE,CAAC,CAa9C;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAGjD"}
@@ -15,8 +15,10 @@ async function initTestDb() {
15
15
  await client.connect();
16
16
  const talkpilotDb = client.db();
17
17
  const municipalDb = client.db("municipal-data");
18
+ const websitalkDb = client.db("website-talk");
18
19
  (0, index_1.setDb)(talkpilotDb);
19
20
  (0, index_1.setMunicipalDataDb)(municipalDb);
21
+ (0, index_1.setWebsitalkDb)(websitalkDb);
20
22
  return talkpilotDb;
21
23
  }
22
24
  async function closeTestDb() {
@@ -1 +1 @@
1
- {"version":3,"file":"db-utils.js","sourceRoot":"","sources":["../../src/test-utils/db-utils.ts"],"names":[],"mappings":";;AAOA,gCAWC;AAED,kCAGC;AAvBD,iEAA0D;AAC1D,qCAA0C;AAC1C,oCAAqD;AAErD,IAAI,WAA8B,CAAC;AACnC,IAAI,MAAmB,CAAC;AAEjB,KAAK,UAAU,UAAU;IAC9B,WAAW,GAAG,MAAM,yCAAiB,CAAC,MAAM,CAAC;QAC3C,QAAQ,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE;KAC9B,CAAC,CAAC;IACH,MAAM,GAAG,IAAI,qBAAW,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/C,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;IACvB,MAAM,WAAW,GAAG,MAAM,CAAC,EAAE,EAAE,CAAC;IAChC,MAAM,WAAW,GAAG,MAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC;IAChD,IAAA,aAAK,EAAC,WAAW,CAAC,CAAC;IACnB,IAAA,0BAAkB,EAAC,WAAW,CAAC,CAAC;IAChC,OAAO,WAAW,CAAC;AACrB,CAAC;AAEM,KAAK,UAAU,WAAW;IAC/B,IAAI,MAAM;QAAE,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACjC,IAAI,WAAW;QAAE,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;AAC5C,CAAC"}
1
+ {"version":3,"file":"db-utils.js","sourceRoot":"","sources":["../../src/test-utils/db-utils.ts"],"names":[],"mappings":";;AAOA,gCAaC;AAED,kCAGC;AAzBD,iEAA0D;AAC1D,qCAA0C;AAC1C,oCAAqE;AAErE,IAAI,WAA8B,CAAC;AACnC,IAAI,MAAmB,CAAC;AAEjB,KAAK,UAAU,UAAU;IAC9B,WAAW,GAAG,MAAM,yCAAiB,CAAC,MAAM,CAAC;QAC3C,QAAQ,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE;KAC9B,CAAC,CAAC;IACH,MAAM,GAAG,IAAI,qBAAW,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/C,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;IACvB,MAAM,WAAW,GAAG,MAAM,CAAC,EAAE,EAAE,CAAC;IAChC,MAAM,WAAW,GAAG,MAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,MAAM,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC;IAC9C,IAAA,aAAK,EAAC,WAAW,CAAC,CAAC;IACnB,IAAA,0BAAkB,EAAC,WAAW,CAAC,CAAC;IAChC,IAAA,sBAAc,EAAC,WAAW,CAAC,CAAC;IAC5B,OAAO,WAAW,CAAC;AACrB,CAAC;AAEM,KAAK,UAAU,WAAW;IAC/B,IAAI,MAAM;QAAE,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACjC,IAAI,WAAW;QAAE,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;AAC5C,CAAC"}
@@ -8,6 +8,8 @@ export * from "./talkpilot/phone_numbers";
8
8
  export * from "./talkpilot/sessions";
9
9
  export * from "./municipal/cities";
10
10
  export * from "./municipal/departmentsSubjects";
11
+ export * from "./municipal/muniIssues";
11
12
  export * from "./municipal/streets";
12
13
  export * from "./municipal/tickets";
14
+ export * from "./websitalk/scans";
13
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/test-utils/factories/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iCAAiC,CAAC;AAChD,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/test-utils/factories/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iCAAiC,CAAC;AAChD,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC"}
@@ -24,6 +24,8 @@ __exportStar(require("./talkpilot/phone_numbers"), exports);
24
24
  __exportStar(require("./talkpilot/sessions"), exports);
25
25
  __exportStar(require("./municipal/cities"), exports);
26
26
  __exportStar(require("./municipal/departmentsSubjects"), exports);
27
+ __exportStar(require("./municipal/muniIssues"), exports);
27
28
  __exportStar(require("./municipal/streets"), exports);
28
29
  __exportStar(require("./municipal/tickets"), exports);
30
+ __exportStar(require("./websitalk/scans"), exports);
29
31
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/test-utils/factories/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,oDAAkC;AAClC,iEAA+C;AAC/C,4DAA0C;AAC1C,oDAAkC;AAClC,qDAAmC;AACnC,4DAA0C;AAC1C,uDAAqC;AACrC,qDAAmC;AACnC,kEAAgD;AAChD,sDAAoC;AACpC,sDAAoC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/test-utils/factories/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,oDAAkC;AAClC,iEAA+C;AAC/C,4DAA0C;AAC1C,oDAAkC;AAClC,qDAAmC;AACnC,4DAA0C;AAC1C,uDAAqC;AACrC,qDAAmC;AACnC,kEAAgD;AAChD,yDAAuC;AACvC,sDAAoC;AACpC,sDAAoC;AACpC,oDAAkC"}
@@ -0,0 +1,10 @@
1
+ import { Factory } from "fishery";
2
+ import type { CreateMuniIssueInput } from "../../../municipal";
3
+ /**
4
+ * Test factory for `createMuniIssue` input.
5
+ * `jira.key` uses `sequence` so each build gets a unique key (the real key
6
+ * comes from Jira in production).
7
+ */
8
+ export declare const muniIssueInputFactory: Factory<CreateMuniIssueInput, any, CreateMuniIssueInput, import("fishery").DeepPartialObject<CreateMuniIssueInput>>;
9
+ export declare function createMuniIssueInput(overrides?: Partial<CreateMuniIssueInput>): CreateMuniIssueInput;
10
+ //# sourceMappingURL=muniIssues.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"muniIssues.d.ts","sourceRoot":"","sources":["../../../../src/test-utils/factories/municipal/muniIssues.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE/D;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,qHAgBjC,CAAC;AAEF,wBAAgB,oBAAoB,CAClC,SAAS,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GACxC,oBAAoB,CAEtB"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.muniIssueInputFactory = void 0;
4
+ exports.createMuniIssueInput = createMuniIssueInput;
5
+ const fishery_1 = require("fishery");
6
+ const faker_1 = require("@faker-js/faker");
7
+ /**
8
+ * Test factory for `createMuniIssue` input.
9
+ * `jira.key` uses `sequence` so each build gets a unique key (the real key
10
+ * comes from Jira in production).
11
+ */
12
+ exports.muniIssueInputFactory = fishery_1.Factory.define(({ sequence }) => ({
13
+ callSid: `CA${faker_1.faker.string.alphanumeric(10)}`,
14
+ clientId: faker_1.faker.string.uuid(),
15
+ cityName: faker_1.faker.location.city(),
16
+ issueContent: {
17
+ issuerName: faker_1.faker.person.fullName(),
18
+ issuerRole: faker_1.faker.person.jobTitle(),
19
+ issueDescription: faker_1.faker.lorem.sentence(),
20
+ desiredBehavior: faker_1.faker.lorem.sentence(),
21
+ },
22
+ jira: {
23
+ key: `CP-${sequence}`,
24
+ syncStatus: "created",
25
+ },
26
+ }));
27
+ function createMuniIssueInput(overrides) {
28
+ return exports.muniIssueInputFactory.build(overrides);
29
+ }
30
+ //# sourceMappingURL=muniIssues.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"muniIssues.js","sourceRoot":"","sources":["../../../../src/test-utils/factories/municipal/muniIssues.ts"],"names":[],"mappings":";;;AA2BA,oDAIC;AA/BD,qCAAkC;AAClC,2CAAwC;AAGxC;;;;GAIG;AACU,QAAA,qBAAqB,GAAG,iBAAO,CAAC,MAAM,CACjD,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IACjB,OAAO,EAAE,KAAK,aAAK,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE;IAC7C,QAAQ,EAAE,aAAK,CAAC,MAAM,CAAC,IAAI,EAAE;IAC7B,QAAQ,EAAE,aAAK,CAAC,QAAQ,CAAC,IAAI,EAAE;IAC/B,YAAY,EAAE;QACZ,UAAU,EAAE,aAAK,CAAC,MAAM,CAAC,QAAQ,EAAE;QACnC,UAAU,EAAE,aAAK,CAAC,MAAM,CAAC,QAAQ,EAAE;QACnC,gBAAgB,EAAE,aAAK,CAAC,KAAK,CAAC,QAAQ,EAAE;QACxC,eAAe,EAAE,aAAK,CAAC,KAAK,CAAC,QAAQ,EAAE;KACxC;IACD,IAAI,EAAE;QACJ,GAAG,EAAE,MAAM,QAAQ,EAAE;QACrB,UAAU,EAAE,SAAS;KACtB;CACF,CAAC,CACH,CAAC;AAEF,SAAgB,oBAAoB,CAClC,SAAyC;IAEzC,OAAO,6BAAqB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAChD,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { Factory } from "fishery";
2
+ import type { Scan } from "../../../websitalk";
3
+ export declare const scanFactory: Factory<Scan, any, Scan, import("fishery").DeepPartialObject<Scan>>;
4
+ export declare function createScanFixture(overrides?: Partial<Scan>): Scan;
5
+ //# sourceMappingURL=scans.d.ts.map
@@ -0,0 +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;AAElC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE/C,eAAO,MAAM,WAAW,qEAcrB,CAAC;AAEJ,wBAAgB,iBAAiB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAEjE"}