@oneuptime/common 11.7.4 → 12.0.1

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 (896) hide show
  1. package/Models/AnalyticsModels/ExceptionInstance.ts +67 -0
  2. package/Models/AnalyticsModels/Index.ts +10 -0
  3. package/Models/AnalyticsModels/Log.ts +60 -0
  4. package/Models/AnalyticsModels/RumSession.ts +1401 -0
  5. package/Models/AnalyticsModels/RumSessionChunk.ts +798 -0
  6. package/Models/AnalyticsModels/Span.ts +60 -0
  7. package/Models/DatabaseModels/AIAgentTaskPullRequest.ts +52 -0
  8. package/Models/DatabaseModels/AIRun.ts +31 -0
  9. package/Models/DatabaseModels/Alert.ts +29 -0
  10. package/Models/DatabaseModels/AlertCustomField.ts +1 -1
  11. package/Models/DatabaseModels/AlertFeed.ts +1 -0
  12. package/Models/DatabaseModels/AutoRemediationRule.ts +989 -0
  13. package/Models/DatabaseModels/AutoRemediationSuggestion.ts +874 -0
  14. package/Models/DatabaseModels/CodeRepository.ts +129 -0
  15. package/Models/DatabaseModels/GlobalConfig.ts +312 -0
  16. package/Models/DatabaseModels/Incident.ts +29 -0
  17. package/Models/DatabaseModels/IncidentCustomField.ts +1 -1
  18. package/Models/DatabaseModels/IncidentFeed.ts +1 -0
  19. package/Models/DatabaseModels/Index.ts +21 -8
  20. package/Models/DatabaseModels/InstanceHealthLog.ts +8 -0
  21. package/Models/DatabaseModels/MonitorCustomField.ts +1 -1
  22. package/Models/DatabaseModels/MonitorStatus.ts +1 -1
  23. package/Models/DatabaseModels/NetworkDeviceLabelRule.ts +2 -2
  24. package/Models/DatabaseModels/NetworkDeviceOwnerRule.ts +2 -2
  25. package/Models/DatabaseModels/NetworkSiteAssignmentRule.ts +1 -1
  26. package/Models/DatabaseModels/OnCallDutyPolicyCustomField.ts +1 -1
  27. package/Models/DatabaseModels/OnCallDutyPolicyScheduleLayer.ts +12 -2
  28. package/Models/DatabaseModels/Project.ts +231 -0
  29. package/Models/DatabaseModels/RumApplication.ts +906 -0
  30. package/Models/DatabaseModels/RumSessionErasureRequest.ts +561 -0
  31. package/Models/DatabaseModels/RumSessionPin.ts +457 -0
  32. package/Models/DatabaseModels/RumSessionReplayView.ts +406 -0
  33. package/Models/DatabaseModels/RunbookCredential.ts +673 -0
  34. package/Models/DatabaseModels/RunbookSecret.ts +7 -7
  35. package/Models/DatabaseModels/{RunbookAgent.ts → Runner.ts} +206 -46
  36. package/Models/DatabaseModels/{RunbookAgentJob.ts → RunnerJob.ts} +151 -18
  37. package/Models/DatabaseModels/{RunbookAgentOwnerTeam.ts → RunnerOwnerTeam.ts} +41 -43
  38. package/Models/DatabaseModels/{RunbookAgentOwnerUser.ts → RunnerOwnerUser.ts} +41 -43
  39. package/Models/DatabaseModels/ScheduledMaintenanceCustomField.ts +1 -1
  40. package/Models/DatabaseModels/StatusPageCustomField.ts +1 -1
  41. package/Models/DatabaseModels/TeamCustomField.ts +1 -1
  42. package/Models/DatabaseModels/TeamMemberCustomField.ts +1 -1
  43. package/Server/API/AIAgentDataAPI.ts +179 -48
  44. package/Server/API/AIAgentTaskAPI.ts +36 -37
  45. package/Server/API/AIAgentTaskLogAPI.ts +19 -33
  46. package/Server/API/AutoRemediationAPI.ts +557 -0
  47. package/Server/API/BaseAnalyticsAPI.ts +4 -1
  48. package/Server/API/CommonAPI.ts +35 -0
  49. package/Server/API/DashboardAPI.ts +340 -15
  50. package/Server/API/TelemetryAPI.ts +1622 -3
  51. package/Server/API/UserIncomingCallNumberAPI.ts +31 -0
  52. package/Server/DatabaseConfig.ts +26 -1
  53. package/Server/EnvironmentConfig.ts +13 -0
  54. package/Server/Infrastructure/Postgres/LocalMigrationGenerationDataSource.ts +12 -2
  55. package/Server/Infrastructure/Postgres/SchemaMigrations/1785417351021-AddSessionReplay.ts +293 -0
  56. package/Server/Infrastructure/Postgres/SchemaMigrations/1785491583874-EnableSessionReplayByDefault.ts +67 -0
  57. package/Server/Infrastructure/Postgres/SchemaMigrations/1785496223183-AddMonitorSummaryToIncidentAndAlert.ts +33 -0
  58. package/Server/Infrastructure/Postgres/SchemaMigrations/1785516996695-AddSessionReplayReliabilityColumns.ts +40 -0
  59. package/Server/Infrastructure/Postgres/SchemaMigrations/1785533806494-AddSessionReplayCorrelationColumns.ts +54 -0
  60. package/Server/Infrastructure/Postgres/SchemaMigrations/1785749674203-AddRedisAndPostgresHealthNotificationColumns.ts +104 -0
  61. package/Server/Infrastructure/Postgres/SchemaMigrations/1785763818197-AddAutoRemediation.ts +349 -0
  62. package/Server/Infrastructure/Postgres/SchemaMigrations/1785768089408-AddRemediationVerification.ts +67 -0
  63. package/Server/Infrastructure/Postgres/SchemaMigrations/1785776960660-AddRunnerCapabilities.ts +23 -0
  64. package/Server/Infrastructure/Postgres/SchemaMigrations/1785790000000-AddIncidentInvestigationGating.ts +42 -0
  65. package/Server/Infrastructure/Postgres/SchemaMigrations/1785800000000-AddRunbookCredential.ts +84 -0
  66. package/Server/Infrastructure/Postgres/SchemaMigrations/1785810000000-RenameRunbookAgentToRunner.ts +152 -0
  67. package/Server/Infrastructure/Postgres/SchemaMigrations/1785860000000-SessionReplayDefaultToSensitiveInputMasking.ts +81 -0
  68. package/Server/Infrastructure/Postgres/SchemaMigrations/1785870000000-AddAiCommandRemediation.ts +151 -0
  69. package/Server/Infrastructure/Postgres/SchemaMigrations/1785880000000-AlignRunnerSchemaWithEntities.ts +597 -0
  70. package/Server/Infrastructure/Postgres/SchemaMigrations/1785890000000-AddFixVerificationAndAutomaticCodeFixes.ts +71 -0
  71. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +32 -0
  72. package/Server/Services/AIRunService.ts +10 -0
  73. package/Server/Services/AIService.ts +30 -0
  74. package/Server/Services/AlertService.ts +41 -4
  75. package/Server/Services/AlertSeverityService.ts +25 -11
  76. package/Server/Services/AlertStateService.ts +25 -11
  77. package/Server/Services/AutoRemediationRuleEngineService.ts +1101 -0
  78. package/Server/Services/{RunbookAgentOwnerTeamService.ts → AutoRemediationRuleService.ts} +1 -1
  79. package/Server/Services/AutoRemediationSuggestionService.ts +183 -0
  80. package/Server/Services/BillingService.ts +50 -1
  81. package/Server/Services/DatabaseService.ts +92 -4
  82. package/Server/Services/IncidentService.ts +56 -4
  83. package/Server/Services/IncidentSeverityService.ts +25 -11
  84. package/Server/Services/IncidentStateService.ts +25 -11
  85. package/Server/Services/Index.ts +19 -0
  86. package/Server/Services/LlmProviderService.ts +69 -9
  87. package/Server/Services/MonitorService.ts +24 -0
  88. package/Server/Services/MonitorStatusService.ts +25 -11
  89. package/Server/Services/NetworkDeviceLabelRuleEngineService.ts +18 -19
  90. package/Server/Services/NetworkDeviceLabelRuleService.ts +39 -0
  91. package/Server/Services/NetworkDeviceOwnerRuleEngineService.ts +18 -19
  92. package/Server/Services/NetworkDeviceOwnerRuleService.ts +37 -0
  93. package/Server/Services/NetworkDeviceService.ts +172 -21
  94. package/Server/Services/NetworkSiteAssignmentRuleService.ts +92 -12
  95. package/Server/Services/NetworkSiteService.ts +27 -10
  96. package/Server/Services/ProjectService.ts +47 -0
  97. package/Server/Services/RumApplicationService.ts +240 -1
  98. package/Server/Services/RumSessionChunkService.ts +11 -0
  99. package/Server/Services/RumSessionErasureRequestService.ts +197 -0
  100. package/Server/Services/RumSessionPinService.ts +213 -0
  101. package/Server/Services/RumSessionReplayViewService.ts +201 -0
  102. package/Server/Services/RumSessionService.ts +123 -0
  103. package/Server/Services/RunbookCredentialService.ts +76 -0
  104. package/Server/Services/{RunbookAgentJobService.ts → RunnerJobService.ts} +202 -51
  105. package/Server/Services/{RunbookAgentOwnerUserService.ts → RunnerOwnerTeamService.ts} +1 -1
  106. package/Server/Services/RunnerOwnerUserService.ts +10 -0
  107. package/Server/Services/RunnerService.ts +166 -0
  108. package/Server/Services/ScheduledMaintenanceStateService.ts +25 -11
  109. package/Server/Services/ScheduledMaintenanceStateTimelineService.ts +15 -1
  110. package/Server/Services/ServiceService.ts +8 -2
  111. package/Server/Services/StatusPageService.ts +240 -36
  112. package/Server/Services/StatusPageSubscriberNotificationTemplateService.ts +20 -1
  113. package/Server/Services/TelemetryExceptionService.ts +3 -16
  114. package/Server/Services/TelemetryUsageBillingService.ts +33 -2
  115. package/Server/Services/TraceAggregationService.ts +196 -32
  116. package/Server/Types/Billing/MeteredPlan/AllMeteredPlans.ts +17 -0
  117. package/Server/Types/Billing/MeteredPlan/ServerMeteredPlan.ts +10 -0
  118. package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +63 -7
  119. package/Server/Utils/AI/CodeFix/CodeFixAgentAuth.ts +128 -0
  120. package/Server/Utils/AI/CodeFix/CodeFixAgentAvailability.ts +54 -0
  121. package/Server/Utils/AI/CodeFix/CodeFixReadiness.ts +17 -10
  122. package/Server/Utils/AI/CodeFix/CodeFixRunQueue.ts +8 -6
  123. package/Server/Utils/AI/Remediation/RemediationCommandTools.ts +943 -0
  124. package/Server/Utils/AI/Remediation/RemediationExecutionRunner.ts +866 -0
  125. package/Server/Utils/AI/Remediation/RemediationPlanRunner.ts +823 -0
  126. package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +103 -12
  127. package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +75 -17
  128. package/Server/Utils/AI/SRE/ConfidenceSignal.ts +28 -6
  129. package/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.ts +202 -12
  130. package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +264 -14
  131. package/Server/Utils/AI/SRE/Insights/Triage.ts +2 -7
  132. package/Server/Utils/AI/SRE/InvestigationGrader.ts +5 -24
  133. package/Server/Utils/AI/SRE/InvestigationQueue.ts +259 -20
  134. package/Server/Utils/AI/SRE/PostedRootCause.ts +82 -0
  135. package/Server/Utils/AI/SRE/README.md +3 -2
  136. package/Server/Utils/AI/SRE/RemediationHandoff.ts +82 -0
  137. package/Server/Utils/AI/SRE/SubjectCodeFixRun.ts +6 -19
  138. package/Server/Utils/AI/Toolbox/CodeWriteTools.ts +2 -2
  139. package/Server/Utils/Alert/AlertPrivacyFilter.ts +58 -0
  140. package/Server/Utils/AutoRemediation/CommandPlanExecutor.ts +604 -0
  141. package/Server/Utils/AutoRemediation/RemediationVerifier.ts +619 -0
  142. package/Server/Utils/CorsOptions.ts +52 -0
  143. package/Server/Utils/Database/RelationIdUtil.ts +68 -0
  144. package/Server/Utils/Incident/IncidentPrivacyFilter.ts +60 -0
  145. package/Server/Utils/InstanceHealth/PostgresHealth.ts +286 -0
  146. package/Server/Utils/InstanceHealth/RedisHealth.ts +434 -0
  147. package/Server/Utils/Monitor/Criteria/CompareCriteria.ts +12 -0
  148. package/Server/Utils/Monitor/MonitorAlert.ts +20 -0
  149. package/Server/Utils/Monitor/MonitorIncident.ts +20 -0
  150. package/Server/Utils/Monitor/MonitorResource.ts +19 -0
  151. package/Server/Utils/Monitor/MonitorSummaryCapture.ts +104 -0
  152. package/Server/Utils/NetworkDevice/RulePatternValidator.ts +44 -0
  153. package/Server/Utils/OpenAPI.ts +2 -1
  154. package/Server/Utils/Runbook/RunbookExecutePermission.ts +94 -0
  155. package/Server/Utils/SessionReplay/SessionReplayErasureTombstone.ts +128 -0
  156. package/Server/Utils/SessionReplay/SessionReplayGateCache.ts +586 -0
  157. package/Server/Utils/SessionReplay/SessionReplayGateCacheStore.ts +188 -0
  158. package/Server/Utils/SessionReplay/SessionReplayReadService.ts +1449 -0
  159. package/Server/Utils/SessionReplay/SessionReplayRetention.ts +114 -0
  160. package/Server/Utils/SessionReplay/SessionReplayTargeting.ts +144 -0
  161. package/Server/Utils/SessionReplay/SessionReplayUsage.ts +92 -0
  162. package/Server/Utils/StartServer.ts +47 -3
  163. package/Server/Utils/Telemetry/TelemetryFanInWriter.ts +44 -10
  164. package/Tests/App/Dashboard/AddWidgetModal.test.tsx +557 -0
  165. package/Tests/App/Dashboard/RunnerInstallInstructions.test.tsx +119 -0
  166. package/Tests/App/Dashboard/RunnerStatus.test.tsx +274 -0
  167. package/Tests/App/Dashboard/WidgetCatalog.test.ts +479 -0
  168. package/Tests/App/StatusPage/BulkAddStatusPageMonitors.test.ts +343 -0
  169. package/Tests/App/StatusPage/BulkAddStatusPageMonitorsModal.test.tsx +320 -0
  170. package/Tests/Models/AnalyticsModels/RumSessionSchema.test.ts +455 -0
  171. package/Tests/Models/AnalyticsModels/SessionIdCorrelation.test.ts +158 -0
  172. package/Tests/Models/DatabaseModels/SessionReplayModels.test.ts +447 -0
  173. package/Tests/Models/RunnerVersionLabel.test.ts +223 -0
  174. package/Tests/Server/API/DashboardPublicResourceListAPI.test.ts +1287 -0
  175. package/Tests/Server/API/LegacyRunbookAgentRoutes.test.ts +117 -0
  176. package/Tests/Server/API/SessionReplayAPI.test.ts +2093 -0
  177. package/Tests/Server/API/UserIncomingCallNumberApi.test.ts +429 -0
  178. package/Tests/Server/API/UserSmsApi.test.ts +68 -2
  179. package/Tests/Server/DatabaseConfig.test.ts +150 -0
  180. package/Tests/Server/Infrastructure/ContainerBootConfiguration.test.ts +2 -2
  181. package/Tests/Server/Infrastructure/ProcessSignalDelivery.test.ts +2 -3
  182. package/Tests/Server/Services/AIRunCodeFixClaimScoping.test.ts +100 -0
  183. package/Tests/Server/Services/AIServiceDailyBudget.test.ts +8 -0
  184. package/Tests/Server/Services/AutoRemediationCommandRuleEngine.test.ts +334 -0
  185. package/Tests/Server/Services/AutoRemediationRuleEngineService.test.ts +517 -0
  186. package/Tests/Server/Services/BillingService.test.ts +158 -1
  187. package/Tests/Server/Services/DatabaseServiceEmptyUpdate.test.ts +24 -2
  188. package/Tests/Server/Services/DatabaseServiceSanitizeUpdateData.test.ts +17 -10
  189. package/Tests/Server/Services/DatabaseServiceUpdateColumnsWithoutHooks.test.ts +128 -0
  190. package/Tests/Server/Services/DatabaseServiceUpdateWriteRouting.test.ts +178 -0
  191. package/Tests/Server/Services/DatabaseServiceUpdateWriteRoutingMonitor.test.ts +206 -0
  192. package/Tests/Server/Services/LlmProviderUsableByProject.test.ts +293 -0
  193. package/Tests/Server/Services/MonitorServiceOperationalStatusSelection.test.ts +145 -0
  194. package/Tests/Server/Services/NetworkDeviceRuleEngines.test.ts +726 -0
  195. package/Tests/Server/Services/NetworkDeviceSiteAssignment.test.ts +570 -9
  196. package/Tests/Server/Services/NetworkSiteAssignmentRuleService.test.ts +94 -1
  197. package/Tests/Server/Services/NetworkSiteService.test.ts +85 -0
  198. package/Tests/Server/Services/RumApplicationReplayHealth.test.ts +114 -0
  199. package/Tests/Server/Services/RunbookCredentialService.test.ts +657 -0
  200. package/Tests/Server/Services/SessionReplayCreatePath.test.ts +376 -0
  201. package/Tests/Server/Services/SessionReplayGateCacheInvalidation.test.ts +211 -0
  202. package/Tests/Server/Services/SessionReplayMetering.test.ts +174 -0
  203. package/Tests/Server/Services/StatusPageSubscriberReport.test.ts +555 -0
  204. package/Tests/Server/Services/TelemetryExceptionAIFixReadiness.test.ts +25 -4
  205. package/Tests/Server/Services/TelemetryExceptionCodeFixRun.test.ts +17 -2
  206. package/Tests/Server/Services/TraceAggregationService.test.ts +48 -0
  207. package/Tests/Server/Services/TraceAnalyticsResourceDisplayNames.test.ts +855 -0
  208. package/Tests/Server/Services/UpdateOneByIdKeepsRowId.test.ts +38 -27
  209. package/Tests/Server/Utils/AI/AIConfidenceSignal.test.ts +44 -0
  210. package/Tests/Server/Utils/AI/AIIncidentGating.test.ts +475 -0
  211. package/Tests/Server/Utils/AI/CodeFix/CodeFixAgentAuth.test.ts +257 -0
  212. package/Tests/Server/Utils/AI/CodeFix/CodeFixAgentAvailability.test.ts +236 -0
  213. package/Tests/Server/Utils/AI/CodeFixReadiness.test.ts +44 -6
  214. package/Tests/Server/Utils/AI/CodeFixRunQueue.test.ts +47 -1
  215. package/Tests/Server/Utils/AI/CodeWriteTools.test.ts +2 -2
  216. package/Tests/Server/Utils/AI/FixFromIncidentAutoTrigger.test.ts +294 -0
  217. package/Tests/Server/Utils/AI/Insights/InsightTriageRunner.test.ts +2 -2
  218. package/Tests/Server/Utils/AI/Insights/InvestigationQueueInsightSubject.test.ts +47 -3
  219. package/Tests/Server/Utils/AI/InvestigationQueueRemediationExecution.test.ts +233 -0
  220. package/Tests/Server/Utils/AI/InvestigationSettlement.test.ts +463 -0
  221. package/Tests/Server/Utils/AI/PostedRootCause.test.ts +254 -0
  222. package/Tests/Server/Utils/AI/RemediationAllowlistNormalization.test.ts +248 -0
  223. package/Tests/Server/Utils/AI/RemediationCommandTools.test.ts +1008 -0
  224. package/Tests/Server/Utils/AI/RemediationExecutionRunner.test.ts +887 -0
  225. package/Tests/Server/Utils/AI/RemediationHandoff.test.ts +306 -0
  226. package/Tests/Server/Utils/AI/RemediationPlanRunner.test.ts +745 -0
  227. package/Tests/Server/Utils/AI/SubjectCodeFixRunDedupe.test.ts +291 -0
  228. package/Tests/Server/Utils/AI/ToolArgsExtractors.test.ts +141 -0
  229. package/Tests/Server/Utils/AI/Toolbox/WidgetBuilder.test.ts +205 -0
  230. package/Tests/Server/Utils/AutoRemediation/CommandPlanExecutor.test.ts +1050 -0
  231. package/Tests/Server/Utils/AutoRemediation/CommandPlanVerification.test.ts +350 -0
  232. package/Tests/Server/Utils/AutoRemediation/RemediationVerifier.test.ts +341 -0
  233. package/Tests/Server/Utils/CorsOptions.test.ts +119 -0
  234. package/Tests/Server/Utils/Database/RelationIdUtil.test.ts +120 -0
  235. package/Tests/Server/Utils/Database/ResolveReferenceId.test.ts +60 -0
  236. package/Tests/Server/Utils/InstanceHealth/PostgresHealth.test.ts +337 -0
  237. package/Tests/Server/Utils/InstanceHealth/RedisHealth.test.ts +671 -0
  238. package/Tests/Server/Utils/Monitor/Criteria/CompareCriteria.test.ts +897 -0
  239. package/Tests/Server/Utils/Monitor/MonitorSummaryCapture.test.ts +205 -0
  240. package/Tests/Server/Utils/Monitor/MonitorSummaryPersistence.test.ts +313 -0
  241. package/Tests/Server/Utils/PushNotificationUtil.test.ts +228 -0
  242. package/Tests/Server/Utils/SessionReplay/SessionReplayGateCachePolicy.test.ts +177 -0
  243. package/Tests/Server/Utils/SessionReplay/SessionReplayOriginAllowlist.test.ts +108 -0
  244. package/Tests/Server/Utils/SessionReplay/SessionReplayRetention.test.ts +229 -0
  245. package/Tests/Server/Utils/SessionReplay/SessionReplayTargeting.test.ts +246 -0
  246. package/Tests/Server/Utils/Telemetry/TelemetryFanInWriter.test.ts +110 -0
  247. package/Tests/Types/AI/AIRunStatus.test.ts +25 -0
  248. package/Tests/Types/AutoRemediation/AiRemediationCommandPlan.test.ts +1063 -0
  249. package/Tests/Types/BaseDatabase/AggregationType.test.ts +56 -0
  250. package/Tests/Types/CustomField/CustomFieldDropdownOption.test.ts +227 -0
  251. package/Tests/Types/Dashboard/DashboardTemplateInvariants.test.ts +811 -0
  252. package/Tests/Types/Dashboard/RumDashboardTemplate.test.ts +1238 -0
  253. package/Tests/Types/Day/DayOfWeek.test.ts +46 -0
  254. package/Tests/Types/Docker/DockerInventoryExtractor.test.ts +249 -0
  255. package/Tests/Types/Kubernetes/KubernetesInventoryExtractor.test.ts +231 -0
  256. package/Tests/Types/Kubernetes/KubernetesRightSizing.test.ts +323 -0
  257. package/Tests/Types/Metrics/MetricDownsamplingRetentionDays.test.ts +77 -0
  258. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCatalog.test.ts +42 -14
  259. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCoverage.test.ts +2 -2
  260. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +3 -2
  261. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.test.ts +1 -1
  262. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationUtil.test.ts +6 -3
  263. package/Tests/Types/Monitor/RumAlertTemplates.test.ts +285 -0
  264. package/Tests/Types/Podman/PodmanInventoryExtractor.test.ts +159 -0
  265. package/Tests/Types/Runbook/RunbookExecutionDeadline.test.ts +268 -0
  266. package/Tests/Types/Runbook/RunbookStepType.test.ts +242 -0
  267. package/Tests/Types/Runner/RunnerLiveStatus.test.ts +320 -0
  268. package/Tests/Types/Telemetry/TelemetryRetentionConfig.test.ts +225 -0
  269. package/Tests/Types/Text.test.ts +60 -0
  270. package/Tests/UI/Components/AiInvestigationSettingsCard.test.tsx +285 -0
  271. package/Tests/UI/Components/AutocompleteTextInputMenu.test.tsx +555 -0
  272. package/Tests/UI/Components/BulkLabelActions.test.tsx +1502 -0
  273. package/Tests/UI/Components/BulkOwnerActions.test.tsx +1255 -0
  274. package/Tests/UI/Components/CustomFields/DropdownOptionsInput.test.tsx +228 -0
  275. package/Tests/UI/Components/Detail/DropdownColors.test.tsx +128 -0
  276. package/Tests/UI/Components/Detail/EntityFields.test.tsx +166 -0
  277. package/Tests/UI/Components/Dropdown/DropdownValueBadge.test.tsx +60 -0
  278. package/Tests/UI/Components/FilterModalOperatorMenu.test.tsx +674 -0
  279. package/Tests/UI/Components/Forms/ColorPicker.test.tsx +48 -0
  280. package/Tests/UI/Components/Forms/ColorPickerPopup.test.tsx +222 -0
  281. package/Tests/UI/Components/Forms/IconPickerPopup.test.tsx +270 -0
  282. package/Tests/UI/Components/ModelTable/CustomFieldColumns.test.tsx +125 -6
  283. package/Tests/UI/Components/OperatorSelectorFilterTypes.test.tsx +1595 -0
  284. package/Tests/UI/Components/OperatorSelectorKeyboard.test.tsx +851 -0
  285. package/Tests/UI/Components/OperatorSelectorMenu.test.tsx +1229 -0
  286. package/Tests/UI/Components/Pagination.test.tsx +85 -0
  287. package/Tests/UI/Monitor/MonitorSummarySnapshotRender.test.tsx +248 -0
  288. package/Tests/UI/Rum/ChunkLoader.test.ts +790 -0
  289. package/Tests/UI/Rum/ReplayScrubber.test.tsx +236 -0
  290. package/Tests/UI/Rum/ReplayStage.test.tsx +606 -0
  291. package/Tests/UI/Utils/Timezone.test.ts +86 -0
  292. package/Tests/UI/Utils/UseClockTick.test.tsx +276 -0
  293. package/Tests/Utils/AiRemediation/CommandPolicy.test.ts +1063 -0
  294. package/Tests/Utils/Dashboard/ClockWidgetFormat.test.ts +1374 -0
  295. package/Tests/Utils/Dashboard/DashboardClockComponent.test.ts +362 -0
  296. package/Tests/Utils/Dashboard/DashboardHtmlComponent.test.ts +217 -0
  297. package/Tests/Utils/Dashboard/HtmlWidgetDocument.test.ts +656 -0
  298. package/Tests/Utils/Dashboard/ValueWidgetLayout.test.ts +1007 -0
  299. package/Tests/Utils/Metrics/MetricSeriesScope.test.ts +1197 -0
  300. package/Tests/Utils/Monitor/MonitorSummarySnapshotUtil.test.ts +839 -0
  301. package/Tests/Utils/NetworkSite/CidrMatchUtil.test.ts +69 -0
  302. package/Tests/Utils/Rules/RulePatternMatchUtil.test.ts +274 -0
  303. package/Tests/Utils/Rum/ChunkMath.test.ts +286 -0
  304. package/Tests/Utils/Rum/Masking.test.ts +186 -0
  305. package/Tests/Utils/Rum/SessionIdentity.test.ts +272 -0
  306. package/Tests/Utils/Rum/SessionSampling.test.ts +164 -0
  307. package/Tests/Utils/Rum/UrlScrubber.test.ts +175 -0
  308. package/Tests/Utils/StatusPage/Report.test.ts +708 -0
  309. package/Tests/Utils/ValueFormatter.test.ts +299 -1
  310. package/Types/AI/AIRunStatus.ts +18 -7
  311. package/Types/AI/AIRunType.ts +18 -0
  312. package/Types/AI/FixVerificationStatus.ts +21 -0
  313. package/Types/AnalyticsDatabase/AnalyticsTableName.ts +16 -0
  314. package/Types/AutoRemediation/AiRemediationCommandPlan.ts +304 -0
  315. package/Types/AutoRemediation/AutoRemediationExecutionMode.ts +17 -0
  316. package/Types/AutoRemediation/AutoRemediationSuggestionStatus.ts +35 -0
  317. package/Types/AutoRemediation/AutoRemediationSuggestionType.ts +17 -0
  318. package/Types/AutoRemediation/AutoRemediationTriggerEntity.ts +11 -0
  319. package/Types/AutoRemediation/AutoRemediationVerificationStatus.ts +21 -0
  320. package/Types/CustomField/CustomFieldDropdownOption.ts +190 -0
  321. package/Types/Dashboard/DashboardComponentType.ts +2 -0
  322. package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +4 -0
  323. package/Types/Dashboard/DashboardComponents/DashboardClockComponent.ts +45 -0
  324. package/Types/Dashboard/DashboardComponents/DashboardHtmlComponent.ts +27 -0
  325. package/Types/Dashboard/DashboardComponents/DashboardValueComponent.ts +8 -0
  326. package/Types/Dashboard/DashboardTemplates.ts +516 -0
  327. package/Types/Date.ts +6 -0
  328. package/Types/Email/EmailTemplateType.ts +2 -0
  329. package/Types/Kubernetes/KubernetesRightSizing.ts +353 -0
  330. package/Types/MeteredPlan/ProductType.ts +1 -0
  331. package/Types/Monitor/MonitorStepMetricMonitor.ts +27 -1
  332. package/Types/Monitor/MonitorSteps.ts +5 -0
  333. package/Types/Monitor/MonitorSummarySnapshot.ts +88 -0
  334. package/Types/Monitor/Recommendation/MonitorRecommendationCatalog.ts +52 -10
  335. package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +7 -5
  336. package/Types/Monitor/Recommendation/MonitorRecommendationUtil.ts +101 -20
  337. package/Types/Monitor/RumAlertTemplates.ts +386 -0
  338. package/Types/Permission.ts +204 -24
  339. package/Types/Rum/SessionReplay.ts +452 -0
  340. package/Types/Rum/SessionReplayCaptureTrigger.ts +26 -0
  341. package/Types/Rum/SessionReplayConsentMode.ts +27 -0
  342. package/Types/Rum/SessionReplayMaskingMode.ts +86 -0
  343. package/Types/Rum/SessionReplayTriggerReason.ts +31 -0
  344. package/Types/Runbook/RunbookCredentialType.ts +6 -0
  345. package/Types/Runbook/RunbookStep.ts +81 -1
  346. package/Types/Runbook/RunbookStepType.ts +26 -0
  347. package/Types/Runbook/RunnerJobOrigin.ts +20 -0
  348. package/Types/Runbook/{RunbookAgentJobStatus.ts → RunnerJobStatus.ts} +2 -2
  349. package/Types/Runner/RunnerLiveStatus.ts +114 -0
  350. package/Types/StatusPage/StatusPageReport.ts +99 -0
  351. package/Types/Telemetry/TelemetryRetentionConfig.ts +18 -1
  352. package/Types/Text.ts +33 -0
  353. package/UI/Components/AutocompleteTextInput/AutocompleteTextInput.tsx +260 -75
  354. package/UI/Components/BulkUpdate/BulkLabelActions.tsx +99 -9
  355. package/UI/Components/BulkUpdate/BulkOwnerActions.tsx +11 -0
  356. package/UI/Components/CustomFields/CustomFieldsDetail.tsx +19 -14
  357. package/UI/Components/CustomFields/DropdownOptionsInput.tsx +144 -54
  358. package/UI/Components/Detail/Detail.tsx +164 -22
  359. package/UI/Components/Dropdown/Dropdown.tsx +2 -5
  360. package/UI/Components/Dropdown/DropdownMenuZIndex.ts +7 -0
  361. package/UI/Components/Dropdown/DropdownValueBadge.tsx +61 -0
  362. package/UI/Components/Filters/OperatorSelector.tsx +350 -39
  363. package/UI/Components/Forms/Fields/ColorPicker.tsx +60 -27
  364. package/UI/Components/Forms/Fields/IconPicker.tsx +89 -60
  365. package/UI/Components/Forms/Validation.ts +9 -4
  366. package/UI/Components/List/List.tsx +1 -0
  367. package/UI/Components/ModelTable/CustomFieldColumns.tsx +41 -32
  368. package/UI/Components/Pagination/Pagination.tsx +33 -10
  369. package/UI/Components/Table/Table.tsx +1 -0
  370. package/UI/Types/UseAnchoredFieldPopup.ts +321 -0
  371. package/UI/Utils/Dropdown.ts +26 -0
  372. package/UI/Utils/Timezone.ts +18 -2
  373. package/UI/Utils/UseClockTick.ts +78 -0
  374. package/Utils/AiRemediation/CommandPolicy.ts +398 -0
  375. package/Utils/Dashboard/ClockWidgetFormat.ts +604 -0
  376. package/Utils/Dashboard/Components/DashboardClockComponent.ts +181 -0
  377. package/Utils/Dashboard/Components/DashboardHtmlComponent.ts +162 -0
  378. package/Utils/Dashboard/Components/DashboardValueComponent.ts +12 -1
  379. package/Utils/Dashboard/Components/Index.ts +14 -0
  380. package/Utils/Dashboard/HtmlWidgetDocument.ts +309 -0
  381. package/Utils/Dashboard/ValueWidgetLayout.ts +471 -0
  382. package/Utils/Metrics/MetricSeriesScope.ts +301 -0
  383. package/Utils/Monitor/MonitorSummarySnapshotUtil.ts +593 -0
  384. package/Utils/NetworkSite/CidrMatchUtil.ts +30 -17
  385. package/Utils/Rules/RulePatternMatchUtil.ts +103 -0
  386. package/Utils/Rum/ChunkMath.ts +211 -0
  387. package/Utils/Rum/Masking.ts +168 -0
  388. package/Utils/Rum/SessionIdentity.ts +230 -0
  389. package/Utils/Rum/SessionSampling.ts +108 -0
  390. package/Utils/Rum/UrlScrubber.ts +185 -0
  391. package/Utils/Schema/ModelSchema.ts +27 -3
  392. package/Utils/StatusPage/Report.ts +304 -0
  393. package/Utils/ValueFormatter.ts +300 -54
  394. package/build/dist/Models/AnalyticsModels/ExceptionInstance.js +63 -0
  395. package/build/dist/Models/AnalyticsModels/ExceptionInstance.js.map +1 -1
  396. package/build/dist/Models/AnalyticsModels/Index.js +10 -0
  397. package/build/dist/Models/AnalyticsModels/Index.js.map +1 -1
  398. package/build/dist/Models/AnalyticsModels/Log.js +56 -0
  399. package/build/dist/Models/AnalyticsModels/Log.js.map +1 -1
  400. package/build/dist/Models/AnalyticsModels/RumSession.js +1159 -0
  401. package/build/dist/Models/AnalyticsModels/RumSession.js.map +1 -0
  402. package/build/dist/Models/AnalyticsModels/RumSessionChunk.js +670 -0
  403. package/build/dist/Models/AnalyticsModels/RumSessionChunk.js.map +1 -0
  404. package/build/dist/Models/AnalyticsModels/Span.js +56 -0
  405. package/build/dist/Models/AnalyticsModels/Span.js.map +1 -1
  406. package/build/dist/Models/DatabaseModels/AIAgentTaskPullRequest.js +54 -0
  407. package/build/dist/Models/DatabaseModels/AIAgentTaskPullRequest.js.map +1 -1
  408. package/build/dist/Models/DatabaseModels/AIRun.js +32 -0
  409. package/build/dist/Models/DatabaseModels/AIRun.js.map +1 -1
  410. package/build/dist/Models/DatabaseModels/Alert.js +30 -0
  411. package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
  412. package/build/dist/Models/DatabaseModels/AlertCustomField.js +1 -1
  413. package/build/dist/Models/DatabaseModels/AlertCustomField.js.map +1 -1
  414. package/build/dist/Models/DatabaseModels/AlertFeed.js +1 -0
  415. package/build/dist/Models/DatabaseModels/AlertFeed.js.map +1 -1
  416. package/build/dist/Models/DatabaseModels/AutoRemediationRule.js +998 -0
  417. package/build/dist/Models/DatabaseModels/AutoRemediationRule.js.map +1 -0
  418. package/build/dist/Models/DatabaseModels/AutoRemediationSuggestion.js +917 -0
  419. package/build/dist/Models/DatabaseModels/AutoRemediationSuggestion.js.map +1 -0
  420. package/build/dist/Models/DatabaseModels/CodeRepository.js +132 -0
  421. package/build/dist/Models/DatabaseModels/CodeRepository.js.map +1 -1
  422. package/build/dist/Models/DatabaseModels/GlobalConfig.js +327 -0
  423. package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
  424. package/build/dist/Models/DatabaseModels/Incident.js +30 -0
  425. package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
  426. package/build/dist/Models/DatabaseModels/IncidentCustomField.js +1 -1
  427. package/build/dist/Models/DatabaseModels/IncidentCustomField.js.map +1 -1
  428. package/build/dist/Models/DatabaseModels/IncidentFeed.js +1 -0
  429. package/build/dist/Models/DatabaseModels/IncidentFeed.js.map +1 -1
  430. package/build/dist/Models/DatabaseModels/Index.js +20 -8
  431. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  432. package/build/dist/Models/DatabaseModels/InstanceHealthLog.js +8 -0
  433. package/build/dist/Models/DatabaseModels/InstanceHealthLog.js.map +1 -1
  434. package/build/dist/Models/DatabaseModels/MonitorCustomField.js +1 -1
  435. package/build/dist/Models/DatabaseModels/MonitorCustomField.js.map +1 -1
  436. package/build/dist/Models/DatabaseModels/MonitorStatus.js +1 -1
  437. package/build/dist/Models/DatabaseModels/MonitorStatus.js.map +1 -1
  438. package/build/dist/Models/DatabaseModels/NetworkDeviceLabelRule.js +2 -2
  439. package/build/dist/Models/DatabaseModels/NetworkDeviceLabelRule.js.map +1 -1
  440. package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerRule.js +2 -2
  441. package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerRule.js.map +1 -1
  442. package/build/dist/Models/DatabaseModels/NetworkSiteAssignmentRule.js +1 -1
  443. package/build/dist/Models/DatabaseModels/NetworkSiteAssignmentRule.js.map +1 -1
  444. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyCustomField.js +1 -1
  445. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyCustomField.js.map +1 -1
  446. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleLayer.js +16 -4
  447. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleLayer.js.map +1 -1
  448. package/build/dist/Models/DatabaseModels/Project.js +235 -0
  449. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  450. package/build/dist/Models/DatabaseModels/RumApplication.js +930 -0
  451. package/build/dist/Models/DatabaseModels/RumApplication.js.map +1 -1
  452. package/build/dist/Models/DatabaseModels/RumSessionErasureRequest.js +591 -0
  453. package/build/dist/Models/DatabaseModels/RumSessionErasureRequest.js.map +1 -0
  454. package/build/dist/Models/DatabaseModels/RumSessionPin.js +483 -0
  455. package/build/dist/Models/DatabaseModels/RumSessionPin.js.map +1 -0
  456. package/build/dist/Models/DatabaseModels/RumSessionReplayView.js +433 -0
  457. package/build/dist/Models/DatabaseModels/RumSessionReplayView.js.map +1 -0
  458. package/build/dist/Models/DatabaseModels/RunbookCredential.js +693 -0
  459. package/build/dist/Models/DatabaseModels/RunbookCredential.js.map +1 -0
  460. package/build/dist/Models/DatabaseModels/RunbookSecret.js +8 -8
  461. package/build/dist/Models/DatabaseModels/RunbookSecret.js.map +1 -1
  462. package/build/dist/Models/DatabaseModels/{RunbookAgent.js → Runner.js} +235 -70
  463. package/build/dist/Models/DatabaseModels/Runner.js.map +1 -0
  464. package/build/dist/Models/DatabaseModels/{RunbookAgentJob.js → RunnerJob.js} +173 -40
  465. package/build/dist/Models/DatabaseModels/RunnerJob.js.map +1 -0
  466. package/build/dist/Models/DatabaseModels/{RunbookAgentOwnerTeam.js → RunnerOwnerTeam.js} +57 -57
  467. package/build/dist/Models/DatabaseModels/RunnerOwnerTeam.js.map +1 -0
  468. package/build/dist/Models/DatabaseModels/{RunbookAgentOwnerUser.js → RunnerOwnerUser.js} +57 -57
  469. package/build/dist/Models/DatabaseModels/RunnerOwnerUser.js.map +1 -0
  470. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceCustomField.js +1 -1
  471. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceCustomField.js.map +1 -1
  472. package/build/dist/Models/DatabaseModels/StatusPageCustomField.js +1 -1
  473. package/build/dist/Models/DatabaseModels/StatusPageCustomField.js.map +1 -1
  474. package/build/dist/Models/DatabaseModels/TeamCustomField.js +1 -1
  475. package/build/dist/Models/DatabaseModels/TeamCustomField.js.map +1 -1
  476. package/build/dist/Models/DatabaseModels/TeamMemberCustomField.js +1 -1
  477. package/build/dist/Models/DatabaseModels/TeamMemberCustomField.js.map +1 -1
  478. package/build/dist/Server/API/AIAgentDataAPI.js +130 -45
  479. package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
  480. package/build/dist/Server/API/AIAgentTaskAPI.js +26 -36
  481. package/build/dist/Server/API/AIAgentTaskAPI.js.map +1 -1
  482. package/build/dist/Server/API/AIAgentTaskLogAPI.js +11 -28
  483. package/build/dist/Server/API/AIAgentTaskLogAPI.js.map +1 -1
  484. package/build/dist/Server/API/AutoRemediationAPI.js +416 -0
  485. package/build/dist/Server/API/AutoRemediationAPI.js.map +1 -0
  486. package/build/dist/Server/API/BaseAnalyticsAPI.js +4 -1
  487. package/build/dist/Server/API/BaseAnalyticsAPI.js.map +1 -1
  488. package/build/dist/Server/API/CommonAPI.js +24 -0
  489. package/build/dist/Server/API/CommonAPI.js.map +1 -1
  490. package/build/dist/Server/API/DashboardAPI.js +265 -6
  491. package/build/dist/Server/API/DashboardAPI.js.map +1 -1
  492. package/build/dist/Server/API/TelemetryAPI.js +940 -3
  493. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  494. package/build/dist/Server/API/UserIncomingCallNumberAPI.js +18 -0
  495. package/build/dist/Server/API/UserIncomingCallNumberAPI.js.map +1 -1
  496. package/build/dist/Server/DatabaseConfig.js +23 -4
  497. package/build/dist/Server/DatabaseConfig.js.map +1 -1
  498. package/build/dist/Server/EnvironmentConfig.js +8 -0
  499. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  500. package/build/dist/Server/Infrastructure/Postgres/LocalMigrationGenerationDataSource.js +11 -1
  501. package/build/dist/Server/Infrastructure/Postgres/LocalMigrationGenerationDataSource.js.map +1 -1
  502. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785417351021-AddSessionReplay.js +106 -0
  503. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785417351021-AddSessionReplay.js.map +1 -0
  504. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785491583874-EnableSessionReplayByDefault.js +37 -0
  505. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785491583874-EnableSessionReplayByDefault.js.map +1 -0
  506. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785496223183-AddMonitorSummaryToIncidentAndAlert.js +18 -0
  507. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785496223183-AddMonitorSummaryToIncidentAndAlert.js.map +1 -0
  508. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785516996695-AddSessionReplayReliabilityColumns.js +29 -0
  509. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785516996695-AddSessionReplayReliabilityColumns.js.map +1 -0
  510. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785533806494-AddSessionReplayCorrelationColumns.js +35 -0
  511. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785533806494-AddSessionReplayCorrelationColumns.js.map +1 -0
  512. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785749674203-AddRedisAndPostgresHealthNotificationColumns.js +40 -0
  513. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785749674203-AddRedisAndPostgresHealthNotificationColumns.js.map +1 -0
  514. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785763818197-AddAutoRemediation.js +128 -0
  515. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785763818197-AddAutoRemediation.js.map +1 -0
  516. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785768089408-AddRemediationVerification.js +28 -0
  517. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785768089408-AddRemediationVerification.js.map +1 -0
  518. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785776960660-AddRunnerCapabilities.js +14 -0
  519. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785776960660-AddRunnerCapabilities.js.map +1 -0
  520. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785790000000-AddIncidentInvestigationGating.js +27 -0
  521. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785790000000-AddIncidentInvestigationGating.js.map +1 -0
  522. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785800000000-AddRunbookCredential.js +44 -0
  523. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785800000000-AddRunbookCredential.js.map +1 -0
  524. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785810000000-RenameRunbookAgentToRunner.js +88 -0
  525. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785810000000-RenameRunbookAgentToRunner.js.map +1 -0
  526. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785860000000-SessionReplayDefaultToSensitiveInputMasking.js +59 -0
  527. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785860000000-SessionReplayDefaultToSensitiveInputMasking.js.map +1 -0
  528. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785870000000-AddAiCommandRemediation.js +76 -0
  529. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785870000000-AddAiCommandRemediation.js.map +1 -0
  530. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785880000000-AlignRunnerSchemaWithEntities.js +214 -0
  531. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785880000000-AlignRunnerSchemaWithEntities.js.map +1 -0
  532. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785890000000-AddFixVerificationAndAutomaticCodeFixes.js +44 -0
  533. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785890000000-AddFixVerificationAndAutomaticCodeFixes.js.map +1 -0
  534. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +32 -0
  535. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  536. package/build/dist/Server/Services/AIRunService.js +1 -4
  537. package/build/dist/Server/Services/AIRunService.js.map +1 -1
  538. package/build/dist/Server/Services/AIService.js +26 -0
  539. package/build/dist/Server/Services/AIService.js.map +1 -1
  540. package/build/dist/Server/Services/AlertService.js +37 -4
  541. package/build/dist/Server/Services/AlertService.js.map +1 -1
  542. package/build/dist/Server/Services/AlertSeverityService.js +24 -11
  543. package/build/dist/Server/Services/AlertSeverityService.js.map +1 -1
  544. package/build/dist/Server/Services/AlertStateService.js +24 -11
  545. package/build/dist/Server/Services/AlertStateService.js.map +1 -1
  546. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js +917 -0
  547. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js.map +1 -0
  548. package/build/dist/Server/Services/{RunbookAgentOwnerTeamService.js → AutoRemediationRuleService.js} +2 -2
  549. package/build/dist/Server/Services/AutoRemediationRuleService.js.map +1 -0
  550. package/build/dist/Server/Services/AutoRemediationSuggestionService.js +127 -0
  551. package/build/dist/Server/Services/AutoRemediationSuggestionService.js.map +1 -0
  552. package/build/dist/Server/Services/BillingService.js +45 -1
  553. package/build/dist/Server/Services/BillingService.js.map +1 -1
  554. package/build/dist/Server/Services/DatabaseService.js +72 -4
  555. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  556. package/build/dist/Server/Services/IncidentService.js +52 -4
  557. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  558. package/build/dist/Server/Services/IncidentSeverityService.js +24 -11
  559. package/build/dist/Server/Services/IncidentSeverityService.js.map +1 -1
  560. package/build/dist/Server/Services/IncidentStateService.js +24 -11
  561. package/build/dist/Server/Services/IncidentStateService.js.map +1 -1
  562. package/build/dist/Server/Services/Index.js +18 -0
  563. package/build/dist/Server/Services/Index.js.map +1 -1
  564. package/build/dist/Server/Services/LlmProviderService.js +61 -8
  565. package/build/dist/Server/Services/LlmProviderService.js.map +1 -1
  566. package/build/dist/Server/Services/MonitorService.js +24 -0
  567. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  568. package/build/dist/Server/Services/MonitorStatusService.js +25 -11
  569. package/build/dist/Server/Services/MonitorStatusService.js.map +1 -1
  570. package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js +12 -11
  571. package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js.map +1 -1
  572. package/build/dist/Server/Services/NetworkDeviceLabelRuleService.js +43 -0
  573. package/build/dist/Server/Services/NetworkDeviceLabelRuleService.js.map +1 -1
  574. package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js +12 -11
  575. package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js.map +1 -1
  576. package/build/dist/Server/Services/NetworkDeviceOwnerRuleService.js +41 -0
  577. package/build/dist/Server/Services/NetworkDeviceOwnerRuleService.js.map +1 -1
  578. package/build/dist/Server/Services/NetworkDeviceService.js +129 -20
  579. package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
  580. package/build/dist/Server/Services/NetworkSiteAssignmentRuleService.js +67 -10
  581. package/build/dist/Server/Services/NetworkSiteAssignmentRuleService.js.map +1 -1
  582. package/build/dist/Server/Services/NetworkSiteService.js +19 -8
  583. package/build/dist/Server/Services/NetworkSiteService.js.map +1 -1
  584. package/build/dist/Server/Services/ProjectService.js +43 -0
  585. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  586. package/build/dist/Server/Services/RumApplicationService.js +202 -0
  587. package/build/dist/Server/Services/RumApplicationService.js.map +1 -1
  588. package/build/dist/Server/Services/RumSessionChunkService.js +9 -0
  589. package/build/dist/Server/Services/RumSessionChunkService.js.map +1 -0
  590. package/build/dist/Server/Services/RumSessionErasureRequestService.js +190 -0
  591. package/build/dist/Server/Services/RumSessionErasureRequestService.js.map +1 -0
  592. package/build/dist/Server/Services/RumSessionPinService.js +208 -0
  593. package/build/dist/Server/Services/RumSessionPinService.js.map +1 -0
  594. package/build/dist/Server/Services/RumSessionReplayViewService.js +180 -0
  595. package/build/dist/Server/Services/RumSessionReplayViewService.js.map +1 -0
  596. package/build/dist/Server/Services/RumSessionService.js +102 -0
  597. package/build/dist/Server/Services/RumSessionService.js.map +1 -0
  598. package/build/dist/Server/Services/RunbookCredentialService.js +67 -0
  599. package/build/dist/Server/Services/RunbookCredentialService.js.map +1 -0
  600. package/build/dist/Server/Services/{RunbookAgentJobService.js → RunnerJobService.js} +158 -46
  601. package/build/dist/Server/Services/RunnerJobService.js.map +1 -0
  602. package/build/dist/Server/Services/{RunbookAgentOwnerUserService.js → RunnerOwnerTeamService.js} +2 -2
  603. package/build/dist/Server/Services/RunnerOwnerTeamService.js.map +1 -0
  604. package/build/dist/Server/Services/RunnerOwnerUserService.js +9 -0
  605. package/build/dist/Server/Services/RunnerOwnerUserService.js.map +1 -0
  606. package/build/dist/Server/Services/RunnerService.js +163 -0
  607. package/build/dist/Server/Services/RunnerService.js.map +1 -0
  608. package/build/dist/Server/Services/ScheduledMaintenanceStateService.js +24 -11
  609. package/build/dist/Server/Services/ScheduledMaintenanceStateService.js.map +1 -1
  610. package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js +15 -1
  611. package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js.map +1 -1
  612. package/build/dist/Server/Services/ServiceService.js +8 -2
  613. package/build/dist/Server/Services/ServiceService.js.map +1 -1
  614. package/build/dist/Server/Services/StatusPageService.js +173 -16
  615. package/build/dist/Server/Services/StatusPageService.js.map +1 -1
  616. package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateService.js +17 -1
  617. package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateService.js.map +1 -1
  618. package/build/dist/Server/Services/TelemetryExceptionService.js +3 -16
  619. package/build/dist/Server/Services/TelemetryExceptionService.js.map +1 -1
  620. package/build/dist/Server/Services/TelemetryUsageBillingService.js +31 -3
  621. package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
  622. package/build/dist/Server/Services/TraceAggregationService.js +106 -2
  623. package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
  624. package/build/dist/Server/Types/Billing/MeteredPlan/AllMeteredPlans.js +16 -0
  625. package/build/dist/Server/Types/Billing/MeteredPlan/AllMeteredPlans.js.map +1 -1
  626. package/build/dist/Server/Types/Billing/MeteredPlan/ServerMeteredPlan.js +9 -0
  627. package/build/dist/Server/Types/Billing/MeteredPlan/ServerMeteredPlan.js.map +1 -1
  628. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js +38 -6
  629. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js.map +1 -1
  630. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentAuth.js +104 -0
  631. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentAuth.js.map +1 -0
  632. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentAvailability.js +54 -0
  633. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentAvailability.js.map +1 -0
  634. package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js +11 -7
  635. package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js.map +1 -1
  636. package/build/dist/Server/Utils/AI/CodeFix/CodeFixRunQueue.js +3 -4
  637. package/build/dist/Server/Utils/AI/CodeFix/CodeFixRunQueue.js.map +1 -1
  638. package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js +724 -0
  639. package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js.map +1 -0
  640. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js +668 -0
  641. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js.map +1 -0
  642. package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js +657 -0
  643. package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js.map +1 -0
  644. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +52 -7
  645. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
  646. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +53 -5
  647. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
  648. package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js +25 -6
  649. package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js.map +1 -1
  650. package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js +131 -17
  651. package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js.map +1 -1
  652. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +200 -5
  653. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
  654. package/build/dist/Server/Utils/AI/SRE/Insights/Triage.js +2 -7
  655. package/build/dist/Server/Utils/AI/SRE/Insights/Triage.js.map +1 -1
  656. package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js +4 -17
  657. package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js.map +1 -1
  658. package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js +203 -19
  659. package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js.map +1 -1
  660. package/build/dist/Server/Utils/AI/SRE/PostedRootCause.js +89 -0
  661. package/build/dist/Server/Utils/AI/SRE/PostedRootCause.js.map +1 -0
  662. package/build/dist/Server/Utils/AI/SRE/RemediationHandoff.js +82 -0
  663. package/build/dist/Server/Utils/AI/SRE/RemediationHandoff.js.map +1 -0
  664. package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js +4 -19
  665. package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js.map +1 -1
  666. package/build/dist/Server/Utils/AI/Toolbox/CodeWriteTools.js +2 -2
  667. package/build/dist/Server/Utils/Alert/AlertPrivacyFilter.js +36 -0
  668. package/build/dist/Server/Utils/Alert/AlertPrivacyFilter.js.map +1 -1
  669. package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js +498 -0
  670. package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js.map +1 -0
  671. package/build/dist/Server/Utils/AutoRemediation/RemediationVerifier.js +492 -0
  672. package/build/dist/Server/Utils/AutoRemediation/RemediationVerifier.js.map +1 -0
  673. package/build/dist/Server/Utils/CorsOptions.js +47 -0
  674. package/build/dist/Server/Utils/CorsOptions.js.map +1 -0
  675. package/build/dist/Server/Utils/Database/RelationIdUtil.js +51 -0
  676. package/build/dist/Server/Utils/Database/RelationIdUtil.js.map +1 -0
  677. package/build/dist/Server/Utils/Incident/IncidentPrivacyFilter.js +38 -0
  678. package/build/dist/Server/Utils/Incident/IncidentPrivacyFilter.js.map +1 -1
  679. package/build/dist/Server/Utils/InstanceHealth/PostgresHealth.js +194 -0
  680. package/build/dist/Server/Utils/InstanceHealth/PostgresHealth.js.map +1 -0
  681. package/build/dist/Server/Utils/InstanceHealth/RedisHealth.js +292 -0
  682. package/build/dist/Server/Utils/InstanceHealth/RedisHealth.js.map +1 -0
  683. package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js +11 -0
  684. package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js.map +1 -1
  685. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +9 -0
  686. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  687. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +9 -0
  688. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  689. package/build/dist/Server/Utils/Monitor/MonitorResource.js +16 -0
  690. package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
  691. package/build/dist/Server/Utils/Monitor/MonitorSummaryCapture.js +92 -0
  692. package/build/dist/Server/Utils/Monitor/MonitorSummaryCapture.js.map +1 -0
  693. package/build/dist/Server/Utils/NetworkDevice/RulePatternValidator.js +27 -0
  694. package/build/dist/Server/Utils/NetworkDevice/RulePatternValidator.js.map +1 -0
  695. package/build/dist/Server/Utils/OpenAPI.js +2 -1
  696. package/build/dist/Server/Utils/OpenAPI.js.map +1 -1
  697. package/build/dist/Server/Utils/Runbook/RunbookExecutePermission.js +67 -0
  698. package/build/dist/Server/Utils/Runbook/RunbookExecutePermission.js.map +1 -0
  699. package/build/dist/Server/Utils/SessionReplay/SessionReplayErasureTombstone.js +98 -0
  700. package/build/dist/Server/Utils/SessionReplay/SessionReplayErasureTombstone.js.map +1 -0
  701. package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCache.js +378 -0
  702. package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCache.js.map +1 -0
  703. package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCacheStore.js +137 -0
  704. package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCacheStore.js.map +1 -0
  705. package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js +998 -0
  706. package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js.map +1 -0
  707. package/build/dist/Server/Utils/SessionReplay/SessionReplayRetention.js +59 -0
  708. package/build/dist/Server/Utils/SessionReplay/SessionReplayRetention.js.map +1 -0
  709. package/build/dist/Server/Utils/SessionReplay/SessionReplayTargeting.js +98 -0
  710. package/build/dist/Server/Utils/SessionReplay/SessionReplayTargeting.js.map +1 -0
  711. package/build/dist/Server/Utils/SessionReplay/SessionReplayUsage.js +69 -0
  712. package/build/dist/Server/Utils/SessionReplay/SessionReplayUsage.js.map +1 -0
  713. package/build/dist/Server/Utils/StartServer.js +40 -3
  714. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  715. package/build/dist/Server/Utils/Telemetry/TelemetryFanInWriter.js +27 -6
  716. package/build/dist/Server/Utils/Telemetry/TelemetryFanInWriter.js.map +1 -1
  717. package/build/dist/Types/AI/AIRunStatus.js +17 -5
  718. package/build/dist/Types/AI/AIRunStatus.js.map +1 -1
  719. package/build/dist/Types/AI/AIRunType.js +18 -0
  720. package/build/dist/Types/AI/AIRunType.js.map +1 -1
  721. package/build/dist/Types/AI/FixVerificationStatus.js +22 -0
  722. package/build/dist/Types/AI/FixVerificationStatus.js.map +1 -0
  723. package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js +16 -0
  724. package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js.map +1 -1
  725. package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js +192 -0
  726. package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js.map +1 -0
  727. package/build/dist/Types/AutoRemediation/AutoRemediationExecutionMode.js +18 -0
  728. package/build/dist/Types/AutoRemediation/AutoRemediationExecutionMode.js.map +1 -0
  729. package/build/dist/Types/AutoRemediation/AutoRemediationSuggestionStatus.js +31 -0
  730. package/build/dist/Types/AutoRemediation/AutoRemediationSuggestionStatus.js.map +1 -0
  731. package/build/dist/Types/AutoRemediation/AutoRemediationSuggestionType.js +18 -0
  732. package/build/dist/Types/AutoRemediation/AutoRemediationSuggestionType.js.map +1 -0
  733. package/build/dist/Types/AutoRemediation/AutoRemediationTriggerEntity.js +12 -0
  734. package/build/dist/Types/AutoRemediation/AutoRemediationTriggerEntity.js.map +1 -0
  735. package/build/dist/Types/AutoRemediation/AutoRemediationVerificationStatus.js +22 -0
  736. package/build/dist/Types/AutoRemediation/AutoRemediationVerificationStatus.js.map +1 -0
  737. package/build/dist/Types/CustomField/CustomFieldDropdownOption.js +110 -0
  738. package/build/dist/Types/CustomField/CustomFieldDropdownOption.js.map +1 -0
  739. package/build/dist/Types/Dashboard/DashboardComponentType.js +2 -0
  740. package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
  741. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +4 -0
  742. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
  743. package/build/dist/Types/Dashboard/DashboardComponents/DashboardClockComponent.js +19 -0
  744. package/build/dist/Types/Dashboard/DashboardComponents/DashboardClockComponent.js.map +1 -0
  745. package/build/dist/Types/Dashboard/DashboardComponents/DashboardHtmlComponent.js +2 -0
  746. package/build/dist/Types/Dashboard/DashboardComponents/DashboardHtmlComponent.js.map +1 -0
  747. package/build/dist/Types/Dashboard/DashboardTemplates.js +487 -0
  748. package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
  749. package/build/dist/Types/Date.js +6 -0
  750. package/build/dist/Types/Date.js.map +1 -1
  751. package/build/dist/Types/Email/EmailTemplateType.js +2 -0
  752. package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
  753. package/build/dist/Types/Kubernetes/KubernetesRightSizing.js +229 -0
  754. package/build/dist/Types/Kubernetes/KubernetesRightSizing.js.map +1 -0
  755. package/build/dist/Types/MeteredPlan/ProductType.js +1 -0
  756. package/build/dist/Types/MeteredPlan/ProductType.js.map +1 -1
  757. package/build/dist/Types/Monitor/MonitorStepMetricMonitor.js +12 -2
  758. package/build/dist/Types/Monitor/MonitorStepMetricMonitor.js.map +1 -1
  759. package/build/dist/Types/Monitor/MonitorSteps.js +5 -0
  760. package/build/dist/Types/Monitor/MonitorSteps.js.map +1 -1
  761. package/build/dist/Types/Monitor/MonitorSummarySnapshot.js +13 -0
  762. package/build/dist/Types/Monitor/MonitorSummarySnapshot.js.map +1 -0
  763. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js +40 -8
  764. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js.map +1 -1
  765. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js +4 -3
  766. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js.map +1 -1
  767. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js +50 -10
  768. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js.map +1 -1
  769. package/build/dist/Types/Monitor/RumAlertTemplates.js +297 -0
  770. package/build/dist/Types/Monitor/RumAlertTemplates.js.map +1 -0
  771. package/build/dist/Types/Permission.js +184 -24
  772. package/build/dist/Types/Permission.js.map +1 -1
  773. package/build/dist/Types/Rum/SessionReplay.js +155 -0
  774. package/build/dist/Types/Rum/SessionReplay.js.map +1 -0
  775. package/build/dist/Types/Rum/SessionReplayCaptureTrigger.js +26 -0
  776. package/build/dist/Types/Rum/SessionReplayCaptureTrigger.js.map +1 -0
  777. package/build/dist/Types/Rum/SessionReplayConsentMode.js +27 -0
  778. package/build/dist/Types/Rum/SessionReplayConsentMode.js.map +1 -0
  779. package/build/dist/Types/Rum/SessionReplayMaskingMode.js +79 -0
  780. package/build/dist/Types/Rum/SessionReplayMaskingMode.js.map +1 -0
  781. package/build/dist/Types/Rum/SessionReplayTriggerReason.js +28 -0
  782. package/build/dist/Types/Rum/SessionReplayTriggerReason.js.map +1 -0
  783. package/build/dist/Types/Runbook/RunbookCredentialType.js +7 -0
  784. package/build/dist/Types/Runbook/RunbookCredentialType.js.map +1 -0
  785. package/build/dist/Types/Runbook/RunbookStep.js +20 -1
  786. package/build/dist/Types/Runbook/RunbookStep.js.map +1 -1
  787. package/build/dist/Types/Runbook/RunbookStepType.js +24 -0
  788. package/build/dist/Types/Runbook/RunbookStepType.js.map +1 -1
  789. package/build/dist/Types/Runbook/RunnerJobOrigin.js +21 -0
  790. package/build/dist/Types/Runbook/RunnerJobOrigin.js.map +1 -0
  791. package/build/dist/Types/Runbook/RunnerJobStatus.js +22 -0
  792. package/build/dist/Types/Runbook/RunnerJobStatus.js.map +1 -0
  793. package/build/dist/Types/Runner/RunnerLiveStatus.js +69 -0
  794. package/build/dist/Types/Runner/RunnerLiveStatus.js.map +1 -0
  795. package/build/dist/Types/StatusPage/StatusPageReport.js +22 -0
  796. package/build/dist/Types/StatusPage/StatusPageReport.js.map +1 -0
  797. package/build/dist/Types/Telemetry/TelemetryRetentionConfig.js.map +1 -1
  798. package/build/dist/Types/Text.js +29 -0
  799. package/build/dist/Types/Text.js.map +1 -1
  800. package/build/dist/UI/Components/AutocompleteTextInput/AutocompleteTextInput.js +143 -28
  801. package/build/dist/UI/Components/AutocompleteTextInput/AutocompleteTextInput.js.map +1 -1
  802. package/build/dist/UI/Components/BulkUpdate/BulkLabelActions.js +82 -9
  803. package/build/dist/UI/Components/BulkUpdate/BulkLabelActions.js.map +1 -1
  804. package/build/dist/UI/Components/BulkUpdate/BulkOwnerActions.js +11 -0
  805. package/build/dist/UI/Components/BulkUpdate/BulkOwnerActions.js.map +1 -1
  806. package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js +11 -13
  807. package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js.map +1 -1
  808. package/build/dist/UI/Components/CustomFields/DropdownOptionsInput.js +76 -45
  809. package/build/dist/UI/Components/CustomFields/DropdownOptionsInput.js.map +1 -1
  810. package/build/dist/UI/Components/Detail/Detail.js +100 -8
  811. package/build/dist/UI/Components/Detail/Detail.js.map +1 -1
  812. package/build/dist/UI/Components/Dropdown/Dropdown.js +2 -5
  813. package/build/dist/UI/Components/Dropdown/Dropdown.js.map +1 -1
  814. package/build/dist/UI/Components/Dropdown/DropdownMenuZIndex.js +7 -0
  815. package/build/dist/UI/Components/Dropdown/DropdownMenuZIndex.js.map +1 -0
  816. package/build/dist/UI/Components/Dropdown/DropdownValueBadge.js +32 -0
  817. package/build/dist/UI/Components/Dropdown/DropdownValueBadge.js.map +1 -0
  818. package/build/dist/UI/Components/Filters/OperatorSelector.js +210 -20
  819. package/build/dist/UI/Components/Filters/OperatorSelector.js.map +1 -1
  820. package/build/dist/UI/Components/Forms/Fields/ColorPicker.js +26 -10
  821. package/build/dist/UI/Components/Forms/Fields/ColorPicker.js.map +1 -1
  822. package/build/dist/UI/Components/Forms/Fields/IconPicker.js +28 -13
  823. package/build/dist/UI/Components/Forms/Fields/IconPicker.js.map +1 -1
  824. package/build/dist/UI/Components/Forms/Validation.js +9 -5
  825. package/build/dist/UI/Components/Forms/Validation.js.map +1 -1
  826. package/build/dist/UI/Components/List/List.js +1 -1
  827. package/build/dist/UI/Components/List/List.js.map +1 -1
  828. package/build/dist/UI/Components/ModelTable/CustomFieldColumns.js +21 -19
  829. package/build/dist/UI/Components/ModelTable/CustomFieldColumns.js.map +1 -1
  830. package/build/dist/UI/Components/Pagination/Pagination.js +14 -3
  831. package/build/dist/UI/Components/Pagination/Pagination.js.map +1 -1
  832. package/build/dist/UI/Components/Table/Table.js +1 -1
  833. package/build/dist/UI/Components/Table/Table.js.map +1 -1
  834. package/build/dist/UI/Types/UseAnchoredFieldPopup.js +197 -0
  835. package/build/dist/UI/Types/UseAnchoredFieldPopup.js.map +1 -0
  836. package/build/dist/UI/Utils/Dropdown.js +18 -0
  837. package/build/dist/UI/Utils/Dropdown.js.map +1 -1
  838. package/build/dist/UI/Utils/Timezone.js +13 -2
  839. package/build/dist/UI/Utils/Timezone.js.map +1 -1
  840. package/build/dist/UI/Utils/UseClockTick.js +41 -0
  841. package/build/dist/UI/Utils/UseClockTick.js.map +1 -0
  842. package/build/dist/Utils/AiRemediation/CommandPolicy.js +303 -0
  843. package/build/dist/Utils/AiRemediation/CommandPolicy.js.map +1 -0
  844. package/build/dist/Utils/Dashboard/ClockWidgetFormat.js +232 -0
  845. package/build/dist/Utils/Dashboard/ClockWidgetFormat.js.map +1 -0
  846. package/build/dist/Utils/Dashboard/Components/DashboardClockComponent.js +146 -0
  847. package/build/dist/Utils/Dashboard/Components/DashboardClockComponent.js.map +1 -0
  848. package/build/dist/Utils/Dashboard/Components/DashboardHtmlComponent.js +133 -0
  849. package/build/dist/Utils/Dashboard/Components/DashboardHtmlComponent.js.map +1 -0
  850. package/build/dist/Utils/Dashboard/Components/DashboardValueComponent.js +10 -1
  851. package/build/dist/Utils/Dashboard/Components/DashboardValueComponent.js.map +1 -1
  852. package/build/dist/Utils/Dashboard/Components/Index.js +8 -0
  853. package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
  854. package/build/dist/Utils/Dashboard/HtmlWidgetDocument.js +198 -0
  855. package/build/dist/Utils/Dashboard/HtmlWidgetDocument.js.map +1 -0
  856. package/build/dist/Utils/Dashboard/ValueWidgetLayout.js +276 -0
  857. package/build/dist/Utils/Dashboard/ValueWidgetLayout.js.map +1 -0
  858. package/build/dist/Utils/Metrics/MetricSeriesScope.js +203 -0
  859. package/build/dist/Utils/Metrics/MetricSeriesScope.js.map +1 -0
  860. package/build/dist/Utils/Monitor/MonitorSummarySnapshotUtil.js +382 -0
  861. package/build/dist/Utils/Monitor/MonitorSummarySnapshotUtil.js.map +1 -0
  862. package/build/dist/Utils/NetworkSite/CidrMatchUtil.js +13 -7
  863. package/build/dist/Utils/NetworkSite/CidrMatchUtil.js.map +1 -1
  864. package/build/dist/Utils/Rules/RulePatternMatchUtil.js +87 -0
  865. package/build/dist/Utils/Rules/RulePatternMatchUtil.js.map +1 -0
  866. package/build/dist/Utils/Rum/ChunkMath.js +147 -0
  867. package/build/dist/Utils/Rum/ChunkMath.js.map +1 -0
  868. package/build/dist/Utils/Rum/Masking.js +143 -0
  869. package/build/dist/Utils/Rum/Masking.js.map +1 -0
  870. package/build/dist/Utils/Rum/SessionIdentity.js +161 -0
  871. package/build/dist/Utils/Rum/SessionIdentity.js.map +1 -0
  872. package/build/dist/Utils/Rum/SessionSampling.js +91 -0
  873. package/build/dist/Utils/Rum/SessionSampling.js.map +1 -0
  874. package/build/dist/Utils/Rum/UrlScrubber.js +144 -0
  875. package/build/dist/Utils/Rum/UrlScrubber.js.map +1 -0
  876. package/build/dist/Utils/Schema/ModelSchema.js +28 -3
  877. package/build/dist/Utils/Schema/ModelSchema.js.map +1 -1
  878. package/build/dist/Utils/StatusPage/Report.js +194 -0
  879. package/build/dist/Utils/StatusPage/Report.js.map +1 -0
  880. package/build/dist/Utils/ValueFormatter.js +239 -46
  881. package/build/dist/Utils/ValueFormatter.js.map +1 -1
  882. package/jest.config.json +3 -0
  883. package/package.json +1 -1
  884. package/tsconfig.json +19 -1
  885. package/Server/Services/RunbookAgentService.ts +0 -93
  886. package/build/dist/Models/DatabaseModels/RunbookAgent.js.map +0 -1
  887. package/build/dist/Models/DatabaseModels/RunbookAgentJob.js.map +0 -1
  888. package/build/dist/Models/DatabaseModels/RunbookAgentOwnerTeam.js.map +0 -1
  889. package/build/dist/Models/DatabaseModels/RunbookAgentOwnerUser.js.map +0 -1
  890. package/build/dist/Server/Services/RunbookAgentJobService.js.map +0 -1
  891. package/build/dist/Server/Services/RunbookAgentOwnerTeamService.js.map +0 -1
  892. package/build/dist/Server/Services/RunbookAgentOwnerUserService.js.map +0 -1
  893. package/build/dist/Server/Services/RunbookAgentService.js +0 -91
  894. package/build/dist/Server/Services/RunbookAgentService.js.map +0 -1
  895. package/build/dist/Types/Runbook/RunbookAgentJobStatus.js +0 -22
  896. package/build/dist/Types/Runbook/RunbookAgentJobStatus.js.map +0 -1
