@skillsmith/core 0.5.3 → 0.5.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 (177) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/src/activation/ActivationManager.d.ts +7 -0
  4. package/dist/src/activation/ActivationManager.d.ts.map +1 -1
  5. package/dist/src/activation/ActivationManager.js +13 -4
  6. package/dist/src/activation/ActivationManager.js.map +1 -1
  7. package/dist/src/analysis/adapters/python.d.ts +16 -11
  8. package/dist/src/analysis/adapters/python.d.ts.map +1 -1
  9. package/dist/src/analysis/adapters/python.js +46 -61
  10. package/dist/src/analysis/adapters/python.js.map +1 -1
  11. package/dist/src/analysis/router.test.d.ts +2 -0
  12. package/dist/src/analysis/router.test.d.ts.map +1 -0
  13. package/dist/src/analysis/router.test.js +411 -0
  14. package/dist/src/analysis/router.test.js.map +1 -0
  15. package/dist/src/analysis/tree-sitter/manager.d.ts.map +1 -1
  16. package/dist/src/analysis/tree-sitter/manager.js +12 -5
  17. package/dist/src/analysis/tree-sitter/manager.js.map +1 -1
  18. package/dist/src/analysis/tree-sitter/pythonExtractor.d.ts +45 -0
  19. package/dist/src/analysis/tree-sitter/pythonExtractor.d.ts.map +1 -0
  20. package/dist/src/analysis/tree-sitter/pythonExtractor.js +264 -0
  21. package/dist/src/analysis/tree-sitter/pythonExtractor.js.map +1 -0
  22. package/dist/src/analysis/tree-sitter/pythonExtractor.test.d.ts +12 -0
  23. package/dist/src/analysis/tree-sitter/pythonExtractor.test.d.ts.map +1 -0
  24. package/dist/src/analysis/tree-sitter/pythonExtractor.test.js +74 -0
  25. package/dist/src/analysis/tree-sitter/pythonExtractor.test.js.map +1 -0
  26. package/dist/src/analysis/tree-sitter/pythonIncremental.d.ts +93 -0
  27. package/dist/src/analysis/tree-sitter/pythonIncremental.d.ts.map +1 -0
  28. package/dist/src/analysis/tree-sitter/pythonIncremental.hardening.test.d.ts +22 -0
  29. package/dist/src/analysis/tree-sitter/pythonIncremental.hardening.test.d.ts.map +1 -0
  30. package/dist/src/analysis/tree-sitter/pythonIncremental.hardening.test.js +229 -0
  31. package/dist/src/analysis/tree-sitter/pythonIncremental.hardening.test.js.map +1 -0
  32. package/dist/src/analysis/tree-sitter/pythonIncremental.js +287 -0
  33. package/dist/src/analysis/tree-sitter/pythonIncremental.js.map +1 -0
  34. package/dist/src/analysis/tree-sitter/pythonIncremental.test.d.ts +17 -0
  35. package/dist/src/analysis/tree-sitter/pythonIncremental.test.d.ts.map +1 -0
  36. package/dist/src/analysis/tree-sitter/pythonIncremental.test.js +142 -0
  37. package/dist/src/analysis/tree-sitter/pythonIncremental.test.js.map +1 -0
  38. package/dist/src/analysis/tree-sitter/queries/python.d.ts +43 -0
  39. package/dist/src/analysis/tree-sitter/queries/python.d.ts.map +1 -0
  40. package/dist/src/analysis/tree-sitter/queries/python.js +88 -0
  41. package/dist/src/analysis/tree-sitter/queries/python.js.map +1 -0
  42. package/dist/src/analysis/tree-sitter/queryExtractionMatchesOrExceedsRegex.test.d.ts +13 -0
  43. package/dist/src/analysis/tree-sitter/queryExtractionMatchesOrExceedsRegex.test.d.ts.map +1 -0
  44. package/dist/src/analysis/tree-sitter/queryExtractionMatchesOrExceedsRegex.test.js +174 -0
  45. package/dist/src/analysis/tree-sitter/queryExtractionMatchesOrExceedsRegex.test.js.map +1 -0
  46. package/dist/src/analytics/ROIDashboardService.csv.d.ts +11 -0
  47. package/dist/src/analytics/ROIDashboardService.csv.d.ts.map +1 -0
  48. package/dist/src/analytics/ROIDashboardService.csv.js +43 -0
  49. package/dist/src/analytics/ROIDashboardService.csv.js.map +1 -0
  50. package/dist/src/analytics/ROIDashboardService.d.ts +64 -3
  51. package/dist/src/analytics/ROIDashboardService.d.ts.map +1 -1
  52. package/dist/src/analytics/ROIDashboardService.js +116 -45
  53. package/dist/src/analytics/ROIDashboardService.js.map +1 -1
  54. package/dist/src/api/schemas.d.ts +70 -319
  55. package/dist/src/api/schemas.d.ts.map +1 -1
  56. package/dist/src/benchmarks/incrementalParseBenchmark.d.ts +18 -0
  57. package/dist/src/benchmarks/incrementalParseBenchmark.d.ts.map +1 -0
  58. package/dist/src/benchmarks/incrementalParseBenchmark.js +121 -0
  59. package/dist/src/benchmarks/incrementalParseBenchmark.js.map +1 -0
  60. package/dist/src/billing/GDPRComplianceService.test.d.ts +2 -0
  61. package/dist/src/billing/GDPRComplianceService.test.d.ts.map +1 -0
  62. package/dist/src/billing/GDPRComplianceService.test.js +405 -0
  63. package/dist/src/billing/GDPRComplianceService.test.js.map +1 -0
  64. package/dist/src/index.d.ts +4 -3
  65. package/dist/src/index.d.ts.map +1 -1
  66. package/dist/src/index.js +2 -2
  67. package/dist/src/index.js.map +1 -1
  68. package/dist/src/indexer/SkillParser.coverage.test.d.ts +10 -0
  69. package/dist/src/indexer/SkillParser.coverage.test.d.ts.map +1 -0
  70. package/dist/src/indexer/SkillParser.coverage.test.js +76 -0
  71. package/dist/src/indexer/SkillParser.coverage.test.js.map +1 -0
  72. package/dist/src/indexer/SkillParser.test.d.ts +2 -0
  73. package/dist/src/indexer/SkillParser.test.d.ts.map +1 -0
  74. package/dist/src/indexer/SkillParser.test.js +375 -0
  75. package/dist/src/indexer/SkillParser.test.js.map +1 -0
  76. package/dist/src/scripts/validation/types.d.ts +14 -24
  77. package/dist/src/scripts/validation/types.d.ts.map +1 -1
  78. package/dist/src/services/skill-config-schema.d.ts +4 -36
  79. package/dist/src/services/skill-config-schema.d.ts.map +1 -1
  80. package/dist/src/sources/LocalFilesystemAdapter.d.ts +104 -10
  81. package/dist/src/sources/LocalFilesystemAdapter.d.ts.map +1 -1
  82. package/dist/src/sources/LocalFilesystemAdapter.helpers.d.ts +92 -0
  83. package/dist/src/sources/LocalFilesystemAdapter.helpers.d.ts.map +1 -0
  84. package/dist/src/sources/LocalFilesystemAdapter.helpers.js +157 -0
  85. package/dist/src/sources/LocalFilesystemAdapter.helpers.js.map +1 -0
  86. package/dist/src/sources/LocalFilesystemAdapter.js +218 -159
  87. package/dist/src/sources/LocalFilesystemAdapter.js.map +1 -1
  88. package/dist/src/sources/LocalFilesystemAdapter.scan.d.ts +78 -0
  89. package/dist/src/sources/LocalFilesystemAdapter.scan.d.ts.map +1 -0
  90. package/dist/src/sources/LocalFilesystemAdapter.scan.js +118 -0
  91. package/dist/src/sources/LocalFilesystemAdapter.scan.js.map +1 -0
  92. package/dist/src/sources/index.d.ts +1 -1
  93. package/dist/src/sources/index.d.ts.map +1 -1
  94. package/dist/src/sources/index.js.map +1 -1
  95. package/dist/src/sources/types.d.ts +28 -0
  96. package/dist/src/sources/types.d.ts.map +1 -1
  97. package/dist/src/telemetry/tracer-imports.d.ts +13 -0
  98. package/dist/src/telemetry/tracer-imports.d.ts.map +1 -0
  99. package/dist/src/telemetry/tracer-imports.js +26 -0
  100. package/dist/src/telemetry/tracer-imports.js.map +1 -0
  101. package/dist/src/telemetry/tracer.d.ts.map +1 -1
  102. package/dist/src/telemetry/tracer.js +18 -21
  103. package/dist/src/telemetry/tracer.js.map +1 -1
  104. package/dist/src/utils/rate-limit.d.ts +39 -0
  105. package/dist/src/utils/rate-limit.d.ts.map +1 -0
  106. package/dist/src/utils/rate-limit.js +48 -0
  107. package/dist/src/utils/rate-limit.js.map +1 -0
  108. package/dist/src/utils/rate-limit.test.d.ts +11 -0
  109. package/dist/src/utils/rate-limit.test.d.ts.map +1 -0
  110. package/dist/src/utils/rate-limit.test.js +86 -0
  111. package/dist/src/utils/rate-limit.test.js.map +1 -0
  112. package/dist/src/webhooks/WebhookDeadLetterRepository.d.ts +178 -0
  113. package/dist/src/webhooks/WebhookDeadLetterRepository.d.ts.map +1 -0
  114. package/dist/src/webhooks/WebhookDeadLetterRepository.js +196 -0
  115. package/dist/src/webhooks/WebhookDeadLetterRepository.js.map +1 -0
  116. package/dist/src/webhooks/WebhookQueue.d.ts +1 -0
  117. package/dist/src/webhooks/WebhookQueue.d.ts.map +1 -1
  118. package/dist/src/webhooks/WebhookQueue.js +19 -0
  119. package/dist/src/webhooks/WebhookQueue.js.map +1 -1
  120. package/dist/src/webhooks/WebhookQueue.types.d.ts +11 -0
  121. package/dist/src/webhooks/WebhookQueue.types.d.ts.map +1 -1
  122. package/dist/src/webhooks/index.d.ts +1 -0
  123. package/dist/src/webhooks/index.d.ts.map +1 -1
  124. package/dist/src/webhooks/index.js +2 -0
  125. package/dist/src/webhooks/index.js.map +1 -1
  126. package/dist/src/webhooks/webhook-schemas.d.ts +117 -1212
  127. package/dist/src/webhooks/webhook-schemas.d.ts.map +1 -1
  128. package/dist/tests/ActivationManager.test.d.ts +13 -0
  129. package/dist/tests/ActivationManager.test.d.ts.map +1 -0
  130. package/dist/tests/ActivationManager.test.js +218 -0
  131. package/dist/tests/ActivationManager.test.js.map +1 -0
  132. package/dist/tests/LocalFilesystemAdapter.coverage.test.d.ts +13 -0
  133. package/dist/tests/LocalFilesystemAdapter.coverage.test.d.ts.map +1 -0
  134. package/dist/tests/LocalFilesystemAdapter.coverage.test.js +314 -0
  135. package/dist/tests/LocalFilesystemAdapter.coverage.test.js.map +1 -0
  136. package/dist/tests/LocalFilesystemAdapter.security.test.d.ts +18 -0
  137. package/dist/tests/LocalFilesystemAdapter.security.test.d.ts.map +1 -0
  138. package/dist/tests/LocalFilesystemAdapter.security.test.js +344 -0
  139. package/dist/tests/LocalFilesystemAdapter.security.test.js.map +1 -0
  140. package/dist/tests/LocalFilesystemAdapter.test.d.ts +12 -0
  141. package/dist/tests/LocalFilesystemAdapter.test.d.ts.map +1 -0
  142. package/dist/tests/LocalFilesystemAdapter.test.js +301 -0
  143. package/dist/tests/LocalFilesystemAdapter.test.js.map +1 -0
  144. package/dist/tests/ROIDashboardService.coverage.test.d.ts +9 -0
  145. package/dist/tests/ROIDashboardService.coverage.test.d.ts.map +1 -0
  146. package/dist/tests/ROIDashboardService.coverage.test.js +118 -0
  147. package/dist/tests/ROIDashboardService.coverage.test.js.map +1 -0
  148. package/dist/tests/ROIDashboardService.test.js +87 -0
  149. package/dist/tests/ROIDashboardService.test.js.map +1 -1
  150. package/dist/tests/ScraperAdapters.gitlab-coverage.test.d.ts +14 -0
  151. package/dist/tests/ScraperAdapters.gitlab-coverage.test.d.ts.map +1 -0
  152. package/dist/tests/ScraperAdapters.gitlab-coverage.test.js +169 -0
  153. package/dist/tests/ScraperAdapters.gitlab-coverage.test.js.map +1 -0
  154. package/dist/tests/ScraperAdapters.test.d.ts +5 -1
  155. package/dist/tests/ScraperAdapters.test.d.ts.map +1 -1
  156. package/dist/tests/ScraperAdapters.test.js +6 -336
  157. package/dist/tests/ScraperAdapters.test.js.map +1 -1
  158. package/dist/tests/WebhookDeadLetterRepository.test.d.ts +2 -0
  159. package/dist/tests/WebhookDeadLetterRepository.test.d.ts.map +1 -0
  160. package/dist/tests/WebhookDeadLetterRepository.test.js +333 -0
  161. package/dist/tests/WebhookDeadLetterRepository.test.js.map +1 -0
  162. package/dist/tests/WebhookHandler.test.js +93 -1
  163. package/dist/tests/WebhookHandler.test.js.map +1 -1
  164. package/dist/tests/WebhookQueue.coverage.test.d.ts +19 -0
  165. package/dist/tests/WebhookQueue.coverage.test.d.ts.map +1 -0
  166. package/dist/tests/WebhookQueue.coverage.test.js +190 -0
  167. package/dist/tests/WebhookQueue.coverage.test.js.map +1 -0
  168. package/dist/tests/billing/GDPRCompliance.test.d.ts +2 -2
  169. package/dist/tests/billing/GDPRCompliance.test.js +221 -36
  170. package/dist/tests/billing/GDPRCompliance.test.js.map +1 -1
  171. package/dist/tests/telemetry.test.js +126 -0
  172. package/dist/tests/telemetry.test.js.map +1 -1
  173. package/dist/tests/webhooks/WebhookDeadLetterRepository.test.d.ts +10 -0
  174. package/dist/tests/webhooks/WebhookDeadLetterRepository.test.d.ts.map +1 -0
  175. package/dist/tests/webhooks/WebhookDeadLetterRepository.test.js +109 -0
  176. package/dist/tests/webhooks/WebhookDeadLetterRepository.test.js.map +1 -0
  177. package/package.json +8 -3
