@oneuptime/common 13.0.0 → 13.0.3

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 (1443) hide show
  1. package/Models/AnalyticsModels/RumSession.ts +34 -0
  2. package/Models/DatabaseModels/Alert.ts +55 -0
  3. package/Models/DatabaseModels/AlertEpisodeLabelRule.ts +2 -2
  4. package/Models/DatabaseModels/AlertEpisodeOnCallRule.ts +2 -2
  5. package/Models/DatabaseModels/AlertEpisodeOwnerRule.ts +2 -2
  6. package/Models/DatabaseModels/AlertEpisodePrivacyRule.ts +2 -2
  7. package/Models/DatabaseModels/AlertGroupingRule.ts +2 -2
  8. package/Models/DatabaseModels/AlertLabelRule.ts +2 -2
  9. package/Models/DatabaseModels/AlertOnCallRule.ts +2 -2
  10. package/Models/DatabaseModels/AlertOwnerRule.ts +2 -2
  11. package/Models/DatabaseModels/AlertPrivacyRule.ts +2 -2
  12. package/Models/DatabaseModels/AlertReminderRule.ts +6 -4
  13. package/Models/DatabaseModels/AutoRemediationRule.ts +2 -2
  14. package/Models/DatabaseModels/CephClusterLabelRule.ts +2 -2
  15. package/Models/DatabaseModels/CephClusterOwnerRule.ts +2 -2
  16. package/Models/DatabaseModels/CloudResource.ts +45 -7
  17. package/Models/DatabaseModels/CloudResourceLabelRule.ts +2 -2
  18. package/Models/DatabaseModels/CloudResourceOwnerRule.ts +2 -2
  19. package/Models/DatabaseModels/CodeRepository.ts +85 -0
  20. package/Models/DatabaseModels/DashboardLabelRule.ts +2 -2
  21. package/Models/DatabaseModels/DashboardOwnerRule.ts +2 -2
  22. package/Models/DatabaseModels/DatabaseBaseModel/RelationOnlyRuleBaseModel.ts +11 -0
  23. package/Models/DatabaseModels/DatabaseBaseModel/RuleBaseModel.ts +44 -0
  24. package/Models/DatabaseModels/DockerHostLabelRule.ts +2 -2
  25. package/Models/DatabaseModels/DockerHostOwnerRule.ts +2 -2
  26. package/Models/DatabaseModels/DockerSwarmClusterLabelRule.ts +2 -2
  27. package/Models/DatabaseModels/DockerSwarmClusterOwnerRule.ts +2 -2
  28. package/Models/DatabaseModels/GoogleSecOpsConnection.ts +57 -7
  29. package/Models/DatabaseModels/GoogleSecOpsConnectionRun.ts +263 -0
  30. package/Models/DatabaseModels/HostLabelRule.ts +2 -2
  31. package/Models/DatabaseModels/HostOwnerRule.ts +2 -2
  32. package/Models/DatabaseModels/Incident.ts +55 -0
  33. package/Models/DatabaseModels/IncidentEpisodeLabelRule.ts +2 -2
  34. package/Models/DatabaseModels/IncidentEpisodeOnCallRule.ts +2 -2
  35. package/Models/DatabaseModels/IncidentEpisodeOwnerRule.ts +2 -2
  36. package/Models/DatabaseModels/IncidentEpisodePrivacyRule.ts +2 -2
  37. package/Models/DatabaseModels/IncidentGroupingRule.ts +2 -2
  38. package/Models/DatabaseModels/IncidentLabelRule.ts +2 -2
  39. package/Models/DatabaseModels/IncidentOnCallRule.ts +2 -2
  40. package/Models/DatabaseModels/IncidentOwnerRule.ts +2 -2
  41. package/Models/DatabaseModels/IncidentPrivacyRule.ts +2 -2
  42. package/Models/DatabaseModels/IncidentReminderRule.ts +6 -4
  43. package/Models/DatabaseModels/IncidentSlaRule.ts +2 -2
  44. package/Models/DatabaseModels/IncomingCallPolicy.ts +3 -4
  45. package/Models/DatabaseModels/IncomingCallPolicyLabelRule.ts +2 -2
  46. package/Models/DatabaseModels/IncomingCallPolicyOwnerRule.ts +2 -2
  47. package/Models/DatabaseModels/IncomingCallPolicyPhoneNumber.ts +254 -0
  48. package/Models/DatabaseModels/Index.ts +18 -0
  49. package/Models/DatabaseModels/IoTFleetLabelRule.ts +2 -2
  50. package/Models/DatabaseModels/IoTFleetOwnerRule.ts +2 -2
  51. package/Models/DatabaseModels/KubernetesClusterLabelRule.ts +2 -2
  52. package/Models/DatabaseModels/KubernetesClusterOwnerRule.ts +2 -2
  53. package/Models/DatabaseModels/MonitorLabelRule.ts +2 -2
  54. package/Models/DatabaseModels/MonitorOwnerRule.ts +2 -2
  55. package/Models/DatabaseModels/NetworkDeviceAutoImportRule.ts +2 -2
  56. package/Models/DatabaseModels/NetworkDeviceLabelRule.ts +2 -2
  57. package/Models/DatabaseModels/NetworkDeviceOwnerRule.ts +2 -2
  58. package/Models/DatabaseModels/NetworkSiteAssignmentRule.ts +2 -2
  59. package/Models/DatabaseModels/OnCallDutyPolicyLabelRule.ts +2 -2
  60. package/Models/DatabaseModels/OnCallDutyPolicyOwnerRule.ts +2 -2
  61. package/Models/DatabaseModels/OnCallDutyPolicyScheduleLabelRule.ts +2 -2
  62. package/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerRule.ts +2 -2
  63. package/Models/DatabaseModels/PodmanHostLabelRule.ts +2 -2
  64. package/Models/DatabaseModels/PodmanHostOwnerRule.ts +2 -2
  65. package/Models/DatabaseModels/ProxmoxClusterLabelRule.ts +2 -2
  66. package/Models/DatabaseModels/ProxmoxClusterOwnerRule.ts +2 -2
  67. package/Models/DatabaseModels/RumApplicationLabelRule.ts +2 -2
  68. package/Models/DatabaseModels/RumApplicationOwnerRule.ts +2 -2
  69. package/Models/DatabaseModels/RunbookLabelRule.ts +2 -2
  70. package/Models/DatabaseModels/RunbookOwnerRule.ts +2 -2
  71. package/Models/DatabaseModels/RunbookRule.ts +2 -2
  72. package/Models/DatabaseModels/ScheduledMaintenance.ts +55 -0
  73. package/Models/DatabaseModels/ScheduledMaintenanceLabelRule.ts +2 -2
  74. package/Models/DatabaseModels/ScheduledMaintenanceOwnerRule.ts +2 -2
  75. package/Models/DatabaseModels/ScheduledMaintenanceReminderRule.ts +6 -4
  76. package/Models/DatabaseModels/ServerlessFunctionLabelRule.ts +2 -2
  77. package/Models/DatabaseModels/ServerlessFunctionOwnerRule.ts +2 -2
  78. package/Models/DatabaseModels/ServiceLabelRule.ts +2 -2
  79. package/Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule.ts +283 -4
  80. package/Models/DatabaseModels/ServiceOwnerRule.ts +2 -2
  81. package/Models/DatabaseModels/StatusPageLabelRule.ts +2 -2
  82. package/Models/DatabaseModels/StatusPageMonitorRule.ts +2 -2
  83. package/Models/DatabaseModels/StatusPageOwnerRule.ts +2 -2
  84. package/Models/DatabaseModels/User.ts +51 -2
  85. package/Models/DatabaseModels/UserNotificationEmailRollupItem.ts +43 -2
  86. package/Models/DatabaseModels/UserWebAuthn.ts +17 -0
  87. package/Models/DatabaseModels/VMwareResource.ts +1149 -0
  88. package/Models/DatabaseModels/VMwareVCenter.ts +1122 -0
  89. package/Models/DatabaseModels/VMwareVCenterFeed.ts +625 -0
  90. package/Models/DatabaseModels/VMwareVCenterLabelRule.ts +514 -0
  91. package/Models/DatabaseModels/VMwareVCenterOwnerRule.ts +596 -0
  92. package/Models/DatabaseModels/VMwareVCenterOwnerTeam.ts +485 -0
  93. package/Models/DatabaseModels/VMwareVCenterOwnerUser.ts +484 -0
  94. package/Models/DatabaseModels/WorkflowLabelRule.ts +2 -2
  95. package/Models/DatabaseModels/WorkflowOwnerRule.ts +2 -2
  96. package/Models/DatabaseModels/WorkflowVariable.ts +22 -1
  97. package/Server/API/AIAgentDataAPI.ts +79 -4
  98. package/Server/API/AIAgentGitHubAPI.ts +523 -0
  99. package/Server/API/AIChatAPI.ts +20 -1
  100. package/Server/API/BillingAPI.ts +33 -0
  101. package/Server/API/DashboardAPI.ts +10 -0
  102. package/Server/API/GitHubAPI.ts +47 -5
  103. package/Server/API/GoogleSecOpsConnectionAPI.ts +79 -0
  104. package/Server/API/TelemetryAPI.ts +323 -2
  105. package/Server/API/UserWebAuthnAPI.ts +21 -1
  106. package/Server/API/VMwareResourceAPI.ts +143 -0
  107. package/Server/Infrastructure/Postgres/SchemaMigrations/1791800000000-SplitWebAuthnChallengeByPurpose.ts +68 -0
  108. package/Server/Infrastructure/Postgres/SchemaMigrations/1791900000000-AddSeverityAndStateToNotificationEmailRollup.ts +26 -0
  109. package/Server/Infrastructure/Postgres/SchemaMigrations/1792000000000-AddVMwareTables.ts +636 -0
  110. package/Server/Infrastructure/Postgres/SchemaMigrations/1792100000000-AddGitHubCommandSettingsToCodeRepository.ts +47 -0
  111. package/Server/Infrastructure/Postgres/SchemaMigrations/1792200000000-AddUserWebAuthnPurpose.ts +17 -0
  112. package/Server/Infrastructure/Postgres/SchemaMigrations/1792300000000-AddGoogleSecOpsDiagnostics.ts +83 -0
  113. package/Server/Infrastructure/Postgres/SchemaMigrations/1792400000000-AddSloBurnRateRuleIncidents.ts +111 -0
  114. package/Server/Infrastructure/Postgres/SchemaMigrations/1792500000000-AddConfigurableRuleCriteria.ts +644 -0
  115. package/Server/Infrastructure/Postgres/SchemaMigrations/1792600000000-AddIncomingCallPolicyPhoneNumbers.ts +72 -0
  116. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +18 -0
  117. package/Server/Middleware/IdentityRateLimit.ts +101 -0
  118. package/Server/Middleware/MultipartFormData.ts +46 -21
  119. package/Server/Services/AIRunService.ts +13 -0
  120. package/Server/Services/AlertEpisodeLabelRuleEngineService.ts +21 -0
  121. package/Server/Services/AlertEpisodeOnCallRuleEngineService.ts +21 -0
  122. package/Server/Services/AlertEpisodeOwnerRuleEngineService.ts +21 -0
  123. package/Server/Services/AlertEpisodePrivacyRuleEngineService.ts +21 -0
  124. package/Server/Services/AlertGroupingEngineService.ts +27 -0
  125. package/Server/Services/AlertLabelRuleEngineService.ts +27 -0
  126. package/Server/Services/AlertOnCallRuleEngineService.ts +27 -0
  127. package/Server/Services/AlertOwnerRuleEngineService.ts +27 -0
  128. package/Server/Services/AlertPrivacyRuleEngineService.ts +27 -0
  129. package/Server/Services/AlertReminderRuleService.ts +65 -33
  130. package/Server/Services/AutoRemediationRuleEngineService.ts +90 -8
  131. package/Server/Services/BillingPaymentMethodService.ts +99 -28
  132. package/Server/Services/BillingService.ts +287 -20
  133. package/Server/Services/CephClusterLabelRuleEngineService.ts +20 -0
  134. package/Server/Services/CephClusterOwnerRuleEngineService.ts +20 -0
  135. package/Server/Services/CloudResourceInstanceService.ts +70 -0
  136. package/Server/Services/CloudResourceLabelRuleEngineService.ts +20 -0
  137. package/Server/Services/CloudResourceOwnerRuleEngineService.ts +20 -0
  138. package/Server/Services/DashboardLabelRuleEngineService.ts +20 -0
  139. package/Server/Services/DashboardOwnerRuleEngineService.ts +20 -0
  140. package/Server/Services/DatabaseService.ts +409 -6
  141. package/Server/Services/DockerHostLabelRuleEngineService.ts +20 -0
  142. package/Server/Services/DockerHostOwnerRuleEngineService.ts +20 -0
  143. package/Server/Services/DockerSwarmClusterLabelRuleEngineService.ts +23 -0
  144. package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +23 -0
  145. package/Server/Services/ExceptionAggregationService.ts +1 -0
  146. package/Server/Services/GoogleSecOpsConnectionRunService.ts +10 -0
  147. package/Server/Services/GoogleSecOpsConnectionService.ts +12 -0
  148. package/Server/Services/HostLabelRuleEngineService.ts +13 -0
  149. package/Server/Services/HostOwnerRuleEngineService.ts +13 -0
  150. package/Server/Services/IncidentEpisodeLabelRuleEngineService.ts +21 -0
  151. package/Server/Services/IncidentEpisodeOnCallRuleEngineService.ts +21 -0
  152. package/Server/Services/IncidentEpisodeOwnerRuleEngineService.ts +21 -0
  153. package/Server/Services/IncidentEpisodePrivacyRuleEngineService.ts +21 -0
  154. package/Server/Services/IncidentGroupingEngineService.ts +64 -13
  155. package/Server/Services/IncidentLabelRuleEngineService.ts +64 -9
  156. package/Server/Services/IncidentOnCallRuleEngineService.ts +64 -10
  157. package/Server/Services/IncidentOwnerRuleEngineService.ts +64 -10
  158. package/Server/Services/IncidentPrivacyRuleEngineService.ts +64 -10
  159. package/Server/Services/IncidentReminderRuleService.ts +66 -34
  160. package/Server/Services/IncidentSlaRuleService.ts +55 -12
  161. package/Server/Services/IncomingCallPolicyLabelRuleEngineService.ts +20 -0
  162. package/Server/Services/IncomingCallPolicyOwnerRuleEngineService.ts +20 -0
  163. package/Server/Services/IncomingCallPolicyPhoneNumberService.ts +184 -0
  164. package/Server/Services/IncomingCallPolicyService.ts +276 -5
  165. package/Server/Services/Index.ts +18 -0
  166. package/Server/Services/IoTFleetLabelRuleEngineService.ts +20 -0
  167. package/Server/Services/IoTFleetOwnerRuleEngineService.ts +20 -0
  168. package/Server/Services/KubernetesClusterLabelRuleEngineService.ts +23 -0
  169. package/Server/Services/KubernetesClusterOwnerRuleEngineService.ts +23 -0
  170. package/Server/Services/LabelService.ts +50 -7
  171. package/Server/Services/LogAggregationService.ts +1 -0
  172. package/Server/Services/MetricAggregationService.ts +1 -0
  173. package/Server/Services/MobilePasskeyLoginService.ts +216 -0
  174. package/Server/Services/MonitorLabelRuleEngineService.ts +20 -0
  175. package/Server/Services/MonitorOwnerRuleEngineService.ts +20 -0
  176. package/Server/Services/MonitorService.ts +51 -1
  177. package/Server/Services/MonitorTemplateService.ts +91 -29
  178. package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +134 -1
  179. package/Server/Services/NetworkDeviceAutoImportRuleService.ts +269 -3
  180. package/Server/Services/NetworkDeviceLabelRuleEngineService.ts +26 -0
  181. package/Server/Services/NetworkDeviceOwnerRuleEngineService.ts +25 -0
  182. package/Server/Services/NetworkDeviceService.ts +2 -0
  183. package/Server/Services/NetworkSiteAssignmentRuleService.ts +90 -1
  184. package/Server/Services/NetworkSiteService.ts +242 -29
  185. package/Server/Services/NetworkSiteTypeService.ts +177 -77
  186. package/Server/Services/OnCallDutyPolicyLabelRuleEngineService.ts +20 -0
  187. package/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.ts +20 -0
  188. package/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.ts +22 -0
  189. package/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.ts +22 -0
  190. package/Server/Services/OpenTelemetryIngestService.ts +17 -0
  191. package/Server/Services/PayAsYouGoBillingService.ts +446 -0
  192. package/Server/Services/PodmanHostLabelRuleEngineService.ts +20 -0
  193. package/Server/Services/PodmanHostOwnerRuleEngineService.ts +20 -0
  194. package/Server/Services/ProjectCallSMSConfigService.ts +156 -7
  195. package/Server/Services/ProjectService.ts +46 -2
  196. package/Server/Services/ProxmoxClusterLabelRuleEngineService.ts +25 -0
  197. package/Server/Services/ProxmoxClusterOwnerRuleEngineService.ts +25 -0
  198. package/Server/Services/RumApplicationLabelRuleEngineService.ts +22 -0
  199. package/Server/Services/RumApplicationOwnerRuleEngineService.ts +22 -0
  200. package/Server/Services/RunbookLabelRuleEngineService.ts +20 -0
  201. package/Server/Services/RunbookOwnerRuleEngineService.ts +20 -0
  202. package/Server/Services/RunbookRuleEngineService.ts +18 -1
  203. package/Server/Services/ScheduledMaintenanceLabelRuleEngineService.ts +62 -10
  204. package/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.ts +62 -11
  205. package/Server/Services/ScheduledMaintenanceReminderRuleService.ts +48 -18
  206. package/Server/Services/ServerlessFunctionInstanceService.ts +71 -0
  207. package/Server/Services/ServerlessFunctionLabelRuleEngineService.ts +25 -0
  208. package/Server/Services/ServerlessFunctionOwnerRuleEngineService.ts +25 -0
  209. package/Server/Services/ServiceLabelRuleEngineService.ts +20 -0
  210. package/Server/Services/ServiceLevelObjectiveBurnRateRuleService.ts +675 -12
  211. package/Server/Services/ServiceLevelObjectiveService.ts +55 -13
  212. package/Server/Services/ServiceOwnerRuleEngineService.ts +20 -0
  213. package/Server/Services/StatusPageLabelRuleEngineService.ts +20 -0
  214. package/Server/Services/StatusPageMonitorRuleEngineService.ts +31 -2
  215. package/Server/Services/StatusPageMonitorRuleService.ts +34 -1
  216. package/Server/Services/StatusPageOwnerRuleEngineService.ts +20 -0
  217. package/Server/Services/TeamMemberService.ts +96 -36
  218. package/Server/Services/TelemetryIngestionKeyService.ts +80 -10
  219. package/Server/Services/TelemetryUsageBillingService.ts +95 -5
  220. package/Server/Services/TraceAggregationService.ts +5 -4
  221. package/Server/Services/UserService.ts +23 -50
  222. package/Server/Services/UserWebAuthnService.ts +592 -133
  223. package/Server/Services/VMwareResourceService.ts +648 -0
  224. package/Server/Services/VMwareVCenterFeedService.ts +99 -0
  225. package/Server/Services/VMwareVCenterLabelRuleEngineService.ts +265 -0
  226. package/Server/Services/VMwareVCenterLabelRuleService.ts +14 -0
  227. package/Server/Services/VMwareVCenterOwnerRuleEngineService.ts +277 -0
  228. package/Server/Services/VMwareVCenterOwnerRuleService.ts +14 -0
  229. package/Server/Services/VMwareVCenterOwnerTeamService.ts +139 -0
  230. package/Server/Services/VMwareVCenterOwnerUserService.ts +133 -0
  231. package/Server/Services/VMwareVCenterService.ts +629 -0
  232. package/Server/Services/WorkflowLabelRuleEngineService.ts +20 -0
  233. package/Server/Services/WorkflowOwnerRuleEngineService.ts +20 -0
  234. package/Server/Services/WorkflowVariableService.ts +203 -0
  235. package/Server/Static/Brand/README.md +10 -5
  236. package/Server/Static/Brand/favicons/oneuptime-up-v1.svg +8 -0
  237. package/Server/Types/Billing/MeteredPlan/ActiveMonitoringMeteredPlan.ts +17 -0
  238. package/Server/Types/Billing/MeteredPlan/TelemetryMeteredPlan.ts +31 -1
  239. package/Server/Types/Database/QueryHelper.ts +88 -0
  240. package/Server/Utils/AI/Toolbox/SloTools.ts +19 -2
  241. package/Server/Utils/CodeRepository/GitHub/GitHub.ts +7 -0
  242. package/Server/Utils/CodeRepository/GitHub/GitHubAgentTaskTrigger.ts +341 -0
  243. package/Server/Utils/CodeRepository/GitHub/GitHubCommandAuthorizer.ts +274 -0
  244. package/Server/Utils/CodeRepository/GitHub/GitHubCommandParser.ts +375 -0
  245. package/Server/Utils/CodeRepository/GitHub/GitHubConversation.ts +846 -0
  246. package/Server/Utils/CodeRepository/GitHub/GitHubReplyComposer.ts +360 -0
  247. package/Server/Utils/CodeRepository/GitHub/GitHubRunReply.ts +421 -0
  248. package/Server/Utils/CodeRepository/GitHub/GitHubWebhookEvents.ts +140 -0
  249. package/Server/Utils/CodeRepository/GitHub/GitHubWebhookHandler.ts +906 -0
  250. package/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.ts +143 -0
  251. package/Server/Utils/DataSource/EgressGuard.ts +160 -15
  252. package/Server/Utils/Database/TruncateColumnValue.ts +1 -1
  253. package/Server/Utils/EmailRollup/EmailRollupFlushRunner.ts +2 -0
  254. package/Server/Utils/EmailRollup/EmailRollupRenderer.ts +33 -0
  255. package/Server/Utils/EmailRollup/EmailRollupWriter.ts +44 -0
  256. package/Server/Utils/IncomingCallPhoneNumber.ts +29 -16
  257. package/Server/Utils/LogRedaction.ts +2 -1
  258. package/Server/Utils/Monitor/MonitorAlert.ts +1 -1
  259. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +302 -3
  260. package/Server/Utils/Monitor/MonitorMaintenanceSuppression.ts +26 -4
  261. package/Server/Utils/Monitor/MonitorResourceContext.ts +5 -3
  262. package/Server/Utils/Monitor/MonitorStepResourceIdentity.ts +14 -0
  263. package/Server/Utils/Monitor/MonitorTemplateUtil.ts +1 -0
  264. package/Server/Utils/Monitor/SeriesResourceLabels.ts +26 -0
  265. package/Server/Utils/Monitor/SeriesResourceLinker.ts +28 -5
  266. package/Server/Utils/Profiling.ts +13 -1
  267. package/Server/Utils/ResourceFeed/ResourceFeedUtil.ts +3 -3
  268. package/Server/Utils/Rules/MonitorRuleCriteriaCache.ts +38 -0
  269. package/Server/Utils/SecurityEvent/ConnectorErrorMessage.ts +14 -9
  270. package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.ts +116 -84
  271. package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.ts +594 -195
  272. package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.ts +466 -0
  273. package/Server/Utils/SessionReplay/SessionReplayReadService.ts +498 -0
  274. package/Server/Utils/Telemetry/EntityRegistry.ts +5 -0
  275. package/Server/Utils/Telemetry/ResourceHeartbeat.ts +2 -1
  276. package/Server/Utils/Telemetry/TelemetryEntity.ts +181 -1
  277. package/Server/Utils/Telemetry/VMwareSnapshotScan.ts +1352 -0
  278. package/Server/Utils/Telemetry.ts +3 -1
  279. package/Server/Utils/VendorAssets.ts +3 -0
  280. package/Tests/App/Accounts/LoginPasskey.test.tsx +529 -0
  281. package/Tests/App/Accounts/MobilePasskey.test.tsx +620 -0
  282. package/Tests/App/Accounts/PasswordRequirements.test.tsx +254 -0
  283. package/Tests/App/Accounts/RegisterPassword.test.tsx +553 -0
  284. package/Tests/App/Dashboard/AIInsightViewTriage.test.tsx +348 -0
  285. package/Tests/App/Dashboard/ArchiveResourceCard.test.tsx +476 -0
  286. package/Tests/App/Dashboard/AskAiAvailability.test.ts +224 -0
  287. package/Tests/App/Dashboard/AskAiDisabled.test.tsx +432 -0
  288. package/Tests/App/Dashboard/BackupCodes.test.tsx +414 -0
  289. package/Tests/App/Dashboard/BillingPaidUsageFlow.test.tsx +530 -0
  290. package/Tests/App/Dashboard/BillingPaymentMethodForm.test.tsx +195 -0
  291. package/Tests/App/Dashboard/BreadcrumbCoverage.test.tsx +199 -0
  292. package/Tests/App/Dashboard/CloudDocumentationCard.test.tsx +223 -0
  293. package/Tests/App/Dashboard/CloudDocumentationMarkdown.test.ts +215 -0
  294. package/Tests/App/Dashboard/CloudFleetSummary.test.ts +183 -0
  295. package/Tests/App/Dashboard/CloudFleetSummaryComponent.test.tsx +248 -0
  296. package/Tests/App/Dashboard/CloudResourceTelemetryScope.test.ts +215 -0
  297. package/Tests/App/Dashboard/CriteriaFilterDefaults.test.ts +3 -0
  298. package/Tests/App/Dashboard/DashboardHeaderRequests.test.tsx +441 -0
  299. package/Tests/App/Dashboard/DashboardLazyPages.test.tsx +883 -0
  300. package/Tests/App/Dashboard/DashboardPersistentSideMenuLayouts.test.tsx +702 -0
  301. package/Tests/App/Dashboard/DashboardToolbarPopupLayering.test.tsx +566 -0
  302. package/Tests/App/Dashboard/DiscoveryScanLivePage.test.tsx +376 -0
  303. package/Tests/App/Dashboard/DiscoveryScanLiveUpdates.test.tsx +642 -0
  304. package/Tests/App/Dashboard/DiscoveryScanProgress.test.tsx +267 -0
  305. package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +69 -231
  306. package/Tests/App/Dashboard/ExceptionsLandingRedirect.test.tsx +63 -0
  307. package/Tests/App/Dashboard/FeedOrdering.test.ts +150 -0
  308. package/Tests/App/Dashboard/GoogleSecOpsConnectionsErrors.test.tsx +423 -0
  309. package/Tests/App/Dashboard/GoogleSecOpsDiagnostics.test.tsx +724 -0
  310. package/Tests/App/Dashboard/InventoryItemSideMenu.test.tsx +155 -0
  311. package/Tests/App/Dashboard/InvestigationFeedRefresh.test.tsx +11 -0
  312. package/Tests/App/Dashboard/MonitorTemplateSyncFields.test.tsx +539 -0
  313. package/Tests/App/Dashboard/OnCallLayerCardOverrides.test.tsx +24 -7
  314. package/Tests/App/Dashboard/OnCallOverridePresentation.test.ts +496 -0
  315. package/Tests/App/Dashboard/OnCallScheduleOverrideClarity.test.tsx +677 -0
  316. package/Tests/App/Dashboard/OnCallSchedulePreviewOverrides.test.tsx +31 -3
  317. package/Tests/App/Dashboard/PaidUsageConsent.test.tsx +180 -0
  318. package/Tests/App/Dashboard/PasskeySettings.test.tsx +1364 -0
  319. package/Tests/App/Dashboard/PayAsYouGoConsentGate.test.tsx +176 -275
  320. package/Tests/App/Dashboard/PayAsYouGoNotices.test.tsx +380 -233
  321. package/Tests/App/Dashboard/ProductMenuBreadcrumbs.test.tsx +3 -23
  322. package/Tests/App/Dashboard/ResourceArchiveSettings.test.tsx +347 -0
  323. package/Tests/App/Dashboard/ResourceAuditLogsSideMenus.test.tsx +263 -0
  324. package/Tests/App/Dashboard/ResourceFeed.test.tsx +414 -17
  325. package/Tests/App/Dashboard/ResourceFeedPageWiring.test.ts +8 -1
  326. package/Tests/App/Dashboard/RumSessionReplaySideMenu.test.tsx +138 -0
  327. package/Tests/App/Dashboard/SloDashboardTemplateWidgets.test.tsx +940 -0
  328. package/Tests/App/Dashboard/TelemetryIngestionKeyEdit.test.tsx +378 -0
  329. package/Tests/App/Dashboard/TelemetryIngestionKeyForm.test.tsx +735 -0
  330. package/Tests/App/Dashboard/TwoFactorStatus.test.tsx +427 -0
  331. package/Tests/App/Dashboard/VMwareDashboardWidgets.test.ts +573 -0
  332. package/Tests/App/Dashboard/WidgetCatalog.test.ts +2 -0
  333. package/Tests/App/Dashboard/WorkflowVariablesTable.test.tsx +768 -0
  334. package/Tests/App/StatusPage/BulkAddStatusPageMonitorsModal.test.tsx +13 -3
  335. package/Tests/App/StatusPage/StatusPageOverviewLiveAndSearch.test.tsx +532 -40
  336. package/Tests/App/StatusPage/StatusPageResourceSearchBox.test.tsx +19 -2
  337. package/Tests/Fixtures/MobilePasskeyUser.json +8 -0
  338. package/Tests/Models/AnalyticsModels/RumSessionReplayColumns.test.ts +127 -4
  339. package/Tests/Models/DatabaseModels/DomainRoleTierCoverage.test.ts +5 -4
  340. package/Tests/Models/DatabaseModels/IncomingCallPolicyPhoneNumber.test.ts +362 -0
  341. package/Tests/Models/DatabaseModels/ResourceFeedModels.test.ts +25 -6
  342. package/Tests/Models/DatabaseModels/RuleBaseModel.test.ts +69 -0
  343. package/Tests/Models/DatabaseModels/StaticRuleCriteriaInheritance.test.ts +181 -0
  344. package/Tests/Models/DatabaseModels/VMwareModels.test.ts +1134 -0
  345. package/Tests/Models/RunnerVersionLabel.test.ts +4 -2
  346. package/Tests/Server/API/AIChatProvidersAIEnabled.test.ts +259 -0
  347. package/Tests/Server/API/AIChatRouteAuthorization.test.ts +31 -2
  348. package/Tests/Server/API/BillingPayAsYouGoStatus.test.ts +116 -0
  349. package/Tests/Server/API/DashboardPublicResourceListAPI.test.ts +29 -1
  350. package/Tests/Server/API/EnterpriseLicenseReportUserCount.test.ts +13 -2
  351. package/Tests/Server/API/GitHubWebhookSignature.test.ts +368 -0
  352. package/Tests/Server/API/GoogleSecOpsConnectionAPI.test.ts +248 -0
  353. package/Tests/Server/API/SessionReplayAPI.test.ts +1303 -145
  354. package/Tests/Server/API/UserTwoFactorSelfService.test.ts +407 -0
  355. package/Tests/Server/API/UserWebAuthnAuthenticationOptionsRoute.test.ts +330 -0
  356. package/Tests/Server/API/UserWebAuthnPasskeyAPI.test.ts +172 -0
  357. package/Tests/Server/API/VMwareResourceAPI.test.ts +546 -0
  358. package/Tests/Server/Infrastructure/Postgres/AddConfigurableRuleCriteriaMigration.test.ts +611 -0
  359. package/Tests/Server/Infrastructure/Postgres/UserNotificationEmailRollupMetadataMigration.test.ts +85 -0
  360. package/Tests/Server/Infrastructure/Postgres/UserNotificationEmailRollupTableMigration.test.ts +34 -3
  361. package/Tests/Server/Middleware/MultipartFormData.test.ts +61 -3
  362. package/Tests/Server/Middleware/PasskeyRateLimit.test.ts +141 -0
  363. package/Tests/Server/Middleware/TelemetryIngestionDisabled.test.ts +211 -0
  364. package/Tests/Server/Services/AlertIncidentRuleCriteriaEngineServices.test.ts +651 -0
  365. package/Tests/Server/Services/AutoImportRuleRearmRecentScans.test.ts +343 -0
  366. package/Tests/Server/Services/AutoImportRuleWriteRearmsScans.test.ts +381 -0
  367. package/Tests/Server/Services/AutoRemediationRuleEngineService.test.ts +79 -0
  368. package/Tests/Server/Services/BillingPaymentMethodServiceSync.test.ts +175 -0
  369. package/Tests/Server/Services/BillingService.test.ts +26 -11
  370. package/Tests/Server/Services/BillingServiceMeteredPaymentAuthorization.test.ts +245 -0
  371. package/Tests/Server/Services/BillingServicePaymentMethodReads.test.ts +362 -0
  372. package/Tests/Server/Services/CloudResourceInstanceStalePrune.test.ts +188 -0
  373. package/Tests/Server/Services/DatabaseServiceRelationOnlyRuleRollout.test.ts +330 -0
  374. package/Tests/Server/Services/DatabaseServiceRuleCriteriaValidation.test.ts +522 -0
  375. package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +16 -2
  376. package/Tests/Server/Services/GoogleSecOpsDiagnosticsModel.test.ts +153 -0
  377. package/Tests/Server/Services/HookFreeWriteLengthClamp.test.ts +13 -0
  378. package/Tests/Server/Services/IncidentSlaRuleCriteriaCorrelation.test.ts +99 -0
  379. package/Tests/Server/Services/IncomingCallPolicyPhoneNumberService.test.ts +1540 -0
  380. package/Tests/Server/Services/InventoryItemPromotionGate.test.ts +5 -0
  381. package/Tests/Server/Services/InventoryUpsertSchemaParity.test.ts +36 -0
  382. package/Tests/Server/Services/InventoryUpsertTruncationGuard.test.ts +151 -0
  383. package/Tests/Server/Services/MobilePasskeyLoginIntegration.test.ts +231 -0
  384. package/Tests/Server/Services/MobilePasskeyLoginService.test.ts +315 -0
  385. package/Tests/Server/Services/MonitorPayAsYouGoBilling.test.ts +302 -0
  386. package/Tests/Server/Services/MonitorTemplateServiceFieldSync.test.ts +994 -0
  387. package/Tests/Server/Services/NetworkDeviceAutoImportRuleService.test.ts +22 -0
  388. package/Tests/Server/Services/NetworkDeviceRuleEngines.test.ts +179 -2
  389. package/Tests/Server/Services/NetworkSiteAssignmentRuleService.test.ts +170 -0
  390. package/Tests/Server/Services/NetworkSiteService.test.ts +559 -53
  391. package/Tests/Server/Services/NetworkSiteTypeService.test.ts +122 -55
  392. package/Tests/Server/Services/OpenTelemetryResourceRetentionMemo.test.ts +7 -1
  393. package/Tests/Server/Services/PayAsYouGoBillingService.test.ts +857 -0
  394. package/Tests/Server/Services/PayAsYouGoStripeRateLimitBudget.test.ts +379 -0
  395. package/Tests/Server/Services/ProjectServiceExtendTrial.test.ts +99 -1
  396. package/Tests/Server/Services/ProjectServiceSubscriptionSeats.test.ts +134 -0
  397. package/Tests/Server/Services/ReminderRuleCriteria.test.ts +173 -0
  398. package/Tests/Server/Services/ResourceFeedServices.test.ts +3 -2
  399. package/Tests/Server/Services/ResourceRuleCriteriaEngineServices.test.ts +170 -0
  400. package/Tests/Server/Services/ResourceUpdateLastSeenLivenessFallback.test.ts +32 -6
  401. package/Tests/Server/Services/ScheduledMaintenanceRuleCriteriaCorrelation.test.ts +154 -0
  402. package/Tests/Server/Services/SecurityEventLastErrorColumnWidth.test.ts +363 -175
  403. package/Tests/Server/Services/ServerlessFunctionInstanceStalePrune.test.ts +200 -0
  404. package/Tests/Server/Services/ServiceLevelObjectiveBurnRateRuleService.test.ts +2450 -470
  405. package/Tests/Server/Services/ServiceLevelObjectiveService.test.ts +464 -121
  406. package/Tests/Server/Services/StaticRuleCriteriaRuntimeCoverage.test.ts +281 -0
  407. package/Tests/Server/Services/StatusPageMonitorRuleEngineService.test.ts +132 -0
  408. package/Tests/Server/Services/StatusPageMonitorRuleHooks.test.ts +159 -14
  409. package/Tests/Server/Services/TeamMemberAutoAcceptInvitation.test.ts +3 -0
  410. package/Tests/Server/Services/TeamMemberBillingSeatSync.test.ts +762 -0
  411. package/Tests/Server/Services/TeamMemberInviteRegistrationToken.test.ts +3 -0
  412. package/Tests/Server/Services/TelemetryIngestionKeyPolicyResolution.test.ts +72 -0
  413. package/Tests/Server/Services/TelemetryIngestionKeyValidation.test.ts +17 -4
  414. package/Tests/Server/Services/TelemetryPayAsYouGoBilling.test.ts +355 -0
  415. package/Tests/Server/Services/TraceAnalyticsResourceDisplayNames.test.ts +41 -4
  416. package/Tests/Server/Services/UserEmailChangePasswordResetExpiry.test.ts +6 -8
  417. package/Tests/Server/Services/UserNotificationEmailRollupModels.test.ts +37 -0
  418. package/Tests/Server/Services/UserTwoFactorAuthAdmin.test.ts +203 -34
  419. package/Tests/Server/Services/UserWebAuthnPasskeyIntegration.test.ts +401 -0
  420. package/Tests/Server/Services/UserWebAuthnPasskeyService.test.ts +769 -0
  421. package/Tests/Server/Services/UserWebAuthnUserVerification.test.ts +649 -0
  422. package/Tests/Server/Services/VMwareResourceService.test.ts +945 -0
  423. package/Tests/Server/Services/VMwareVCenterService.test.ts +722 -0
  424. package/Tests/Server/Services/WorkflowVariableRenameUniqueness.test.ts +842 -0
  425. package/Tests/Server/TestingUtils/PasskeyHttpIntegration.ts +102 -0
  426. package/Tests/Server/TestingUtils/SecurityKey.ts +464 -0
  427. package/Tests/Server/TestingUtils/WebAuthnServiceMocks.ts +60 -0
  428. package/Tests/Server/Types/Billing/PayAsYouGoMeteredAuthorization.test.ts +573 -0
  429. package/Tests/Server/Types/Database/Permissions/ProjectCustomerSupportAccessColumn.test.ts +261 -0
  430. package/Tests/Server/Types/Database/Permissions/WorkflowVariableColumnPermission.test.ts +95 -0
  431. package/Tests/Server/Types/Database/QueryHelperJsonArrayObjects.test.ts +128 -0
  432. package/Tests/Server/Utils/AI/SloTools.test.ts +190 -1
  433. package/Tests/Server/Utils/AI/Toolbox/AIToolbox.test.ts +461 -0
  434. package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +25 -0
  435. package/Tests/Server/Utils/Billing/BillingFailureNoticeThrottle.test.ts +359 -0
  436. package/Tests/Server/Utils/CodeRepository/GitHub/GitHubWebhookEvents.test.ts +318 -0
  437. package/Tests/Server/Utils/CodeRepository/GitHubAgentTaskTrigger.test.ts +2101 -0
  438. package/Tests/Server/Utils/CodeRepository/GitHubCommandAuthorizer.test.ts +883 -0
  439. package/Tests/Server/Utils/CodeRepository/GitHubCommandParser.test.ts +1474 -0
  440. package/Tests/Server/Utils/CodeRepository/GitHubConversation.test.ts +1526 -0
  441. package/Tests/Server/Utils/CodeRepository/GitHubReplyComposer.test.ts +1389 -0
  442. package/Tests/Server/Utils/CodeRepository/GitHubRunReply.test.ts +1707 -0
  443. package/Tests/Server/Utils/CodeRepository/GitHubWebhookHandler.test.ts +2202 -0
  444. package/Tests/Server/Utils/CustomField/CustomFieldDefinitionMappingHooks.test.ts +220 -0
  445. package/Tests/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.test.ts +345 -0
  446. package/Tests/Server/Utils/Dashboard/SloTemplatePublicDashboard.test.ts +1043 -0
  447. package/Tests/Server/Utils/DataSource/EgressGuard.test.ts +896 -0
  448. package/Tests/Server/Utils/EmailRollup/EmailRollupMetadataIntegration.test.ts +246 -0
  449. package/Tests/Server/Utils/EmailRollup/EmailRollupRenderer.test.ts +299 -1
  450. package/Tests/Server/Utils/EmailRollup/EmailRollupTestHarness.ts +6 -0
  451. package/Tests/Server/Utils/EmailRollup/EmailRollupWriter.test.ts +185 -0
  452. package/Tests/Server/Utils/Execute.test.ts +302 -0
  453. package/Tests/Server/Utils/GracefulShutdown.test.ts +565 -0
  454. package/Tests/Server/Utils/IncomingCallPhoneNumber.test.ts +36 -20
  455. package/Tests/Server/Utils/LogRedaction.test.ts +33 -0
  456. package/Tests/Server/Utils/Monitor/CapturedMetricAttributeUtil.test.ts +2 -1
  457. package/Tests/Server/Utils/Monitor/Criteria/TelemetryStepMetricAlias.test.ts +10 -0
  458. package/Tests/Server/Utils/Monitor/MonitorAlertResourceLinking.test.ts +66 -1
  459. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluator.test.ts +362 -0
  460. package/Tests/Server/Utils/Monitor/MonitorDependencySuppressionCreatorSkip.test.ts +1 -0
  461. package/Tests/Server/Utils/Monitor/MonitorIncidentResourceLinking.test.ts +60 -1
  462. package/Tests/Server/Utils/Monitor/MonitorMaintenanceSuppression.test.ts +60 -0
  463. package/Tests/Server/Utils/Monitor/MonitorRootCauseTargetResolution.test.ts +423 -0
  464. package/Tests/Server/Utils/Monitor/MonitorStepResourceIdentity.test.ts +6 -0
  465. package/Tests/Server/Utils/Monitor/MonitorSummaryPersistence.test.ts +1 -0
  466. package/Tests/Server/Utils/Monitor/PerSeriesSecondEntityAlerting.test.ts +1 -0
  467. package/Tests/Server/Utils/Monitor/SeriesResourceLinker.test.ts +46 -2
  468. package/Tests/Server/Utils/Monitor/SloTemplateMetricEmitterContract.test.ts +750 -0
  469. package/Tests/Server/Utils/ProductAnalytics.test.ts +404 -0
  470. package/Tests/Server/Utils/Profiling.test.ts +366 -0
  471. package/Tests/Server/Utils/Rules/MonitorRuleCriteriaCache.test.ts +99 -0
  472. package/Tests/Server/Utils/SecurityEvent/ConnectorErrorMessage.test.ts +81 -45
  473. package/Tests/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.test.ts +711 -0
  474. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsClickhouseIntegration.test.ts +223 -0
  475. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsClient.test.ts +69 -1
  476. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsDiagnostics.test.ts +838 -0
  477. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsErrorHandling.test.ts +241 -28
  478. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsHttpIntegration.test.ts +651 -0
  479. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPoller.test.ts +11 -0
  480. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerFailureTaxonomy.test.ts +13 -12
  481. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerHardening.test.ts +112 -127
  482. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsRequestContract.test.ts +12 -18
  483. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsResponseParsing.test.ts +43 -0
  484. package/Tests/Server/Utils/SessionReplay/SessionReplayReadServiceQueries.test.ts +558 -0
  485. package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +580 -0
  486. package/Tests/Server/Utils/Telemetry/VMwareSnapshotScan.test.ts +1748 -0
  487. package/Tests/Server/Utils/VendorAssets.test.ts +17 -0
  488. package/Tests/Types/Cloud/CloudPlatform.test.ts +574 -0
  489. package/Tests/Types/Dashboard/DashboardTemplateEditorialInvariants.test.ts +659 -0
  490. package/Tests/Types/Dashboard/DashboardTemplateInvariants.test.ts +97 -0
  491. package/Tests/Types/Dashboard/SloDashboardTemplate.test.ts +1179 -0
  492. package/Tests/Types/Database/AccessControl/OwnedThrough.test.ts +136 -0
  493. package/Tests/Types/Monitor/MetricAndProfileDefaultCriteria.test.ts +2 -0
  494. package/Tests/Types/Monitor/MonitorCriteriaMetricVariables.test.ts +9 -0
  495. package/Tests/Types/Monitor/MonitorStepDefaultTelemetryConfig.test.ts +1 -0
  496. package/Tests/Types/Monitor/MonitorStepInfraMonitorUtils.test.ts +53 -8
  497. package/Tests/Types/Monitor/MonitorStepInfrastructureMonitors.test.ts +97 -0
  498. package/Tests/Types/Monitor/MonitorStepMetricViewConfigUtil.test.ts +1 -0
  499. package/Tests/Types/Monitor/MonitorStepTemplateSyncFields.test.ts +107 -0
  500. package/Tests/Types/Monitor/MonitorTemplateSyncField.test.ts +172 -0
  501. package/Tests/Types/Monitor/MonitorType.test.ts +1 -0
  502. package/Tests/Types/Monitor/MonitorTypeKeywords.test.ts +2 -0
  503. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationAlertDebuggability.test.ts +1 -0
  504. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCatalog.test.ts +9 -0
  505. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCoverage.test.ts +1 -1
  506. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +1 -1
  507. package/Tests/Types/Monitor/SeriesContext/SeriesDebugHints.test.ts +131 -0
  508. package/Tests/Types/Monitor/SeriesContext/SeriesLabelDisplay.test.ts +10 -0
  509. package/Tests/Types/Monitor/VMwareAlertTemplates.test.ts +1608 -0
  510. package/Tests/Types/Monitor/VMwareMetricCatalog.test.ts +488 -0
  511. package/Tests/Types/OnCallDutyPolicy/OverrideProvenance.test.ts +295 -0
  512. package/Tests/Types/Rum/SessionReplayApiContracts.test.ts +180 -1
  513. package/Tests/Types/Runner/RunnerLiveStatus.test.ts +2 -2
  514. package/Tests/Types/SignupPassword.test.ts +205 -0
  515. package/Tests/Types/StatusPage/StatusPageLanguage.test.ts +44 -0
  516. package/Tests/Types/SupportedLanguages.test.ts +119 -0
  517. package/Tests/Types/Telemetry/EntityTypeGroups.test.ts +19 -0
  518. package/Tests/UI/ColorPickerBuild.test.ts +86 -0
  519. package/Tests/UI/Components/AiInvestigationSettingsCard.test.tsx +13 -6
  520. package/Tests/UI/Components/Alert.test.tsx +532 -93
  521. package/Tests/UI/Components/Breadcrumbs.test.tsx +32 -0
  522. package/Tests/UI/Components/Feed.test.tsx +241 -0
  523. package/Tests/UI/Components/Forms/BasicFormStepNavigation.test.tsx +368 -0
  524. package/Tests/UI/Components/Forms/FormSummary.test.tsx +454 -0
  525. package/Tests/UI/Components/Forms/ModelFormJsonColumns.test.tsx +290 -0
  526. package/Tests/UI/Components/Forms/ModelFormPreservesUserInput.test.tsx +937 -0
  527. package/Tests/UI/Components/Forms/ModelFormRuleCriteria.test.tsx +331 -0
  528. package/Tests/UI/Components/Forms/ModelFormWriteOnlyColumnSelect.test.tsx +230 -0
  529. package/Tests/UI/Components/Forms/ValidationFormSteps.test.ts +3 -4
  530. package/Tests/UI/Components/IconOpticalSize.test.tsx +79 -31
  531. package/Tests/UI/Components/LabelRuleImportExport.test.tsx +907 -0
  532. package/Tests/UI/Components/ModelTable/ModelTableCreateAfterEdit.test.tsx +514 -0
  533. package/Tests/UI/Components/ModelTable/ModelTableWrapContent.test.tsx +6 -6
  534. package/Tests/UI/Components/MonitorGraphs/Uptime.test.tsx +301 -0
  535. package/Tests/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.test.ts +2 -1
  536. package/Tests/UI/Components/NavBar.test.tsx +91 -2
  537. package/Tests/UI/Components/PencilButton.test.tsx +211 -0
  538. package/Tests/UI/Components/RuleCriteria/RuleCriteriaBuilder.test.tsx +510 -0
  539. package/Tests/UI/Components/RuleCriteria/RuleCriteriaModelTable.test.tsx +350 -0
  540. package/Tests/UI/Components/TableSortAndMobileColumns.test.tsx +50 -0
  541. package/Tests/UI/Components/Telemetry/TelemetryRetentionConfigForm.test.tsx +329 -0
  542. package/Tests/UI/Components/TooltipLazyContent.test.tsx +373 -0
  543. package/Tests/UI/Components/useFeedItems.test.tsx +107 -0
  544. package/Tests/UI/MicrosoftTeams/MicrosoftTeamsMessagingEndpointGuidance.test.tsx +43 -12
  545. package/Tests/UI/ReactDomBuild.test.ts +104 -0
  546. package/Tests/UI/ReactRouterSingletonBuild.test.ts +11 -1
  547. package/Tests/UI/Rum/ChunkLoader.test.ts +401 -0
  548. package/Tests/UI/Rum/RecordingHealthCard.test.tsx +1 -1
  549. package/Tests/UI/Rum/RecordingHealthStrip.test.tsx +7 -1
  550. package/Tests/UI/Rum/ReplayCorrelationPanel.test.tsx +2 -0
  551. package/Tests/UI/Rum/ReplayEngine.test.ts +1069 -5
  552. package/Tests/UI/Rum/ReplayHeader.test.tsx +579 -2
  553. package/Tests/UI/Rum/ReplayPlayerChrome.test.tsx +23 -5
  554. package/Tests/UI/Rum/ReplayRail.test.tsx +143 -1
  555. package/Tests/UI/Rum/ReplayRenderBudget.test.tsx +338 -0
  556. package/Tests/UI/Rum/ReplaySignals.test.ts +179 -0
  557. package/Tests/UI/Rum/ReplayStage.test.tsx +210 -3
  558. package/Tests/UI/Rum/ReplayTimeline.test.tsx +180 -1
  559. package/Tests/UI/Rum/ReplayUserSessionsMenu.test.tsx +405 -0
  560. package/Tests/UI/Rum/SessionReplayEmptyState.test.tsx +13 -16
  561. package/Tests/UI/Rum/SessionReplayFacets.test.tsx +199 -0
  562. package/Tests/UI/Rum/SessionReplaySearchBar.test.tsx +58 -21
  563. package/Tests/UI/Rum/SessionReplaySetupGuide.test.tsx +2 -0
  564. package/Tests/UI/Rum/SessionReplayTable.test.tsx +717 -4
  565. package/Tests/UI/Rum/SessionReplayUsersPage.test.tsx +435 -0
  566. package/Tests/UI/Rum/SessionReplayUsersTable.test.tsx +577 -0
  567. package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +149 -1
  568. package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +30 -1
  569. package/Tests/UI/Utils/DashboardStackingLayers.test.ts +197 -0
  570. package/Tests/UI/Utils/LabelRuleImportExport.test.ts +738 -0
  571. package/Tests/UI/Utils/ModelAPITenantHeader.test.ts +109 -2
  572. package/Tests/UI/Utils/Navigation.test.ts +30 -0
  573. package/Tests/UI/Utils/UseDashboardGridDnd.test.tsx +7 -2
  574. package/Tests/UI/Utils/UserEmailRegistrationStatus.test.tsx +295 -0
  575. package/Tests/UI/Utils/WebAuthn.test.ts +265 -0
  576. package/Tests/Utils/Dashboard/Components/DashboardComponentDefaults.test.ts +5 -0
  577. package/Tests/Utils/Dashboard/Components/DashboardVMwareListComponents.test.ts +548 -0
  578. package/Tests/Utils/Dashboard/DashboardResourceListSharedArgs.test.ts +17 -3
  579. package/Tests/Utils/Dashboard/SloTemplateVariableScoping.test.ts +880 -0
  580. package/Tests/Utils/LabelRuleImportExport.test.ts +741 -0
  581. package/Tests/Utils/Monitor/MonitorSummarySnapshotUtil.test.ts +1 -0
  582. package/Tests/Utils/Monitor/MonitorTemplateSyncUtil.test.ts +590 -0
  583. package/Tests/Utils/NetworkDiscovery/AutoImportRuleMatcher.test.ts +93 -0
  584. package/Tests/Utils/NetworkSite/CidrMatchUtil.test.ts +138 -0
  585. package/Tests/Utils/NetworkSite/TypeHierarchyUtil.test.ts +174 -0
  586. package/Tests/Utils/RequestFailedDetails.test.ts +325 -0
  587. package/Tests/Utils/Rules/RuleCriteriaMatcher.test.ts +1424 -0
  588. package/Tests/Utils/Rum/SessionIdentity.test.ts +72 -0
  589. package/Tests/Utils/Slo/SloBurnRateRuleState.test.ts +374 -28
  590. package/Tests/Utils/Telemetry/CloudInstanceIdentity.test.ts +255 -0
  591. package/Tests/Utils/Telemetry/EntityRelationship.test.ts +167 -0
  592. package/Tests/Utils/Telemetry/OriginAllowList.test.ts +118 -0
  593. package/Tests/Utils/WebAuthnTestUtil.ts +79 -0
  594. package/Tests/__mocks__/simplewebauthn.js +33 -4
  595. package/Types/AI/CodeFixTaskContext.ts +122 -0
  596. package/Types/AI/CodeFixTaskType.ts +62 -0
  597. package/Types/Accounts/AccountsLanguage.ts +1 -0
  598. package/Types/AdminDashboard/AdminDashboardLanguage.ts +1 -0
  599. package/Types/Calendar/CalendarEvent.ts +16 -0
  600. package/Types/Cloud/CloudPlatform.ts +372 -0
  601. package/Types/CodeRepository/GitHubCommand.ts +69 -0
  602. package/Types/Dashboard/DashboardComponentType.ts +2 -0
  603. package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +1 -0
  604. package/Types/Dashboard/DashboardComponents/DashboardVMwareHostListComponent.ts +23 -0
  605. package/Types/Dashboard/DashboardComponents/DashboardVMwareVirtualMachineListComponent.ts +30 -0
  606. package/Types/Dashboard/DashboardLanguage.ts +1 -0
  607. package/Types/Dashboard/DashboardTemplates.ts +779 -0
  608. package/Types/Docs/DocsLanguage.ts +1 -0
  609. package/Types/Exception/EgressGuardException.ts +65 -0
  610. package/Types/Icon/IconProp.ts +1 -0
  611. package/Types/Monitor/MetricMonitor/MetricMonitorResponse.ts +36 -0
  612. package/Types/Monitor/MonitorCriteriaInstance.ts +1 -0
  613. package/Types/Monitor/MonitorStep.ts +78 -17
  614. package/Types/Monitor/MonitorStepMetricViewConfigUtil.ts +1 -0
  615. package/Types/Monitor/MonitorStepVMwareMonitor.ts +127 -0
  616. package/Types/Monitor/MonitorTemplateSyncField.ts +291 -0
  617. package/Types/Monitor/MonitorType.ts +24 -0
  618. package/Types/Monitor/Recommendation/MonitorRecommendationCatalog.ts +33 -0
  619. package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +2 -0
  620. package/Types/Monitor/Recommendation/MonitorRecommendationUtil.ts +3 -0
  621. package/Types/Monitor/SeriesContext/SeriesDebugHints.ts +158 -0
  622. package/Types/Monitor/SeriesContext/SeriesLabelDisplay.ts +61 -0
  623. package/Types/Monitor/VMwareAlertTemplates.ts +1070 -0
  624. package/Types/Monitor/VMwareMetricCatalog.ts +914 -0
  625. package/Types/OnCallDutyPolicy/ScheduleShiftUtil.ts +29 -0
  626. package/Types/OnCallDutyPolicy/UserOverrideUtil.ts +16 -0
  627. package/Types/Password.ts +84 -5
  628. package/Types/Permission.ts +265 -0
  629. package/Types/Probe/RequestFailedDetails.ts +7 -0
  630. package/Types/Rules/RuleCriteria.ts +51 -0
  631. package/Types/Rules/RuleCriteriaFieldRegistry.ts +437 -0
  632. package/Types/Rum/SessionReplay.ts +75 -0
  633. package/Types/Rum/SessionReplayApi.ts +93 -0
  634. package/Types/Runner/RunnerLiveStatus.ts +1 -1
  635. package/Types/SecurityEvent/GoogleSecOpsDiagnostics.ts +56 -0
  636. package/Types/StatusPage/StatusPageLanguage.ts +1 -0
  637. package/Types/Telemetry/EntityType.ts +21 -0
  638. package/Types/Telemetry/ServiceType.ts +1 -0
  639. package/Typings/Index.d.ts +63 -0
  640. package/UI/Components/Alerts/Alert.tsx +102 -72
  641. package/UI/Components/Breadcrumbs/Breadcrumbs.tsx +2 -2
  642. package/UI/Components/Button/Button.tsx +4 -1
  643. package/UI/Components/Calendar/Calendar.css +78 -0
  644. package/UI/Components/Calendar/Calendar.tsx +28 -3
  645. package/UI/Components/Dropdown/Dropdown.tsx +2 -0
  646. package/UI/Components/Feed/Feed.tsx +15 -0
  647. package/UI/Components/Feed/useFeedItems.ts +227 -0
  648. package/UI/Components/Forms/BasicForm.tsx +86 -23
  649. package/UI/Components/Forms/Fields/ColorPicker.tsx +2 -1
  650. package/UI/Components/Forms/Fields/FormField.tsx +16 -3
  651. package/UI/Components/Forms/ModelForm.tsx +239 -6
  652. package/UI/Components/Forms/Types/Field.ts +8 -1
  653. package/UI/Components/Graphs/DayUptimeGraph.tsx +8 -10
  654. package/UI/Components/Icon/Icon.tsx +19 -35
  655. package/UI/Components/Input/Input.tsx +42 -7
  656. package/UI/Components/LabelRule/ImportLabelRulesModal.tsx +441 -0
  657. package/UI/Components/LabelRule/LabelRuleTable.tsx +142 -0
  658. package/UI/Components/ModelTable/BaseModelTable.tsx +22 -5
  659. package/UI/Components/ModelTable/ModelTable.tsx +33 -6
  660. package/UI/Components/MonitorGraphs/Uptime.tsx +17 -27
  661. package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +3 -1
  662. package/UI/Components/Navbar/NavBar.tsx +1 -0
  663. package/UI/Components/RuleCriteria/RuleCriteriaBuilder.tsx +735 -0
  664. package/UI/Components/RuleCriteria/RuleCriteriaModelForm.tsx +209 -0
  665. package/UI/Components/RuleCriteria/RuleCriteriaModelTable.tsx +205 -0
  666. package/UI/Components/RuleCriteria/RuleCriteriaSummary.tsx +123 -0
  667. package/UI/Components/Table/Table.tsx +3 -0
  668. package/UI/Components/Table/TableBody.tsx +3 -0
  669. package/UI/Components/Table/TableRow.tsx +8 -2
  670. package/UI/Components/Telemetry/TelemetryRetentionConfigForm.tsx +14 -2
  671. package/UI/Components/Tooltip/Tooltip.tsx +52 -6
  672. package/UI/Styles/Theme.css +1 -0
  673. package/UI/Utils/DashboardStackingLayers.ts +85 -0
  674. package/UI/Utils/LabelRuleImportExport.ts +418 -0
  675. package/UI/Utils/ModelAPI/ModelAPI.ts +4 -3
  676. package/UI/Utils/Navigation.ts +1 -2
  677. package/UI/Utils/TelemetryService.ts +4 -3
  678. package/UI/Utils/UseDashboardGridDnd.ts +4 -1
  679. package/UI/Utils/UserEmailRegistrationStatus.ts +33 -5
  680. package/UI/Utils/WebAuthn.ts +220 -0
  681. package/UI/esbuild-config.js +50 -0
  682. package/Utils/API.ts +34 -0
  683. package/Utils/Dashboard/Components/DashboardVMwareHostListComponent.ts +38 -0
  684. package/Utils/Dashboard/Components/DashboardVMwareResourceListShared.ts +70 -0
  685. package/Utils/Dashboard/Components/DashboardVMwareVirtualMachineListComponent.ts +76 -0
  686. package/Utils/Dashboard/Components/Index.ts +16 -0
  687. package/Utils/Faker.ts +93 -6
  688. package/Utils/LabelRuleImportExport.ts +789 -0
  689. package/Utils/Monitor/MonitorTemplateSyncUtil.ts +164 -0
  690. package/Utils/NetworkDiscovery/AutoImportRuleMatcher.ts +108 -8
  691. package/Utils/NetworkDiscovery/DiscoveryScanStatus.ts +8 -0
  692. package/Utils/NetworkSite/CidrMatchUtil.ts +102 -0
  693. package/Utils/NetworkSite/TypeHierarchyUtil.ts +152 -2
  694. package/Utils/Rules/RuleCriteriaMatcher.ts +931 -0
  695. package/Utils/Rum/SessionIdentity.ts +16 -0
  696. package/Utils/Slo/SloBurnRateRuleState.ts +87 -33
  697. package/Utils/Telemetry/CloudInstanceIdentity.ts +94 -0
  698. package/Utils/Telemetry/EntityKey.ts +19 -0
  699. package/Utils/Telemetry/EntityRelationship.ts +19 -0
  700. package/Utils/Telemetry/OriginAllowList.ts +74 -0
  701. package/build/dist/Models/AnalyticsModels/RumSession.js +32 -0
  702. package/build/dist/Models/AnalyticsModels/RumSession.js.map +1 -1
  703. package/build/dist/Models/DatabaseModels/Alert.js +54 -0
  704. package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
  705. package/build/dist/Models/DatabaseModels/AlertEpisodeLabelRule.js +2 -2
  706. package/build/dist/Models/DatabaseModels/AlertEpisodeLabelRule.js.map +1 -1
  707. package/build/dist/Models/DatabaseModels/AlertEpisodeOnCallRule.js +2 -2
  708. package/build/dist/Models/DatabaseModels/AlertEpisodeOnCallRule.js.map +1 -1
  709. package/build/dist/Models/DatabaseModels/AlertEpisodeOwnerRule.js +2 -2
  710. package/build/dist/Models/DatabaseModels/AlertEpisodeOwnerRule.js.map +1 -1
  711. package/build/dist/Models/DatabaseModels/AlertEpisodePrivacyRule.js +2 -2
  712. package/build/dist/Models/DatabaseModels/AlertEpisodePrivacyRule.js.map +1 -1
  713. package/build/dist/Models/DatabaseModels/AlertGroupingRule.js +2 -2
  714. package/build/dist/Models/DatabaseModels/AlertGroupingRule.js.map +1 -1
  715. package/build/dist/Models/DatabaseModels/AlertLabelRule.js +2 -2
  716. package/build/dist/Models/DatabaseModels/AlertLabelRule.js.map +1 -1
  717. package/build/dist/Models/DatabaseModels/AlertOnCallRule.js +2 -2
  718. package/build/dist/Models/DatabaseModels/AlertOnCallRule.js.map +1 -1
  719. package/build/dist/Models/DatabaseModels/AlertOwnerRule.js +2 -2
  720. package/build/dist/Models/DatabaseModels/AlertOwnerRule.js.map +1 -1
  721. package/build/dist/Models/DatabaseModels/AlertPrivacyRule.js +2 -2
  722. package/build/dist/Models/DatabaseModels/AlertPrivacyRule.js.map +1 -1
  723. package/build/dist/Models/DatabaseModels/AlertReminderRule.js +6 -5
  724. package/build/dist/Models/DatabaseModels/AlertReminderRule.js.map +1 -1
  725. package/build/dist/Models/DatabaseModels/AutoRemediationRule.js +2 -2
  726. package/build/dist/Models/DatabaseModels/AutoRemediationRule.js.map +1 -1
  727. package/build/dist/Models/DatabaseModels/CephClusterLabelRule.js +2 -2
  728. package/build/dist/Models/DatabaseModels/CephClusterLabelRule.js.map +1 -1
  729. package/build/dist/Models/DatabaseModels/CephClusterOwnerRule.js +2 -2
  730. package/build/dist/Models/DatabaseModels/CephClusterOwnerRule.js.map +1 -1
  731. package/build/dist/Models/DatabaseModels/CloudResource.js +44 -7
  732. package/build/dist/Models/DatabaseModels/CloudResource.js.map +1 -1
  733. package/build/dist/Models/DatabaseModels/CloudResourceLabelRule.js +2 -2
  734. package/build/dist/Models/DatabaseModels/CloudResourceLabelRule.js.map +1 -1
  735. package/build/dist/Models/DatabaseModels/CloudResourceOwnerRule.js +2 -2
  736. package/build/dist/Models/DatabaseModels/CloudResourceOwnerRule.js.map +1 -1
  737. package/build/dist/Models/DatabaseModels/CodeRepository.js +87 -0
  738. package/build/dist/Models/DatabaseModels/CodeRepository.js.map +1 -1
  739. package/build/dist/Models/DatabaseModels/DashboardLabelRule.js +2 -2
  740. package/build/dist/Models/DatabaseModels/DashboardLabelRule.js.map +1 -1
  741. package/build/dist/Models/DatabaseModels/DashboardOwnerRule.js +2 -2
  742. package/build/dist/Models/DatabaseModels/DashboardOwnerRule.js.map +1 -1
  743. package/build/dist/Models/DatabaseModels/DatabaseBaseModel/RelationOnlyRuleBaseModel.js +12 -0
  744. package/build/dist/Models/DatabaseModels/DatabaseBaseModel/RelationOnlyRuleBaseModel.js.map +1 -0
  745. package/build/dist/Models/DatabaseModels/DatabaseBaseModel/RuleBaseModel.js +50 -0
  746. package/build/dist/Models/DatabaseModels/DatabaseBaseModel/RuleBaseModel.js.map +1 -0
  747. package/build/dist/Models/DatabaseModels/DockerHostLabelRule.js +2 -2
  748. package/build/dist/Models/DatabaseModels/DockerHostLabelRule.js.map +1 -1
  749. package/build/dist/Models/DatabaseModels/DockerHostOwnerRule.js +2 -2
  750. package/build/dist/Models/DatabaseModels/DockerHostOwnerRule.js.map +1 -1
  751. package/build/dist/Models/DatabaseModels/DockerSwarmClusterLabelRule.js +2 -2
  752. package/build/dist/Models/DatabaseModels/DockerSwarmClusterLabelRule.js.map +1 -1
  753. package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerRule.js +2 -2
  754. package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerRule.js.map +1 -1
  755. package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js +60 -7
  756. package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js.map +1 -1
  757. package/build/dist/Models/DatabaseModels/GoogleSecOpsConnectionRun.js +287 -0
  758. package/build/dist/Models/DatabaseModels/GoogleSecOpsConnectionRun.js.map +1 -0
  759. package/build/dist/Models/DatabaseModels/HostLabelRule.js +2 -2
  760. package/build/dist/Models/DatabaseModels/HostLabelRule.js.map +1 -1
  761. package/build/dist/Models/DatabaseModels/HostOwnerRule.js +2 -2
  762. package/build/dist/Models/DatabaseModels/HostOwnerRule.js.map +1 -1
  763. package/build/dist/Models/DatabaseModels/Incident.js +54 -0
  764. package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
  765. package/build/dist/Models/DatabaseModels/IncidentEpisodeLabelRule.js +2 -2
  766. package/build/dist/Models/DatabaseModels/IncidentEpisodeLabelRule.js.map +1 -1
  767. package/build/dist/Models/DatabaseModels/IncidentEpisodeOnCallRule.js +2 -2
  768. package/build/dist/Models/DatabaseModels/IncidentEpisodeOnCallRule.js.map +1 -1
  769. package/build/dist/Models/DatabaseModels/IncidentEpisodeOwnerRule.js +2 -2
  770. package/build/dist/Models/DatabaseModels/IncidentEpisodeOwnerRule.js.map +1 -1
  771. package/build/dist/Models/DatabaseModels/IncidentEpisodePrivacyRule.js +2 -2
  772. package/build/dist/Models/DatabaseModels/IncidentEpisodePrivacyRule.js.map +1 -1
  773. package/build/dist/Models/DatabaseModels/IncidentGroupingRule.js +2 -2
  774. package/build/dist/Models/DatabaseModels/IncidentGroupingRule.js.map +1 -1
  775. package/build/dist/Models/DatabaseModels/IncidentLabelRule.js +2 -2
  776. package/build/dist/Models/DatabaseModels/IncidentLabelRule.js.map +1 -1
  777. package/build/dist/Models/DatabaseModels/IncidentOnCallRule.js +2 -2
  778. package/build/dist/Models/DatabaseModels/IncidentOnCallRule.js.map +1 -1
  779. package/build/dist/Models/DatabaseModels/IncidentOwnerRule.js +2 -2
  780. package/build/dist/Models/DatabaseModels/IncidentOwnerRule.js.map +1 -1
  781. package/build/dist/Models/DatabaseModels/IncidentPrivacyRule.js +2 -2
  782. package/build/dist/Models/DatabaseModels/IncidentPrivacyRule.js.map +1 -1
  783. package/build/dist/Models/DatabaseModels/IncidentReminderRule.js +6 -5
  784. package/build/dist/Models/DatabaseModels/IncidentReminderRule.js.map +1 -1
  785. package/build/dist/Models/DatabaseModels/IncidentSlaRule.js +2 -2
  786. package/build/dist/Models/DatabaseModels/IncidentSlaRule.js.map +1 -1
  787. package/build/dist/Models/DatabaseModels/IncomingCallPolicy.js +3 -4
  788. package/build/dist/Models/DatabaseModels/IncomingCallPolicy.js.map +1 -1
  789. package/build/dist/Models/DatabaseModels/IncomingCallPolicyLabelRule.js +2 -2
  790. package/build/dist/Models/DatabaseModels/IncomingCallPolicyLabelRule.js.map +1 -1
  791. package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerRule.js +2 -2
  792. package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerRule.js.map +1 -1
  793. package/build/dist/Models/DatabaseModels/IncomingCallPolicyPhoneNumber.js +277 -0
  794. package/build/dist/Models/DatabaseModels/IncomingCallPolicyPhoneNumber.js.map +1 -0
  795. package/build/dist/Models/DatabaseModels/Index.js +18 -0
  796. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  797. package/build/dist/Models/DatabaseModels/IoTFleetLabelRule.js +2 -2
  798. package/build/dist/Models/DatabaseModels/IoTFleetLabelRule.js.map +1 -1
  799. package/build/dist/Models/DatabaseModels/IoTFleetOwnerRule.js +2 -2
  800. package/build/dist/Models/DatabaseModels/IoTFleetOwnerRule.js.map +1 -1
  801. package/build/dist/Models/DatabaseModels/KubernetesClusterLabelRule.js +2 -2
  802. package/build/dist/Models/DatabaseModels/KubernetesClusterLabelRule.js.map +1 -1
  803. package/build/dist/Models/DatabaseModels/KubernetesClusterOwnerRule.js +2 -2
  804. package/build/dist/Models/DatabaseModels/KubernetesClusterOwnerRule.js.map +1 -1
  805. package/build/dist/Models/DatabaseModels/MonitorLabelRule.js +2 -2
  806. package/build/dist/Models/DatabaseModels/MonitorLabelRule.js.map +1 -1
  807. package/build/dist/Models/DatabaseModels/MonitorOwnerRule.js +2 -2
  808. package/build/dist/Models/DatabaseModels/MonitorOwnerRule.js.map +1 -1
  809. package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js +2 -2
  810. package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js.map +1 -1
  811. package/build/dist/Models/DatabaseModels/NetworkDeviceLabelRule.js +2 -2
  812. package/build/dist/Models/DatabaseModels/NetworkDeviceLabelRule.js.map +1 -1
  813. package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerRule.js +2 -2
  814. package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerRule.js.map +1 -1
  815. package/build/dist/Models/DatabaseModels/NetworkSiteAssignmentRule.js +2 -2
  816. package/build/dist/Models/DatabaseModels/NetworkSiteAssignmentRule.js.map +1 -1
  817. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyLabelRule.js +2 -2
  818. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyLabelRule.js.map +1 -1
  819. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyOwnerRule.js +2 -2
  820. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyOwnerRule.js.map +1 -1
  821. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleLabelRule.js +2 -2
  822. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleLabelRule.js.map +1 -1
  823. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerRule.js +2 -2
  824. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerRule.js.map +1 -1
  825. package/build/dist/Models/DatabaseModels/PodmanHostLabelRule.js +2 -2
  826. package/build/dist/Models/DatabaseModels/PodmanHostLabelRule.js.map +1 -1
  827. package/build/dist/Models/DatabaseModels/PodmanHostOwnerRule.js +2 -2
  828. package/build/dist/Models/DatabaseModels/PodmanHostOwnerRule.js.map +1 -1
  829. package/build/dist/Models/DatabaseModels/ProxmoxClusterLabelRule.js +2 -2
  830. package/build/dist/Models/DatabaseModels/ProxmoxClusterLabelRule.js.map +1 -1
  831. package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerRule.js +2 -2
  832. package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerRule.js.map +1 -1
  833. package/build/dist/Models/DatabaseModels/RumApplicationLabelRule.js +2 -2
  834. package/build/dist/Models/DatabaseModels/RumApplicationLabelRule.js.map +1 -1
  835. package/build/dist/Models/DatabaseModels/RumApplicationOwnerRule.js +2 -2
  836. package/build/dist/Models/DatabaseModels/RumApplicationOwnerRule.js.map +1 -1
  837. package/build/dist/Models/DatabaseModels/RunbookLabelRule.js +2 -2
  838. package/build/dist/Models/DatabaseModels/RunbookLabelRule.js.map +1 -1
  839. package/build/dist/Models/DatabaseModels/RunbookOwnerRule.js +2 -2
  840. package/build/dist/Models/DatabaseModels/RunbookOwnerRule.js.map +1 -1
  841. package/build/dist/Models/DatabaseModels/RunbookRule.js +2 -2
  842. package/build/dist/Models/DatabaseModels/RunbookRule.js.map +1 -1
  843. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +54 -0
  844. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
  845. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceLabelRule.js +2 -2
  846. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceLabelRule.js.map +1 -1
  847. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerRule.js +2 -2
  848. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerRule.js.map +1 -1
  849. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceReminderRule.js +6 -5
  850. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceReminderRule.js.map +1 -1
  851. package/build/dist/Models/DatabaseModels/ServerlessFunctionLabelRule.js +2 -2
  852. package/build/dist/Models/DatabaseModels/ServerlessFunctionLabelRule.js.map +1 -1
  853. package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerRule.js +2 -2
  854. package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerRule.js.map +1 -1
  855. package/build/dist/Models/DatabaseModels/ServiceLabelRule.js +2 -2
  856. package/build/dist/Models/DatabaseModels/ServiceLabelRule.js.map +1 -1
  857. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule.js +281 -4
  858. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule.js.map +1 -1
  859. package/build/dist/Models/DatabaseModels/ServiceOwnerRule.js +2 -2
  860. package/build/dist/Models/DatabaseModels/ServiceOwnerRule.js.map +1 -1
  861. package/build/dist/Models/DatabaseModels/StatusPageLabelRule.js +2 -2
  862. package/build/dist/Models/DatabaseModels/StatusPageLabelRule.js.map +1 -1
  863. package/build/dist/Models/DatabaseModels/StatusPageMonitorRule.js +2 -2
  864. package/build/dist/Models/DatabaseModels/StatusPageMonitorRule.js.map +1 -1
  865. package/build/dist/Models/DatabaseModels/StatusPageOwnerRule.js +2 -2
  866. package/build/dist/Models/DatabaseModels/StatusPageOwnerRule.js.map +1 -1
  867. package/build/dist/Models/DatabaseModels/User.js +57 -4
  868. package/build/dist/Models/DatabaseModels/User.js.map +1 -1
  869. package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js +47 -2
  870. package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js.map +1 -1
  871. package/build/dist/Models/DatabaseModels/UserWebAuthn.js +18 -0
  872. package/build/dist/Models/DatabaseModels/UserWebAuthn.js.map +1 -1
  873. package/build/dist/Models/DatabaseModels/VMwareResource.js +1201 -0
  874. package/build/dist/Models/DatabaseModels/VMwareResource.js.map +1 -0
  875. package/build/dist/Models/DatabaseModels/VMwareVCenter.js +1149 -0
  876. package/build/dist/Models/DatabaseModels/VMwareVCenter.js.map +1 -0
  877. package/build/dist/Models/DatabaseModels/VMwareVCenterFeed.js +648 -0
  878. package/build/dist/Models/DatabaseModels/VMwareVCenterFeed.js.map +1 -0
  879. package/build/dist/Models/DatabaseModels/VMwareVCenterLabelRule.js +522 -0
  880. package/build/dist/Models/DatabaseModels/VMwareVCenterLabelRule.js.map +1 -0
  881. package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerRule.js +603 -0
  882. package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerRule.js.map +1 -0
  883. package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerTeam.js +503 -0
  884. package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerTeam.js.map +1 -0
  885. package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerUser.js +502 -0
  886. package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerUser.js.map +1 -0
  887. package/build/dist/Models/DatabaseModels/WorkflowLabelRule.js +2 -2
  888. package/build/dist/Models/DatabaseModels/WorkflowLabelRule.js.map +1 -1
  889. package/build/dist/Models/DatabaseModels/WorkflowOwnerRule.js +2 -2
  890. package/build/dist/Models/DatabaseModels/WorkflowOwnerRule.js.map +1 -1
  891. package/build/dist/Models/DatabaseModels/WorkflowVariable.js +22 -1
  892. package/build/dist/Models/DatabaseModels/WorkflowVariable.js.map +1 -1
  893. package/build/dist/Server/API/AIAgentDataAPI.js +63 -3
  894. package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
  895. package/build/dist/Server/API/AIAgentGitHubAPI.js +363 -0
  896. package/build/dist/Server/API/AIAgentGitHubAPI.js.map +1 -0
  897. package/build/dist/Server/API/AIChatAPI.js +19 -1
  898. package/build/dist/Server/API/AIChatAPI.js.map +1 -1
  899. package/build/dist/Server/API/BillingAPI.js +22 -0
  900. package/build/dist/Server/API/BillingAPI.js.map +1 -1
  901. package/build/dist/Server/API/DashboardAPI.js +10 -0
  902. package/build/dist/Server/API/DashboardAPI.js.map +1 -1
  903. package/build/dist/Server/API/GitHubAPI.js +33 -5
  904. package/build/dist/Server/API/GitHubAPI.js.map +1 -1
  905. package/build/dist/Server/API/GoogleSecOpsConnectionAPI.js +56 -0
  906. package/build/dist/Server/API/GoogleSecOpsConnectionAPI.js.map +1 -0
  907. package/build/dist/Server/API/TelemetryAPI.js +211 -4
  908. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  909. package/build/dist/Server/API/UserWebAuthnAPI.js +17 -1
  910. package/build/dist/Server/API/UserWebAuthnAPI.js.map +1 -1
  911. package/build/dist/Server/API/VMwareResourceAPI.js +106 -0
  912. package/build/dist/Server/API/VMwareResourceAPI.js.map +1 -0
  913. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791800000000-SplitWebAuthnChallengeByPurpose.js +41 -0
  914. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791800000000-SplitWebAuthnChallengeByPurpose.js.map +1 -0
  915. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791900000000-AddSeverityAndStateToNotificationEmailRollup.js +14 -0
  916. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791900000000-AddSeverityAndStateToNotificationEmailRollup.js.map +1 -0
  917. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792000000000-AddVMwareTables.js +241 -0
  918. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792000000000-AddVMwareTables.js.map +1 -0
  919. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792100000000-AddGitHubCommandSettingsToCodeRepository.js +36 -0
  920. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792100000000-AddGitHubCommandSettingsToCodeRepository.js.map +1 -0
  921. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792200000000-AddUserWebAuthnPurpose.js +12 -0
  922. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792200000000-AddUserWebAuthnPurpose.js.map +1 -0
  923. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792300000000-AddGoogleSecOpsDiagnostics.js +34 -0
  924. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792300000000-AddGoogleSecOpsDiagnostics.js.map +1 -0
  925. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792400000000-AddSloBurnRateRuleIncidents.js +60 -0
  926. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792400000000-AddSloBurnRateRuleIncidents.js.map +1 -0
  927. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792500000000-AddConfigurableRuleCriteria.js +301 -0
  928. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792500000000-AddConfigurableRuleCriteria.js.map +1 -0
  929. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792600000000-AddIncomingCallPolicyPhoneNumbers.js +30 -0
  930. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792600000000-AddIncomingCallPolicyPhoneNumbers.js.map +1 -0
  931. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +18 -0
  932. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  933. package/build/dist/Server/Middleware/IdentityRateLimit.js +80 -0
  934. package/build/dist/Server/Middleware/IdentityRateLimit.js.map +1 -1
  935. package/build/dist/Server/Middleware/MultipartFormData.js +38 -21
  936. package/build/dist/Server/Middleware/MultipartFormData.js.map +1 -1
  937. package/build/dist/Server/Services/AIRunService.js +14 -1
  938. package/build/dist/Server/Services/AIRunService.js.map +1 -1
  939. package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js +17 -0
  940. package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js.map +1 -1
  941. package/build/dist/Server/Services/AlertEpisodeOnCallRuleEngineService.js +17 -0
  942. package/build/dist/Server/Services/AlertEpisodeOnCallRuleEngineService.js.map +1 -1
  943. package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js +17 -0
  944. package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js.map +1 -1
  945. package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js +17 -0
  946. package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js.map +1 -1
  947. package/build/dist/Server/Services/AlertGroupingEngineService.js +21 -0
  948. package/build/dist/Server/Services/AlertGroupingEngineService.js.map +1 -1
  949. package/build/dist/Server/Services/AlertLabelRuleEngineService.js +21 -0
  950. package/build/dist/Server/Services/AlertLabelRuleEngineService.js.map +1 -1
  951. package/build/dist/Server/Services/AlertOnCallRuleEngineService.js +21 -0
  952. package/build/dist/Server/Services/AlertOnCallRuleEngineService.js.map +1 -1
  953. package/build/dist/Server/Services/AlertOwnerRuleEngineService.js +21 -0
  954. package/build/dist/Server/Services/AlertOwnerRuleEngineService.js.map +1 -1
  955. package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js +21 -0
  956. package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js.map +1 -1
  957. package/build/dist/Server/Services/AlertReminderRuleService.js +44 -26
  958. package/build/dist/Server/Services/AlertReminderRuleService.js.map +1 -1
  959. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js +54 -11
  960. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js.map +1 -1
  961. package/build/dist/Server/Services/BillingPaymentMethodService.js +71 -21
  962. package/build/dist/Server/Services/BillingPaymentMethodService.js.map +1 -1
  963. package/build/dist/Server/Services/BillingService.js +210 -22
  964. package/build/dist/Server/Services/BillingService.js.map +1 -1
  965. package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js +16 -0
  966. package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js.map +1 -1
  967. package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js +16 -0
  968. package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js.map +1 -1
  969. package/build/dist/Server/Services/CloudResourceInstanceService.js +66 -0
  970. package/build/dist/Server/Services/CloudResourceInstanceService.js.map +1 -1
  971. package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js +16 -0
  972. package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js.map +1 -1
  973. package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js +16 -0
  974. package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js.map +1 -1
  975. package/build/dist/Server/Services/DashboardLabelRuleEngineService.js +16 -0
  976. package/build/dist/Server/Services/DashboardLabelRuleEngineService.js.map +1 -1
  977. package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js +16 -0
  978. package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js.map +1 -1
  979. package/build/dist/Server/Services/DatabaseService.js +235 -10
  980. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  981. package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js +16 -0
  982. package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js.map +1 -1
  983. package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js +16 -0
  984. package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js.map +1 -1
  985. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js +16 -0
  986. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js.map +1 -1
  987. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js +16 -0
  988. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js.map +1 -1
  989. package/build/dist/Server/Services/ExceptionAggregationService.js +1 -0
  990. package/build/dist/Server/Services/ExceptionAggregationService.js.map +1 -1
  991. package/build/dist/Server/Services/GoogleSecOpsConnectionRunService.js +9 -0
  992. package/build/dist/Server/Services/GoogleSecOpsConnectionRunService.js.map +1 -0
  993. package/build/dist/Server/Services/GoogleSecOpsConnectionService.js +7 -0
  994. package/build/dist/Server/Services/GoogleSecOpsConnectionService.js.map +1 -1
  995. package/build/dist/Server/Services/HostLabelRuleEngineService.js +12 -0
  996. package/build/dist/Server/Services/HostLabelRuleEngineService.js.map +1 -1
  997. package/build/dist/Server/Services/HostOwnerRuleEngineService.js +12 -0
  998. package/build/dist/Server/Services/HostOwnerRuleEngineService.js.map +1 -1
  999. package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js +17 -0
  1000. package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js.map +1 -1
  1001. package/build/dist/Server/Services/IncidentEpisodeOnCallRuleEngineService.js +17 -0
  1002. package/build/dist/Server/Services/IncidentEpisodeOnCallRuleEngineService.js.map +1 -1
  1003. package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js +17 -0
  1004. package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js.map +1 -1
  1005. package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js +17 -0
  1006. package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js.map +1 -1
  1007. package/build/dist/Server/Services/IncidentGroupingEngineService.js +39 -13
  1008. package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -1
  1009. package/build/dist/Server/Services/IncidentLabelRuleEngineService.js +39 -9
  1010. package/build/dist/Server/Services/IncidentLabelRuleEngineService.js.map +1 -1
  1011. package/build/dist/Server/Services/IncidentOnCallRuleEngineService.js +39 -10
  1012. package/build/dist/Server/Services/IncidentOnCallRuleEngineService.js.map +1 -1
  1013. package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js +39 -10
  1014. package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js.map +1 -1
  1015. package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js +39 -10
  1016. package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js.map +1 -1
  1017. package/build/dist/Server/Services/IncidentReminderRuleService.js +44 -26
  1018. package/build/dist/Server/Services/IncidentReminderRuleService.js.map +1 -1
  1019. package/build/dist/Server/Services/IncidentSlaRuleService.js +33 -12
  1020. package/build/dist/Server/Services/IncidentSlaRuleService.js.map +1 -1
  1021. package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js +16 -0
  1022. package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js.map +1 -1
  1023. package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js +16 -0
  1024. package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js.map +1 -1
  1025. package/build/dist/Server/Services/IncomingCallPolicyPhoneNumberService.js +127 -0
  1026. package/build/dist/Server/Services/IncomingCallPolicyPhoneNumberService.js.map +1 -0
  1027. package/build/dist/Server/Services/IncomingCallPolicyService.js +187 -4
  1028. package/build/dist/Server/Services/IncomingCallPolicyService.js.map +1 -1
  1029. package/build/dist/Server/Services/Index.js +18 -0
  1030. package/build/dist/Server/Services/Index.js.map +1 -1
  1031. package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js +16 -0
  1032. package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js.map +1 -1
  1033. package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js +16 -0
  1034. package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js.map +1 -1
  1035. package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js +16 -0
  1036. package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js.map +1 -1
  1037. package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js +16 -0
  1038. package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js.map +1 -1
  1039. package/build/dist/Server/Services/LabelService.js +39 -7
  1040. package/build/dist/Server/Services/LabelService.js.map +1 -1
  1041. package/build/dist/Server/Services/LogAggregationService.js +1 -0
  1042. package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
  1043. package/build/dist/Server/Services/MetricAggregationService.js +1 -0
  1044. package/build/dist/Server/Services/MetricAggregationService.js.map +1 -1
  1045. package/build/dist/Server/Services/MobilePasskeyLoginService.js +137 -0
  1046. package/build/dist/Server/Services/MobilePasskeyLoginService.js.map +1 -0
  1047. package/build/dist/Server/Services/MonitorLabelRuleEngineService.js +16 -0
  1048. package/build/dist/Server/Services/MonitorLabelRuleEngineService.js.map +1 -1
  1049. package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js +16 -0
  1050. package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js.map +1 -1
  1051. package/build/dist/Server/Services/MonitorService.js +34 -1
  1052. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  1053. package/build/dist/Server/Services/MonitorTemplateService.js +64 -26
  1054. package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
  1055. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +126 -1
  1056. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
  1057. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +199 -3
  1058. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -1
  1059. package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js +17 -0
  1060. package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js.map +1 -1
  1061. package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js +16 -0
  1062. package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js.map +1 -1
  1063. package/build/dist/Server/Services/NetworkDeviceService.js +2 -0
  1064. package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
  1065. package/build/dist/Server/Services/NetworkSiteAssignmentRuleService.js +56 -1
  1066. package/build/dist/Server/Services/NetworkSiteAssignmentRuleService.js.map +1 -1
  1067. package/build/dist/Server/Services/NetworkSiteService.js +187 -22
  1068. package/build/dist/Server/Services/NetworkSiteService.js.map +1 -1
  1069. package/build/dist/Server/Services/NetworkSiteTypeService.js +126 -51
  1070. package/build/dist/Server/Services/NetworkSiteTypeService.js.map +1 -1
  1071. package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js +16 -0
  1072. package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js.map +1 -1
  1073. package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js +16 -0
  1074. package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js.map +1 -1
  1075. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js +16 -0
  1076. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js.map +1 -1
  1077. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js +16 -0
  1078. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js.map +1 -1
  1079. package/build/dist/Server/Services/OpenTelemetryIngestService.js +28 -13
  1080. package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
  1081. package/build/dist/Server/Services/PayAsYouGoBillingService.js +297 -0
  1082. package/build/dist/Server/Services/PayAsYouGoBillingService.js.map +1 -0
  1083. package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js +16 -0
  1084. package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js.map +1 -1
  1085. package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js +16 -0
  1086. package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js.map +1 -1
  1087. package/build/dist/Server/Services/ProjectCallSMSConfigService.js +115 -6
  1088. package/build/dist/Server/Services/ProjectCallSMSConfigService.js.map +1 -1
  1089. package/build/dist/Server/Services/ProjectService.js +38 -2
  1090. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  1091. package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js +16 -0
  1092. package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js.map +1 -1
  1093. package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js +16 -0
  1094. package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js.map +1 -1
  1095. package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js +16 -0
  1096. package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js.map +1 -1
  1097. package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js +16 -0
  1098. package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js.map +1 -1
  1099. package/build/dist/Server/Services/RunbookLabelRuleEngineService.js +16 -0
  1100. package/build/dist/Server/Services/RunbookLabelRuleEngineService.js.map +1 -1
  1101. package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js +16 -0
  1102. package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js.map +1 -1
  1103. package/build/dist/Server/Services/RunbookRuleEngineService.js +12 -0
  1104. package/build/dist/Server/Services/RunbookRuleEngineService.js.map +1 -1
  1105. package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js +38 -9
  1106. package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js.map +1 -1
  1107. package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js +38 -10
  1108. package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js.map +1 -1
  1109. package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js +32 -14
  1110. package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js.map +1 -1
  1111. package/build/dist/Server/Services/ServerlessFunctionInstanceService.js +66 -0
  1112. package/build/dist/Server/Services/ServerlessFunctionInstanceService.js.map +1 -1
  1113. package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js +16 -0
  1114. package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js.map +1 -1
  1115. package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js +16 -0
  1116. package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js.map +1 -1
  1117. package/build/dist/Server/Services/ServiceLabelRuleEngineService.js +16 -0
  1118. package/build/dist/Server/Services/ServiceLabelRuleEngineService.js.map +1 -1
  1119. package/build/dist/Server/Services/ServiceLevelObjectiveBurnRateRuleService.js +554 -12
  1120. package/build/dist/Server/Services/ServiceLevelObjectiveBurnRateRuleService.js.map +1 -1
  1121. package/build/dist/Server/Services/ServiceLevelObjectiveService.js +50 -14
  1122. package/build/dist/Server/Services/ServiceLevelObjectiveService.js.map +1 -1
  1123. package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js +16 -0
  1124. package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js.map +1 -1
  1125. package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js +16 -0
  1126. package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js.map +1 -1
  1127. package/build/dist/Server/Services/StatusPageMonitorRuleEngineService.js +25 -2
  1128. package/build/dist/Server/Services/StatusPageMonitorRuleEngineService.js.map +1 -1
  1129. package/build/dist/Server/Services/StatusPageMonitorRuleService.js +19 -1
  1130. package/build/dist/Server/Services/StatusPageMonitorRuleService.js.map +1 -1
  1131. package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js +16 -0
  1132. package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js.map +1 -1
  1133. package/build/dist/Server/Services/TeamMemberService.js +85 -28
  1134. package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
  1135. package/build/dist/Server/Services/TelemetryIngestionKeyService.js +61 -10
  1136. package/build/dist/Server/Services/TelemetryIngestionKeyService.js.map +1 -1
  1137. package/build/dist/Server/Services/TelemetryUsageBillingService.js +62 -5
  1138. package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
  1139. package/build/dist/Server/Services/TraceAggregationService.js +5 -4
  1140. package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
  1141. package/build/dist/Server/Services/UserService.js +14 -49
  1142. package/build/dist/Server/Services/UserService.js.map +1 -1
  1143. package/build/dist/Server/Services/UserWebAuthnService.js +345 -113
  1144. package/build/dist/Server/Services/UserWebAuthnService.js.map +1 -1
  1145. package/build/dist/Server/Services/VMwareResourceService.js +395 -0
  1146. package/build/dist/Server/Services/VMwareResourceService.js.map +1 -0
  1147. package/build/dist/Server/Services/VMwareVCenterFeedService.js +89 -0
  1148. package/build/dist/Server/Services/VMwareVCenterFeedService.js.map +1 -0
  1149. package/build/dist/Server/Services/VMwareVCenterLabelRuleEngineService.js +213 -0
  1150. package/build/dist/Server/Services/VMwareVCenterLabelRuleEngineService.js.map +1 -0
  1151. package/build/dist/Server/Services/VMwareVCenterLabelRuleService.js +13 -0
  1152. package/build/dist/Server/Services/VMwareVCenterLabelRuleService.js.map +1 -0
  1153. package/build/dist/Server/Services/VMwareVCenterOwnerRuleEngineService.js +230 -0
  1154. package/build/dist/Server/Services/VMwareVCenterOwnerRuleEngineService.js.map +1 -0
  1155. package/build/dist/Server/Services/VMwareVCenterOwnerRuleService.js +13 -0
  1156. package/build/dist/Server/Services/VMwareVCenterOwnerRuleService.js.map +1 -0
  1157. package/build/dist/Server/Services/VMwareVCenterOwnerTeamService.js +129 -0
  1158. package/build/dist/Server/Services/VMwareVCenterOwnerTeamService.js.map +1 -0
  1159. package/build/dist/Server/Services/VMwareVCenterOwnerUserService.js +122 -0
  1160. package/build/dist/Server/Services/VMwareVCenterOwnerUserService.js.map +1 -0
  1161. package/build/dist/Server/Services/VMwareVCenterService.js +533 -0
  1162. package/build/dist/Server/Services/VMwareVCenterService.js.map +1 -0
  1163. package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js +16 -0
  1164. package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js.map +1 -1
  1165. package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js +16 -0
  1166. package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js.map +1 -1
  1167. package/build/dist/Server/Services/WorkflowVariableService.js +169 -0
  1168. package/build/dist/Server/Services/WorkflowVariableService.js.map +1 -1
  1169. package/build/dist/Server/Types/Billing/MeteredPlan/ActiveMonitoringMeteredPlan.js +12 -1
  1170. package/build/dist/Server/Types/Billing/MeteredPlan/ActiveMonitoringMeteredPlan.js.map +1 -1
  1171. package/build/dist/Server/Types/Billing/MeteredPlan/TelemetryMeteredPlan.js +25 -2
  1172. package/build/dist/Server/Types/Billing/MeteredPlan/TelemetryMeteredPlan.js.map +1 -1
  1173. package/build/dist/Server/Types/Database/QueryHelper.js +67 -0
  1174. package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
  1175. package/build/dist/Server/Utils/AI/Toolbox/SloTools.js +21 -4
  1176. package/build/dist/Server/Utils/AI/Toolbox/SloTools.js.map +1 -1
  1177. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js.map +1 -1
  1178. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubAgentTaskTrigger.js +275 -0
  1179. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubAgentTaskTrigger.js.map +1 -0
  1180. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubCommandAuthorizer.js +226 -0
  1181. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubCommandAuthorizer.js.map +1 -0
  1182. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubCommandParser.js +297 -0
  1183. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubCommandParser.js.map +1 -0
  1184. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubConversation.js +582 -0
  1185. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubConversation.js.map +1 -0
  1186. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubReplyComposer.js +275 -0
  1187. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubReplyComposer.js.map +1 -0
  1188. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubRunReply.js +365 -0
  1189. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubRunReply.js.map +1 -0
  1190. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubWebhookEvents.js +103 -0
  1191. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubWebhookEvents.js.map +1 -0
  1192. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubWebhookHandler.js +661 -0
  1193. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubWebhookHandler.js.map +1 -0
  1194. package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js +113 -0
  1195. package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js.map +1 -1
  1196. package/build/dist/Server/Utils/DataSource/EgressGuard.js +99 -15
  1197. package/build/dist/Server/Utils/DataSource/EgressGuard.js.map +1 -1
  1198. package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js +2 -0
  1199. package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js.map +1 -1
  1200. package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js +18 -0
  1201. package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js.map +1 -1
  1202. package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js +31 -2
  1203. package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js.map +1 -1
  1204. package/build/dist/Server/Utils/IncomingCallPhoneNumber.js +9 -3
  1205. package/build/dist/Server/Utils/IncomingCallPhoneNumber.js.map +1 -1
  1206. package/build/dist/Server/Utils/LogRedaction.js +2 -1
  1207. package/build/dist/Server/Utils/LogRedaction.js.map +1 -1
  1208. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +1 -1
  1209. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +219 -4
  1210. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  1211. package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js +12 -4
  1212. package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js.map +1 -1
  1213. package/build/dist/Server/Utils/Monitor/MonitorResourceContext.js +5 -3
  1214. package/build/dist/Server/Utils/Monitor/MonitorResourceContext.js.map +1 -1
  1215. package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js +22 -9
  1216. package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js.map +1 -1
  1217. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +1 -0
  1218. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
  1219. package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +21 -0
  1220. package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js.map +1 -1
  1221. package/build/dist/Server/Utils/Monitor/SeriesResourceLinker.js +21 -6
  1222. package/build/dist/Server/Utils/Monitor/SeriesResourceLinker.js.map +1 -1
  1223. package/build/dist/Server/Utils/Profiling.js +10 -1
  1224. package/build/dist/Server/Utils/Profiling.js.map +1 -1
  1225. package/build/dist/Server/Utils/ResourceFeed/ResourceFeedUtil.js +3 -3
  1226. package/build/dist/Server/Utils/Rules/MonitorRuleCriteriaCache.js +30 -0
  1227. package/build/dist/Server/Utils/Rules/MonitorRuleCriteriaCache.js.map +1 -0
  1228. package/build/dist/Server/Utils/SecurityEvent/ConnectorErrorMessage.js +9 -9
  1229. package/build/dist/Server/Utils/SecurityEvent/ConnectorErrorMessage.js.map +1 -1
  1230. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.js +92 -71
  1231. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.js.map +1 -1
  1232. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js +428 -143
  1233. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js.map +1 -1
  1234. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.js +376 -0
  1235. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.js.map +1 -0
  1236. package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js +344 -0
  1237. package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js.map +1 -1
  1238. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +5 -0
  1239. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
  1240. package/build/dist/Server/Utils/Telemetry/ResourceHeartbeat.js.map +1 -1
  1241. package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +136 -1
  1242. package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
  1243. package/build/dist/Server/Utils/Telemetry/VMwareSnapshotScan.js +933 -0
  1244. package/build/dist/Server/Utils/Telemetry/VMwareSnapshotScan.js.map +1 -0
  1245. package/build/dist/Server/Utils/Telemetry.js +1 -1
  1246. package/build/dist/Server/Utils/Telemetry.js.map +1 -1
  1247. package/build/dist/Server/Utils/VendorAssets.js +2 -0
  1248. package/build/dist/Server/Utils/VendorAssets.js.map +1 -1
  1249. package/build/dist/Types/AI/CodeFixTaskContext.js +40 -0
  1250. package/build/dist/Types/AI/CodeFixTaskContext.js.map +1 -1
  1251. package/build/dist/Types/AI/CodeFixTaskType.js +57 -0
  1252. package/build/dist/Types/AI/CodeFixTaskType.js.map +1 -1
  1253. package/build/dist/Types/Accounts/AccountsLanguage.js +1 -0
  1254. package/build/dist/Types/Accounts/AccountsLanguage.js.map +1 -1
  1255. package/build/dist/Types/AdminDashboard/AdminDashboardLanguage.js +1 -0
  1256. package/build/dist/Types/AdminDashboard/AdminDashboardLanguage.js.map +1 -1
  1257. package/build/dist/Types/Cloud/CloudPlatform.js +277 -0
  1258. package/build/dist/Types/Cloud/CloudPlatform.js.map +1 -0
  1259. package/build/dist/Types/CodeRepository/GitHubCommand.js +52 -0
  1260. package/build/dist/Types/CodeRepository/GitHubCommand.js.map +1 -0
  1261. package/build/dist/Types/Dashboard/DashboardComponentType.js +2 -0
  1262. package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
  1263. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +1 -0
  1264. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
  1265. package/build/dist/Types/Dashboard/DashboardComponents/DashboardVMwareHostListComponent.js +2 -0
  1266. package/build/dist/Types/Dashboard/DashboardComponents/DashboardVMwareHostListComponent.js.map +1 -0
  1267. package/build/dist/Types/Dashboard/DashboardComponents/DashboardVMwareVirtualMachineListComponent.js +2 -0
  1268. package/build/dist/Types/Dashboard/DashboardComponents/DashboardVMwareVirtualMachineListComponent.js.map +1 -0
  1269. package/build/dist/Types/Dashboard/DashboardLanguage.js +1 -0
  1270. package/build/dist/Types/Dashboard/DashboardLanguage.js.map +1 -1
  1271. package/build/dist/Types/Dashboard/DashboardTemplates.js +711 -0
  1272. package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
  1273. package/build/dist/Types/Docs/DocsLanguage.js +1 -0
  1274. package/build/dist/Types/Docs/DocsLanguage.js.map +1 -1
  1275. package/build/dist/Types/Exception/EgressGuardException.js +59 -0
  1276. package/build/dist/Types/Exception/EgressGuardException.js.map +1 -0
  1277. package/build/dist/Types/Icon/IconProp.js +1 -0
  1278. package/build/dist/Types/Icon/IconProp.js.map +1 -1
  1279. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +1 -0
  1280. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
  1281. package/build/dist/Types/Monitor/MonitorStep.js +61 -18
  1282. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  1283. package/build/dist/Types/Monitor/MonitorStepMetricViewConfigUtil.js +1 -0
  1284. package/build/dist/Types/Monitor/MonitorStepMetricViewConfigUtil.js.map +1 -1
  1285. package/build/dist/Types/Monitor/MonitorStepVMwareMonitor.js +71 -0
  1286. package/build/dist/Types/Monitor/MonitorStepVMwareMonitor.js.map +1 -0
  1287. package/build/dist/Types/Monitor/MonitorTemplateSyncField.js +211 -0
  1288. package/build/dist/Types/Monitor/MonitorTemplateSyncField.js.map +1 -0
  1289. package/build/dist/Types/Monitor/MonitorType.js +23 -0
  1290. package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
  1291. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js +28 -0
  1292. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js.map +1 -1
  1293. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js +1 -0
  1294. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js.map +1 -1
  1295. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js +2 -0
  1296. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js.map +1 -1
  1297. package/build/dist/Types/Monitor/SeriesContext/SeriesDebugHints.js +120 -0
  1298. package/build/dist/Types/Monitor/SeriesContext/SeriesDebugHints.js.map +1 -1
  1299. package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js +60 -0
  1300. package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js.map +1 -1
  1301. package/build/dist/Types/Monitor/VMwareAlertTemplates.js +775 -0
  1302. package/build/dist/Types/Monitor/VMwareAlertTemplates.js.map +1 -0
  1303. package/build/dist/Types/Monitor/VMwareMetricCatalog.js +799 -0
  1304. package/build/dist/Types/Monitor/VMwareMetricCatalog.js.map +1 -0
  1305. package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js +25 -0
  1306. package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js.map +1 -1
  1307. package/build/dist/Types/OnCallDutyPolicy/UserOverrideUtil.js +5 -0
  1308. package/build/dist/Types/OnCallDutyPolicy/UserOverrideUtil.js.map +1 -1
  1309. package/build/dist/Types/Password.js +63 -5
  1310. package/build/dist/Types/Password.js.map +1 -1
  1311. package/build/dist/Types/Permission.js +234 -0
  1312. package/build/dist/Types/Permission.js.map +1 -1
  1313. package/build/dist/Types/Probe/RequestFailedDetails.js +7 -0
  1314. package/build/dist/Types/Probe/RequestFailedDetails.js.map +1 -1
  1315. package/build/dist/Types/Rules/RuleCriteria.js +18 -0
  1316. package/build/dist/Types/Rules/RuleCriteria.js.map +1 -0
  1317. package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js +426 -0
  1318. package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js.map +1 -0
  1319. package/build/dist/Types/Rum/SessionReplay.js +64 -0
  1320. package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
  1321. package/build/dist/Types/Rum/SessionReplayApi.js.map +1 -1
  1322. package/build/dist/Types/SecurityEvent/GoogleSecOpsDiagnostics.js +2 -0
  1323. package/build/dist/Types/SecurityEvent/GoogleSecOpsDiagnostics.js.map +1 -0
  1324. package/build/dist/Types/StatusPage/StatusPageLanguage.js +1 -0
  1325. package/build/dist/Types/StatusPage/StatusPageLanguage.js.map +1 -1
  1326. package/build/dist/Types/Telemetry/EntityType.js +21 -0
  1327. package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
  1328. package/build/dist/Types/Telemetry/ServiceType.js +1 -0
  1329. package/build/dist/Types/Telemetry/ServiceType.js.map +1 -1
  1330. package/build/dist/UI/Components/Alerts/Alert.js +63 -41
  1331. package/build/dist/UI/Components/Alerts/Alert.js.map +1 -1
  1332. package/build/dist/UI/Components/Breadcrumbs/Breadcrumbs.js +2 -2
  1333. package/build/dist/UI/Components/Breadcrumbs/Breadcrumbs.js.map +1 -1
  1334. package/build/dist/UI/Components/Button/Button.js +3 -1
  1335. package/build/dist/UI/Components/Button/Button.js.map +1 -1
  1336. package/build/dist/UI/Components/Calendar/Calendar.js +24 -4
  1337. package/build/dist/UI/Components/Calendar/Calendar.js.map +1 -1
  1338. package/build/dist/UI/Components/Dropdown/Dropdown.js +1 -1
  1339. package/build/dist/UI/Components/Dropdown/Dropdown.js.map +1 -1
  1340. package/build/dist/UI/Components/Feed/Feed.js +4 -1
  1341. package/build/dist/UI/Components/Feed/Feed.js.map +1 -1
  1342. package/build/dist/UI/Components/Feed/useFeedItems.js +137 -0
  1343. package/build/dist/UI/Components/Feed/useFeedItems.js.map +1 -0
  1344. package/build/dist/UI/Components/Forms/BasicForm.js +66 -22
  1345. package/build/dist/UI/Components/Forms/BasicForm.js.map +1 -1
  1346. package/build/dist/UI/Components/Forms/Fields/ColorPicker.js +1 -1
  1347. package/build/dist/UI/Components/Forms/Fields/ColorPicker.js.map +1 -1
  1348. package/build/dist/UI/Components/Forms/Fields/FormField.js +10 -3
  1349. package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
  1350. package/build/dist/UI/Components/Forms/ModelForm.js +154 -7
  1351. package/build/dist/UI/Components/Forms/ModelForm.js.map +1 -1
  1352. package/build/dist/UI/Components/Graphs/DayUptimeGraph.js +5 -6
  1353. package/build/dist/UI/Components/Graphs/DayUptimeGraph.js.map +1 -1
  1354. package/build/dist/UI/Components/Icon/Icon.js +17 -35
  1355. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  1356. package/build/dist/UI/Components/Input/Input.js +37 -8
  1357. package/build/dist/UI/Components/Input/Input.js.map +1 -1
  1358. package/build/dist/UI/Components/LabelRule/ImportLabelRulesModal.js +228 -0
  1359. package/build/dist/UI/Components/LabelRule/ImportLabelRulesModal.js.map +1 -0
  1360. package/build/dist/UI/Components/LabelRule/LabelRuleTable.js +102 -0
  1361. package/build/dist/UI/Components/LabelRule/LabelRuleTable.js.map +1 -0
  1362. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +15 -2
  1363. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  1364. package/build/dist/UI/Components/ModelTable/ModelTable.js +25 -6
  1365. package/build/dist/UI/Components/ModelTable/ModelTable.js.map +1 -1
  1366. package/build/dist/UI/Components/MonitorGraphs/Uptime.js +14 -15
  1367. package/build/dist/UI/Components/MonitorGraphs/Uptime.js.map +1 -1
  1368. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +2 -0
  1369. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
  1370. package/build/dist/UI/Components/Navbar/NavBar.js +1 -0
  1371. package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
  1372. package/build/dist/UI/Components/RuleCriteria/RuleCriteriaBuilder.js +383 -0
  1373. package/build/dist/UI/Components/RuleCriteria/RuleCriteriaBuilder.js.map +1 -0
  1374. package/build/dist/UI/Components/RuleCriteria/RuleCriteriaModelForm.js +124 -0
  1375. package/build/dist/UI/Components/RuleCriteria/RuleCriteriaModelForm.js.map +1 -0
  1376. package/build/dist/UI/Components/RuleCriteria/RuleCriteriaModelTable.js +126 -0
  1377. package/build/dist/UI/Components/RuleCriteria/RuleCriteriaModelTable.js.map +1 -0
  1378. package/build/dist/UI/Components/RuleCriteria/RuleCriteriaSummary.js +63 -0
  1379. package/build/dist/UI/Components/RuleCriteria/RuleCriteriaSummary.js.map +1 -0
  1380. package/build/dist/UI/Components/Table/Table.js +1 -1
  1381. package/build/dist/UI/Components/Table/Table.js.map +1 -1
  1382. package/build/dist/UI/Components/Table/TableBody.js +4 -2
  1383. package/build/dist/UI/Components/Table/TableBody.js.map +1 -1
  1384. package/build/dist/UI/Components/Table/TableRow.js +3 -2
  1385. package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
  1386. package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigForm.js +14 -2
  1387. package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigForm.js.map +1 -1
  1388. package/build/dist/UI/Components/Tooltip/Tooltip.js +33 -4
  1389. package/build/dist/UI/Components/Tooltip/Tooltip.js.map +1 -1
  1390. package/build/dist/UI/Utils/DashboardStackingLayers.js +44 -0
  1391. package/build/dist/UI/Utils/DashboardStackingLayers.js.map +1 -0
  1392. package/build/dist/UI/Utils/LabelRuleImportExport.js +271 -0
  1393. package/build/dist/UI/Utils/LabelRuleImportExport.js.map +1 -0
  1394. package/build/dist/UI/Utils/ModelAPI/ModelAPI.js +4 -4
  1395. package/build/dist/UI/Utils/ModelAPI/ModelAPI.js.map +1 -1
  1396. package/build/dist/UI/Utils/Navigation.js.map +1 -1
  1397. package/build/dist/UI/Utils/TelemetryService.js +3 -2
  1398. package/build/dist/UI/Utils/TelemetryService.js.map +1 -1
  1399. package/build/dist/UI/Utils/UseDashboardGridDnd.js +2 -1
  1400. package/build/dist/UI/Utils/UseDashboardGridDnd.js.map +1 -1
  1401. package/build/dist/UI/Utils/UserEmailRegistrationStatus.js +21 -4
  1402. package/build/dist/UI/Utils/UserEmailRegistrationStatus.js.map +1 -1
  1403. package/build/dist/UI/Utils/WebAuthn.js +121 -0
  1404. package/build/dist/UI/Utils/WebAuthn.js.map +1 -0
  1405. package/build/dist/Utils/API.js +29 -0
  1406. package/build/dist/Utils/API.js.map +1 -1
  1407. package/build/dist/Utils/Dashboard/Components/DashboardVMwareHostListComponent.js +33 -0
  1408. package/build/dist/Utils/Dashboard/Components/DashboardVMwareHostListComponent.js.map +1 -0
  1409. package/build/dist/Utils/Dashboard/Components/DashboardVMwareResourceListShared.js +54 -0
  1410. package/build/dist/Utils/Dashboard/Components/DashboardVMwareResourceListShared.js.map +1 -0
  1411. package/build/dist/Utils/Dashboard/Components/DashboardVMwareVirtualMachineListComponent.js +60 -0
  1412. package/build/dist/Utils/Dashboard/Components/DashboardVMwareVirtualMachineListComponent.js.map +1 -0
  1413. package/build/dist/Utils/Dashboard/Components/Index.js +8 -0
  1414. package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
  1415. package/build/dist/Utils/Faker.js +76 -6
  1416. package/build/dist/Utils/Faker.js.map +1 -1
  1417. package/build/dist/Utils/LabelRuleImportExport.js +510 -0
  1418. package/build/dist/Utils/LabelRuleImportExport.js.map +1 -0
  1419. package/build/dist/Utils/Monitor/MonitorTemplateSyncUtil.js +110 -0
  1420. package/build/dist/Utils/Monitor/MonitorTemplateSyncUtil.js.map +1 -0
  1421. package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js +81 -5
  1422. package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js.map +1 -1
  1423. package/build/dist/Utils/NetworkDiscovery/DiscoveryScanStatus.js +6 -0
  1424. package/build/dist/Utils/NetworkDiscovery/DiscoveryScanStatus.js.map +1 -1
  1425. package/build/dist/Utils/NetworkSite/CidrMatchUtil.js +77 -0
  1426. package/build/dist/Utils/NetworkSite/CidrMatchUtil.js.map +1 -1
  1427. package/build/dist/Utils/NetworkSite/TypeHierarchyUtil.js +109 -2
  1428. package/build/dist/Utils/NetworkSite/TypeHierarchyUtil.js.map +1 -1
  1429. package/build/dist/Utils/Rules/RuleCriteriaMatcher.js +526 -0
  1430. package/build/dist/Utils/Rules/RuleCriteriaMatcher.js.map +1 -0
  1431. package/build/dist/Utils/Rum/SessionIdentity.js +13 -1
  1432. package/build/dist/Utils/Rum/SessionIdentity.js.map +1 -1
  1433. package/build/dist/Utils/Slo/SloBurnRateRuleState.js +28 -15
  1434. package/build/dist/Utils/Slo/SloBurnRateRuleState.js.map +1 -1
  1435. package/build/dist/Utils/Telemetry/CloudInstanceIdentity.js +88 -0
  1436. package/build/dist/Utils/Telemetry/CloudInstanceIdentity.js.map +1 -0
  1437. package/build/dist/Utils/Telemetry/EntityKey.js +15 -0
  1438. package/build/dist/Utils/Telemetry/EntityKey.js.map +1 -1
  1439. package/build/dist/Utils/Telemetry/EntityRelationship.js +13 -0
  1440. package/build/dist/Utils/Telemetry/EntityRelationship.js.map +1 -1
  1441. package/build/dist/Utils/Telemetry/OriginAllowList.js +61 -0
  1442. package/build/dist/Utils/Telemetry/OriginAllowList.js.map +1 -1
  1443. package/package.json +20 -20
