@oneuptime/common 11.3.26 → 11.4.0

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 (298) hide show
  1. package/Models/DatabaseModels/AIRun.ts +50 -0
  2. package/Models/DatabaseModels/IncidentEpisodeRoleMember.ts +1 -1
  3. package/Models/DatabaseModels/IncidentMember.ts +1 -1
  4. package/Models/DatabaseModels/IncomingCallPolicy.ts +13 -0
  5. package/Models/DatabaseModels/Index.ts +3 -0
  6. package/Models/DatabaseModels/MigrationFailure.ts +170 -0
  7. package/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.ts +51 -2
  8. package/Models/DatabaseModels/OnCallDutyPolicySchedule.ts +44 -0
  9. package/Models/DatabaseModels/OnCallDutyPolicyScheduleLayer.ts +6 -0
  10. package/Models/DatabaseModels/OnCallDutyPolicyScheduleLayerUser.ts +6 -0
  11. package/Models/DatabaseModels/OnCallDutyPolicyTimeLog.ts +1 -1
  12. package/Models/DatabaseModels/OnCallDutyPolicyUserOverride.ts +2 -2
  13. package/Models/DatabaseModels/Project.ts +60 -0
  14. package/Server/API/AIInvestigationAPI.ts +148 -0
  15. package/Server/API/AlertAPI.ts +1 -1
  16. package/Server/API/IncidentAPI.ts +2 -2
  17. package/Server/API/IncidentEpisodeAPI.ts +1 -1
  18. package/Server/API/LlmProviderAPI.ts +1 -0
  19. package/Server/API/ScheduledMaintenanceAPI.ts +1 -1
  20. package/Server/Infrastructure/Postgres/SchemaMigrations/1783470000000-AddIncomingCallPolicyRoutingPhoneNumberUnique.ts +25 -0
  21. package/Server/Infrastructure/Postgres/SchemaMigrations/1783510935686-FixNotNullForeignKeysOnDelete.ts +81 -0
  22. package/Server/Infrastructure/Postgres/SchemaMigrations/1783515836148-MigrationName.ts +25 -0
  23. package/Server/Infrastructure/Postgres/SchemaMigrations/1783523076215-AddMigrationFailureTable.ts +35 -0
  24. package/Server/Infrastructure/Postgres/SchemaMigrations/1783598145111-AddEnableAutomaticIncidentInvestigationToProject.ts +19 -0
  25. package/Server/Infrastructure/Postgres/SchemaMigrations/1783615884106-AddInvestigationSubjectToAIRun.ts +33 -0
  26. package/Server/Infrastructure/Postgres/SchemaMigrations/1783632447975-AddEnableAutomaticAlertInvestigationToProject.ts +19 -0
  27. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +14 -0
  28. package/Server/Infrastructure/PostgresDatabase.ts +11 -0
  29. package/Server/Services/AIService.ts +74 -2
  30. package/Server/Services/AlertService.ts +25 -0
  31. package/Server/Services/AnalyticsDatabaseService.ts +10 -1
  32. package/Server/Services/DatabaseService.ts +10 -1
  33. package/Server/Services/IncidentService.ts +26 -1
  34. package/Server/Services/IncidentStateTimelineService.ts +19 -0
  35. package/Server/Services/IncomingCallPolicyEscalationRuleService.ts +75 -2
  36. package/Server/Services/IncomingCallPolicyService.ts +42 -1
  37. package/Server/Services/Index.ts +2 -0
  38. package/Server/Services/MigrationFailureService.ts +9 -0
  39. package/Server/Services/MonitorProbeService.ts +33 -7
  40. package/Server/Services/MonitorService.ts +19 -7
  41. package/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.ts +65 -0
  42. package/Server/Services/OnCallDutyPolicyEscalationRuleService.ts +185 -41
  43. package/Server/Services/OnCallDutyPolicyEscalationRuleUserService.ts +23 -15
  44. package/Server/Services/OnCallDutyPolicyExecutionLogService.ts +39 -0
  45. package/Server/Services/OnCallDutyPolicyScheduleLayerService.ts +148 -0
  46. package/Server/Services/OnCallDutyPolicyScheduleLayerUserService.ts +11 -2
  47. package/Server/Services/OnCallDutyPolicyScheduleService.ts +502 -26
  48. package/Server/Services/OnCallDutyPolicyTimeLogService.ts +49 -7
  49. package/Server/Services/OnCallDutyPolicyUserOverrideService.ts +218 -4
  50. package/Server/Services/ProjectCallSMSConfigService.ts +82 -1
  51. package/Server/Services/TeamMemberService.ts +6 -0
  52. package/Server/Services/UserNotificationRuleService.ts +13 -42
  53. package/Server/Services/UserOnCallLogService.ts +90 -0
  54. package/Server/Services/UserOnCallLogTimelineService.ts +43 -1
  55. package/Server/Types/Database/QueryUtil.ts +57 -0
  56. package/Server/Utils/AI/AlertAIContextBuilder.ts +6 -1
  57. package/Server/Utils/AI/Chat/ChatAgentRunner.ts +14 -2
  58. package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +119 -11
  59. package/Server/Utils/AI/IncidentAIContextBuilder.ts +18 -3
  60. package/Server/Utils/AI/IncidentEpisodeAIContextBuilder.ts +6 -1
  61. package/Server/Utils/AI/ScheduledMaintenanceAIContextBuilder.ts +12 -2
  62. package/Server/Utils/AI/Sentinel/AlertInvestigationRunner.ts +141 -0
  63. package/Server/Utils/AI/Sentinel/IncidentInvestigationRunner.ts +178 -0
  64. package/Server/Utils/AI/Sentinel/IncidentPostmortemRunner.ts +105 -0
  65. package/Server/Utils/AI/Sentinel/SentinelInvestigationEngine.ts +405 -0
  66. package/Server/Utils/AI/Sentinel/SentinelMemory.ts +167 -0
  67. package/Server/Utils/AI/Toolbox/IncidentTools.ts +183 -1
  68. package/Server/Utils/AI/Toolbox/Index.ts +15 -1
  69. package/Server/Utils/AI/Toolbox/RecentChangesTools.ts +208 -0
  70. package/Server/Utils/AI/Toolbox/SentinelActionTools.ts +577 -0
  71. package/Server/Utils/AI/Toolbox/Serializer.ts +42 -0
  72. package/Server/Utils/Database/MigrationFailureLog.ts +240 -0
  73. package/Server/Utils/IncomingCallPhoneNumber.ts +41 -0
  74. package/Server/Utils/LLM/LLMService.ts +110 -11
  75. package/Server/Utils/Telemetry/IoTSnapshotScan.ts +12 -9
  76. package/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.ts +12 -9
  77. package/Tests/Server/API/BaseAPI.test.ts +1 -0
  78. package/Tests/Server/Services/AnalyticsDatabaseService.test.ts +0 -8
  79. package/Tests/Server/Services/OnCallDutyPolicyScheduleLayerUserReorder.test.ts +233 -0
  80. package/Tests/Server/Services/OnCallDutyPolicyTimeLogServiceScoping.test.ts +242 -0
  81. package/Tests/Server/Services/OnCallDutyPolicyUserOverrideEdit.test.ts +198 -0
  82. package/Tests/Server/Services/UserOnCallLogClaimNotificationRule.test.ts +495 -0
  83. package/Tests/Server/Types/Database/QueryUtil.test.ts +74 -0
  84. package/Tests/Server/Utils/AI/LLMServiceToolCalling.test.ts +78 -0
  85. package/Tests/Server/Utils/AI/ToolResultSerializer.test.ts +68 -0
  86. package/Tests/Types/DateExhaustiveTimezone.test.ts +700 -0
  87. package/Tests/Types/DateTimezoneWallClock.test.ts +99 -0
  88. package/Tests/Types/Events/Recurring.test.ts +22 -9
  89. package/Tests/Types/OnCallDutyPolicy/LayerUtilAuditFixes.test.ts +291 -0
  90. package/Tests/Types/OnCallDutyPolicy/LayerUtilAuditFixesRound2.test.ts +398 -0
  91. package/Tests/Types/OnCallDutyPolicy/LayerUtilDSTWeekendGap.test.ts +114 -0
  92. package/Tests/Types/OnCallDutyPolicy/LayerUtilDSTWeeklyDayShift.test.ts +76 -0
  93. package/Tests/Types/OnCallDutyPolicy/LayerUtilDailyMutation.test.ts +128 -0
  94. package/Tests/Types/OnCallDutyPolicy/LayerUtilDailyProbe.test.ts +203 -0
  95. package/Tests/Types/OnCallDutyPolicy/LayerUtilDiffFuzz.test.ts +322 -0
  96. package/Tests/Types/OnCallDutyPolicy/LayerUtilEdgeCases.test.ts +280 -0
  97. package/Tests/Types/OnCallDutyPolicy/LayerUtilExhaustiveCurrentUser.test.ts +863 -0
  98. package/Tests/Types/OnCallDutyPolicy/LayerUtilExhaustiveDaily.test.ts +900 -0
  99. package/Tests/Types/OnCallDutyPolicy/LayerUtilExhaustiveMultiLayer.test.ts +1104 -0
  100. package/Tests/Types/OnCallDutyPolicy/LayerUtilExhaustiveRotation.test.ts +957 -0
  101. package/Tests/Types/OnCallDutyPolicy/LayerUtilExhaustiveWeekly.test.ts +1095 -0
  102. package/Tests/Types/OnCallDutyPolicy/LayerUtilInvariants.test.ts +232 -0
  103. package/Tests/Types/OnCallDutyPolicy/LayerUtilMergeAudit.test.ts +227 -0
  104. package/Tests/Types/OnCallDutyPolicy/LayerUtilMonthYearAudit.test.ts +255 -0
  105. package/Tests/Types/OnCallDutyPolicy/LayerUtilMultiLayerAudit.test.ts +388 -0
  106. package/Tests/Types/OnCallDutyPolicy/LayerUtilMultiLayerEdge.test.ts +300 -0
  107. package/Tests/Types/OnCallDutyPolicy/LayerUtilOvernightDSTAudit.test.ts +158 -0
  108. package/Tests/Types/OnCallDutyPolicy/LayerUtilRestrictedGapFix.test.ts +253 -0
  109. package/Tests/Types/OnCallDutyPolicy/LayerUtilRestrictedGapRepro.test.ts +157 -0
  110. package/Tests/Types/OnCallDutyPolicy/LayerUtilRotationFixes.test.ts +414 -0
  111. package/Tests/Types/OnCallDutyPolicy/LayerUtilTimezone.test.ts +243 -0
  112. package/Tests/Types/OnCallDutyPolicy/LayerUtilWeekendGapRepro.test.ts +112 -0
  113. package/Tests/Types/OnCallDutyPolicy/OverrideLensAudit.test.ts +117 -0
  114. package/Tests/Types/OnCallDutyPolicy/RestrictionTimes.test.ts +8 -6
  115. package/Tests/Types/OnCallDutyPolicy/RestrictionTimesDefaultDayAudit.test.ts +112 -0
  116. package/Tests/Types/OnCallDutyPolicy/RestrictionTimesExhaustive.test.ts +821 -0
  117. package/Tests/Types/OnCallDutyPolicy/RestrictionTimesMutationInvariant.test.ts +886 -0
  118. package/Tests/Types/OnCallDutyPolicy/ScheduleShiftUtil.test.ts +260 -0
  119. package/Tests/Types/OnCallDutyPolicy/UserOverrideUtil.test.ts +255 -0
  120. package/Tests/Types/OnCallDutyPolicy/UserOverrideUtilExhaustive.test.ts +1126 -0
  121. package/Types/Date.ts +246 -15
  122. package/Types/OnCallDutyPolicy/Layer.ts +790 -260
  123. package/Types/OnCallDutyPolicy/RestrictionTimes.ts +39 -13
  124. package/Types/OnCallDutyPolicy/ScheduleShiftUtil.ts +257 -0
  125. package/Types/OnCallDutyPolicy/UserOverrideUtil.ts +21 -5
  126. package/UI/Components/Calendar/Calendar.tsx +8 -2
  127. package/UI/Components/Charts/ChartGroup/ChartGroup.tsx +5 -5
  128. package/UI/Components/Events/RecurringFieldElement.tsx +16 -0
  129. package/UI/Components/ModelFormModal/ModelFormModal.tsx +8 -0
  130. package/UI/Components/RadioButtons/BasicRadioButtons.tsx +1 -1
  131. package/build/dist/Models/DatabaseModels/AIRun.js +52 -0
  132. package/build/dist/Models/DatabaseModels/AIRun.js.map +1 -1
  133. package/build/dist/Models/DatabaseModels/IncidentEpisodeRoleMember.js +1 -1
  134. package/build/dist/Models/DatabaseModels/IncidentEpisodeRoleMember.js.map +1 -1
  135. package/build/dist/Models/DatabaseModels/IncidentMember.js +1 -1
  136. package/build/dist/Models/DatabaseModels/IncidentMember.js.map +1 -1
  137. package/build/dist/Models/DatabaseModels/IncomingCallPolicy.js +10 -0
  138. package/build/dist/Models/DatabaseModels/IncomingCallPolicy.js.map +1 -1
  139. package/build/dist/Models/DatabaseModels/Index.js +2 -0
  140. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  141. package/build/dist/Models/DatabaseModels/MigrationFailure.js +196 -0
  142. package/build/dist/Models/DatabaseModels/MigrationFailure.js.map +1 -0
  143. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.js +52 -2
  144. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.js.map +1 -1
  145. package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js +45 -0
  146. package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js.map +1 -1
  147. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleLayer.js +6 -0
  148. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleLayer.js.map +1 -1
  149. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleLayerUser.js +6 -0
  150. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleLayerUser.js.map +1 -1
  151. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyTimeLog.js +1 -1
  152. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyTimeLog.js.map +1 -1
  153. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyUserOverride.js +2 -2
  154. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyUserOverride.js.map +1 -1
  155. package/build/dist/Models/DatabaseModels/Project.js +62 -0
  156. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  157. package/build/dist/Server/API/AIInvestigationAPI.js +107 -0
  158. package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -0
  159. package/build/dist/Server/API/AlertAPI.js +1 -1
  160. package/build/dist/Server/API/IncidentAPI.js +2 -2
  161. package/build/dist/Server/API/IncidentEpisodeAPI.js +1 -1
  162. package/build/dist/Server/API/LlmProviderAPI.js +1 -0
  163. package/build/dist/Server/API/LlmProviderAPI.js.map +1 -1
  164. package/build/dist/Server/API/ScheduledMaintenanceAPI.js +1 -1
  165. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783470000000-AddIncomingCallPolicyRoutingPhoneNumberUnique.js +18 -0
  166. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783470000000-AddIncomingCallPolicyRoutingPhoneNumberUnique.js.map +1 -0
  167. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783510935686-FixNotNullForeignKeysOnDelete.js +38 -0
  168. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783510935686-FixNotNullForeignKeysOnDelete.js.map +1 -0
  169. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783515836148-MigrationName.js +16 -0
  170. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783515836148-MigrationName.js.map +1 -0
  171. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783523076215-AddMigrationFailureTable.js +18 -0
  172. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783523076215-AddMigrationFailureTable.js.map +1 -0
  173. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783598145111-AddEnableAutomaticIncidentInvestigationToProject.js +12 -0
  174. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783598145111-AddEnableAutomaticIncidentInvestigationToProject.js.map +1 -0
  175. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783615884106-AddInvestigationSubjectToAIRun.js +18 -0
  176. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783615884106-AddInvestigationSubjectToAIRun.js.map +1 -0
  177. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783632447975-AddEnableAutomaticAlertInvestigationToProject.js +12 -0
  178. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783632447975-AddEnableAutomaticAlertInvestigationToProject.js.map +1 -0
  179. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +14 -0
  180. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  181. package/build/dist/Server/Infrastructure/PostgresDatabase.js +9 -0
  182. package/build/dist/Server/Infrastructure/PostgresDatabase.js.map +1 -1
  183. package/build/dist/Server/Services/AIService.js +53 -2
  184. package/build/dist/Server/Services/AIService.js.map +1 -1
  185. package/build/dist/Server/Services/AlertService.js +24 -0
  186. package/build/dist/Server/Services/AlertService.js.map +1 -1
  187. package/build/dist/Server/Services/AnalyticsDatabaseService.js +10 -1
  188. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  189. package/build/dist/Server/Services/DatabaseService.js +10 -1
  190. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  191. package/build/dist/Server/Services/IncidentService.js +25 -1
  192. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  193. package/build/dist/Server/Services/IncidentStateTimelineService.js +19 -0
  194. package/build/dist/Server/Services/IncidentStateTimelineService.js.map +1 -1
  195. package/build/dist/Server/Services/IncomingCallPolicyEscalationRuleService.js +55 -2
  196. package/build/dist/Server/Services/IncomingCallPolicyEscalationRuleService.js.map +1 -1
  197. package/build/dist/Server/Services/IncomingCallPolicyService.js +40 -0
  198. package/build/dist/Server/Services/IncomingCallPolicyService.js.map +1 -1
  199. package/build/dist/Server/Services/Index.js +2 -0
  200. package/build/dist/Server/Services/Index.js.map +1 -1
  201. package/build/dist/Server/Services/MigrationFailureService.js +9 -0
  202. package/build/dist/Server/Services/MigrationFailureService.js.map +1 -0
  203. package/build/dist/Server/Services/MonitorProbeService.js +33 -7
  204. package/build/dist/Server/Services/MonitorProbeService.js.map +1 -1
  205. package/build/dist/Server/Services/MonitorService.js +12 -5
  206. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  207. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js +81 -22
  208. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js.map +1 -1
  209. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js +134 -31
  210. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js.map +1 -1
  211. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleUserService.js +21 -13
  212. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleUserService.js.map +1 -1
  213. package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogService.js +36 -0
  214. package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogService.js.map +1 -1
  215. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerService.js +121 -0
  216. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerService.js.map +1 -1
  217. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerUserService.js +11 -2
  218. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerUserService.js.map +1 -1
  219. package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js +409 -36
  220. package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js.map +1 -1
  221. package/build/dist/Server/Services/OnCallDutyPolicyTimeLogService.js +52 -8
  222. package/build/dist/Server/Services/OnCallDutyPolicyTimeLogService.js.map +1 -1
  223. package/build/dist/Server/Services/OnCallDutyPolicyUserOverrideService.js +170 -3
  224. package/build/dist/Server/Services/OnCallDutyPolicyUserOverrideService.js.map +1 -1
  225. package/build/dist/Server/Services/ProjectCallSMSConfigService.js +72 -0
  226. package/build/dist/Server/Services/ProjectCallSMSConfigService.js.map +1 -1
  227. package/build/dist/Server/Services/TeamMemberService.js +6 -0
  228. package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
  229. package/build/dist/Server/Services/UserNotificationRuleService.js +12 -30
  230. package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
  231. package/build/dist/Server/Services/UserOnCallLogService.js +75 -0
  232. package/build/dist/Server/Services/UserOnCallLogService.js.map +1 -1
  233. package/build/dist/Server/Services/UserOnCallLogTimelineService.js +31 -1
  234. package/build/dist/Server/Services/UserOnCallLogTimelineService.js.map +1 -1
  235. package/build/dist/Server/Types/Database/QueryUtil.js +45 -0
  236. package/build/dist/Server/Types/Database/QueryUtil.js.map +1 -1
  237. package/build/dist/Server/Utils/AI/AlertAIContextBuilder.js +6 -1
  238. package/build/dist/Server/Utils/AI/AlertAIContextBuilder.js.map +1 -1
  239. package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js +13 -2
  240. package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js.map +1 -1
  241. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js +59 -11
  242. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js.map +1 -1
  243. package/build/dist/Server/Utils/AI/IncidentAIContextBuilder.js +18 -3
  244. package/build/dist/Server/Utils/AI/IncidentAIContextBuilder.js.map +1 -1
  245. package/build/dist/Server/Utils/AI/IncidentEpisodeAIContextBuilder.js +6 -1
  246. package/build/dist/Server/Utils/AI/IncidentEpisodeAIContextBuilder.js.map +1 -1
  247. package/build/dist/Server/Utils/AI/ScheduledMaintenanceAIContextBuilder.js +12 -2
  248. package/build/dist/Server/Utils/AI/ScheduledMaintenanceAIContextBuilder.js.map +1 -1
  249. package/build/dist/Server/Utils/AI/Sentinel/AlertInvestigationRunner.js +119 -0
  250. package/build/dist/Server/Utils/AI/Sentinel/AlertInvestigationRunner.js.map +1 -0
  251. package/build/dist/Server/Utils/AI/Sentinel/IncidentInvestigationRunner.js +147 -0
  252. package/build/dist/Server/Utils/AI/Sentinel/IncidentInvestigationRunner.js.map +1 -0
  253. package/build/dist/Server/Utils/AI/Sentinel/IncidentPostmortemRunner.js +93 -0
  254. package/build/dist/Server/Utils/AI/Sentinel/IncidentPostmortemRunner.js.map +1 -0
  255. package/build/dist/Server/Utils/AI/Sentinel/SentinelInvestigationEngine.js +311 -0
  256. package/build/dist/Server/Utils/AI/Sentinel/SentinelInvestigationEngine.js.map +1 -0
  257. package/build/dist/Server/Utils/AI/Sentinel/SentinelMemory.js +143 -0
  258. package/build/dist/Server/Utils/AI/Sentinel/SentinelMemory.js.map +1 -0
  259. package/build/dist/Server/Utils/AI/Toolbox/IncidentTools.js +152 -1
  260. package/build/dist/Server/Utils/AI/Toolbox/IncidentTools.js.map +1 -1
  261. package/build/dist/Server/Utils/AI/Toolbox/Index.js +10 -1
  262. package/build/dist/Server/Utils/AI/Toolbox/Index.js.map +1 -1
  263. package/build/dist/Server/Utils/AI/Toolbox/RecentChangesTools.js +165 -0
  264. package/build/dist/Server/Utils/AI/Toolbox/RecentChangesTools.js.map +1 -0
  265. package/build/dist/Server/Utils/AI/Toolbox/SentinelActionTools.js +451 -0
  266. package/build/dist/Server/Utils/AI/Toolbox/SentinelActionTools.js.map +1 -0
  267. package/build/dist/Server/Utils/AI/Toolbox/Serializer.js +40 -0
  268. package/build/dist/Server/Utils/AI/Toolbox/Serializer.js.map +1 -1
  269. package/build/dist/Server/Utils/Database/MigrationFailureLog.js +174 -0
  270. package/build/dist/Server/Utils/Database/MigrationFailureLog.js.map +1 -0
  271. package/build/dist/Server/Utils/IncomingCallPhoneNumber.js +30 -0
  272. package/build/dist/Server/Utils/IncomingCallPhoneNumber.js.map +1 -0
  273. package/build/dist/Server/Utils/LLM/LLMService.js +81 -5
  274. package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
  275. package/build/dist/Server/Utils/Telemetry/IoTSnapshotScan.js +11 -8
  276. package/build/dist/Server/Utils/Telemetry/IoTSnapshotScan.js.map +1 -1
  277. package/build/dist/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.js +11 -8
  278. package/build/dist/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.js.map +1 -1
  279. package/build/dist/Types/Date.js +185 -15
  280. package/build/dist/Types/Date.js.map +1 -1
  281. package/build/dist/Types/OnCallDutyPolicy/Layer.js +602 -171
  282. package/build/dist/Types/OnCallDutyPolicy/Layer.js.map +1 -1
  283. package/build/dist/Types/OnCallDutyPolicy/RestrictionTimes.js +27 -13
  284. package/build/dist/Types/OnCallDutyPolicy/RestrictionTimes.js.map +1 -1
  285. package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js +159 -0
  286. package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js.map +1 -0
  287. package/build/dist/Types/OnCallDutyPolicy/UserOverrideUtil.js +20 -5
  288. package/build/dist/Types/OnCallDutyPolicy/UserOverrideUtil.js.map +1 -1
  289. package/build/dist/UI/Components/Calendar/Calendar.js +2 -2
  290. package/build/dist/UI/Components/Calendar/Calendar.js.map +1 -1
  291. package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js +2 -2
  292. package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js.map +1 -1
  293. package/build/dist/UI/Components/Events/RecurringFieldElement.js +13 -0
  294. package/build/dist/UI/Components/Events/RecurringFieldElement.js.map +1 -1
  295. package/build/dist/UI/Components/ModelFormModal/ModelFormModal.js.map +1 -1
  296. package/build/dist/UI/Components/RadioButtons/BasicRadioButtons.js +1 -1
  297. package/build/dist/UI/Components/RadioButtons/BasicRadioButtons.js.map +1 -1
  298. package/package.json +1 -1