@@ -1 +1 @@
1
- {"version":3,"file":"ROIDashboardService.d.ts","sourceRoot":"","sources":["../../../src/analytics/ROIDashboardService.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAE3E,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAc,MAAM,YAAY,CAAA;AAEpF,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,IAAI,CAAqB;IACjC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAI;IAC3C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAI;gBAEzB,EAAE,EAAE,YAAY;IAI5B;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,MAAW,GAAG,YAAY,CAAC,MAAM,CAAC;IAmCnE;;OAEG;IACH,iBAAiB,CAAC,IAAI,GAAE,MAAW,GAAG,YAAY,CAAC,aAAa,CAAC;IA4CjE;;;OAGG;IACH,iBAAiB,CAAC,OAAO,GAAE,iBAAsB,GAAG,UAAU,EAAE;IAyBhE;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,GAAE,MAAW,GAAG,MAAM;IAoB1F;;OAEG;IACH,cAAc,IAAI,IAAI;IAWtB,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,oBAAoB;IAyB5B,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,6BAA6B;IAerC,OAAO,CAAC,kBAAkB;IAmC1B,OAAO,CAAC,mBAAmB;IAmC3B,OAAO,CAAC,mBAAmB;IAqB3B,OAAO,CAAC,eAAe;CAuCxB"}
1
+ {"version":3,"file":"ROIDashboardService.d.ts","sourceRoot":"","sources":["../../../src/analytics/ROIDashboardService.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAI3E,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAc,MAAM,YAAY,CAAA;AAEpF,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAKD;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,QAC+C,CAAA;AAE3E,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,IAAI,CAAqB;IACjC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAI;IAC3C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAI;gBAEzB,EAAE,EAAE,YAAY;IAI5B;;;OAGG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,MAAW,GAAG,YAAY,CAAC,MAAM,CAAC;IAKnE;;;OAGG;IACH,OAAO,CAAC,YAAY;IAiCpB;;;OAGG;IACH,iBAAiB,CAAC,IAAI,GAAE,MAAW,GAAG,YAAY,CAAC,aAAa,CAAC;IAKjE;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IA0C3B;;;;;;;;;;;;;OAaG;IACH,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,YAAY;IAU7D;;;OAGG;IACH,iBAAiB,CAAC,OAAO,GAAE,iBAAsB,GAAG,UAAU,EAAE;IAyBhE;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,GAAE,MAAW,GAAG,MAAM;IAoB1F;;OAEG;IACH,cAAc,IAAI,IAAI;IAWtB,OAAO,CAAC,YAAY;IAmBpB;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAmB7B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,gBAAgB;IA0BxB,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,oBAAoB;IA+B5B,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,6BAA6B;IAyBrC,OAAO,CAAC,kBAAkB;IAmC1B,OAAO,CAAC,mBAAmB;IAmC3B,OAAO,CAAC,mBAAmB;CAoB5B"}
@@ -7,7 +7,19 @@
7
7
  * - Automated data refresh and computation
8
8
  * - Export to JSON/CSV (PDF planned for future)
9
9
  */
10
+ import { ValidationError } from '../validation/validation-error.js';
10
11
  import { AnalyticsRepository } from './AnalyticsRepository.js';
12
+ import { convertROIToCSV } from './ROIDashboardService.csv.js';
13
+ /** Default window applied by {@link ROIDashboardService.getDashboard} when both dates are omitted. */
14
+ const DEFAULT_DASHBOARD_WINDOW_DAYS = 30;
15
+ /**
16
+ * Strict ISO-8601 / RFC-3339 profile matcher (SMI-4317). Accepts `YYYY-MM-DD`
17
+ * and `YYYY-MM-DDTHH:MM:SS(.sss)?(Z|[+-]HH:MM)`; rejects RFC-2822, slash
18
+ * separators, space-as-T, bare date-time without offset, and any trailing
19
+ * content. Syntactic guard only — calendar validity (e.g., `2026-13-01`) is
20
+ * caught by the paired `Date.parse` check. Exported for tests/reuse.
21
+ */
22
+ export const ISO_8601_STRICT = /^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d{1,9})?(Z|[+-]\d{2}:\d{2}))?$/;
11
23
  export class ROIDashboardService {
12
24
  repo;
13
25
  TIME_SAVED_PER_SUCCESS = 5; // minutes (configurable)
@@ -16,10 +28,18 @@ export class ROIDashboardService {
16
28
  this.repo = new AnalyticsRepository(db);
17
29
  }
18
30
  /**
19
- * Get user ROI dashboard data
31
+ * Get user ROI dashboard data for a rolling window (last `days` days).
32
+ * For an explicit ISO-8601 range, use {@link getDashboard}.
20
33
  */
21
34
  getUserROI(userId, days = 30) {
22
35
  const { startDate, endDate } = this.getDateRange(days);
36
+ return this.buildUserROI(userId, startDate, endDate);
37
+ }
38
+ /**
39
+ * Core per-user ROI computation over an explicit ISO-8601 range.
40
+ * Shared between {@link getUserROI} (days-based) and {@link getDashboard}.
41
+ */
42
+ buildUserROI(userId, startDate, endDate) {
23
43
  // Get user's usage events
24
44
  const events = this.repo.getUsageEventsForUser(userId, startDate, endDate);
25
45
  // Calculate total time saved
@@ -36,7 +56,7 @@ export class ROIDashboardService {
36
56
  }))