@@ -0,0 +1,1389 @@
1
+ import GitHubReplyComposer from "../../../../Server/Utils/CodeRepository/GitHub/GitHubReplyComposer";
2
+ import GitHubCommandParser from "../../../../Server/Utils/CodeRepository/GitHub/GitHubCommandParser";
3
+ import GitHubCommandType, {
4
+ GitHubCommand,
5
+ GitHubCommandSurface,
6
+ } from "../../../../Types/CodeRepository/GitHubCommand";
7
+ import { describe, expect, test } from "@jest/globals";
8
+
9
+ /*
10
+ * ---------------------------------------------------------------------------
11
+ * Every comment the OneUptime GitHub App writes into a thread comes from
12
+ * GitHubReplyComposer. These tests exist for ONE invariant above all others:
13
+ *
14
+ * NOTHING the composer emits may be readable, by GitHubCommandParser, as a
15
+ * command addressed to this app.
16
+ *
17
+ * This is a billing-safety rule, not a style rule. The app's own comments come
18
+ * back to it as `issue_comment` webhooks, indistinguishable at the wire from a
19
+ * human's. A status update that contains a bare "@oneuptime" therefore
20
+ * commands the app, which posts another status update, which commands it
21
+ * again — a comment loop that spends the project's AI budget until a human
22
+ * notices the thread.
23
+ *
24
+ * The interesting case is help(), whose entire job is to PRINT the commands.
25
+ * It stays safe only because it prints them inside a fenced code block, and
26
+ * because the parser strips fenced blocks before it looks for mentions. Those
27
+ * two facts live in two different files, so the test that they still agree is
28
+ * an end-to-end one: compose, parse, expect null. It is written below for
29
+ * every public composer method, not just for help().
30
+ *
31
+ * The second recurring hazard is the user's own text. quoteInstruction() is
32
+ * the only thing standing between "@oneuptime review" typed by a user and the
33
+ * same string being re-emitted by the app; blockquoting it is what makes the
34
+ * echo inert. So the quoting tests assert through the parser too, rather than
35
+ * asserting that a ">" appeared.
36
+ *
37
+ * A fence is NOT interchangeable with a blockquote for that job, and the
38
+ * difference was a live hole. failed() and refusal() used to wrap their reason
39
+ * in a ``` fence; a reason carrying a ``` of its own closed that wrapper early
40
+ * and spilled everything after it into the comment as live markdown — a live
41
+ * @mention included. A blockquote has no closing token an input can reach, so
42
+ * every untrusted string now goes through quoteInstruction(). The fence
43
+ * survives only in help(), whose text this file writes and which therefore
44
+ * cannot contain a surprise.
45
+ *
46
+ * Everything here is pure string building — no database, no network, no
47
+ * mocking, and therefore nothing to restore between tests.
48
+ * ---------------------------------------------------------------------------
49
+ */
50
+
51
+ const APP_SLUG: string = "oneuptime";
52
+
53
+ // A copy of the composer's own footer. If it changes, these tests should say so.
54
+ const SIGNATURE: string =
55
+ "<sub>Posted by OneUptime. Reply in this thread to ask for changes.</sub>";
56
+
57
+ const RUN_URL: string = "https://oneuptime.com/dashboard/ai/runs/1e2d3c4b";
58
+ const RUN_URL_BASE: string = "https://oneuptime.com/dashboard/ai/runs";
59
+
60
+ function parseComment(
61
+ body: string,
62
+ surface: GitHubCommandSurface,
63
+ appSlug: string = APP_SLUG,
64
+ ): GitHubCommand | null {
65
+ return GitHubCommandParser.parse({
66
+ body: body,
67
+ appSlug: appSlug,
68
+ surface: surface,
69
+ });
70
+ }
71
+
72
+ /*
73
+ * What GitHub's "Quote reply" button does to a comment: copies it wholesale
74
+ * into a `>` block on a new comment. This is the exact gesture that turns a
75
+ * self-mention into a loop, so every composer output is run through it too.
76
+ */
77
+ function quoteReply(body: string): string {
78
+ return body
79
+ .split("\n")
80
+ .map((line: string): string => {
81
+ return `> ${line}`;
82
+ })
83
+ .join("\n");
84
+ }
85
+
86
+ /*
87
+ * Lines of a comment where a mention would actually count — i.e. outside every
88
+ * fenced block and outside every blockquote. A direct, parser-independent
89
+ * reading of the rule at the top of this file: if the parser itself ever
90
+ * regressed into matching nothing, the parse-based tests would pass vacuously
91
+ * while this one still failed.
92
+ */
93
+ /*
94
+ * Named rather than inlined: eslint's wrap-regex wants a regex literal that
95
+ * receives a method call wrapped in parentheses, and prettier removes them
96
+ * again.
97
+ */
98
+ const FENCE_LINE: RegExp = /^[ \t]*(```|~~~)/;
99
+ const BLOCKQUOTE_LINE: RegExp = /^[ \t]*>/;
100
+
101
+ function linesWhereAMentionWouldCount(body: string): Array<string> {
102
+ const offending: Array<string> = [];
103
+ let insideFence: boolean = false;
104
+
105
+ for (const line of body.split("\n")) {
106
+ if (FENCE_LINE.test(line)) {
107
+ insideFence = !insideFence;
108
+ continue;
109
+ }
110
+
111
+ if (insideFence || BLOCKQUOTE_LINE.test(line)) {
112
+ continue;
113
+ }
114
+
115
+ if (line.includes("@")) {
116
+ offending.push(line);
117
+ }
118
+ }
119
+
120
+ return offending;
121
+ }
122
+
123
+ /*
124
+ * Whether the string contains half of a surrogate pair on its own — the exact
125
+ * damage a UTF-16 substring does to text that ends in an emoji. Array.from
126
+ * iterates by CODE POINT, so a well-formed pair arrives as one two-unit
127
+ * string; anything that arrives one unit long and inside the surrogate range
128
+ * is an orphan, and GitHub renders it as "�".
129
+ */
130
+ function hasLoneSurrogate(value: string): boolean {
131
+ for (const character of Array.from(value)) {
132
+ if (character.length !== 1) {
133
+ continue;
134
+ }
135
+
136
+ const code: number = character.charCodeAt(0);
137
+
138
+ if (code >= 0xd800 && code <= 0xdfff) {
139
+ return true;
140
+ }
141
+ }
142
+
143
+ return false;
144
+ }
145
+
146
+ type ComposedComment = {
147
+ method: string;
148
+ scenario: string;
149
+ body: string;
150
+ };
151
+
152
+ /*
153
+ * One realistic call of every public composer method. Where a field carries
154
+ * UNTRUSTED text (an instruction a user typed, an agent error message that
155
+ * echoes one) the sample deliberately packs a mention into it, because that is
156
+ * the input that would actually start a loop in production.
157
+ */
158
+ function everyComposerOutput(): Array<ComposedComment> {
159
+ return [
160
+ {
161
+ method: "quoteInstruction",
162
+ scenario: "echoing a user comment that mentions the app",
163
+ body: GitHubReplyComposer.quoteInstruction(
164
+ `@${APP_SLUG} review this, then @${APP_SLUG} revise it`,
165
+ ),
166
+ },
167
+ {
168
+ method: "acknowledgement",
169
+ scenario: "with an instruction that mentions the app twice",
170
+ body: GitHubReplyComposer.acknowledgement({
171
+ commandType: GitHubCommandType.Revise,
172
+ runUrl: RUN_URL,
173
+ instruction: `@${APP_SLUG} revise this — and then @${APP_SLUG}[bot] review it`,
174
+ projectName: "Checkout",
175
+ }),
176
+ },
177
+ {
178
+ method: "acknowledgement",
179
+ scenario: "with no instruction and no project name",
180
+ body: GitHubReplyComposer.acknowledgement({
181
+ commandType: GitHubCommandType.Implement,
182
+ runUrl: RUN_URL,
183
+ instruction: "",
184
+ projectName: undefined,
185
+ }),
186
+ },
187
+ {
188
+ method: "completed",
189
+ scenario: "reporting the pull request it opened",
190
+ body: GitHubReplyComposer.completed({
191
+ commandType: GitHubCommandType.Implement,
192
+ runUrl: RUN_URL,
193
+ resultLines: [
194
+ "Opened https://github.com/acme/checkout/pull/42",
195
+ "It closes this issue when merged.",
196
+ ],
197
+ }),
198
+ },
199
+ {
200
+ method: "noChangeProposed",
201
+ scenario: "with a reason from the agent",
202
+ body: GitHubReplyComposer.noChangeProposed({
203
+ reason: "The retry loop already backs off exponentially.",
204
+ runUrl: RUN_URL,
205
+ }),
206
+ },
207
+ {
208
+ method: "failed",
209
+ scenario: "with an error message that quotes the user's mention",
210
+ body: GitHubReplyComposer.failed({
211
+ reason: `Agent aborted while handling "@${APP_SLUG} revise this".`,
212
+ runUrl: RUN_URL,
213
+ }),
214
+ },
215
+ {
216
+ /*
217
+ * The reason carries a code fence AND a mention after it. Under the old
218
+ * fenced wrapper this closed the wrapper and put the mention into the
219
+ * comment live; it is in the sample table so it gets the quote-reply and
220
+ * both-surface passes as well as its own named test below.
221
+ */
222
+ method: "failed",
223
+ scenario:
224
+ "with an error message that closes a code fence and mentions the app",
225
+ body: GitHubReplyComposer.failed({
226
+ reason: `\`\`\`\n@${APP_SLUG} review\n\`\`\`\n@${APP_SLUG} cancel`,
227
+ runUrl: RUN_URL,
228
+ }),
229
+ },
230
+ {
231
+ method: "cancelled",
232
+ scenario: "with nothing running",
233
+ body: GitHubReplyComposer.cancelled({ cancelledCount: 0 }),
234
+ },
235
+ {
236
+ method: "cancelled",
237
+ scenario: "with two runs stopped",
238
+ body: GitHubReplyComposer.cancelled({ cancelledCount: 2 }),
239
+ },
240
+ {
241
+ /*
242
+ * A run's OWN acknowledgement, edited to say it was cancelled. Separate
243
+ * from cancelled(), which answers whoever typed the command.
244
+ */
245
+ method: "cancelledRun",
246
+ scenario: "closing out one run's own acknowledgement",
247
+ body: GitHubReplyComposer.cancelledRun({ runUrl: RUN_URL }),
248
+ },
249
+ {
250
+ method: "help",
251
+ scenario: "printing every command it accepts",
252
+ body: GitHubReplyComposer.help({ appSlug: APP_SLUG }),
253
+ },
254
+ {
255
+ method: "status",
256
+ scenario: "idle",
257
+ body: GitHubReplyComposer.status({
258
+ runDescriptions: [],
259
+ runUrlBase: RUN_URL_BASE,
260
+ }),
261
+ },
262
+ {
263
+ method: "status",
264
+ scenario: "with two runs in flight",
265
+ body: GitHubReplyComposer.status({
266
+ runDescriptions: [
267
+ "Revise on #42, started 2 minutes ago",
268
+ "Review on #43, queued",
269
+ ],
270
+ runUrlBase: RUN_URL_BASE,
271
+ }),
272
+ },
273
+ {
274
+ method: "refusal",
275
+ scenario: "a plain refusal",
276
+ body: GitHubReplyComposer.refusal({
277
+ reason: "This repository is not connected to a OneUptime project.",
278
+ }),
279
+ },
280
+ {
281
+ /*
282
+ * Refusal reasons are usually this file's own sentences, but one of them
283
+ * is a BadDataException message from the enqueue path — untrusted the
284
+ * moment it starts interpolating anything a user typed.
285
+ */
286
+ method: "refusal",
287
+ scenario: "with a reason that echoes a mention",
288
+ body: GitHubReplyComposer.refusal({
289
+ reason: `I cannot run "@${APP_SLUG} revise this" on a fork.`,
290
+ }),
291
+ },
292
+ {
293
+ method: "unsupportedOnSurface",
294
+ scenario: "a review asked for on an issue",
295
+ body: GitHubReplyComposer.unsupportedOnSurface({
296
+ commandType: GitHubCommandType.Review,
297
+ appSlug: APP_SLUG,
298
+ }),
299
+ },
300
+ {
301
+ method: "unsupportedOnSurface",
302
+ scenario: "an implement asked for on a pull request",
303
+ body: GitHubReplyComposer.unsupportedOnSurface({
304
+ commandType: GitHubCommandType.Implement,
305
+ appSlug: APP_SLUG,
306
+ }),
307
+ },
308
+ ];
309
+ }
310
+
311
+ // Own statics that are not comment-emitting entry points.
312
+ const NOT_A_COMPOSER_METHOD: Array<string> = [
313
+ "length",
314
+ "name",
315
+ "prototype",
316
+ // Private in TypeScript only; still an own property at runtime.
317
+ "describeCommand",
318
+ ];
319
+
320
+ function publicComposerMethodNames(): Array<string> {
321
+ const composer: Record<string, unknown> =
322
+ GitHubReplyComposer as unknown as Record<string, unknown>;
323
+
324
+ return Object.getOwnPropertyNames(GitHubReplyComposer)
325
+ .filter((key: string): boolean => {
326
+ return (
327
+ !NOT_A_COMPOSER_METHOD.includes(key) &&
328
+ typeof composer[key] === "function"
329
+ );
330
+ })
331
+ .sort();
332
+ }
333
+
334
+ describe("GitHubReplyComposer never writes a comment that commands the app", () => {
335
+ /*
336
+ * The control. Every assertion below is "the parser finds nothing"; if the
337
+ * parser stopped finding anything at all, all of them would pass while the
338
+ * loop was wide open. This one fails first in that world.
339
+ */
340
+ test("the parser used by these tests really does recognise a command", () => {
341
+ expect(
342
+ parseComment(`@${APP_SLUG} review`, GitHubCommandSurface.PullRequest),
343
+ ).not.toBeNull();
344
+ });
345
+
346
+ /*
347
+ * If a new composer method is added and not listed in everyComposerOutput(),
348
+ * the loop-safety guarantee silently stops covering it. This is the tripwire.
349
+ */
350
+ test("the sample set covers every method the composer exposes", () => {
351
+ const covered: Array<string> = Array.from(
352
+ new Set(
353
+ everyComposerOutput().map((sample: ComposedComment): string => {
354
+ return sample.method;
355
+ }),
356
+ ),
357
+ ).sort();
358
+
359
+ expect(covered).toEqual(publicComposerMethodNames());
360
+ });
361
+
362
+ for (const sample of everyComposerOutput()) {
363
+ test(`${sample.method} (${sample.scenario}) is not a command on either surface, even quote-replied`, () => {
364
+ expect(
365
+ parseComment(sample.body, GitHubCommandSurface.PullRequest),
366
+ ).toBeNull();
367
+ expect(parseComment(sample.body, GitHubCommandSurface.Issue)).toBeNull();
368
+ expect(
369
+ parseComment(quoteReply(sample.body), GitHubCommandSurface.PullRequest),
370
+ ).toBeNull();
371
+ expect(
372
+ parseComment(quoteReply(sample.body), GitHubCommandSurface.Issue),
373
+ ).toBeNull();
374
+ });
375
+
376
+ test(`${sample.method} (${sample.scenario}) puts no "@" anywhere a mention would count`, () => {
377
+ expect(linesWhereAMentionWouldCount(sample.body)).toEqual([]);
378
+ });
379
+ }
380
+ });
381
+
382
+ describe("quoteInstruction", () => {
383
+ /*
384
+ * The blockquote is the safety mechanism, so it has to reach EVERY line —
385
+ * including blank ones. A bare blank line ends a markdown blockquote, and it
386
+ * would end the parser's `>` skipping too, letting a mention on the next
387
+ * line count.
388
+ */
389
+ test("prefixes every line with a blockquote marker, blank lines included", () => {
390
+ const quoted: string = GitHubReplyComposer.quoteInstruction(
391
+ "first line\n\nthird line",
392
+ );
393
+
394
+ expect(quoted).toBe("> first line\n> \n> third line");
395
+
396
+ for (const line of quoted.split("\n")) {
397
+ expect(line.startsWith(">")).toBe(true);
398
+ }
399
+ });
400
+
401
+ test("quotes a single-line instruction without adding anything else", () => {
402
+ expect(
403
+ GitHubReplyComposer.quoteInstruction(" back off exponentially "),
404
+ ).toBe("> back off exponentially");
405
+ });
406
+
407
+ test("keeps quoting when GitHub sends CRLF line endings", () => {
408
+ const quoted: string = GitHubReplyComposer.quoteInstruction(
409
+ `look at the retry loop\r\n@${APP_SLUG} review`,
410
+ );
411
+
412
+ for (const line of quoted.split("\n")) {
413
+ expect(line.startsWith("> ")).toBe(true);
414
+ }
415
+
416
+ expect(parseComment(quoted, GitHubCommandSurface.PullRequest)).toBeNull();
417
+ });
418
+
419
+ /*
420
+ * "" is a sentinel, not just a tidy result: acknowledgement() tests this
421
+ * return value to decide whether to print a "You asked" section at all. A
422
+ * lone "> " would both render as an empty quote and defeat that check.
423
+ */
424
+ test("returns an empty string for an instruction that is empty or only whitespace", () => {
425
+ expect(GitHubReplyComposer.quoteInstruction("")).toBe("");
426
+ expect(GitHubReplyComposer.quoteInstruction(" ")).toBe("");
427
+ expect(GitHubReplyComposer.quoteInstruction("\n\n\t \n")).toBe("");
428
+ expect(GitHubReplyComposer.quoteInstruction("\r\n")).toBe("");
429
+ });
430
+
431
+ test("clips an over-long instruction and marks the cut with an ellipsis", () => {
432
+ const long: string = "a".repeat(600);
433
+ const quoted: string = GitHubReplyComposer.quoteInstruction(long);
434
+
435
+ expect(quoted.startsWith("> ")).toBe(true);
436
+ expect(quoted.endsWith("…")).toBe(true);
437
+ expect(quoted).not.toContain("\n");
438
+ // "> " plus 499 kept characters plus the one-character ellipsis.
439
+ expect(quoted).toBe(`> ${"a".repeat(499)}…`);
440
+ });
441
+
442
+ test("leaves an instruction of exactly the cap length untouched", () => {
443
+ const exact: string = "b".repeat(500);
444
+
445
+ expect(GitHubReplyComposer.quoteInstruction(exact)).toBe(`> ${exact}`);
446
+ });
447
+
448
+ test("clips an instruction that is one character over the cap", () => {
449
+ const overCap: string = "c".repeat(501);
450
+
451
+ expect(GitHubReplyComposer.quoteInstruction(overCap)).toBe(
452
+ `> ${"c".repeat(499)}…`,
453
+ );
454
+ });
455
+
456
+ test("preserves non-ASCII text verbatim when it is short enough", () => {
457
+ expect(
458
+ GitHubReplyComposer.quoteInstruction(
459
+ "リトライは指数バックオフにしてください",
460
+ ),
461
+ ).toBe("> リトライは指数バックオフにしてください");
462
+ });
463
+
464
+ /*
465
+ * The cap counts CHARACTERS THE READER SEES, not UTF-16 units. 400 emoji are
466
+ * 800 units, so a substring-based clip cut this in half and appended an
467
+ * ellipsis to text that was never too long in the first place.
468
+ */
469
+ test("does not clip multi-byte text that is under the cap in code points", () => {
470
+ const rockets: string = "🚀".repeat(400);
471
+
472
+ expect(GitHubReplyComposer.quoteInstruction(rockets)).toBe(`> ${rockets}`);
473
+ });
474
+
475
+ /*
476
+ * And when it does clip, it clips between characters. substring() cut the
477
+ * 500th UTF-16 unit, which lands in the MIDDLE of a surrogate pair — the
478
+ * comment then ended in half an emoji, which GitHub renders as a replacement
479
+ * character. The app quoting somebody back with visible corruption in their
480
+ * own words is a bug the reader blames on themselves.
481
+ */
482
+ test("clips multi-byte text by code point, never splitting a surrogate pair", () => {
483
+ const quoted: string = GitHubReplyComposer.quoteInstruction(
484
+ "🚀".repeat(600),
485
+ );
486
+
487
+ expect(quoted).toBe(`> ${"🚀".repeat(499)}…`);
488
+ expect(quoted.startsWith("> ")).toBe(true);
489
+ expect(quoted.endsWith("…")).toBe(true);
490
+ expect(quoted).not.toContain("\n");
491
+ expect(hasLoneSurrogate(quoted)).toBe(false);
492
+
493
+ // 499 kept characters plus the ellipsis, counted the way a reader counts.
494
+ expect(Array.from(quoted).length).toBe(2 + 499 + 1);
495
+ });
496
+
497
+ // A surrogate pair split by a clip inside a longer sentence, not at the end.
498
+ test("keeps a trailing emoji whole when the cut lands beside one", () => {
499
+ const quoted: string = GitHubReplyComposer.quoteInstruction(
500
+ `${"a".repeat(498)}🚀${"b".repeat(100)}`,
501
+ );
502
+
503
+ expect(quoted).toBe(`> ${"a".repeat(498)}🚀…`);
504
+ expect(hasLoneSurrogate(quoted)).toBe(false);
505
+ });
506
+
507
+ test("an echoed instruction that mentions the app cannot re-trigger the parser", () => {
508
+ const quoted: string = GitHubReplyComposer.quoteInstruction(
509
+ `@${APP_SLUG} review`,
510
+ );
511
+
512
+ // The text really is echoed back — otherwise the parse below proves nothing.
513
+ expect(quoted).toContain(`@${APP_SLUG} review`);
514
+ expect(parseComment(quoted, GitHubCommandSurface.PullRequest)).toBeNull();
515
+ expect(parseComment(quoted, GitHubCommandSurface.Issue)).toBeNull();
516
+ });
517
+
518
+ test("a multi-line instruction cannot smuggle a command onto a later line", () => {
519
+ const quoted: string = GitHubReplyComposer.quoteInstruction(
520
+ [
521
+ "look at the retry loop",
522
+ "",
523
+ `@${APP_SLUG} implement this`,
524
+ ` @${APP_SLUG}[bot] cancel`,
525
+ ].join("\n"),
526
+ );
527
+
528
+ expect(parseComment(quoted, GitHubCommandSurface.Issue)).toBeNull();
529
+ expect(parseComment(quoted, GitHubCommandSurface.PullRequest)).toBeNull();
530
+ });
531
+
532
+ /*
533
+ * A user who pastes a code fence into their instruction must not be able to
534
+ * close the quoting around it. Blockquoting survives this because the
535
+ * parser's fence detector only fires at the start of a line.
536
+ */
537
+ test("an instruction containing a code fence cannot break out of the quote", () => {
538
+ const quoted: string = GitHubReplyComposer.quoteInstruction(
539
+ ["```", "not really code", "```", `@${APP_SLUG} revise this`].join("\n"),
540
+ );
541
+
542
+ expect(parseComment(quoted, GitHubCommandSurface.PullRequest)).toBeNull();
543
+ });
544
+
545
+ test("an instruction that is itself already a quote stays inert", () => {
546
+ const quoted: string = GitHubReplyComposer.quoteInstruction(
547
+ `> @${APP_SLUG} status`,
548
+ );
549
+
550
+ expect(quoted).toBe(`> > @${APP_SLUG} status`);
551
+ expect(parseComment(quoted, GitHubCommandSurface.Issue)).toBeNull();
552
+ });
553
+ });
554
+
555
+ type CommandWording = {
556
+ commandType: GitHubCommandType;
557
+ description: string;
558
+ };
559
+
560
+ /*
561
+ * The phrase that tells the reader WHICH of the three very different actions
562
+ * is now running against their repository. Review changes nothing, Revise
563
+ * pushes commits to their branch, Implement opens a pull request — reporting
564
+ * the wrong one is how a user finds out too late what the app did.
565
+ */
566
+ const COMMAND_WORDINGS: Array<CommandWording> = [
567
+ {
568
+ commandType: GitHubCommandType.Review,
569
+ description: "reviewing this pull request",
570
+ },
571
+ {
572
+ commandType: GitHubCommandType.Revise,
573
+ description: "revising this pull request",
574
+ },
575
+ {
576
+ commandType: GitHubCommandType.Implement,
577
+ description: "working on this issue",
578
+ },
579
+ { commandType: GitHubCommandType.Help, description: "on it" },
580
+ { commandType: GitHubCommandType.Status, description: "on it" },
581
+ { commandType: GitHubCommandType.Cancel, description: "on it" },
582
+ ];
583
+
584
+ describe("acknowledgement", () => {
585
+ function acknowledgeReview(data: {
586
+ instruction: string;
587
+ projectName: string | undefined;
588
+ }): string {
589
+ return GitHubReplyComposer.acknowledgement({
590
+ commandType: GitHubCommandType.Review,
591
+ runUrl: RUN_URL,
592
+ instruction: data.instruction,
593
+ projectName: data.projectName,
594
+ });
595
+ }
596
+
597
+ test("links the run so the reader can follow along", () => {
598
+ const body: string = acknowledgeReview({
599
+ instruction: "",
600
+ projectName: undefined,
601
+ });
602
+
603
+ expect(body).toContain(`[Follow along in OneUptime](${RUN_URL})`);
604
+ });
605
+
606
+ for (const wording of COMMAND_WORDINGS) {
607
+ test(`describes a ${wording.commandType} run as "${wording.description}"`, () => {
608
+ const body: string = GitHubReplyComposer.acknowledgement({
609
+ commandType: wording.commandType,
610
+ runUrl: RUN_URL,
611
+ instruction: "",
612
+ projectName: undefined,
613
+ });
614
+
615
+ expect(body).toContain(`🤖 **On it** — ${wording.description}.`);
616
+ });
617
+ }
618
+
619
+ // Review and Revise differ by two letters and by everything they do.
620
+ test("does not describe a review as a revision, or the other way round", () => {
621
+ const review: string = GitHubReplyComposer.acknowledgement({
622
+ commandType: GitHubCommandType.Review,
623
+ runUrl: RUN_URL,
624
+ instruction: "",
625
+ projectName: undefined,
626
+ });
627
+ const revise: string = GitHubReplyComposer.acknowledgement({
628
+ commandType: GitHubCommandType.Revise,
629
+ runUrl: RUN_URL,
630
+ instruction: "",
631
+ projectName: undefined,
632
+ });
633
+
634
+ expect(review).toContain("reviewing");
635
+ expect(review).not.toContain("revising");
636
+ expect(revise).toContain("revising");
637
+ expect(revise).not.toContain("reviewing");
638
+ });
639
+
640
+ test("quotes back the instruction it is acting on", () => {
641
+ const body: string = acknowledgeReview({
642
+ instruction: "focus on the null checks in CartService",
643
+ projectName: undefined,
644
+ });
645
+
646
+ expect(body).toContain("You asked:");
647
+ expect(body).toContain("> focus on the null checks in CartService");
648
+ });
649
+
650
+ test("omits the whole 'You asked' section when the instruction is empty", () => {
651
+ const body: string = acknowledgeReview({
652
+ instruction: "",
653
+ projectName: undefined,
654
+ });
655
+
656
+ expect(body).not.toContain("You asked");
657
+
658
+ // No stray blockquote either — an empty quote renders as a grey bar.
659
+ for (const line of body.split("\n")) {
660
+ expect(line.startsWith(">")).toBe(false);
661
+ }
662
+ });
663
+
664
+ test("omits the 'You asked' section for a whitespace-only instruction too", () => {
665
+ const body: string = acknowledgeReview({
666
+ instruction: " \n\t \n",
667
+ projectName: undefined,
668
+ });
669
+
670
+ expect(body).not.toContain("You asked");
671
+ });
672
+
673
+ /*
674
+ * A repository can be connected to more than one OneUptime project, and the
675
+ * run is billed to exactly one of them. Dropping the name is how a team
676
+ * watches its AI budget drain into a project it has never heard of.
677
+ */
678
+ test("names the OneUptime project the run is billed to", () => {
679
+ const body: string = acknowledgeReview({
680
+ instruction: "",
681
+ projectName: "Checkout",
682
+ });
683
+
684
+ expect(body).toContain("(project **Checkout**)");
685
+ });
686
+
687
+ test("drops the project clause cleanly when no project name is known", () => {
688
+ const body: string = acknowledgeReview({
689
+ instruction: "",
690
+ projectName: undefined,
691
+ });
692
+
693
+ expect(body).not.toContain("project");
694
+ expect(body).not.toContain("undefined");
695
+ expect(body).not.toContain("()");
696
+ expect(body).toContain(`[Follow along in OneUptime](${RUN_URL}).`);
697
+ });
698
+
699
+ test("carries the signature", () => {
700
+ expect(
701
+ acknowledgeReview({ instruction: "", projectName: "Checkout" }).endsWith(
702
+ SIGNATURE,
703
+ ),
704
+ ).toBe(true);
705
+ });
706
+ });
707
+
708
+ describe("completed", () => {
709
+ function completedImplement(resultLines: Array<string>): string {
710
+ return GitHubReplyComposer.completed({
711
+ commandType: GitHubCommandType.Implement,
712
+ runUrl: RUN_URL,
713
+ resultLines: resultLines,
714
+ });
715
+ }
716
+
717
+ test("leads with a done marker and names what it finished", () => {
718
+ expect(completedImplement(["Opened #42."])).toContain(
719
+ "✅ **Done** — working on this issue.",
720
+ );
721
+ });
722
+
723
+ /*
724
+ * "Done" with no artefact is not an answer — the reader needs the pull
725
+ * request link, the commit count or the review link to act on.
726
+ */
727
+ test("prints every result line on a line of its own", () => {
728
+ const lines: Array<string> = completedImplement([
729
+ "Opened https://github.com/acme/checkout/pull/42",
730
+ "It closes this issue when merged.",
731
+ ]).split("\n");
732
+
733
+ expect(lines).toContain("Opened https://github.com/acme/checkout/pull/42");
734
+ expect(lines).toContain("It closes this issue when merged.");
735
+ });
736
+
737
+ test("still links the run and signs itself when there are no result lines", () => {
738
+ const body: string = completedImplement([]);
739
+
740
+ expect(body).toContain(`[View the full run in OneUptime](${RUN_URL}).`);
741
+ expect(body.endsWith(SIGNATURE)).toBe(true);
742
+ });
743
+
744
+ /*
745
+ * The product rule for Review: the app posts a review as a COMMENT and never
746
+ * approves. A completion notice that says "approved" or "merged" tells the
747
+ * reader something that did not happen.
748
+ */
749
+ test("reports a finished review as a review, never as an approval or a merge", () => {
750
+ const body: string = GitHubReplyComposer.completed({
751
+ commandType: GitHubCommandType.Review,
752
+ runUrl: RUN_URL,
753
+ resultLines: ["Left 3 comments on the diff."],
754
+ });
755
+
756
+ expect(body).toContain("reviewing this pull request");
757
+ expect(body.toLowerCase()).not.toContain("approv");
758
+ expect(body.toLowerCase()).not.toContain("merged");
759
+ });
760
+
761
+ for (const wording of COMMAND_WORDINGS) {
762
+ test(`reports a finished ${wording.commandType} run as "${wording.description}"`, () => {
763
+ const body: string = GitHubReplyComposer.completed({
764
+ commandType: wording.commandType,
765
+ runUrl: RUN_URL,
766
+ resultLines: [],
767
+ });
768
+
769
+ expect(body).toContain(`✅ **Done** — ${wording.description}.`);
770
+ });
771
+ }
772
+ });
773
+
774
+ describe("noChangeProposed", () => {
775
+ test("reads as a finding rather than as a failure", () => {
776
+ const body: string = GitHubReplyComposer.noChangeProposed({
777
+ reason: "The retry loop already backs off exponentially.",
778
+ runUrl: RUN_URL,
779
+ });
780
+
781
+ expect(body).toContain(
782
+ "🔍 **I looked, and I do not have a change worth proposing here.**",
783
+ );
784
+ expect(body).not.toContain("❌");
785
+ expect(body).not.toContain("could not finish");
786
+ });
787
+
788
+ /*
789
+ * Quoted, not interpolated raw: the reason is the AGENT's words, not this
790
+ * file's, and it reads correctly that way too — the agent is being quoted,
791
+ * the app is not speaking. Same rule, and same reason, as failed().
792
+ */
793
+ test("blockquotes the agent's reason when it gave one", () => {
794
+ expect(
795
+ GitHubReplyComposer.noChangeProposed({
796
+ reason: "The retry loop already backs off exponentially.",
797
+ runUrl: RUN_URL,
798
+ }),
799
+ ).toContain("> The retry loop already backs off exponentially.");
800
+ });
801
+
802
+ // The same fence-breakout hole failed() had, on the same wrapper.
803
+ test("an agent reason that closes a code fence cannot command the app", () => {
804
+ const body: string = GitHubReplyComposer.noChangeProposed({
805
+ reason: `\`\`\`\n@${APP_SLUG} implement this\n\`\`\`\n@${APP_SLUG} review`,
806
+ runUrl: RUN_URL,
807
+ });
808
+
809
+ expect(body).toContain(`@${APP_SLUG} review`);
810
+ expect(parseComment(body, GitHubCommandSurface.Issue)).toBeNull();
811
+ expect(parseComment(body, GitHubCommandSurface.PullRequest)).toBeNull();
812
+ expect(linesWhereAMentionWouldCount(body)).toEqual([]);
813
+ });
814
+
815
+ test("falls back to a plain explanation instead of printing 'undefined'", () => {
816
+ const body: string = GitHubReplyComposer.noChangeProposed({
817
+ reason: undefined,
818
+ runUrl: RUN_URL,
819
+ });
820
+
821
+ expect(body).toContain("> The agent finished without editing a file.");
822
+ expect(body).not.toContain("undefined");
823
+ });
824
+
825
+ test("treats an empty reason the same as a missing one", () => {
826
+ const body: string = GitHubReplyComposer.noChangeProposed({
827
+ reason: "",
828
+ runUrl: RUN_URL,
829
+ });
830
+
831
+ expect(body).toContain("> The agent finished without editing a file.");
832
+ });
833
+
834
+ // The point of the softer wording: it should elicit a better instruction.
835
+ test("invites a better instruction and links the run", () => {
836
+ const body: string = GitHubReplyComposer.noChangeProposed({
837
+ reason: undefined,
838
+ runUrl: RUN_URL,
839
+ });
840
+
841
+ expect(body).toContain("Tell me more about what you want");
842
+ expect(body).toContain(`[View the run](${RUN_URL}).`);
843
+ expect(body.endsWith(SIGNATURE)).toBe(true);
844
+ });
845
+ });
846
+
847
+ describe("failed", () => {
848
+ /*
849
+ * A failure reason is machine-generated text, so it is quoted rather than
850
+ * fenced. Every line of a stack trace keeps its own "> ", which is what
851
+ * makes the whole thing inert AND keeps the indentation the trace was
852
+ * written with — a blockquote preserves the line breaks a fence did.
853
+ */
854
+ test("blockquotes the failure reason, line by line, so a stack trace stays readable", () => {
855
+ const body: string = GitHubReplyComposer.failed({
856
+ reason: "TypeError: Cannot read property 'id' of undefined\n at run()",
857
+ runUrl: RUN_URL,
858
+ });
859
+
860
+ expect(body).toContain(
861
+ "> TypeError: Cannot read property 'id' of undefined\n> at run()",
862
+ );
863
+ expect(body).not.toContain("```");
864
+ });
865
+
866
+ /*
867
+ * THE regression test for this file, by name.
868
+ *
869
+ * failed() used to wrap the reason in a ``` fence. A reason carrying its own
870
+ * ``` closed that wrapper on the second line, and everything after it landed
871
+ * in the comment as LIVE markdown — here, a bare "@oneuptime cancel" in a
872
+ * comment this app posts on a thread this app watches. That is the comment
873
+ * loop the whole file exists to prevent, and it was reachable from any agent
874
+ * error message that happened to echo a fenced snippet back.
875
+ *
876
+ * A blockquote has no closing token an input can reach: the "> " goes on
877
+ * every line, including the ones that look like fences.
878
+ */
879
+ test("a reason that closes a code fence cannot break out and command the app", () => {
880
+ const body: string = GitHubReplyComposer.failed({
881
+ reason: `\`\`\`\n@${APP_SLUG} review\n\`\`\`\n@${APP_SLUG} cancel`,
882
+ runUrl: RUN_URL,
883
+ });
884
+
885
+ // The hostile text really is echoed — otherwise the parses prove nothing.
886
+ expect(body).toContain(`@${APP_SLUG} cancel`);
887
+
888
+ expect(parseComment(body, GitHubCommandSurface.PullRequest)).toBeNull();
889
+ expect(parseComment(body, GitHubCommandSurface.Issue)).toBeNull();
890
+
891
+ // And structurally, not just by the parser's current reading of it.
892
+ expect(linesWhereAMentionWouldCount(body)).toEqual([]);
893
+ for (const line of body.split("\n")) {
894
+ if (line.includes(`@${APP_SLUG}`)) {
895
+ expect(line.startsWith("> ")).toBe(true);
896
+ }
897
+ }
898
+ });
899
+
900
+ /*
901
+ * `undefined` must drop the reason block entirely rather than emit an empty
902
+ * quote — a lone "> " renders as a grey bar with nothing in it, and the
903
+ * reader assumes output was lost.
904
+ */
905
+ test("emits no reason block at all when there is no reason", () => {
906
+ const body: string = GitHubReplyComposer.failed({
907
+ reason: undefined,
908
+ runUrl: RUN_URL,
909
+ });
910
+
911
+ expect(body).not.toContain("```");
912
+ expect(body).not.toContain("undefined");
913
+ expect(body).toContain("❌ **I could not finish this one.**");
914
+
915
+ for (const line of body.split("\n")) {
916
+ expect(line.startsWith(">")).toBe(false);
917
+ }
918
+ });
919
+
920
+ test("emits no reason block for an empty-string reason either", () => {
921
+ const body: string = GitHubReplyComposer.failed({
922
+ reason: "",
923
+ runUrl: RUN_URL,
924
+ });
925
+
926
+ expect(body).not.toContain("```");
927
+
928
+ for (const line of body.split("\n")) {
929
+ expect(line.startsWith(">")).toBe(false);
930
+ }
931
+ });
932
+
933
+ test("always points at the run log, with or without a reason", () => {
934
+ const withReason: string = GitHubReplyComposer.failed({
935
+ reason: "boom",
936
+ runUrl: RUN_URL,
937
+ });
938
+ const withoutReason: string = GitHubReplyComposer.failed({
939
+ reason: undefined,
940
+ runUrl: RUN_URL,
941
+ });
942
+
943
+ expect(withReason).toContain(
944
+ `[View the run in OneUptime](${RUN_URL}) for the full log.`,
945
+ );
946
+ expect(withoutReason).toContain(
947
+ `[View the run in OneUptime](${RUN_URL}) for the full log.`,
948
+ );
949
+ expect(withReason.endsWith(SIGNATURE)).toBe(true);
950
+ expect(withoutReason.endsWith(SIGNATURE)).toBe(true);
951
+ });
952
+
953
+ /*
954
+ * Agent errors routinely echo the comment that started the run, so this is
955
+ * the realistic loop: fail -> post the error -> the error mentions the app.
956
+ * The blockquote is what keeps it inert.
957
+ */
958
+ test("an error message that echoes the user's mention cannot re-trigger the app", () => {
959
+ const body: string = GitHubReplyComposer.failed({
960
+ reason: `Agent aborted while handling "@${APP_SLUG} revise this".`,
961
+ runUrl: RUN_URL,
962
+ });
963
+
964
+ expect(body).toContain(`@${APP_SLUG} revise this`);
965
+ expect(body).toContain(
966
+ `> Agent aborted while handling "@${APP_SLUG} revise this".`,
967
+ );
968
+ expect(parseComment(body, GitHubCommandSurface.PullRequest)).toBeNull();
969
+ expect(parseComment(body, GitHubCommandSurface.Issue)).toBeNull();
970
+ });
971
+ });
972
+
973
+ describe("cancelled", () => {
974
+ test("does not claim to have cancelled anything when nothing was running", () => {
975
+ const body: string = GitHubReplyComposer.cancelled({ cancelledCount: 0 });
976
+
977
+ expect(body).toContain(
978
+ "🛑 Nothing of mine is running on this thread right now.",
979
+ );
980
+ expect(body).not.toContain("Cancelled");
981
+ expect(body).not.toContain("0 run");
982
+ expect(body.endsWith(SIGNATURE)).toBe(true);
983
+ });
984
+
985
+ test("uses the singular for exactly one run", () => {
986
+ const body: string = GitHubReplyComposer.cancelled({ cancelledCount: 1 });
987
+
988
+ expect(body).toContain("🛑 **Cancelled** 1 run on this thread.");
989
+ expect(body).not.toContain("1 runs");
990
+ });
991
+
992
+ test("uses the plural for more than one run", () => {
993
+ expect(GitHubReplyComposer.cancelled({ cancelledCount: 2 })).toContain(
994
+ "🛑 **Cancelled** 2 runs on this thread.",
995
+ );
996
+ expect(GitHubReplyComposer.cancelled({ cancelledCount: 11 })).toContain(
997
+ "🛑 **Cancelled** 11 runs on this thread.",
998
+ );
999
+ });
1000
+
1001
+ /*
1002
+ * Revise pushes commits to the user's own head branch. A cancel notice that
1003
+ * let the reader believe those commits were rolled back would leave them
1004
+ * merging code nobody re-checked.
1005
+ */
1006
+ test("is explicit that cancelling does not undo commits already pushed", () => {
1007
+ const body: string = GitHubReplyComposer.cancelled({ cancelledCount: 1 });
1008
+
1009
+ expect(body).toContain("Work already pushed stays pushed");
1010
+ expect(body).toContain("it does not undo what happened");
1011
+ });
1012
+
1013
+ test("does not talk about pushed work when there was nothing to cancel", () => {
1014
+ expect(GitHubReplyComposer.cancelled({ cancelledCount: 0 })).not.toContain(
1015
+ "Work already pushed",
1016
+ );
1017
+ });
1018
+
1019
+ /*
1020
+ * The count is a subtraction between two database reads, so a negative is a
1021
+ * bug upstream — but the comment is what the user sees, and "Cancelled -1
1022
+ * runs on this thread." is worse than saying nothing was running. The guard
1023
+ * is `<= 0` rather than `=== 0` for exactly that.
1024
+ */
1025
+ test("reads a negative count as nothing running rather than printing it", () => {
1026
+ const body: string = GitHubReplyComposer.cancelled({ cancelledCount: -1 });
1027
+
1028
+ expect(body).toContain(
1029
+ "🛑 Nothing of mine is running on this thread right now.",
1030
+ );
1031
+ expect(body).not.toContain("-1");
1032
+ expect(body).not.toContain("Cancelled");
1033
+ expect(body.endsWith(SIGNATURE)).toBe(true);
1034
+ });
1035
+ });
1036
+
1037
+ /*
1038
+ * cancelledRun() closes out ONE run's own acknowledgement comment; cancelled()
1039
+ * answers the person who typed "@oneuptime cancel" and counts what that
1040
+ * command stopped across the whole thread. They were the same string once, and
1041
+ * cancelling three runs then produced three separate comments each announcing
1042
+ * that it had cancelled "1 run on this thread" — a reader counting comments
1043
+ * would think nine runs had been stopped.
1044
+ */
1045
+ describe("cancelledRun", () => {
1046
+ const body: string = GitHubReplyComposer.cancelledRun({ runUrl: RUN_URL });
1047
+
1048
+ test("speaks about this one run, and claims no thread-wide count", () => {
1049
+ expect(body).toContain("🛑 **Cancelled** before this finished.");
1050
+ expect(body).not.toContain("run on this thread");
1051
+ expect(body).not.toContain("runs on this thread");
1052
+ });
1053
+
1054
+ /*
1055
+ * Revise pushes commits to the user's own head branch, so this warning has
1056
+ * to survive on BOTH cancel messages — the run's own comment is the one a
1057
+ * reader lands on from the run link, and often the only one they read.
1058
+ */
1059
+ test("keeps the warning that cancelling does not undo pushed commits", () => {
1060
+ expect(body).toContain("Anything already pushed stays pushed");
1061
+ expect(body).toContain("it does not undo what happened");
1062
+ });
1063
+
1064
+ test("links the run so the reader can see how far it got, and signs itself", () => {
1065
+ expect(body).toContain(`[See how far it got](${RUN_URL}).`);
1066
+ expect(body.endsWith(SIGNATURE)).toBe(true);
1067
+ });
1068
+
1069
+ test("does not read as a failure — cancelling is something a user chose", () => {
1070
+ expect(body).not.toContain("❌");
1071
+ expect(body).not.toContain("could not finish");
1072
+ });
1073
+ });
1074
+
1075
+ describe("status", () => {
1076
+ test("says plainly that it is idle, and offers no run list to click", () => {
1077
+ const body: string = GitHubReplyComposer.status({
1078
+ runDescriptions: [],
1079
+ runUrlBase: RUN_URL_BASE,
1080
+ });
1081
+
1082
+ expect(body).toContain(
1083
+ "💤 I am not working on anything in this thread right now.",
1084
+ );
1085
+ expect(body).not.toContain(RUN_URL_BASE);
1086
+ expect(body).not.toContain("\n- ");
1087
+ expect(body.endsWith(SIGNATURE)).toBe(true);
1088
+ });
1089
+
1090
+ test("bullets every in-flight run and links the project's run list", () => {
1091
+ const body: string = GitHubReplyComposer.status({
1092
+ runDescriptions: [
1093
+ "Revise on #42, started 2 minutes ago",
1094
+ "Review on #43, queued",
1095
+ ],
1096
+ runUrlBase: RUN_URL_BASE,
1097
+ });
1098
+ const lines: Array<string> = body.split("\n");
1099
+
1100
+ expect(body).toContain("⏳ **Currently working on this thread:**");
1101
+ expect(lines).toContain("- Revise on #42, started 2 minutes ago");
1102
+ expect(lines).toContain("- Review on #43, queued");
1103
+ expect(body).toContain(`[All runs for this project](${RUN_URL_BASE}).`);
1104
+ });
1105
+
1106
+ test("never shows the idle message while work is in flight", () => {
1107
+ expect(
1108
+ GitHubReplyComposer.status({
1109
+ runDescriptions: ["Review on #43, queued"],
1110
+ runUrlBase: RUN_URL_BASE,
1111
+ }),
1112
+ ).not.toContain("I am not working on anything");
1113
+ });
1114
+
1115
+ test("lists a single run without pluralising it into a summary", () => {
1116
+ const lines: Array<string> = GitHubReplyComposer.status({
1117
+ runDescriptions: ["Implement on #7, started just now"],
1118
+ runUrlBase: RUN_URL_BASE,
1119
+ }).split("\n");
1120
+
1121
+ expect(lines).toContain("- Implement on #7, started just now");
1122
+ });
1123
+ });
1124
+
1125
+ describe("refusal", () => {
1126
+ /*
1127
+ * Silence is the one response that is never acceptable to a user whose
1128
+ * command did nothing — the integration just reads as broken. Every refusal
1129
+ * therefore has the same shape: a marker sentence in the app's own voice,
1130
+ * then the reason QUOTED beneath it, then the signature.
1131
+ *
1132
+ * The reason is quoted rather than inlined because not every refusal reason
1133
+ * is this file's own prose: one of them is a BadDataException message from
1134
+ * the enqueue path, and a message that ever grows to include user text would
1135
+ * otherwise carry a live mention into a comment this app posts. Splitting
1136
+ * the marker onto its own line is what makes the quote possible — a
1137
+ * blockquote cannot start mid-sentence.
1138
+ */
1139
+ test("states the reason and signs the comment, in exactly that shape", () => {
1140
+ expect(
1141
+ GitHubReplyComposer.refusal({
1142
+ reason: "This repository is not connected to a OneUptime project.",
1143
+ }),
1144
+ ).toBe(
1145
+ `🚫 I cannot do that:\n\n> This repository is not connected to a OneUptime project.\n\n${SIGNATURE}`,
1146
+ );
1147
+ });
1148
+
1149
+ test("keeps the refusal marker so the reader can see it is a refusal", () => {
1150
+ const body: string = GitHubReplyComposer.refusal({
1151
+ reason: "The fix budget is used up.",
1152
+ });
1153
+
1154
+ expect(body.startsWith("🚫 I cannot do that:")).toBe(true);
1155
+ expect(body).toContain("> The fix budget is used up.");
1156
+ });
1157
+
1158
+ /*
1159
+ * The reason that reaches this method can be an exception's text, and an
1160
+ * exception's text is exactly where a user-supplied fence and mention ride
1161
+ * in. Under the old single-line refusal there was no wrapper at all.
1162
+ */
1163
+ test("a reason carrying a mention cannot command the app", () => {
1164
+ const body: string = GitHubReplyComposer.refusal({
1165
+ reason: `I cannot run "@${APP_SLUG} revise this" on a fork.`,
1166
+ });
1167
+
1168
+ expect(body).toContain(`@${APP_SLUG} revise this`);
1169
+ expect(parseComment(body, GitHubCommandSurface.PullRequest)).toBeNull();
1170
+ expect(parseComment(body, GitHubCommandSurface.Issue)).toBeNull();
1171
+ expect(linesWhereAMentionWouldCount(body)).toEqual([]);
1172
+ });
1173
+ });
1174
+
1175
+ describe("unsupportedOnSurface", () => {
1176
+ test("a review asked for on an issue redirects to implement", () => {
1177
+ const body: string = GitHubReplyComposer.unsupportedOnSurface({
1178
+ commandType: GitHubCommandType.Review,
1179
+ appSlug: APP_SLUG,
1180
+ });
1181
+
1182
+ expect(body).toContain(
1183
+ "I can only review pull requests, and this is an issue.",
1184
+ );
1185
+ expect(body).toContain("Ask me to implement it instead");
1186
+ expect(body).not.toContain("revise");
1187
+ });
1188
+
1189
+ /*
1190
+ * Review and Revise take different branches of the same sentence. If they
1191
+ * collapsed into one, half of these replies would tell the user to run a
1192
+ * command they did not ask for.
1193
+ */
1194
+ test("a revise asked for on an issue says revise, not review", () => {
1195
+ const body: string = GitHubReplyComposer.unsupportedOnSurface({
1196
+ commandType: GitHubCommandType.Revise,
1197
+ appSlug: APP_SLUG,
1198
+ });
1199
+
1200
+ expect(body).toContain(
1201
+ "I can only revise pull requests, and this is an issue.",
1202
+ );
1203
+ expect(body).not.toContain("I can only review");
1204
+ });
1205
+
1206
+ test("an implement asked for on a pull request redirects to revise or review", () => {
1207
+ const body: string = GitHubReplyComposer.unsupportedOnSurface({
1208
+ commandType: GitHubCommandType.Implement,
1209
+ appSlug: APP_SLUG,
1210
+ });
1211
+
1212
+ expect(body).toContain(
1213
+ "I can only implement issues, and this is a pull request.",
1214
+ );
1215
+ expect(body).toContain("Ask me to revise or review it instead.");
1216
+ });
1217
+
1218
+ /*
1219
+ * Routed through refusal() rather than composed separately, so it picks up
1220
+ * that method's shape — and its quoting — for free.
1221
+ */
1222
+ test("every surface mismatch is delivered as a signed refusal", () => {
1223
+ for (const commandType of [
1224
+ GitHubCommandType.Review,
1225
+ GitHubCommandType.Revise,
1226
+ GitHubCommandType.Implement,
1227
+ ]) {
1228
+ const body: string = GitHubReplyComposer.unsupportedOnSurface({
1229
+ commandType: commandType,
1230
+ appSlug: APP_SLUG,
1231
+ });
1232
+
1233
+ expect(body.startsWith("🚫 I cannot do that:\n\n> ")).toBe(true);
1234
+ expect(body.endsWith(`\n\n${SIGNATURE}`)).toBe(true);
1235
+ }
1236
+ });
1237
+
1238
+ /*
1239
+ * The redirect names a command but must not print it as a mention — that is
1240
+ * the sentence most likely to grow an "@oneuptime implement this" example.
1241
+ */
1242
+ test("names the right command without mentioning the app", () => {
1243
+ for (const commandType of [
1244
+ GitHubCommandType.Review,
1245
+ GitHubCommandType.Revise,
1246
+ GitHubCommandType.Implement,
1247
+ ]) {
1248
+ expect(
1249
+ GitHubReplyComposer.unsupportedOnSurface({
1250
+ commandType: commandType,
1251
+ appSlug: APP_SLUG,
1252
+ }),
1253
+ ).not.toContain(`@${APP_SLUG}`);
1254
+ }
1255
+ });
1256
+ });
1257
+
1258
+ describe("help", () => {
1259
+ const body: string = GitHubReplyComposer.help({ appSlug: APP_SLUG });
1260
+
1261
+ /*
1262
+ * Without this, the loop-safety test for help() would pass for the wrong
1263
+ * reason: a help text that stopped printing commands is trivially inert and
1264
+ * also useless.
1265
+ */
1266
+ test("really does print every command, mention and all", () => {
1267
+ expect(body).toContain(`@${APP_SLUG} review`);
1268
+ expect(body).toContain(`@${APP_SLUG} revise this`);
1269
+ expect(body).toContain(`@${APP_SLUG} implement this`);
1270
+ expect(body).toContain(`@${APP_SLUG} status`);
1271
+ expect(body).toContain(`@${APP_SLUG} cancel`);
1272
+ });
1273
+
1274
+ /*
1275
+ * And this is the mechanism that makes printing them safe. Asserted
1276
+ * structurally, line by line, rather than by trusting the parser: a mention
1277
+ * on a non-fenced line is the bug, wherever it came from.
1278
+ */
1279
+ test("keeps every printed mention inside a closed code fence", () => {
1280
+ let insideFence: boolean = false;
1281
+
1282
+ for (const line of body.split("\n")) {
1283
+ if (line.startsWith("```")) {
1284
+ insideFence = !insideFence;
1285
+ continue;
1286
+ }
1287
+
1288
+ if (!insideFence) {
1289
+ expect(line).not.toContain(`@${APP_SLUG}`);
1290
+ }
1291
+ }
1292
+
1293
+ // An unclosed fence would swallow the rest of the comment when rendered.
1294
+ expect(insideFence).toBe(false);
1295
+ });
1296
+
1297
+ test("separates the pull request commands from the issue commands", () => {
1298
+ expect(body).toContain("On a **pull request**:");
1299
+ expect(body).toContain("On an **issue**:");
1300
+ });
1301
+
1302
+ /*
1303
+ * Assignment and the trigger label are the two ways to start a run that
1304
+ * involve typing nothing at all, so help is the only place a user can learn
1305
+ * they exist.
1306
+ */
1307
+ test("documents the triggers that are not comments", () => {
1308
+ expect(body).toContain("assign an issue to me");
1309
+ expect(body).toContain("trigger label");
1310
+ });
1311
+
1312
+ /*
1313
+ * The three sentences that set a reader's expectations about what this app
1314
+ * can do to their repository. Losing any of them is a real change in what
1315
+ * users believe they have installed.
1316
+ */
1317
+ test("states the boundaries: write access only, no merging, human review", () => {
1318
+ expect(body).toContain("write access to this repository");
1319
+ expect(body).toContain("I never merge anything");
1320
+ expect(body).toContain("for a human to review");
1321
+ });
1322
+
1323
+ test("carries the signature", () => {
1324
+ expect(body.endsWith(SIGNATURE)).toBe(true);
1325
+ });
1326
+
1327
+ /*
1328
+ * A GitHub App slug can contain characters that mean something to a regular
1329
+ * expression. The parser escapes them; the fencing has to hold for that slug
1330
+ * too, or an unusually named installation loops where the default one does
1331
+ * not.
1332
+ */
1333
+ test("stays inert for a slug full of regular-expression metacharacters", () => {
1334
+ const oddSlug: string = "one.uptime+ai";
1335
+ const oddBody: string = GitHubReplyComposer.help({ appSlug: oddSlug });
1336
+
1337
+ expect(oddBody).toContain(`@${oddSlug} review`);
1338
+ expect(
1339
+ parseComment(oddBody, GitHubCommandSurface.PullRequest, oddSlug),
1340
+ ).toBeNull();
1341
+ expect(
1342
+ parseComment(oddBody, GitHubCommandSurface.Issue, oddSlug),
1343
+ ).toBeNull();
1344
+ });
1345
+ });
1346
+
1347
+ /*
1348
+ * The footer is how a reader tells an app comment from a human one, and how
1349
+ * they learn that replying in-thread is the way to ask for changes. It also
1350
+ * has to appear exactly once — a doubled signature means one composer output
1351
+ * was nested inside another.
1352
+ */
1353
+ describe("every comment identifies itself", () => {
1354
+ for (const sample of everyComposerOutput()) {
1355
+ if (sample.method === "quoteInstruction") {
1356
+ // A fragment embedded in other comments, not a comment of its own.
1357
+ continue;
1358
+ }
1359
+
1360
+ test(`${sample.method} (${sample.scenario}) ends with exactly one signature`, () => {
1361
+ expect(sample.body.endsWith(SIGNATURE)).toBe(true);
1362
+ expect(sample.body.split(SIGNATURE).length - 1).toBe(1);
1363
+ });
1364
+
1365
+ /*
1366
+ * The blank line matters and used to go missing. acknowledgement() and
1367
+ * failed() build their body as an array of parts and drop the optional
1368
+ * ones; filtering empty strings out of the WHOLE array took the separator
1369
+ * with it, and `<sub>` ran straight on from the previous sentence — GitHub
1370
+ * then rendered the footer as part of that paragraph instead of as its own
1371
+ * small line. Both now drop only the optional section, never the
1372
+ * separator, so the shape is uniform across every method.
1373
+ */
1374
+ test(`${sample.method} (${sample.scenario}) leaves a blank line before the signature`, () => {
1375
+ expect(sample.body.endsWith(`\n\n${SIGNATURE}`)).toBe(true);
1376
+ });
1377
+ }
1378
+
1379
+ test("the signature says who posted it and how to reply", () => {
1380
+ expect(SIGNATURE).toContain("Posted by OneUptime");
1381
+ expect(SIGNATURE).toContain("Reply in this thread");
1382
+ });
1383
+
1384
+ test("quoteInstruction is a fragment and adds no signature of its own", () => {
1385
+ expect(
1386
+ GitHubReplyComposer.quoteInstruction("please back off exponentially"),
1387
+ ).not.toContain(SIGNATURE);
1388
+ });
1389
+ });