@@ -7,9 +7,10 @@ import QueryHelper from "../Types/Database/QueryHelper";
7
7
  import OneUptimeDate from "../../Types/Date";
8
8
  import LIMIT_MAX from "../../Types/Database/LimitMax";
9
9
  import GlobalCache from "../Infrastructure/GlobalCache";
10
+ import SessionReplayGateCacheStore from "../Utils/SessionReplay/SessionReplayGateCacheStore";
10
11
  import logger, { LogAttributes } from "../Utils/Logger";
11
12
  import crypto from "crypto";
12
- import { OnCreate } from "../Types/Database/Hooks";
13
+ import { OnCreate, OnDelete, OnUpdate } from "../Types/Database/Hooks";
13
14
  import RumApplicationLabelRuleEngineService from "./RumApplicationLabelRuleEngineService";
14
15
  import RumApplicationOwnerRuleEngineService from "./RumApplicationOwnerRuleEngineService";
15
16
 
@@ -19,6 +20,14 @@ const LAST_SEEN_THROTTLE_SECONDS: number = 60;
19
20
  const LABELS_APPLIED_CACHE_NAMESPACE: string = "rum-application-labels-applied";
20
21
  const LABELS_APPLIED_CACHE_TTL_SECONDS: number = 60;
21
22
 