package/Types/Date.ts CHANGED
@@ -85,8 +85,20 @@ export default class OneUptimeDate {
85
85
  return new Date(timestamp * 1000);
86
86
  }
87
87
 
88
- public static getStartOfTheWeek(date: Date): Date {
88
+ public static getStartOfTheWeek(
89
+ date: Date,
90
+ timezone?: string | undefined,
91
+ ): Date {
89
92
  date = this.fromString(date);
93
+ if (timezone) {
94
+ /*
95
+ * Timezone-aware start of week so on-call weekly-restriction boundaries
96
+ * anchor to the schedule's zone, consistent with the other boundary
97
+ * computations (keepTimeButMoveDay / getStartOfDay). Without a timezone
98
+ * the boundary is taken in the server's local zone (legacy behavior).
99
+ */
100
+ return moment.tz(date, timezone).startOf("week").toDate();
101
+ }
90
102
  return moment(date).startOf("week").toDate();
91
103
  }
92
104
 
@@ -211,15 +223,16 @@ export default class OneUptimeDate {
211
223
  date: Date,
212
224
  moveToWeek: Date,
213
225
  dayOfWeek: DayOfWeek,
226
+ timezone?: string | undefined,
214
227
  ): Date {
215
228
  // date will be moved to the week of "moveToWeek" and then to the day of week "dayOfWeek"
216
229
 
217
230
  date = this.fromString(date);
218
- date = this.keepTimeButMoveDay(date, moveToWeek);
231
+ date = this.keepTimeButMoveDay(date, moveToWeek, timezone);
219
232
 
220
233
  // now move the date to the day of week
221
234
 
222
- const dateDayOfWeek: DayOfWeek = this.getDayOfWeek(date);
235
+ const dateDayOfWeek: DayOfWeek = this.getDayOfWeek(date, timezone);
223
236
 
224
237
  if (dateDayOfWeek === dayOfWeek) {
225
238
  return date;
@@ -237,7 +250,15 @@ export default class OneUptimeDate {
237
250
  return date;
238
251
  }
239
252
 
240
- return this.addRemoveDays(date, difference);
253
+ /*
254
+ * Forward the timezone to the final day-shift too. The first two steps
255
+ * (keepTimeButMoveDay, getDayOfWeek) are already timezone-aware; without
256
+ * the timezone here this last shift used the process zone, so a shift that
257
+ * straddles a DST transition in the target zone (but not the process zone)
258
+ * drifted the resolved weekly-restriction boundary by the DST offset
259
+ * (audit F9).
260
+ */
261
+ return this.addRemoveDays(date, difference, timezone);
241
262
  }
242
263
 
243
264
  public static getDayOfTheWeekIndex(date: Date): number {
@@ -245,6 +266,122 @@ export default class OneUptimeDate {
245
266
  return moment(date).weekday();
246
267
  }
247
268
 
269
+ /**
270
+ * Format the wall-clock time (HH:mm, respecting the 12/24h preference) of an
271
+ * instant AS SEEN IN `timezone`. With no timezone, falls back to the
272
+ * process/browser local wall-clock. Used to show on-call restriction hours in
273
+ * the schedule's timezone rather than the viewer's browser zone (audit F10).
274
+ */
275
+ public static getHourAndMinuteInTimezoneString(
276
+ date: Date | string,
277
+ timezone?: string | undefined,
278
+ ): string {
279
+ date = this.fromString(date);
280
+ if (!timezone) {
281
+ return this.getLocalHourAndMinuteFromDate(date);
282
+ }
283
+ const use12HourFormat: boolean = this.getUserPrefers12HourFormat();
284
+ return moment
285
+ .tz(date, timezone)
286
+ .format(use12HourFormat ? "h:mm A" : "HH:mm");
287
+ }
288
+
289
+ /**
290
+ * Format a single instant as a human-readable "weekday, month day, time"
291
+ * string resolved in a specific IANA timezone (e.g. "America/New_York").
292
+ *
293
+ * Used by the on-call schedule summaries to render each shift's start / end in
294
+ * the SAME zone the rotation engine schedules people in, with a DST-aware zone
295
+ * abbreviation appended so the reader is never in doubt which wall clock the
296
+ * time refers to. When `timezone` is omitted the instant is formatted in the
297
+ * viewer's local zone (matching the rest of the local-time UI).
298
+ */
299
+ public static getDateAsFormattedStringInTimezone(data: {
300
+ date: Date | string;
301
+ timezone?: string | undefined;
302
+ onlyShowDate?: boolean | undefined;
303
+ showWeekday?: boolean | undefined;
304
+ use12HourFormat?: boolean | undefined;
305
+ }): string {
306
+ const date: Date = this.fromString(data.date);
307
+ const use12HourFormat: boolean =
308
+ data.use12HourFormat ?? this.getUserPrefers12HourFormat();
309
+
310
+ const timePart: string = use12HourFormat ? "h:mm A" : "HH:mm";
311
+ const datePart: string = data.showWeekday
312
+ ? "ddd, MMM D, YYYY"
313
+ : "MMM D, YYYY";
314
+ const formatString: string = data.onlyShowDate
315
+ ? datePart
316
+ : `${datePart}, ${timePart}`;
317
+
318
+ if (!data.timezone) {
319
+ const local: moment.Moment = moment(date).local();
320
+ return (
321
+ local.format(formatString) +
322
+ (data.onlyShowDate ? "" : " " + this.getCurrentTimezoneString())
323
+ ).trim();
324
+ }
325
+
326
+ const zoned: moment.Moment = moment(date).tz(data.timezone);
327
+ return (
328
+ zoned.format(formatString) +
329
+ (data.onlyShowDate
330
+ ? ""
331
+ : " " + this.getZoneAbbrByTimezone(data.timezone as Timezone, date))
332
+ ).trim();
333
+ }
334
+
335
+ /**
336
+ * Reinterpret the wall-clock components of `date` — read in the process /
337
+ * browser local zone — as the SAME wall-clock in `timezone`, and return that
338
+ * instant. Used to store a time the user typed for the schedule's timezone
339
+ * even though the time picker captured it in the browser's local zone (audit
340
+ * F1). Inverse of getLocalDateFromWallClockInTimezone.
341
+ */
342
+ public static getInstantFromLocalWallClockInTimezone(
343
+ date: Date | string,
344
+ timezone: string,
345
+ ): Date {
346
+ date = this.fromString(date);
347
+ const local: moment.Moment = moment(date);
348
+ return moment
349
+ .tz(
350
+ {
351
+ year: local.year(),
352
+ month: local.month(),
353
+ day: local.date(),
354
+ hour: local.hour(),
355
+ minute: local.minute(),
356
+ second: local.second(),
357
+ },
358
+ timezone,
359
+ )
360
+ .toDate();
361
+ }
362
+
363
+ /**
364
+ * Inverse of getInstantFromLocalWallClockInTimezone: return a process /
365
+ * browser local Date whose LOCAL wall-clock equals `date`'s wall-clock as seen
366
+ * in `timezone`. Used to display a stored schedule-timezone time inside a
367
+ * browser-local time picker (audit F1).
368
+ */
369
+ public static getLocalDateFromWallClockInTimezone(
370
+ date: Date | string,
371
+ timezone: string,
372
+ ): Date {
373
+ date = this.fromString(date);
374
+ const zoned: moment.Moment = moment.tz(date, timezone);
375
+ return moment({
376
+ year: zoned.year(),
377
+ month: zoned.month(),
378
+ day: zoned.date(),
379
+ hour: zoned.hour(),
380
+ minute: zoned.minute(),
381
+ second: zoned.second(),
382
+ }).toDate();
383
+ }
384
+
248
385
  public static isOverlapping(
249
386
  start: Date,
250
387
  end: Date,
@@ -435,9 +572,34 @@ export default class OneUptimeDate {
435
572
  return moment();
436
573
  }
437
574
 
438
- public static keepTimeButMoveDay(keepTimeFor: Date, moveDayTo: Date): Date {
575
+ public static keepTimeButMoveDay(
576
+ keepTimeFor: Date,
577
+ moveDayTo: Date,
578
+ timezone?: string | undefined,
579
+ ): Date {
439
580
  keepTimeFor = this.fromString(keepTimeFor);
440
581
  moveDayTo = this.fromString(moveDayTo);
582
+
583
+ if (timezone) {
584
+ /*
585
+ * Timezone-aware: keep the wall-clock time of `keepTimeFor` AS SEEN IN
586
+ * `timezone`, and place it on the day of `moveDayTo` (also in `timezone`).
587
+ * This is what makes an on-call restriction like "09:00-17:00" resolve to
588
+ * 09:00 in the schedule's zone regardless of the server's zone, and lets
589
+ * moment-timezone handle DST transitions correctly.
590
+ */
591
+ const src: moment.Moment = moment.tz(keepTimeFor, timezone);
592
+ return moment
593
+ .tz(moveDayTo, timezone)
594
+ .set({
595
+ hour: src.hour(),
596
+ minute: src.minute(),
597
+ second: src.second(),
598
+ millisecond: src.millisecond(),
599
+ })
600
+ .toDate();
601
+ }
602
+
441
603
  return moment(moveDayTo)
442
604
  .set({
443
605
  hour: keepTimeFor.getHours(),
@@ -456,7 +618,24 @@ export default class OneUptimeDate {
456
618
  return this.getSomeDaysAgo(new PositiveNumber(1));
457
619
  }
458
620
 
459
- public static fromUnixNano(timestamp: number): Date {
621
+ public static fromUnixNano(timestamp: string | number): Date {
622
+ /*
623
+ * Nanosecond epoch values are far larger than Number.MAX_SAFE_INTEGER, so
624
+ * parsing them as a float (or dividing that float by 1e6) silently drops
625
+ * up to a full millisecond of precision. When the raw value is an integer
626
+ * string, divide with BigInt to keep exact millisecond precision; fall
627
+ * back to numeric division for number inputs and non-integer strings.
628
+ */
629
+ if (typeof timestamp === "string") {
630
+ const trimmed: string = timestamp.trim();
631
+ const integerPattern: RegExp = /^[+-]?\d+$/;
632
+ if (integerPattern.test(trimmed)) {
633
+ const nanosPerMilli: bigint = BigInt(1000000);
634
+ const millis: number = Number(BigInt(trimmed) / nanosPerMilli);
635
+ return moment(millis).toDate();
636
+ }
637
+ return moment(Number(trimmed) / 1000000).toDate();
638
+ }
460
639
  return moment(timestamp / 1000000).toDate();
461
640
  }
462
641
 
@@ -610,8 +789,24 @@ export default class OneUptimeDate {
610
789
  return moment(date).add(minutes, "minutes").toDate();
611
790
  }
612
791
 
613
- public static addRemoveDays(date: Date, days: number): Date {
792
+ /*
793
+ * Calendar-unit arithmetic. When `timezone` is provided the step preserves
794
+ * the wall-clock time in that zone across DST transitions (e.g. an on-call
795
+ * handoff/restriction authored for 09:00 stays at 09:00 local after
796
+ * spring-forward/fall-back). Without a timezone the step is taken in the
797
+ * server's local zone — fully backward compatible for existing callers.
798
+ * Hours/minutes/seconds are absolute units and intentionally have no
799
+ * timezone-aware variant.
800
+ */
801
+ public static addRemoveDays(
802
+ date: Date,
803
+ days: number,
804
+ timezone?: string | undefined,
805
+ ): Date {
614
806
  date = this.fromString(date);
807
+ if (timezone) {
808
+ return moment.tz(date, timezone).add(days, "days").toDate();
809
+ }
615
810
  return moment(date).add(days, "days").toDate();
616
811
  }
617
812
 
@@ -620,18 +815,39 @@ export default class OneUptimeDate {
620
815
  return moment(date).add(hours, "hours").toDate();
621
816
  }
622
817
 
623
- public static addRemoveYears(date: Date, years: number): Date {
818
+ public static addRemoveYears(
819
+ date: Date,
820
+ years: number,
821
+ timezone?: string | undefined,
822
+ ): Date {
624
823
  date = this.fromString(date);
824
+ if (timezone) {
825
+ return moment.tz(date, timezone).add(years, "years").toDate();
826
+ }
625
827
  return moment(date).add(years, "years").toDate();
626
828
  }
627
829
 
628
- public static addRemoveMonths(date: Date, months: number): Date {
830
+ public static addRemoveMonths(
831
+ date: Date,
832
+ months: number,
833
+ timezone?: string | undefined,
834
+ ): Date {
629
835
  date = this.fromString(date);
836
+ if (timezone) {
837
+ return moment.tz(date, timezone).add(months, "months").toDate();
838
+ }
630
839
  return moment(date).add(months, "months").toDate();
631
840
  }
632
841
 
633
- public static addRemoveWeeks(date: Date, weeks: number): Date {
842
+ public static addRemoveWeeks(
843
+ date: Date,
844
+ weeks: number,
845
+ timezone?: string | undefined,
846
+ ): Date {
634
847
  date = this.fromString(date);
848
+ if (timezone) {
849
+ return moment.tz(date, timezone).add(weeks, "weeks").toDate();
850
+ }
635
851
  return moment(date).add(weeks, "weeks").toDate();
636
852
  }
637
853
 
@@ -941,13 +1157,19 @@ export default class OneUptimeDate {
941
1157
  return moment().year();
942
1158
  }
943
1159
 
944
- public static getStartOfDay(date: Date): Date {
1160
+ public static getStartOfDay(date: Date, timezone?: string | undefined): Date {
945
1161
  date = this.fromString(date);
1162
+ if (timezone) {
1163
+ return moment.tz(date, timezone).startOf("day").toDate();
1164
+ }
946
1165
  return moment(date).startOf("day").toDate();
947
1166
  }
948
1167
 
949
- public static getEndOfDay(date: Date): Date {
1168
+ public static getEndOfDay(date: Date, timezone?: string | undefined): Date {
950
1169
  date = this.fromString(date);
1170
+ if (timezone) {
1171
+ return moment.tz(date, timezone).endOf("day").toDate();
1172
+ }
951
1173
  return moment(date).endOf("day").toDate();
952
1174
  }
953
1175
 
@@ -970,8 +1192,11 @@ export default class OneUptimeDate {
970
1192
  return moment(date).isSameOrAfter(startDate, "seconds");
971
1193
  }
972
1194
 
973
- public static getDayOfWeek(date: Date): DayOfWeek {
974
- const dayOfWeek: number = this.geyDayOfWeekAsNumber(date);
1195
+ public static getDayOfWeek(
1196
+ date: Date,
1197
+ timezone?: string | undefined,
1198
+ ): DayOfWeek {
1199
+ const dayOfWeek: number = this.geyDayOfWeekAsNumber(date, timezone);
975
1200
 
976
1201
  if (dayOfWeek === 1) {
977
1202
  return DayOfWeek.Monday;
@@ -992,8 +1217,14 @@ export default class OneUptimeDate {
992
1217
  throw new BadDataException("Invalid day of week");
993
1218
  }
994
1219
 
995
- public static geyDayOfWeekAsNumber(date: Date): number {
1220
+ public static geyDayOfWeekAsNumber(
1221
+ date: Date,
1222
+ timezone?: string | undefined,
1223
+ ): number {
996
1224
  date = this.fromString(date);
1225
+ if (timezone) {
1226
+ return moment.tz(date, timezone).isoWeekday();
1227
+ }
997
1228
  return moment(date).isoWeekday();
998
1229
  }
999
1230