37
57
  .sort((a, b) => b.timeSaved - a.timeSaved)
38
58
  .slice(0, 5);
39
- // Calculate weekly trend
59
+ // Calculate weekly trend (filtered to [startDate, endDate])
40
60
  const weeklyTrend = this.calculateWeeklyTrend(events, startDate, endDate);
41
61
  return {
42
62
  userId,
@@ -47,10 +67,18 @@ export class ROIDashboardService {
47
67
  };
48
68
  }
49
69
  /**
50
- * Get stakeholder aggregate ROI dashboard
70
+ * Get stakeholder aggregate ROI dashboard for a rolling window (last `days` days).
71
+ * For an explicit ISO-8601 range, use {@link getDashboard}.
51
72
  */
52
73
  getStakeholderROI(days = 30) {
53
74
  const { startDate, endDate } = this.getDateRange(days);
75
+ return this.buildStakeholderROI(startDate, endDate);
76
+ }
77
+ /**
78
+ * Core stakeholder ROI computation over an explicit ISO-8601 range.
79
+ * Shared between {@link getStakeholderROI} (days-based) and {@link getDashboard}.
80
+ */
81
+ buildStakeholderROI(startDate, endDate) {
54
82
  // Get ROI metrics for the period
55
83
  const metrics = this.repo.getROIMetrics('daily', startDate, endDate);
56
84
  if (metrics.length === 0) {
@@ -86,6 +114,27 @@ export class ROIDashboardService {
86
114
  skillLeaderboard,
87
115
  };
88
116
  }
117
+ /**
118
+ * Public date-range-aware dashboard entrypoint (SMI-1683 / GitHub #603).
119
+ *
120
+ * Behavior:
121
+ * - Both dates omitted: defaults to the last 30 days ending now.
122
+ * - Exactly one date provided: throws {@link ValidationError} (the range is ambiguous).
123
+ * - `startDate >= endDate`: throws {@link ValidationError}.
124
+ * - `userId` provided: returns `{ user }` with date-filtered per-user metrics.
125
+ * - `userId` omitted: returns `{ stakeholder }` aggregated over the range.
126
+ *
127
+ * @param options.userId Optional — when supplied, returns the per-user dashboard.
128
+ * @param options.startDate Optional ISO-8601 timestamp; must be paired with `endDate`.
129
+ * @param options.endDate Optional ISO-8601 timestamp; must be paired with `startDate`.
130
+ */
131
+ getDashboard(options = {}) {
132
+ const { startDate, endDate } = this.resolveDashboardRange(options.startDate, options.endDate);
133
+ if (options.userId) {
134
+ return { user: this.buildUserROI(options.userId, startDate, endDate) };
135
+ }
136
+ return { stakeholder: this.buildStakeholderROI(startDate, endDate) };
137
+ }
89
138
  /**
90
139
  * Compute and store ROI metrics for a period
91
140
  * This should be run periodically (e.g., daily) to maintain the dashboard
@@ -123,7 +172,7 @@ export class ROIDashboardService {
123
172
  case 'json':
124
173
  return JSON.stringify(data, null, 2);
125
174
  case 'csv':
126
- return this.convertROIToCSV(data);
175
+ return convertROIToCSV(data);
127
176
  case 'pdf':
128
177
  throw new Error('PDF export not yet implemented');
129
178
  default:
@@ -141,6 +190,13 @@ export class ROIDashboardService {
141
190
  }
142
191
  // ==================== Private Helper Methods ====================
143
192
  getDateRange(days) {
193
+ // SMI-4317: fail fast on non-positive-integer `days`. Without this guard,
194
+ // `getUserROI(userId, -5)` silently inverts the range (start > end), which
195
+ // downstream either yields empty results or throws a confusing
196
+ // "startDate must be before endDate" error.
197
+ if (!Number.isFinite(days) || !Number.isInteger(days) || days <= 0) {
198
+ throw new ValidationError('days must be a positive integer', 'INVALID_DATE_RANGE');
199
+ }
144
200
  const endDate = new Date();
145
201
  const startDate = new Date(endDate);
146
202
  startDate.setDate(startDate.getDate() - days);
@@ -149,6 +205,45 @@ export class ROIDashboardService {
149
205
  endDate: endDate.toISOString(),
150
206
  };
151
207
  }
208
+ /**
209
+ * Resolve the range for {@link getDashboard}: default to last 30 days when both
210
+ * dates are omitted, validate that exactly-one-date was not supplied, and enforce
211
+ * `startDate < endDate`.
212
+ */
213
+ resolveDashboardRange(startDate, endDate) {
214
+ if (startDate === undefined && endDate === undefined) {
215
+ return this.getDateRange(DEFAULT_DASHBOARD_WINDOW_DAYS);
216
+ }
217
+ if (startDate === undefined || endDate === undefined) {
218
+ throw new ValidationError('Must provide both startDate and endDate, or neither', 'INVALID_DATE_RANGE');
219
+ }
220
+ this.assertValidRange(startDate, endDate);
221
+ return { startDate, endDate };
222
+ }
223
+ /**
224
+ * Throw a typed {@link ValidationError} when the supplied range is malformed.
225
+ *
226
+ * Validation layers (SMI-4317):
227
+ * 1. Strict ISO-8601 / RFC-3339 regex — rejects shapes like `2026/01/01`,
228
+ * `2026-01-01 00:00:00` (space), `Jan 1 2026`, or RFC-2822 that
229
+ * `Date.parse` would otherwise accept.
230
+ * 2. `Date.parse` NaN check — catches syntactically valid but semantically
231
+ * invalid dates (e.g., `2026-13-01`) that the regex cannot detect.
232
+ * 3. Ordering — rejects when `startDate >= endDate`.
233
+ */
234
+ assertValidRange(startDate, endDate) {
235
+ if (!ISO_8601_STRICT.test(startDate) || !ISO_8601_STRICT.test(endDate)) {
236
+ throw new ValidationError('startDate and endDate must be strict ISO-8601 timestamps (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS[.sss][Z|±HH:MM])', 'INVALID_DATE_RANGE');
237
+ }
238
+ const start = Date.parse(startDate);
239
+ const end = Date.parse(endDate);
240
+ if (Number.isNaN(start) || Number.isNaN(end)) {
241
+ throw new ValidationError('startDate and endDate must be parseable ISO-8601 timestamps', 'INVALID_DATE_RANGE');
242
+ }
243
+ if (start >= end) {
244
+ throw new ValidationError('Invalid range: startDate must be before endDate', 'INVALID_DATE_RANGE');
245
+ }
246
+ }
152
247
  calculateTimeSaved(events) {
153
248
  const successCount = events.filter((e) => e.eventType === 'success').length;
154
249
  return successCount * this.TIME_SAVED_PER_SUCCESS;
@@ -163,11 +258,13 @@ export class ROIDashboardService {
163
258
  }
164
259
  return groups;
165
260
  }
166
- calculateWeeklyTrend(events, _startDate, // TODO: SMI-1683 - Implement date range filtering
167
- _endDate) {
168
- // Group events by week
261
+ calculateWeeklyTrend(events, startDate, endDate) {
262
+ // Filter events to the requested inclusive range (SMI-1683 / GitHub #603).
263
+ // ISO-8601 timestamps sort lexicographically, so string comparison is correct.
264
+ const filtered = events.filter((event) => event.timestamp >= startDate && event.timestamp <= endDate);
265
+ // Group filtered events by week
169
266
  const weeklyGroups = {};
170
- for (const event of events) {
267
+ for (const event of filtered) {
171
268
  const weekStart = this.getWeekStart(event.timestamp);
172
269
  if (!weeklyGroups[weekStart]) {
173
270
  weeklyGroups[weekStart] = [];
@@ -189,9 +286,17 @@ export class ROIDashboardService {
189
286
  const weekStart = new Date(date.setDate(diff));
190
287
  return weekStart.toISOString().split('T')[0];
191
288
  }
192
- computeStakeholderROIOnTheFly(_startDate, // TODO: SMI-1683 - Implement date range filtering
193
- _endDate) {
194
- // This is a simplified version - in production, query events directly
289
+ computeStakeholderROIOnTheFly(startDate, endDate) {
290
+ // SMI-1683 scope: validate the date range even though the on-the-fly branch
291
+ // still returns zeroed stakeholder data. This guards callers from passing
292
+ // malformed ranges while the event-query implementation remains deferred.
293
+ //
294
+ // DESCOPE: The actual event aggregation (users, activations, time saved,
295
+ // leaderboard) lands in SMI-4296. Until then this method intentionally
296
+ // returns a zeroed struct regardless of the events present in the range,
297
+ // and the unit test for this branch asserts the zeroed shape to document
298
+ // the incompleteness.
299
+ this.assertValidRange(startDate, endDate);
195
300
  return {
196
301
  totalUsers: 0,
197
302
  totalActivations: 0,
@@ -268,39 +373,5 @@ export class ROIDashboardService {
268
373
  computedAt: new Date().toISOString(),
269
374
  };
270
375
  }
271
- convertROIToCSV(data) {
272
- const lines = [];
273
- if (data.user) {
274
- lines.push('User ROI Dashboard');
275
- lines.push('');
276
- lines.push('Metric,Value');
277
- lines.push(`User ID,${data.user.userId}`);
278
- lines.push(`Total Time Saved (min),${data.user.totalTimeSaved.toFixed(1)}`);
279
- lines.push(`Estimated Value (USD),${data.user.estimatedValueUsd.toFixed(2)}`);
280
- lines.push('');
281
- lines.push('Top Skills');
282
- lines.push('Skill ID,Skill Name,Time Saved (min)');
283
- for (const skill of data.user.topSkills) {
284
- lines.push(`${skill.skillId},${skill.skillName},${skill.timeSaved.toFixed(1)}`);
285
- }
286
- }
287
- if (data.stakeholder) {
288
- lines.push('Stakeholder ROI Dashboard');
289
- lines.push('');
290
- lines.push('Metric,Value');
291
- lines.push(`Total Users,${data.stakeholder.totalUsers}`);
292
- lines.push(`Total Activations,${data.stakeholder.totalActivations}`);
293
- lines.push(`Avg Time Saved Per User (min),${data.stakeholder.avgTimeSavedPerUser.toFixed(1)}`);
294
- lines.push(`Total Estimated Value (USD),${data.stakeholder.totalEstimatedValue.toFixed(2)}`);
295
- lines.push(`Adoption Rate (%),${(data.stakeholder.adoptionRate * 100).toFixed(1)}`);
296
- lines.push('');
297
- lines.push('Skill Leaderboard');
298
- lines.push('Skill ID,Skill Name,User Count,Total Value (USD)');
299
- for (const skill of data.stakeholder.skillLeaderboard) {
300
- lines.push(`${skill.skillId},${skill.skillName},${skill.userCount},${skill.totalValue.toFixed(2)}`);
301
- }
302
- }
303
- return lines.join('\n');
304
- }
305
376
  }
306
377
  //# sourceMappingURL=ROIDashboardService.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ROIDashboardService.js","sourceRoot":"","sources":["../../../src/analytics/ROIDashboardService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ROIDashboardService.js","sourceRoot":"","sources":["../../../src/analytics/ROIDashboardService.ts"],"names":[],"mappings":"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"}