23
+ const REPLAY_CHUNK_RECEIVED_CACHE_NAMESPACE: string =
24
+ "rum-application-replay-chunk-received";
25
+ const REPLAY_CHUNK_RECEIVED_THROTTLE_SECONDS: number = 60;
26
+
27
+ const REPLAY_BUDGET_EXCEEDED_CACHE_NAMESPACE: string =
28
+ "rum-application-replay-budget-exceeded";
29
+ const REPLAY_BUDGET_EXCEEDED_THROTTLE_SECONDS: number = 300;
30
+
22
31
  export class Service extends DatabaseService<Model> {
23
32
  public constructor() {
24
33
  super(Model);
@@ -54,6 +63,144 @@ export class Service extends DatabaseService<Model> {
54
63
  return createdItem;
55
64
  }
56
65
 
66
+ /*
67
+ * Session replay policy invalidation.
68
+ *
69
+ * The ingest gate caches the resolved policy for POLICY_CACHE_TTL_MS per
70
+ * pod, and the config endpoint is cached in the browser for 300s on top of
71
+ * that. Without these hooks, switching replay off for an application would
72
+ * keep being accepted for up to ~6 minutes across the fleet - so the kill
73
+ * key exists precisely to be written here.
74
+ *
75
+ * The kill key is per PROJECT, which is coarser than the per-application
76
+ * change that triggered it: disabling one application in a multi-app
77
+ * project briefly refuses the project's other applications too. That is
78
+ * accepted deliberately. The window is KILL_KEY_CACHE_TTL_MS plus the
79
+ * policy TTL, the failure mode is "a few recordings not taken", and the
80
+ * alternative - keying on projectId:appIdentifier - would leave the
81
+ * project-level `isSessionReplayAllowed` switch with no fast path at all.
82
+ */
83
+ @CaptureSpan()
84
+ protected override async onUpdateSuccess(
85
+ onUpdate: OnUpdate<Model>,
86
+ updatedItemIds: Array<ObjectID>,
87
+ ): Promise<OnUpdate<Model>> {
88
+ await this.invalidateSessionReplayPolicy({
89
+ updateData: onUpdate.updateBy.data as Record<string, unknown>,
90
+ itemIds: updatedItemIds,
91
+ tenantId: onUpdate.updateBy.props.tenantId,
92
+ });
93
+
94
+ return onUpdate;
95
+ }
96
+
97
+ @CaptureSpan()
98
+ protected override async onDeleteSuccess(
99
+ onDelete: OnDelete<Model>,
100
+ itemIdsBeforeDelete: Array<ObjectID>,
101
+ ): Promise<OnDelete<Model>> {
102
+ /*
103
+ * A deleted application can never be re-enabled, so this always takes
104
+ * the "turn it off now" path rather than only clearing the cache.
105
+ */
106
+ await this.invalidateSessionReplayPolicy({
107
+ updateData: { isSessionReplayEnabled: false },
108
+ itemIds: itemIdsBeforeDelete,
109
+ tenantId: onDelete.deleteBy.props.tenantId,
110
+ });
111
+
112
+ return onDelete;
113
+ }
114
+
115
+ private async invalidateSessionReplayPolicy(data: {
116
+ updateData: Record<string, unknown>;
117
+ itemIds: Array<ObjectID>;
118
+ tenantId: ObjectID | undefined;
119
+ }): Promise<void> {
120
+ /*
121
+ * Only replay-relevant edits invalidate. A lastSeenAt heartbeat or a
122
+ * label change must not write a kill key, and updateLastSeen bypasses
123
+ * hooks entirely for the same reason.
124
+ */
125
+ const touchesReplayPolicy: boolean = Object.keys(data.updateData).some(
126
+ (key: string): boolean => {
127
+ return (
128
+ key.startsWith("sessionReplay") || key === "isSessionReplayEnabled"
129
+ );
130
+ },
131
+ );
132
+
133
+ if (!touchesReplayPolicy) {
134
+ return;
135
+ }
136
+
137
+ const projectIds: Array<ObjectID> = await this.resolveProjectIds(data);
138
+
139
+ const isTurningOff: boolean =
140
+ data.updateData["isSessionReplayEnabled"] === false;
141
+
142
+ for (const projectId of projectIds) {
143
+ try {
144
+ SessionReplayGateCacheStore.clearCache(projectId);
145
+
146
+ if (isTurningOff) {
147
+ await SessionReplayGateCacheStore.markProjectDisabled(projectId);
148
+ } else {
149
+ /*
150
+ * Any other replay edit (including turning it back ON) must also
151
+ * drop a kill key left over from an earlier disable, or the
152
+ * project stays refused for the remainder of the key's TTL.
153
+ */
154
+ await SessionReplayGateCacheStore.clearProjectDisabled(projectId);
155
+ }
156
+ } catch (err) {
157
+ /*
158
+ * Best effort. The ordinary cache expiry still applies, so a Redis
159
+ * outage degrades the response time of a settings change rather
160
+ * than failing the settings change itself.
161
+ */
162
+ logger.warn(
163
+ `RumApplicationService: could not invalidate the session replay gate cache for project ${projectId.toString()}`,
164
+ );
165
+ logger.warn(err);
166
+ }
167
+ }
168
+ }
169
+
170
+ private async resolveProjectIds(data: {
171
+ itemIds: Array<ObjectID>;
172
+ tenantId: ObjectID | undefined;
173
+ }): Promise<Array<ObjectID>> {
174
+ if (data.tenantId) {
175
+ return [data.tenantId];
176
+ }
177
+
178
+ /*
179
+ * A root-props update carries no tenantId, so the project has to be read
180
+ * back off the rows that were touched.
181
+ */
182
+ const projectIds: Map<string, ObjectID> = new Map();
183
+
184
+ for (const id of data.itemIds) {
185
+ const app: Model | null = await this.findOneById({
186
+ id: id,
187
+ select: {
188
+ _id: true,
189
+ projectId: true,
190
+ },
191
+ props: {
192
+ isRoot: true,
193
+ },
194
+ });
195
+
196
+ if (app?.projectId) {
197
+ projectIds.set(app.projectId.toString(), app.projectId);
198
+ }
199
+ }
200
+
201
+ return Array.from(projectIds.values());
202
+ }
203
+
57
204
  @CaptureSpan()
58
205
  public async findOrCreateByAppIdentifier(data: {
59
206
  projectId: ObjectID;
@@ -196,6 +343,98 @@ export class Service extends DatabaseService<Model> {
196
343
  });
197
344
  }
198
345
 
346
+ /*
347
+ * Session replay ingest health markers.
348
+ *
349
+ * Both write columns whose names start with "sessionReplay", which the
350
+ * onUpdateSuccess hook treats as a policy edit (cache clear + kill-key
351
+ * churn) - so they MUST go through the hook-free single-statement path,
352
+ * exactly like updateLastSeen. They also skip the updatedAt refresh:
353
+ * configEpoch is derived from updatedAt, and a passive health timestamp
354
+ * broadcasting "configuration changed" to every live recorder once a
355
+ * minute would be self-inflicted config-fetch load.
356
+ *
357
+ * Throttled through GlobalCache so 20k chunks/min becomes at most one
358
+ * Postgres write per application per window across the whole fleet.
359
+ * Failures are swallowed after a warn: this bookkeeping must never make
360
+ * an ingest request fail.
361
+ */
362
+ @CaptureSpan()
363
+ public async markSessionReplayChunkReceived(
364
+ rumApplicationId: ObjectID,
365
+ ): Promise<void> {
366
+ await this.writeReplayHealthColumn({
367
+ rumApplicationId: rumApplicationId,
368
+ cacheNamespace: REPLAY_CHUNK_RECEIVED_CACHE_NAMESPACE,
369
+ throttleSeconds: REPLAY_CHUNK_RECEIVED_THROTTLE_SECONDS,
370
+ column: "sessionReplayLastChunkReceivedAt",
371
+ });
372
+ }
373
+
374
+ @CaptureSpan()
375
+ public async markSessionReplayBudgetExceeded(
376
+ rumApplicationId: ObjectID,
377
+ ): Promise<void> {
378
+ await this.writeReplayHealthColumn({
379
+ rumApplicationId: rumApplicationId,
380
+ cacheNamespace: REPLAY_BUDGET_EXCEEDED_CACHE_NAMESPACE,
381
+ throttleSeconds: REPLAY_BUDGET_EXCEEDED_THROTTLE_SECONDS,
382
+ column: "sessionReplayBudgetExceededAt",
383
+ });
384
+ }
385
+
386
+ private async writeReplayHealthColumn(data: {
387
+ rumApplicationId: ObjectID;
388
+ cacheNamespace: string;
389
+ throttleSeconds: number;
390
+ column:
391
+ | "sessionReplayLastChunkReceivedAt"
392
+ | "sessionReplayBudgetExceededAt";
393
+ }): Promise<void> {
394
+ const cacheKey: string = data.rumApplicationId.toString();
395
+
396
+ try {
397
+ const cached: string | null = await GlobalCache.getString(
398
+ data.cacheNamespace,
399
+ cacheKey,
400
+ );
401
+
402
+ if (cached) {
403
+ return; // written recently, across all pods
404
+ }
405
+ } catch {
406
+ /*
407
+ * Cache unavailable - fail open and write anyway, same stance as
408
+ * updateLastSeen: a stale health column is worse than an occasional
409
+ * extra single-row UPDATE.
410
+ */
411
+ }
412
+
413
+ try {
414
+ await GlobalCache.setString(data.cacheNamespace, cacheKey, "1", {
415
+ expiresInSeconds: data.throttleSeconds,
416
+ });
417
+ } catch {
418
+ // Best-effort throttle write; proceed with the DB update regardless.
419
+ }
420
+
421
+ try {
422
+ await this.updateColumnsByIdWithoutHooks({
423
+ id: data.rumApplicationId,
424
+ data: {
425
+ [data.column]: OneUptimeDate.getCurrentDate(),
426
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
427
+ } as any,
428
+ skipUpdateDateColumn: true,
429
+ });
430
+ } catch (err) {
431
+ logger.warn(
432
+ `RumApplicationService: could not write ${data.column} for application ${cacheKey}`,
433
+ );
434
+ logger.warn(err);
435
+ }
436
+ }
437
+
199
438
  @CaptureSpan()
200
439
  public async attachLabels(data: {
201
440
  rumApplicationId: ObjectID;
@@ -0,0 +1,11 @@
1
+ import ClickhouseDatabase from "../Infrastructure/ClickhouseDatabase";
2
+ import AnalyticsDatabaseService from "./AnalyticsDatabaseService";
3
+ import RumSessionChunk from "../../Models/AnalyticsModels/RumSessionChunk";
4
+
5
+ export class RumSessionChunkService extends AnalyticsDatabaseService<RumSessionChunk> {
6
+ public constructor(clickhouseDatabase?: ClickhouseDatabase | undefined) {
7
+ super({ modelType: RumSessionChunk, database: clickhouseDatabase });
8
+ }
9
+ }
10
+
11
+ export default new RumSessionChunkService();
@@ -0,0 +1,197 @@
1
+ import DatabaseService from "./DatabaseService";
2
+ import Model, {
3
+ RumSessionErasureRequestStatus,
4
+ RumSessionErasureRequestType,
5
+ } from "../../Models/DatabaseModels/RumSessionErasureRequest";
6
+ import BadDataException from "../../Types/Exception/BadDataException";
7
+ import ObjectID from "../../Types/ObjectID";
8
+ import OneUptimeDate from "../../Types/Date";
9
+ import SortOrder from "../../Types/BaseDatabase/SortOrder";
10
+ import CreateBy from "../Types/Database/CreateBy";
11
+ import { OnCreate } from "../Types/Database/Hooks";
12
+ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
13
+
14
+ /*
15
+ * Session replay erasure requests.
16
+ *
17
+ * The service owns the two invariants the model cannot express on its
18
+ * own: a request is always born Pending with zeroed counters no matter
19
+ * what the client sent, and a request must actually be actionable by the
20
+ * worker before it is accepted. A request that is accepted but can never
21
+ * be executed is worse than a rejected one - the requester believes their
22
+ * data is gone.
23
+ */
24
+ export class Service extends DatabaseService<Model> {
25
+ public constructor() {
26
+ super(Model);
27
+ }
28
+
29
+ @CaptureSpan()
30
+ protected override async onBeforeCreate(
31
+ createBy: CreateBy<Model>,
32
+ ): Promise<OnCreate<Model>> {
33
+ const requestType: RumSessionErasureRequestType | undefined =
34
+ createBy.data.requestType;
35
+
36
+ if (!requestType) {
37
+ throw new BadDataException(
38
+ "requestType is required on a session replay erasure request.",
39
+ );
40
+ }
41
+
42
+ /*
43
+ * Validated here rather than only in the UI because the worker cannot
44
+ * do anything sensible with a request whose target is missing, and it
45
+ * would sit Pending forever looking like an erasure in progress.
46
+ */
47
+ if (requestType === RumSessionErasureRequestType.ByDateRange) {
48
+ if (!createBy.data.startDate || !createBy.data.endDate) {
49
+ throw new BadDataException(
50
+ "startDate and endDate are required for a ByDateRange erasure request.",
51
+ );
52
+ }
53
+
54
+ if (
55
+ OneUptimeDate.isAfter(createBy.data.startDate, createBy.data.endDate)
56
+ ) {
57
+ throw new BadDataException(
58
+ "startDate must not be after endDate on a ByDateRange erasure request.",
59
+ );
60
+ }
61
+ } else if (!createBy.data.targetValue) {
62
+ throw new BadDataException(
63
+ `targetValue is required for a ${requestType} erasure request.`,
64
+ );
65
+ }
66
+
67
+ /*
68
+ * A ByRumApplication request stores the application id in targetValue
69
+ * as well as in the relation, because rumApplicationId is nulled out
70
+ * (not cascaded) when the application is deleted - which is precisely
71
+ * when the erasure still needs to run.
72
+ */
73
+ if (
74
+ requestType === RumSessionErasureRequestType.ByRumApplication &&
75
+ createBy.data.rumApplicationId &&
76
+ !createBy.data.targetValue
77
+ ) {
78
+ createBy.data.targetValue = createBy.data.rumApplicationId.toString();
79
+ }
80
+
81
+ /*
82
+ * All five are overwritten unconditionally, never merged with what the
83
+ * client sent. Every one of them is declared `computed` on the model,
84
+ * which is what lets these assignments survive the create-column
85
+ * permission check that runs after this hook.
86
+ */
87
+ createBy.data.status = RumSessionErasureRequestStatus.Pending;
88
+ createBy.data.requestedAt = OneUptimeDate.getCurrentDate();
89
+ createBy.data.sessionsDeleted = 0;
90
+ createBy.data.chunksDeleted = 0;
91
+
92
+ if (createBy.props.userId) {
93
+ createBy.data.requestedByUserId = createBy.props.userId;
94
+ } else {
95
+ /*
96
+ * No authenticated user (an API key, say). Deleting rather than
97
+ * leaving the field alone matters: a client-supplied value would
98
+ * otherwise persist and attribute the erasure to somebody who never
99
+ * asked for it.
100
+ */
101
+ delete createBy.data.requestedByUserId;
102
+ }
103
+
104
+ return { createBy, carryForward: null };
105
+ }
106
+
107
+ /*
108
+ * Outstanding requests for the erasure worker, oldest first so a
109
+ * request cannot be starved by newer ones.
110
+ *
111
+ * sessionsDeleted / chunksDeleted are in the select list because a
112
+ * requeued request has to ACCUMULATE its counters across runs; omitting
113
+ * them is what made the worker stop using this helper and inline its own
114
+ * copy of the query.
115
+ */
116
+ @CaptureSpan()
117
+ public async getPendingRequests(data: {
118
+ limit: number;
119
+ }): Promise<Array<Model>> {
120
+ return await this.findBy({
121
+ query: {
122
+ status: RumSessionErasureRequestStatus.Pending,
123
+ },
124
+ select: {
125
+ _id: true,
126
+ projectId: true,
127
+ rumApplicationId: true,
128
+ requestType: true,
129
+ targetValue: true,
130
+ startDate: true,
131
+ endDate: true,
132
+ requestedAt: true,
133
+ sessionsDeleted: true,
134
+ chunksDeleted: true,
135
+ },
136
+ sort: {
137
+ requestedAt: SortOrder.Ascending,
138
+ },
139
+ skip: 0,
140
+ limit: data.limit,
141
+ props: { isRoot: true },
142
+ });
143
+ }
144
+
145
+ @CaptureSpan()
146
+ public async markInProgress(data: { requestId: ObjectID }): Promise<void> {
147
+ await this.updateOneById({
148
+ id: data.requestId,
149
+ data: {
150
+ status: RumSessionErasureRequestStatus.InProgress,
151
+ },
152
+ props: { isRoot: true },
153
+ });
154
+ }
155
+
156
+ @CaptureSpan()
157
+ public async markCompleted(data: {
158
+ requestId: ObjectID;
159
+ sessionsDeleted: number;
160
+ chunksDeleted: number;
161
+ }): Promise<void> {
162
+ await this.updateOneById({
163
+ id: data.requestId,
164
+ data: {
165
+ status: RumSessionErasureRequestStatus.Completed,
166
+ completedAt: OneUptimeDate.getCurrentDate(),
167
+ sessionsDeleted: data.sessionsDeleted,
168
+ chunksDeleted: data.chunksDeleted,
169
+ },
170
+ props: { isRoot: true },
171
+ });
172
+ }
173
+
174
+ /*
175
+ * completedAt is set on failure too. It means "the attempt finished",
176
+ * not "the data is gone" - status is what says whether it worked, and
177
+ * leaving completedAt null would make a failed request indistinguishable
178
+ * from one still running.
179
+ */
180
+ @CaptureSpan()
181
+ public async markFailed(data: {
182
+ requestId: ObjectID;
183
+ failureReason: string;
184
+ }): Promise<void> {
185
+ await this.updateOneById({
186
+ id: data.requestId,
187
+ data: {
188
+ status: RumSessionErasureRequestStatus.Failed,
189
+ completedAt: OneUptimeDate.getCurrentDate(),
190
+ failureReason: data.failureReason,
191
+ },
192
+ props: { isRoot: true },
193
+ });
194
+ }
195
+ }
196
+
197
+ export default new Service();
@@ -0,0 +1,213 @@
1
+ import DatabaseService from "./DatabaseService";
2
+ import Model from "../../Models/DatabaseModels/RumSessionPin";
3
+ import BadDataException from "../../Types/Exception/BadDataException";
4
+ import ObjectID from "../../Types/ObjectID";
5
+ import OneUptimeDate from "../../Types/Date";
6
+ import CreateBy from "../Types/Database/CreateBy";
7
+ import { OnCreate } from "../Types/Database/Hooks";
8
+ import QueryHelper from "../Types/Database/QueryHelper";
9
+ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
10
+
11
+ /* Postgres unique_violation. https://www.postgresql.org/docs/current/errcodes-appendix.html */
12
+ const UNIQUE_VIOLATION: string = "23505";
13
+
14
+ type IsUniqueViolationFunction = (error: unknown) => boolean;
15
+
16
+ /*
17
+ * TypeORM wraps driver failures in QueryFailedError, which hoists the pg
18
+ * fields onto itself but also keeps the original under `driverError`.
19
+ * Check both rather than assuming which one carries the code.
20
+ */
21
+ const isUniqueViolation: IsUniqueViolationFunction = (
22
+ error: unknown,
23
+ ): boolean => {
24
+ if (!error || typeof error !== "object") {
25
+ return false;
26
+ }
27
+
28
+ if ((error as { code?: string | undefined }).code === UNIQUE_VIOLATION) {
29
+ return true;
30
+ }
31
+
32
+ const driverError: unknown = (error as { driverError?: unknown }).driverError;
33
+
34
+ return Boolean(
35
+ driverError &&
36
+ typeof driverError === "object" &&
37
+ (driverError as { code?: string | undefined }).code === UNIQUE_VIOLATION,
38
+ );
39
+ };
40
+
41
+ /*
42
+ * Pins that keep a session recording past its retention window.
43
+ *
44
+ * The unique index on (projectId, rumApplicationId, sessionId) is the real
45
+ * guard against duplicate copies; this service turns the resulting
46
+ * constraint violation into an idempotent "already pinned" so that
47
+ * clicking Pin twice, or pinning the same recording from two incidents,
48
+ * is not an error the user has to interpret.
49
+ */
50
+ export class Service extends DatabaseService<Model> {
51
+ public constructor() {
52
+ super(Model);
53
+ }
54
+
55
+ @CaptureSpan()
56
+ protected override async onBeforeCreate(
57
+ createBy: CreateBy<Model>,
58
+ ): Promise<OnCreate<Model>> {
59
+ if (!createBy.data.projectId) {
60
+ throw new BadDataException("projectId is required");
61
+ }
62
+
63
+ if (!createBy.data.rumApplicationId) {
64
+ throw new BadDataException("rumApplicationId is required");
65
+ }
66
+
67
+ if (!createBy.data.sessionId) {
68
+ throw new BadDataException("sessionId is required");
69
+ }
70
+
71
+ /*
72
+ * materializedAt is never client-supplied: it asserts that the
73
+ * recording has actually been copied out of the expiring table, and
74
+ * a client that could set it would make an unprotected recording look
75
+ * protected.
76
+ */
77
+ delete createBy.data.materializedAt;
78
+
79
+ /*
80
+ * Assigned or removed, never left as the client sent it. pinnedByUserId
81
+ * is declared `computed` on the model, which is what lets this
82
+ * assignment survive the create-column permission check that runs after
83
+ * this hook; the delete is what stops an API-key caller (no
84
+ * props.userId) attributing the pin to a colleague.
85
+ */
86
+ if (createBy.props.userId) {
87
+ createBy.data.pinnedByUserId = createBy.props.userId;
88
+ } else {
89
+ delete createBy.data.pinnedByUserId;
90
+ }
91
+
92
+ return { createBy, carryForward: null };
93
+ }
94
+
95
+ /*
96
+ * Pinning is idempotent, which is the whole reason this override exists.
97
+ * Clicking Pin twice, or pinning the same recording from two incidents,
98
+ * hits the unique index on (projectId, rumApplicationId, sessionId) and
99
+ * would otherwise surface as a raw 500 carrying a Postgres constraint
100
+ * name: checkForUniqueValues only understands single-column `unique`
101
+ * metadata, not a composite @Index, so nothing else catches it.
102
+ *
103
+ * The pre-check handles the common case and the catch closes the race
104
+ * between two concurrent pins of the same session.
105
+ */
106
+ @CaptureSpan()
107
+ public override async create(createBy: CreateBy<Model>): Promise<Model> {
108
+ const projectId: ObjectID | undefined = createBy.data.projectId;
109
+ const rumApplicationId: ObjectID | undefined =
110
+ createBy.data.rumApplicationId;
111
+ const sessionId: string | undefined = createBy.data.sessionId;
112
+
113
+ if (!projectId || !rumApplicationId || !sessionId) {
114
+ /* Let onBeforeCreate produce the specific validation message. */
115
+ return await super.create(createBy);
116
+ }
117
+
118
+ const existingPin: Model | null = await this.getPinForSession({
119
+ projectId: projectId,
120
+ rumApplicationId: rumApplicationId,
121
+ sessionId: sessionId,
122
+ });
123
+
124
+ if (existingPin) {
125
+ return existingPin;
126
+ }
127
+
128
+ try {
129
+ return await super.create(createBy);
130
+ } catch (err) {
131
+ if (!isUniqueViolation(err)) {
132
+ throw err;
133
+ }
134
+
135
+ const racedPin: Model | null = await this.getPinForSession({
136
+ projectId: projectId,
137
+ rumApplicationId: rumApplicationId,
138
+ sessionId: sessionId,
139
+ });
140
+
141
+ if (racedPin) {
142
+ return racedPin;
143
+ }
144
+
145
+ throw err;
146
+ }
147
+ }
148
+
149
+ /* Null when the recording is not pinned. */
150
+ @CaptureSpan()
151
+ public async getPinForSession(data: {
152
+ projectId: ObjectID;
153
+ rumApplicationId: ObjectID;
154
+ sessionId: string;
155
+ }): Promise<Model | null> {
156
+ return await this.findOneBy({
157
+ query: {
158
+ projectId: data.projectId,
159
+ rumApplicationId: data.rumApplicationId,
160
+ sessionId: data.sessionId,
161
+ },
162
+ select: {
163
+ _id: true,
164
+ reason: true,
165
+ incidentId: true,
166
+ alertId: true,
167
+ expiresAt: true,
168
+ materializedAt: true,
169
+ pinnedByUserId: true,
170
+ },
171
+ props: { isRoot: true },
172
+ });
173
+ }
174
+
175
+ /*
176
+ * Pins whose copy has not happened yet. This is the worker's queue, and
177
+ * it is also the honest answer to "is this recording safe?" - a pin
178
+ * without a materializedAt protects nothing.
179
+ */
180
+ @CaptureSpan()
181
+ public async getUnmaterializedPins(data: {
182
+ limit: number;
183
+ }): Promise<Array<Model>> {
184
+ return await this.findBy({
185
+ query: {
186
+ materializedAt: QueryHelper.isNull(),
187
+ },
188
+ select: {
189
+ _id: true,
190
+ projectId: true,
191
+ rumApplicationId: true,
192
+ sessionId: true,
193
+ expiresAt: true,
194
+ },
195
+ skip: 0,
196
+ limit: data.limit,
197
+ props: { isRoot: true },
198
+ });
199
+ }
200
+
201
+ @CaptureSpan()
202
+ public async markMaterialized(data: { pinId: ObjectID }): Promise<void> {
203
+ await this.updateOneById({
204
+ id: data.pinId,
205
+ data: {
206
+ materializedAt: OneUptimeDate.getCurrentDate(),
207
+ },
208
+ props: { isRoot: true },
209
+ });
210
+ }
211
+ }
212
+
213
+ export default new Service();