@oneuptime/common 12.0.7 → 12.0.9

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 (873) hide show
  1. package/Models/AnalyticsModels/MetricItemAggMV1mByK8sCluster.ts +1 -1
  2. package/Models/AnalyticsModels/MetricItemAggMV1mByService.ts +1 -1
  3. package/Models/DatabaseModels/AIConversation.ts +32 -0
  4. package/Models/DatabaseModels/AIConversationMessage.ts +41 -0
  5. package/Models/DatabaseModels/AlertEpisodeMember.ts +27 -0
  6. package/Models/DatabaseModels/IncidentEpisodeMember.ts +28 -0
  7. package/Models/DatabaseModels/Index.ts +12 -4
  8. package/Models/DatabaseModels/{TelemetryEntity.ts → InventoryItem.ts} +184 -9
  9. package/Models/DatabaseModels/InventoryItemCustomField.ts +434 -0
  10. package/Models/DatabaseModels/{TelemetryEntityRelationship.ts → InventoryItemRelationship.ts} +33 -7
  11. package/Models/DatabaseModels/NetworkDevice.ts +141 -0
  12. package/Models/DatabaseModels/NetworkDeviceLink.ts +699 -0
  13. package/Models/DatabaseModels/NetworkDeviceLinkRule.ts +467 -0
  14. package/Models/DatabaseModels/NetworkTopologySuppression.ts +429 -0
  15. package/Models/DatabaseModels/OnCallDutyPolicyFeed.ts +9 -0
  16. package/Models/DatabaseModels/Project.ts +78 -0
  17. package/Models/DatabaseModels/UserCall.ts +42 -0
  18. package/Models/DatabaseModels/UserEmail.ts +44 -0
  19. package/Models/DatabaseModels/UserNotificationRule.ts +425 -55
  20. package/Models/DatabaseModels/UserOnCallLogTimeline.ts +24 -2
  21. package/Models/DatabaseModels/UserPush.ts +49 -0
  22. package/Models/DatabaseModels/UserSMS.ts +43 -0
  23. package/Models/DatabaseModels/UserTelegram.ts +59 -0
  24. package/Models/DatabaseModels/UserWebhook.ts +52 -0
  25. package/Models/DatabaseModels/UserWhatsApp.ts +41 -0
  26. package/Models/DatabaseModels/WorkflowLog.ts +38 -0
  27. package/Models/DatabaseModels/WorkflowVariable.ts +12 -0
  28. package/Server/API/AIChatAPI.ts +315 -1
  29. package/Server/API/DashboardAPI.ts +217 -1
  30. package/Server/API/OnCallReadinessAPI.ts +841 -0
  31. package/Server/API/TeamComplianceAPI.ts +69 -17
  32. package/Server/API/TelemetryAPI.ts +220 -12
  33. package/Server/API/UserAPI.ts +16 -1
  34. package/Server/EnvironmentConfig.ts +52 -0
  35. package/Server/Infrastructure/Postgres/DataSourceOptions.ts +22 -0
  36. package/Server/Infrastructure/Postgres/SchemaMigrations/1786100000000-RestoreServiceLowerNameIndex.ts +4 -4
  37. package/Server/Infrastructure/Postgres/SchemaMigrations/1786200000000-RestoreDroppedUniqueIndexes.ts +5 -5
  38. package/Server/Infrastructure/Postgres/SchemaMigrations/1786551733814-MigrationName.ts +41 -0
  39. package/Server/Infrastructure/Postgres/SchemaMigrations/1786559879134-AddWorkflowLogStepTrace.ts +17 -0
  40. package/Server/Infrastructure/Postgres/SchemaMigrations/1786625176831-AddMonitoringMethodToNetworkDevice.ts +35 -0
  41. package/Server/Infrastructure/Postgres/SchemaMigrations/1786634985763-AddNetworkDeviceLink.ts +82 -0
  42. package/Server/Infrastructure/Postgres/SchemaMigrations/1786639512056-AddNetworkDeviceLinkRule.ts +91 -0
  43. package/Server/Infrastructure/Postgres/SchemaMigrations/1786639972982-AddNetworkTopologySuppression.ts +47 -0
  44. package/Server/Infrastructure/Postgres/SchemaMigrations/1786800000000-RenameTelemetryEntityToInventoryItem.ts +255 -0
  45. package/Server/Infrastructure/Postgres/SchemaMigrations/1786900000000-AddInventoryItemArchiveAndCustomFields.ts +107 -0
  46. package/Server/Infrastructure/Postgres/SchemaMigrations/1787000000000-AddOnCallNotificationFallbackColumns.ts +90 -0
  47. package/Server/Infrastructure/Postgres/SchemaMigrations/1787100000000-AddAIConversationPageContext.ts +39 -0
  48. package/Server/Infrastructure/Postgres/SchemaMigrations/1787200000000-AddAIChatMessageFeedback.ts +33 -0
  49. package/Server/Infrastructure/Postgres/SchemaMigrations/1787300000000-AddEpisodeMemberNotifyIndexes.ts +59 -0
  50. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +24 -0
  51. package/Server/Infrastructure/Queue.ts +78 -13
  52. package/Server/Middleware/MasterAdminAuthorization.ts +11 -6
  53. package/Server/Middleware/PublicDashboardRateLimit.ts +593 -0
  54. package/Server/Services/AIService.ts +7 -0
  55. package/Server/Services/AlertEpisodeStateTimelineService.ts +29 -0
  56. package/Server/Services/AlertSeverityService.ts +63 -0
  57. package/Server/Services/DashboardService.ts +9 -10
  58. package/Server/Services/DatabaseService.ts +32 -2
  59. package/Server/Services/IncidentEpisodeStateTimelineService.ts +29 -0
  60. package/Server/Services/IncidentSeverityService.ts +76 -0
  61. package/Server/Services/Index.ts +12 -4
  62. package/Server/Services/InventoryItemCustomFieldService.ts +9 -0
  63. package/Server/Services/{TelemetryEntityRelationshipService.ts → InventoryItemRelationshipService.ts} +7 -4
  64. package/Server/Services/{TelemetryEntityService.ts → InventoryItemService.ts} +203 -21
  65. package/Server/Services/LogAggregationService.ts +45 -8
  66. package/Server/Services/MetricAggregationService.ts +121 -0
  67. package/Server/Services/MetricService.ts +7 -7
  68. package/Server/Services/NetworkDeviceLinkRuleService.ts +10 -0
  69. package/Server/Services/NetworkDeviceLinkService.ts +84 -0
  70. package/Server/Services/NetworkDeviceService.ts +140 -0
  71. package/Server/Services/NetworkSiteService.ts +77 -25
  72. package/Server/Services/NetworkTopologySuppressionService.ts +84 -0
  73. package/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.ts +41 -29
  74. package/Server/Services/OnCallDutyPolicyExecutionLogService.ts +8 -0
  75. package/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.ts +62 -13
  76. package/Server/Services/OnCallDutyPolicyScheduleService.ts +61 -1
  77. package/Server/Services/OnCallNotificationAlertingService.ts +742 -0
  78. package/Server/Services/OnCallReadinessService.ts +2803 -0
  79. package/Server/Services/OnCallSetupReminderService.ts +955 -0
  80. package/Server/Services/ProfileAggregationService.ts +123 -0
  81. package/Server/Services/StatusPageService.ts +9 -10
  82. package/Server/Services/TeamComplianceService.ts +429 -252
  83. package/Server/Services/UserCallService.ts +26 -1
  84. package/Server/Services/UserEmailService.ts +26 -1
  85. package/Server/Services/UserNotificationRuleAdminService.ts +1183 -0
  86. package/Server/Services/UserNotificationRuleService.ts +3812 -333
  87. package/Server/Services/UserOnCallLogService.ts +561 -48
  88. package/Server/Services/UserPushService.ts +29 -0
  89. package/Server/Services/UserService.ts +11 -0
  90. package/Server/Services/UserSmsService.ts +26 -1
  91. package/Server/Services/UserTelegramService.ts +24 -1
  92. package/Server/Services/UserWebhookService.ts +28 -1
  93. package/Server/Services/UserWhatsAppService.ts +24 -1
  94. package/Server/Types/Database/Permissions/BasePermission.ts +19 -0
  95. package/Server/Types/Database/Permissions/CreatePermission.ts +164 -0
  96. package/Server/Types/Database/Permissions/OwnerOnlyColumnPermission.ts +340 -0
  97. package/Server/Types/Database/Permissions/QueryPermission.ts +48 -0
  98. package/Server/Types/Database/Permissions/TenantPermission.ts +8 -1
  99. package/Server/Types/Workflow/Components/API/Delete.ts +1 -1
  100. package/Server/Types/Workflow/Components/API/Get.ts +1 -1
  101. package/Server/Types/Workflow/Components/API/Patch.ts +1 -1
  102. package/Server/Types/Workflow/Components/API/Post.ts +1 -1
  103. package/Server/Types/Workflow/Components/API/Put.ts +1 -1
  104. package/Server/Types/Workflow/Components/API/Utils.ts +44 -1
  105. package/Server/Types/Workflow/Components/BaseModel/CreateManyBaseModel.ts +29 -5
  106. package/Server/Types/Workflow/Components/BaseModel/CreateOneBaseModel.ts +18 -10
  107. package/Server/Types/Workflow/Components/BaseModel/ModelArguments.ts +55 -0
  108. package/Server/Types/Workflow/Components/Conditions/IfElse.ts +3 -17
  109. package/Server/Types/Workflow/Components/Email.ts +25 -7
  110. package/Server/Types/Workflow/Components/JavaScript.ts +10 -3
  111. package/Server/Types/Workflow/Components/MicrosoftTeams/SendMessageToChannel.ts +1 -1
  112. package/Server/Types/Workflow/TriggerCode.ts +12 -0
  113. package/Server/Types/Workflow/Workflow.ts +5 -0
  114. package/Server/Utils/AI/Chat/ChatAgentRunner.ts +643 -48
  115. package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +32 -3
  116. package/Server/Utils/AI/Chat/ObservabilityChatPrompt.ts +20 -6
  117. package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +7 -0
  118. package/Server/Utils/AI/Toolbox/AIActionTools.ts +2 -2
  119. package/Server/Utils/AI/Toolbox/AIMetaTools.ts +863 -0
  120. package/Server/Utils/AI/Toolbox/AlertTools.ts +177 -15
  121. package/Server/Utils/AI/Toolbox/IncidentTools.ts +191 -10
  122. package/Server/Utils/AI/Toolbox/Index.ts +48 -0
  123. package/Server/Utils/AI/Toolbox/MonitorTools.ts +298 -11
  124. package/Server/Utils/AI/Toolbox/NoteWriteTools.ts +295 -0
  125. package/Server/Utils/AI/Toolbox/OnCallTools.ts +1246 -0
  126. package/Server/Utils/AI/Toolbox/RunbookTools.ts +424 -0
  127. package/Server/Utils/AI/Toolbox/SloTools.ts +456 -0
  128. package/Server/Utils/AI/Toolbox/StatusPageTools.ts +559 -0
  129. package/Server/Utils/AI/Toolbox/TeamTools.ts +327 -0
  130. package/Server/Utils/AI/Toolbox/TimelineTools.ts +615 -0
  131. package/Server/Utils/AI/Toolbox/WorkflowProbeTools.ts +664 -0
  132. package/Server/Utils/ClientIp.ts +221 -0
  133. package/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.ts +47 -0
  134. package/Server/Utils/Dashboard/PublicDashboardSloHistoryPolicy.ts +163 -0
  135. package/Server/Utils/Dashboard/PublicDashboardSloWidget.ts +147 -0
  136. package/Server/Utils/Express.ts +12 -17
  137. package/Server/Utils/LLM/LLMService.ts +85 -8
  138. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +204 -10
  139. package/Server/Utils/SSRFProtection.ts +98 -23
  140. package/Server/Utils/StartServer.ts +12 -3
  141. package/Server/Utils/Telemetry/EntityRegistry.ts +205 -18
  142. package/Server/Utils/Telemetry/InventoryEntityRegistry.ts +689 -0
  143. package/Server/Utils/Telemetry/TelemetryEntity.ts +160 -52
  144. package/Server/Utils/VM/VMAPI.ts +56 -8
  145. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +7 -3
  146. package/Tests/App/Dashboard/AdminNotificationRulesPage.test.tsx +2146 -0
  147. package/Tests/App/Dashboard/CreateWorkflowModal.test.tsx +561 -0
  148. package/Tests/App/Dashboard/EscalationRuleReadiness.test.tsx +2470 -0
  149. package/Tests/App/Dashboard/MonitorCriteriaAttributeFilter.test.tsx +574 -0
  150. package/Tests/App/Dashboard/OnCallPreventionGuards.test.tsx +1897 -0
  151. package/Tests/App/Dashboard/OnCallReadinessSurfaces.test.tsx +3606 -0
  152. package/Tests/App/Dashboard/OnCallRulesDeleteGuard.test.tsx +784 -0
  153. package/Tests/App/Dashboard/OnCallRulesTable.test.tsx +1119 -0
  154. package/Tests/App/Dashboard/SloWidgetFetching.test.tsx +531 -0
  155. package/Tests/App/Dashboard/UserSettingsSetupChecklistModel.test.ts +1312 -0
  156. package/Tests/App/Dashboard/UserSettingsSetupChecklistPage.test.tsx +1390 -0
  157. package/Tests/Models/InventoryItemModel.test.ts +174 -0
  158. package/Tests/Models/InventoryItemNaming.test.ts +302 -0
  159. package/Tests/Server/API/AIChatCancelAndFeedback.test.ts +437 -0
  160. package/Tests/Server/API/DashboardPublicRateLimit.test.ts +659 -0
  161. package/Tests/Server/API/DashboardPublicResourceListAPI.test.ts +18 -0
  162. package/Tests/Server/API/DashboardPublicSloAPI.test.ts +880 -0
  163. package/Tests/Server/API/Helpers.ts +24 -15
  164. package/Tests/Server/API/OnCallReadinessAPI.test.ts +2680 -0
  165. package/Tests/Server/API/OnCallSetupReminderAPI.test.ts +915 -0
  166. package/Tests/Server/API/UserProjectsAPI.test.ts +478 -4
  167. package/Tests/Server/Infrastructure/Postgres/EpisodeMemberNotifyIndexesMigration.test.ts +533 -0
  168. package/Tests/Server/Infrastructure/Postgres/InventoryItemArchiveMigration.test.ts +213 -0
  169. package/Tests/Server/Infrastructure/Postgres/RenameInventoryItemMigration.test.ts +432 -0
  170. package/Tests/Server/Infrastructure/Queue.test.ts +293 -0
  171. package/Tests/Server/Middleware/PublicDashboardRateLimit.test.ts +1645 -0
  172. package/Tests/Server/Services/AdminRuleEditGuards.test.ts +2848 -0
  173. package/Tests/Server/Services/DeliverNotificationForRuleExtraction.test.ts +1393 -0
  174. package/Tests/Server/Services/EpisodeRuleSeverityRepair.test.ts +1802 -0
  175. package/Tests/Server/Services/EpisodeStateTimelineNote.test.ts +304 -0
  176. package/Tests/Server/Services/InventoryItemDisplayName.test.ts +339 -0
  177. package/Tests/Server/Services/InventoryItemManualCreate.test.ts +248 -0
  178. package/Tests/Server/Services/IpAllowlistSpoofing.test.ts +450 -0
  179. package/Tests/Server/Services/LogAggregationService.test.ts +235 -1
  180. package/Tests/Server/Services/MetricAggregationService.test.ts +231 -0
  181. package/Tests/Server/Services/MetricEntityMVKeyParity.test.ts +80 -29
  182. package/Tests/Server/Services/MetricServiceAggregate.test.ts +30 -30
  183. package/Tests/Server/Services/NetworkSiteService.test.ts +18 -3
  184. package/Tests/Server/Services/NotificationChannelEventCoverage.test.ts +1728 -0
  185. package/Tests/Server/Services/NotificationDeletionImpact.test.ts +2402 -0
  186. package/Tests/Server/Services/OnCallDutyPolicyExecutionLogTimelineGapFeed.test.ts +394 -0
  187. package/Tests/Server/Services/OnCallNotificationFallback.test.ts +1744 -0
  188. package/Tests/Server/Services/OnCallReadinessService.test.ts +4295 -0
  189. package/Tests/Server/Services/OnCallSetupReminder.test.ts +1272 -0
  190. package/Tests/Server/Services/OnCallWeeklyReadinessDigest.test.ts +1021 -0
  191. package/Tests/Server/Services/ProfileAggregationService.test.ts +296 -0
  192. package/Tests/Server/Services/SeverityCreationRuleBackfill.test.ts +1536 -0
  193. package/Tests/Server/Services/SeverityRuleBackfill.test.ts +1818 -0
  194. package/Tests/Server/Services/TeamComplianceServiceBehaviour.test.ts +1845 -0
  195. package/Tests/Server/Services/UserNotificationRuleAdminGuards.test.ts +1394 -0
  196. package/Tests/Server/Services/UserNotificationRuleDefaultCreation.test.ts +1166 -0
  197. package/Tests/Server/Services/UserNotificationRuleExecuteItem.test.ts +1468 -0
  198. package/Tests/Server/Services/UserOnCallLogNoNotificationRules.test.ts +1457 -0
  199. package/Tests/Server/Types/Database/Permissions/AdminNotificationRuleAccess.test.ts +1546 -0
  200. package/Tests/Server/Types/Database/Permissions/CreateOwnershipScoping.test.ts +529 -0
  201. package/Tests/Server/Types/Database/Permissions/OwnerOnlyColumns.test.ts +1219 -0
  202. package/Tests/Server/Types/Database/Permissions/UserNotificationRuleScoping.test.ts +1089 -0
  203. package/Tests/Server/Types/Workflow/Components/ApiComponentErrorPort.test.ts +2 -1
  204. package/Tests/Server/Types/Workflow/Components/ApiComponentHeaders.test.ts +192 -0
  205. package/Tests/Server/Types/Workflow/Components/BaseModelDatabaseComponents.test.ts +190 -0
  206. package/Tests/Server/Types/Workflow/Components/ChatWebhookComponents.test.ts +44 -14
  207. package/Tests/Server/Types/Workflow/Components/Email.test.ts +151 -0
  208. package/Tests/Server/Types/Workflow/Components/IfElse.test.ts +98 -0
  209. package/Tests/Server/Types/Workflow/Components/JavaScript.test.ts +51 -0
  210. package/Tests/Server/Utils/AI/AIMetaTools.test.ts +586 -0
  211. package/Tests/Server/Utils/AI/AlertMonitorFilters.test.ts +582 -0
  212. package/Tests/Server/Utils/AI/ChatAgentRunner.test.ts +726 -0
  213. package/Tests/Server/Utils/AI/IncidentToolsFilters.test.ts +315 -0
  214. package/Tests/Server/Utils/AI/LLMServiceStopReason.test.ts +314 -0
  215. package/Tests/Server/Utils/AI/LLMServiceToolCalling.test.ts +26 -3
  216. package/Tests/Server/Utils/AI/NoteWriteTools.test.ts +268 -0
  217. package/Tests/Server/Utils/AI/ObservabilityChatPrompt.test.ts +169 -0
  218. package/Tests/Server/Utils/AI/OnCallTools.test.ts +664 -0
  219. package/Tests/Server/Utils/AI/RunbookTools.test.ts +325 -0
  220. package/Tests/Server/Utils/AI/SloTools.test.ts +306 -0
  221. package/Tests/Server/Utils/AI/StatusPageTools.test.ts +391 -0
  222. package/Tests/Server/Utils/AI/TeamTools.test.ts +257 -0
  223. package/Tests/Server/Utils/AI/TimelineTools.test.ts +472 -0
  224. package/Tests/Server/Utils/AI/WorkflowProbeTools.test.ts +428 -0
  225. package/Tests/Server/Utils/AnalyticsDatabase/QuerySettingsHelper.test.ts +152 -0
  226. package/Tests/Server/Utils/ClientIp.test.ts +438 -0
  227. package/Tests/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.test.ts +171 -0
  228. package/Tests/Server/Utils/Dashboard/PublicDashboardSloHistoryPolicy.test.ts +383 -0
  229. package/Tests/Server/Utils/EntityRegistryRowFence.test.ts +23 -25
  230. package/Tests/Server/Utils/MicrosoftTeamsWebhookUrlValidation.test.ts +6 -0
  231. package/Tests/Server/Utils/Monitor/Criteria/DnssecMonitorCriteria.test.ts +307 -0
  232. package/Tests/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.test.ts +468 -0
  233. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorTelemetryDeepLinks.test.ts +460 -0
  234. package/Tests/Server/Utils/ResponseRateLimitStatusCodes.test.ts +137 -0
  235. package/Tests/Server/Utils/SSRFProtectionBypasses.test.ts +40 -8
  236. package/Tests/Server/Utils/SSRFProtectionUserInfo.test.ts +351 -0
  237. package/Tests/Server/Utils/Telemetry/EntityRegistryRetirement.test.ts +531 -0
  238. package/Tests/Server/Utils/Telemetry/InventoryEntityRegistry.test.ts +322 -0
  239. package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +356 -39
  240. package/Tests/Server/Utils/VM/VMAPISubstitution.test.ts +243 -0
  241. package/Tests/Types/IP/IP.test.ts +263 -0
  242. package/Tests/Types/IP/IPWhitelist.test.ts +197 -0
  243. package/Tests/Types/IP/IPv6.test.ts +12 -1
  244. package/Tests/Types/Monitor/SnmpOid.test.ts +64 -0
  245. package/Tests/Types/NetworkDevice/NetworkDeviceMonitoringMethod.test.ts +110 -0
  246. package/Tests/Types/OnCallDutyPolicy/LayerUtilMergeAudit.test.ts +106 -0
  247. package/Tests/Types/OnCallDutyPolicy/LayerUtilMergeDifferential.test.ts +511 -0
  248. package/Tests/Types/OnCallDutyPolicy/ScheduleCoverageEndToEnd.test.ts +489 -0
  249. package/Tests/Types/OnCallDutyPolicy/ScheduleCoverageGapTolerance.test.ts +479 -0
  250. package/Tests/Types/OnCallDutyPolicy/ScheduleCoverageState.test.ts +822 -0
  251. package/Tests/Types/SerializableObjectDictionaryImportCycle.test.ts +197 -0
  252. package/Tests/Types/Telemetry/EntityTypeGroups.test.ts +140 -0
  253. package/Tests/Types/Workflow/BaseModelComponents.test.ts +429 -0
  254. package/Tests/Types/Workflow/Components/BaseModel.test.ts +225 -0
  255. package/Tests/Types/Workflow/IntegrationCredentialMetadata.test.ts +100 -0
  256. package/Tests/Types/Workflow/StepTrace.test.ts +235 -0
  257. package/Tests/Types/Workflow/TemplateSyntax.test.ts +491 -0
  258. package/Tests/Types/Workflow/Templates.test.ts +1218 -0
  259. package/Tests/UI/Components/ActiveFilterChipsOpenRoute.test.tsx +82 -0
  260. package/Tests/UI/Components/ComponentsModal.test.tsx +564 -7
  261. package/Tests/UI/Components/CustomTimeRangeModal.test.tsx +459 -0
  262. package/Tests/UI/Components/DictionaryAttributeFilterRow.test.tsx +477 -0
  263. package/Tests/UI/Components/Forms/AnchoredFieldPopupKeyboard.test.tsx +382 -0
  264. package/Tests/UI/Components/Forms/ColorPickerPicking.test.tsx +569 -0
  265. package/Tests/UI/Components/Forms/ValidationJSON.test.ts +241 -0
  266. package/Tests/UI/Components/KeyboardShortcut.test.tsx +95 -0
  267. package/Tests/UI/Components/LogDetailsPanelCrossSignal.test.tsx +448 -0
  268. package/Tests/UI/Components/LogTimeRangePicker.test.tsx +42 -0
  269. package/Tests/UI/Components/LogsTableCrossLinks.test.tsx +263 -0
  270. package/Tests/UI/Components/ModalPortalDismissal.test.tsx +90 -0
  271. package/Tests/UI/Components/PendingProjectInvitations.test.tsx +913 -0
  272. package/Tests/UI/Components/SimpleLogViewer.test.tsx +228 -0
  273. package/Tests/UI/Components/TableRowSelectability.test.tsx +312 -0
  274. package/Tests/UI/Components/TelemetryTimeRangePicker.test.tsx +49 -7
  275. package/Tests/UI/Components/TimeRangePickerDropdown.test.tsx +325 -0
  276. package/Tests/UI/Components/Workflow/GraphLint.test.ts +893 -0
  277. package/Tests/UI/Components/Workflow/GraphLintSummary.test.ts +755 -0
  278. package/Tests/UI/Components/Workflow/ModelColumnEditor.test.ts +522 -0
  279. package/Tests/UI/Components/Workflow/ModelColumnEditorServerContract.test.ts +193 -0
  280. package/Tests/UI/Components/Workflow/ModelSchema.test.ts +388 -0
  281. package/Tests/UI/Components/Workflow/RunStatusWatcher.test.ts +210 -0
  282. package/Tests/UI/Components/Workflow/StepTraceViewer.test.tsx +256 -0
  283. package/Tests/UI/Components/Workflow/UseRunWatch.test.tsx +665 -0
  284. package/Tests/UI/Components/Workflow/Utils.test.ts +192 -0
  285. package/Tests/UI/Components/Workflow/WorkflowIssuesModal.test.tsx +485 -0
  286. package/Tests/UI/Components/Workflow/WorkflowLogModal.test.tsx +478 -0
  287. package/Tests/UI/Components/Workflow/WorkflowStatusBar.test.tsx +379 -0
  288. package/Tests/UI/EsbuildConfig.test.ts +607 -0
  289. package/Tests/UI/Monitor/MonitorStepCriteriaView.test.tsx +432 -0
  290. package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +5 -0
  291. package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +11 -4
  292. package/Tests/UI/Utils/ModelAPICreateMiscData.test.ts +94 -0
  293. package/Tests/UI/Utils/Platform.test.ts +147 -0
  294. package/Tests/UI/Utils/ProjectInvitationDisplay.test.ts +357 -0
  295. package/Tests/Utils/Monitor/NetworkDeviceLinkRuleUtil.test.ts +198 -0
  296. package/Tests/Utils/Monitor/NetworkDeviceRoleUtil.test.ts +514 -0
  297. package/Tests/Utils/Monitor/NetworkTopologyUtil.test.ts +727 -0
  298. package/Tests/Utils/Schema/AnalyticsModelSchema.test.ts +469 -0
  299. package/Tests/Utils/Schema/ModelSchema.test.ts +268 -0
  300. package/Tests/Utils/Telemetry/CrossSignalScope.test.ts +698 -0
  301. package/Tests/Utils/Telemetry/EntityKeyNonTelemetry.test.ts +193 -0
  302. package/Tests/__mocks__/bullmq.js +55 -0
  303. package/Types/AI/AIChatMessageStatus.ts +8 -1
  304. package/Types/AI/AIChatTypes.ts +12 -0
  305. package/Types/Database/AccessControl/OwnerOnlyColumn.ts +88 -0
  306. package/Types/Exception/ExceptionCode.ts +2 -0
  307. package/Types/Exception/ServiceUnavailableException.ts +8 -0
  308. package/Types/Exception/TooManyRequestsException.ts +8 -0
  309. package/Types/IP/IP.ts +93 -47
  310. package/Types/Monitor/SnmpMonitor/NetworkTopology.ts +80 -3
  311. package/Types/NetworkDevice/NetworkDeviceMonitoringMethod.ts +55 -0
  312. package/Types/OnCallDutyPolicy/Layer.ts +203 -149
  313. package/Types/OnCallDutyPolicy/OnCallDutyPolicyStatus.ts +13 -0
  314. package/Types/OnCallDutyPolicy/ScheduleShiftUtil.ts +155 -10
  315. package/Types/Permission.ts +193 -0
  316. package/Types/SerializableObjectDictionary.ts +133 -39
  317. package/Types/Telemetry/EntityRelationshipType.ts +1 -1
  318. package/Types/Telemetry/EntitySource.ts +40 -0
  319. package/Types/Telemetry/EntityType.ts +28 -1
  320. package/Types/Telemetry/EntityTypeGroups.ts +65 -0
  321. package/Types/Workflow/Component.ts +29 -0
  322. package/Types/Workflow/Components/API.ts +35 -0
  323. package/Types/Workflow/Components/BaseModel.ts +77 -27
  324. package/Types/Workflow/Components/Discord.ts +1 -0
  325. package/Types/Workflow/Components/Email.ts +12 -3
  326. package/Types/Workflow/Components/JavaScript.ts +7 -0
  327. package/Types/Workflow/Components/MicrosoftTeams.ts +3 -2
  328. package/Types/Workflow/Components/Slack.ts +1 -0
  329. package/Types/Workflow/Components/Telegram.ts +1 -0
  330. package/Types/Workflow/StepTrace.ts +181 -0
  331. package/Types/Workflow/TemplateSyntax.ts +543 -0
  332. package/Types/Workflow/Templates.ts +2368 -0
  333. package/UI/Components/Calendar/Calendar.css +43 -0
  334. package/UI/Components/Calendar/Calendar.tsx +8 -0
  335. package/UI/Components/Card/Card.tsx +2 -2
  336. package/UI/Components/Checkbox/Checkbox.tsx +16 -0
  337. package/UI/Components/Date/CustomTimeRangeModal.tsx +278 -0
  338. package/UI/Components/Date/TimeRangePickerDropdown.tsx +250 -0
  339. package/UI/Components/Dictionary/Dictionary.tsx +71 -15
  340. package/UI/Components/FormModal/BasicFormModal.tsx +2 -1
  341. package/UI/Components/Forms/Fields/ColorPicker.tsx +66 -10
  342. package/UI/Components/Forms/Fields/IconPicker.tsx +48 -10
  343. package/UI/Components/Forms/Types/Field.ts +7 -0
  344. package/UI/Components/Forms/Validation.ts +63 -1
  345. package/UI/Components/Header/HeaderIconDropdownButton.tsx +53 -3
  346. package/UI/Components/Input/Input.tsx +32 -3
  347. package/UI/Components/KeyboardShortcut/KeyboardKey.ts +185 -0
  348. package/UI/Components/KeyboardShortcut/KeyboardShortcut.tsx +87 -0
  349. package/UI/Components/LogsViewer/LogsViewer.tsx +28 -0
  350. package/UI/Components/LogsViewer/components/ActiveFilterChips.tsx +31 -0
  351. package/UI/Components/LogsViewer/components/KeyboardShortcutsHelp.tsx +18 -18
  352. package/UI/Components/LogsViewer/components/LogDetailsPanel.tsx +363 -14
  353. package/UI/Components/LogsViewer/components/LogTimeRangePicker.tsx +11 -216
  354. package/UI/Components/LogsViewer/components/LogsAnalyticsView.tsx +11 -0
  355. package/UI/Components/LogsViewer/components/LogsTable.tsx +155 -12
  356. package/UI/Components/LogsViewer/components/LogsViewerToolbar.tsx +29 -0
  357. package/UI/Components/LogsViewer/types.ts +23 -0
  358. package/UI/Components/Markdown.tsx/MarkdownEditor.tsx +9 -2
  359. package/UI/Components/Modal/Modal.tsx +37 -4
  360. package/UI/Components/Navbar/NavBarMenuModal.tsx +15 -30
  361. package/UI/Components/ProjectInvitations/PendingProjectInvitations.tsx +442 -0
  362. package/UI/Components/SimpleLogViewer/SimpleLogViewer.tsx +23 -1
  363. package/UI/Components/Table/Table.tsx +49 -16
  364. package/UI/Components/Table/TableBody.tsx +53 -28
  365. package/UI/Components/Table/TableHeader.tsx +13 -0
  366. package/UI/Components/Table/TableRow.tsx +58 -26
  367. package/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.tsx +11 -210
  368. package/UI/Components/Workflow/ArgumentsForm.tsx +341 -8
  369. package/UI/Components/Workflow/Component.tsx +28 -26
  370. package/UI/Components/Workflow/ComponentReturnValueViewer.tsx +26 -0
  371. package/UI/Components/Workflow/ComponentSettingsModal.tsx +79 -9
  372. package/UI/Components/Workflow/ComponentValuePickerModal.tsx +135 -7
  373. package/UI/Components/Workflow/ComponentsModal.tsx +116 -22
  374. package/UI/Components/Workflow/DocumentationViewer.tsx +59 -9
  375. package/UI/Components/Workflow/GraphLint.ts +628 -0
  376. package/UI/Components/Workflow/GraphLintSummary.ts +390 -0
  377. package/UI/Components/Workflow/ModelColumnEditor.tsx +528 -0
  378. package/UI/Components/Workflow/ModelSchema.ts +278 -0
  379. package/UI/Components/Workflow/RunForm.tsx +41 -7
  380. package/UI/Components/Workflow/RunStatusWatcher.ts +122 -0
  381. package/UI/Components/Workflow/StepTraceViewer.tsx +186 -0
  382. package/UI/Components/Workflow/UseRunWatch.ts +212 -0
  383. package/UI/Components/Workflow/Utils.ts +93 -1
  384. package/UI/Components/Workflow/VariableModal.tsx +6 -2
  385. package/UI/Components/Workflow/Workflow.tsx +126 -7
  386. package/UI/Components/Workflow/WorkflowIssuesModal.tsx +255 -0
  387. package/UI/Components/Workflow/WorkflowLogModal.tsx +128 -0
  388. package/UI/Components/Workflow/WorkflowStatusBar.tsx +224 -0
  389. package/UI/Types/LayeredDismissal.ts +31 -0
  390. package/UI/Types/UseAnchoredFieldPopup.ts +99 -0
  391. package/UI/Utils/AIChatExport/ConversationMarkdown.ts +10 -0
  392. package/UI/Utils/ModelAPI/ModelAPI.ts +7 -1
  393. package/UI/Utils/Platform.ts +149 -0
  394. package/UI/Utils/ProjectInvitationDisplay.ts +118 -0
  395. package/UI/esbuild-config.js +22 -1
  396. package/Utils/Monitor/NetworkDeviceLinkRuleUtil.ts +187 -0
  397. package/Utils/Monitor/NetworkDeviceRoleUtil.ts +533 -0
  398. package/Utils/Monitor/NetworkTopologyUtil.ts +917 -155
  399. package/Utils/Telemetry/CrossSignalScope.ts +502 -0
  400. package/Utils/Telemetry/EntityKey.ts +71 -5
  401. package/Utils/Telemetry/EntityRelationship.ts +1 -1
  402. package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByK8sCluster.js +1 -1
  403. package/build/dist/Models/AnalyticsModels/MetricItemAggMV1mByService.js +1 -1
  404. package/build/dist/Models/DatabaseModels/AIConversation.js +32 -0
  405. package/build/dist/Models/DatabaseModels/AIConversation.js.map +1 -1
  406. package/build/dist/Models/DatabaseModels/AIConversationMessage.js +42 -0
  407. package/build/dist/Models/DatabaseModels/AIConversationMessage.js.map +1 -1
  408. package/build/dist/Models/DatabaseModels/AlertEpisodeMember.js +28 -0
  409. package/build/dist/Models/DatabaseModels/AlertEpisodeMember.js.map +1 -1
  410. package/build/dist/Models/DatabaseModels/IncidentEpisodeMember.js +29 -0
  411. package/build/dist/Models/DatabaseModels/IncidentEpisodeMember.js.map +1 -1
  412. package/build/dist/Models/DatabaseModels/Index.js +12 -4
  413. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  414. package/build/dist/Models/DatabaseModels/{TelemetryEntity.js → InventoryItem.js} +212 -29
  415. package/build/dist/Models/DatabaseModels/InventoryItem.js.map +1 -0
  416. package/build/dist/Models/DatabaseModels/InventoryItemCustomField.js +454 -0
  417. package/build/dist/Models/DatabaseModels/InventoryItemCustomField.js.map +1 -0
  418. package/build/dist/Models/DatabaseModels/{TelemetryEntityRelationship.js → InventoryItemRelationship.js} +52 -25
  419. package/build/dist/Models/DatabaseModels/InventoryItemRelationship.js.map +1 -0
  420. package/build/dist/Models/DatabaseModels/NetworkDevice.js +141 -0
  421. package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
  422. package/build/dist/Models/DatabaseModels/NetworkDeviceLink.js +719 -0
  423. package/build/dist/Models/DatabaseModels/NetworkDeviceLink.js.map +1 -0
  424. package/build/dist/Models/DatabaseModels/NetworkDeviceLinkRule.js +475 -0
  425. package/build/dist/Models/DatabaseModels/NetworkDeviceLinkRule.js.map +1 -0
  426. package/build/dist/Models/DatabaseModels/NetworkTopologySuppression.js +446 -0
  427. package/build/dist/Models/DatabaseModels/NetworkTopologySuppression.js.map +1 -0
  428. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyFeed.js +9 -0
  429. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyFeed.js.map +1 -1
  430. package/build/dist/Models/DatabaseModels/Project.js +80 -0
  431. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  432. package/build/dist/Models/DatabaseModels/UserCall.js +46 -2
  433. package/build/dist/Models/DatabaseModels/UserCall.js.map +1 -1
  434. package/build/dist/Models/DatabaseModels/UserEmail.js +48 -2
  435. package/build/dist/Models/DatabaseModels/UserEmail.js.map +1 -1
  436. package/build/dist/Models/DatabaseModels/UserNotificationRule.js +424 -55
  437. package/build/dist/Models/DatabaseModels/UserNotificationRule.js.map +1 -1
  438. package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js +24 -2
  439. package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js.map +1 -1
  440. package/build/dist/Models/DatabaseModels/UserPush.js +51 -1
  441. package/build/dist/Models/DatabaseModels/UserPush.js.map +1 -1
  442. package/build/dist/Models/DatabaseModels/UserSMS.js +47 -2
  443. package/build/dist/Models/DatabaseModels/UserSMS.js.map +1 -1
  444. package/build/dist/Models/DatabaseModels/UserTelegram.js +65 -3
  445. package/build/dist/Models/DatabaseModels/UserTelegram.js.map +1 -1
  446. package/build/dist/Models/DatabaseModels/UserWebhook.js +56 -2
  447. package/build/dist/Models/DatabaseModels/UserWebhook.js.map +1 -1
  448. package/build/dist/Models/DatabaseModels/UserWhatsApp.js +45 -2
  449. package/build/dist/Models/DatabaseModels/UserWhatsApp.js.map +1 -1
  450. package/build/dist/Models/DatabaseModels/WorkflowLog.js +39 -0
  451. package/build/dist/Models/DatabaseModels/WorkflowLog.js.map +1 -1
  452. package/build/dist/Models/DatabaseModels/WorkflowVariable.js +12 -0
  453. package/build/dist/Models/DatabaseModels/WorkflowVariable.js.map +1 -1
  454. package/build/dist/Server/API/AIChatAPI.js +237 -1
  455. package/build/dist/Server/API/AIChatAPI.js.map +1 -1
  456. package/build/dist/Server/API/DashboardAPI.js +165 -13
  457. package/build/dist/Server/API/DashboardAPI.js.map +1 -1
  458. package/build/dist/Server/API/OnCallReadinessAPI.js +599 -0
  459. package/build/dist/Server/API/OnCallReadinessAPI.js.map +1 -0
  460. package/build/dist/Server/API/TeamComplianceAPI.js +68 -9
  461. package/build/dist/Server/API/TeamComplianceAPI.js.map +1 -1
  462. package/build/dist/Server/API/TelemetryAPI.js +129 -18
  463. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  464. package/build/dist/Server/API/UserAPI.js +16 -1
  465. package/build/dist/Server/API/UserAPI.js.map +1 -1
  466. package/build/dist/Server/EnvironmentConfig.js +45 -0
  467. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  468. package/build/dist/Server/Infrastructure/Postgres/DataSourceOptions.js +22 -0
  469. package/build/dist/Server/Infrastructure/Postgres/DataSourceOptions.js.map +1 -1
  470. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786100000000-RestoreServiceLowerNameIndex.js +4 -4
  471. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786551733814-MigrationName.js +20 -0
  472. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786551733814-MigrationName.js.map +1 -0
  473. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786559879134-AddWorkflowLogStepTrace.js +12 -0
  474. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786559879134-AddWorkflowLogStepTrace.js.map +1 -0
  475. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786625176831-AddMonitoringMethodToNetworkDevice.js +18 -0
  476. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786625176831-AddMonitoringMethodToNetworkDevice.js.map +1 -0
  477. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786634985763-AddNetworkDeviceLink.js +39 -0
  478. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786634985763-AddNetworkDeviceLink.js.map +1 -0
  479. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786639512056-AddNetworkDeviceLinkRule.js +38 -0
  480. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786639512056-AddNetworkDeviceLinkRule.js.map +1 -0
  481. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786639972982-AddNetworkTopologySuppression.js +22 -0
  482. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786639972982-AddNetworkTopologySuppression.js.map +1 -0
  483. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786800000000-RenameTelemetryEntityToInventoryItem.js +150 -0
  484. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786800000000-RenameTelemetryEntityToInventoryItem.js.map +1 -0
  485. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786900000000-AddInventoryItemArchiveAndCustomFields.js +57 -0
  486. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786900000000-AddInventoryItemArchiveAndCustomFields.js.map +1 -0
  487. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787000000000-AddOnCallNotificationFallbackColumns.js +69 -0
  488. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787000000000-AddOnCallNotificationFallbackColumns.js.map +1 -0
  489. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787100000000-AddAIConversationPageContext.js +32 -0
  490. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787100000000-AddAIConversationPageContext.js.map +1 -0
  491. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787200000000-AddAIChatMessageFeedback.js +26 -0
  492. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787200000000-AddAIChatMessageFeedback.js.map +1 -0
  493. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787300000000-AddEpisodeMemberNotifyIndexes.js +48 -0
  494. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787300000000-AddEpisodeMemberNotifyIndexes.js.map +1 -0
  495. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +24 -0
  496. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  497. package/build/dist/Server/Infrastructure/Queue.js +72 -13
  498. package/build/dist/Server/Infrastructure/Queue.js.map +1 -1
  499. package/build/dist/Server/Middleware/MasterAdminAuthorization.js +11 -6
  500. package/build/dist/Server/Middleware/MasterAdminAuthorization.js.map +1 -1
  501. package/build/dist/Server/Middleware/PublicDashboardRateLimit.js +399 -0
  502. package/build/dist/Server/Middleware/PublicDashboardRateLimit.js.map +1 -0
  503. package/build/dist/Server/Services/AIService.js +1 -0
  504. package/build/dist/Server/Services/AIService.js.map +1 -1
  505. package/build/dist/Server/Services/AlertEpisodeStateTimelineService.js +24 -3
  506. package/build/dist/Server/Services/AlertEpisodeStateTimelineService.js.map +1 -1
  507. package/build/dist/Server/Services/AlertSeverityService.js +54 -0
  508. package/build/dist/Server/Services/AlertSeverityService.js.map +1 -1
  509. package/build/dist/Server/Services/DashboardService.js +10 -9
  510. package/build/dist/Server/Services/DashboardService.js.map +1 -1
  511. package/build/dist/Server/Services/DatabaseService.js +24 -2
  512. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  513. package/build/dist/Server/Services/IncidentEpisodeStateTimelineService.js +24 -3
  514. package/build/dist/Server/Services/IncidentEpisodeStateTimelineService.js.map +1 -1
  515. package/build/dist/Server/Services/IncidentSeverityService.js +67 -0
  516. package/build/dist/Server/Services/IncidentSeverityService.js.map +1 -1
  517. package/build/dist/Server/Services/Index.js +12 -4
  518. package/build/dist/Server/Services/Index.js.map +1 -1
  519. package/build/dist/Server/Services/InventoryItemCustomFieldService.js +9 -0
  520. package/build/dist/Server/Services/InventoryItemCustomFieldService.js.map +1 -0
  521. package/build/dist/Server/Services/{TelemetryEntityRelationshipService.js → InventoryItemRelationshipService.js} +9 -6
  522. package/build/dist/Server/Services/InventoryItemRelationshipService.js.map +1 -0
  523. package/build/dist/Server/Services/{TelemetryEntityService.js → InventoryItemService.js} +158 -23
  524. package/build/dist/Server/Services/InventoryItemService.js.map +1 -0
  525. package/build/dist/Server/Services/LogAggregationService.js +27 -8
  526. package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
  527. package/build/dist/Server/Services/MetricAggregationService.js +80 -0
  528. package/build/dist/Server/Services/MetricAggregationService.js.map +1 -1
  529. package/build/dist/Server/Services/MetricService.js +6 -6
  530. package/build/dist/Server/Services/MetricService.js.map +1 -1
  531. package/build/dist/Server/Services/NetworkDeviceLinkRuleService.js +9 -0
  532. package/build/dist/Server/Services/NetworkDeviceLinkRuleService.js.map +1 -0
  533. package/build/dist/Server/Services/NetworkDeviceLinkService.js +71 -0
  534. package/build/dist/Server/Services/NetworkDeviceLinkService.js.map +1 -0
  535. package/build/dist/Server/Services/NetworkDeviceService.js +113 -0
  536. package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
  537. package/build/dist/Server/Services/NetworkSiteService.js +53 -13
  538. package/build/dist/Server/Services/NetworkSiteService.js.map +1 -1
  539. package/build/dist/Server/Services/NetworkTopologySuppressionService.js +85 -0
  540. package/build/dist/Server/Services/NetworkTopologySuppressionService.js.map +1 -0
  541. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js +48 -32
  542. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js.map +1 -1
  543. package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogService.js +8 -0
  544. package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogService.js.map +1 -1
  545. package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.js +51 -12
  546. package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.js.map +1 -1
  547. package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js +57 -13
  548. package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js.map +1 -1
  549. package/build/dist/Server/Services/OnCallNotificationAlertingService.js +548 -0
  550. package/build/dist/Server/Services/OnCallNotificationAlertingService.js.map +1 -0
  551. package/build/dist/Server/Services/OnCallReadinessService.js +1961 -0
  552. package/build/dist/Server/Services/OnCallReadinessService.js.map +1 -0
  553. package/build/dist/Server/Services/OnCallSetupReminderService.js +738 -0
  554. package/build/dist/Server/Services/OnCallSetupReminderService.js.map +1 -0
  555. package/build/dist/Server/Services/ProfileAggregationService.js +68 -4
  556. package/build/dist/Server/Services/ProfileAggregationService.js.map +1 -1
  557. package/build/dist/Server/Services/StatusPageService.js +11 -10
  558. package/build/dist/Server/Services/StatusPageService.js.map +1 -1
  559. package/build/dist/Server/Services/TeamComplianceService.js +312 -160
  560. package/build/dist/Server/Services/TeamComplianceService.js.map +1 -1
  561. package/build/dist/Server/Services/UserCallService.js +24 -1
  562. package/build/dist/Server/Services/UserCallService.js.map +1 -1
  563. package/build/dist/Server/Services/UserEmailService.js +24 -1
  564. package/build/dist/Server/Services/UserEmailService.js.map +1 -1
  565. package/build/dist/Server/Services/UserNotificationRuleAdminService.js +858 -0
  566. package/build/dist/Server/Services/UserNotificationRuleAdminService.js.map +1 -0
  567. package/build/dist/Server/Services/UserNotificationRuleService.js +2830 -175
  568. package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
  569. package/build/dist/Server/Services/UserOnCallLogService.js +488 -43
  570. package/build/dist/Server/Services/UserOnCallLogService.js.map +1 -1
  571. package/build/dist/Server/Services/UserPushService.js +26 -0
  572. package/build/dist/Server/Services/UserPushService.js.map +1 -1
  573. package/build/dist/Server/Services/UserService.js +10 -0
  574. package/build/dist/Server/Services/UserService.js.map +1 -1
  575. package/build/dist/Server/Services/UserSmsService.js +24 -1
  576. package/build/dist/Server/Services/UserSmsService.js.map +1 -1
  577. package/build/dist/Server/Services/UserTelegramService.js +22 -1
  578. package/build/dist/Server/Services/UserTelegramService.js.map +1 -1
  579. package/build/dist/Server/Services/UserWebhookService.js +25 -1
  580. package/build/dist/Server/Services/UserWebhookService.js.map +1 -1
  581. package/build/dist/Server/Services/UserWhatsAppService.js +22 -1
  582. package/build/dist/Server/Services/UserWhatsAppService.js.map +1 -1
  583. package/build/dist/Server/Types/Database/Permissions/BasePermission.js +12 -1
  584. package/build/dist/Server/Types/Database/Permissions/BasePermission.js.map +1 -1
  585. package/build/dist/Server/Types/Database/Permissions/CreatePermission.js +126 -0
  586. package/build/dist/Server/Types/Database/Permissions/CreatePermission.js.map +1 -1
  587. package/build/dist/Server/Types/Database/Permissions/OwnerOnlyColumnPermission.js +254 -0
  588. package/build/dist/Server/Types/Database/Permissions/OwnerOnlyColumnPermission.js.map +1 -0
  589. package/build/dist/Server/Types/Database/Permissions/QueryPermission.js +47 -2
  590. package/build/dist/Server/Types/Database/Permissions/QueryPermission.js.map +1 -1
  591. package/build/dist/Server/Types/Database/Permissions/TenantPermission.js +7 -0
  592. package/build/dist/Server/Types/Database/Permissions/TenantPermission.js.map +1 -1
  593. package/build/dist/Server/Types/Workflow/Components/API/Delete.js +1 -1
  594. package/build/dist/Server/Types/Workflow/Components/API/Delete.js.map +1 -1
  595. package/build/dist/Server/Types/Workflow/Components/API/Get.js +1 -1
  596. package/build/dist/Server/Types/Workflow/Components/API/Get.js.map +1 -1
  597. package/build/dist/Server/Types/Workflow/Components/API/Patch.js +1 -1
  598. package/build/dist/Server/Types/Workflow/Components/API/Patch.js.map +1 -1
  599. package/build/dist/Server/Types/Workflow/Components/API/Post.js +1 -1
  600. package/build/dist/Server/Types/Workflow/Components/API/Post.js.map +1 -1
  601. package/build/dist/Server/Types/Workflow/Components/API/Put.js +1 -1
  602. package/build/dist/Server/Types/Workflow/Components/API/Put.js.map +1 -1
  603. package/build/dist/Server/Types/Workflow/Components/API/Utils.js +28 -0
  604. package/build/dist/Server/Types/Workflow/Components/API/Utils.js.map +1 -1
  605. package/build/dist/Server/Types/Workflow/Components/BaseModel/CreateManyBaseModel.js +21 -5
  606. package/build/dist/Server/Types/Workflow/Components/BaseModel/CreateManyBaseModel.js.map +1 -1
  607. package/build/dist/Server/Types/Workflow/Components/BaseModel/CreateOneBaseModel.js +14 -10
  608. package/build/dist/Server/Types/Workflow/Components/BaseModel/CreateOneBaseModel.js.map +1 -1
  609. package/build/dist/Server/Types/Workflow/Components/BaseModel/ModelArguments.js +31 -0
  610. package/build/dist/Server/Types/Workflow/Components/BaseModel/ModelArguments.js.map +1 -1
  611. package/build/dist/Server/Types/Workflow/Components/Conditions/IfElse.js +3 -9
  612. package/build/dist/Server/Types/Workflow/Components/Conditions/IfElse.js.map +1 -1
  613. package/build/dist/Server/Types/Workflow/Components/Email.js +15 -4
  614. package/build/dist/Server/Types/Workflow/Components/Email.js.map +1 -1
  615. package/build/dist/Server/Types/Workflow/Components/JavaScript.js +7 -2
  616. package/build/dist/Server/Types/Workflow/Components/JavaScript.js.map +1 -1
  617. package/build/dist/Server/Types/Workflow/Components/MicrosoftTeams/SendMessageToChannel.js +1 -1
  618. package/build/dist/Server/Types/Workflow/Components/MicrosoftTeams/SendMessageToChannel.js.map +1 -1
  619. package/build/dist/Server/Types/Workflow/TriggerCode.js.map +1 -1
  620. package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js +514 -56
  621. package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js.map +1 -1
  622. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js +20 -3
  623. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js.map +1 -1
  624. package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js +19 -6
  625. package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js.map +1 -1
  626. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +7 -0
  627. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
  628. package/build/dist/Server/Utils/AI/Toolbox/AIActionTools.js +2 -2
  629. package/build/dist/Server/Utils/AI/Toolbox/AIActionTools.js.map +1 -1
  630. package/build/dist/Server/Utils/AI/Toolbox/AIMetaTools.js +692 -0
  631. package/build/dist/Server/Utils/AI/Toolbox/AIMetaTools.js.map +1 -0
  632. package/build/dist/Server/Utils/AI/Toolbox/AlertTools.js +148 -12
  633. package/build/dist/Server/Utils/AI/Toolbox/AlertTools.js.map +1 -1
  634. package/build/dist/Server/Utils/AI/Toolbox/IncidentTools.js +157 -10
  635. package/build/dist/Server/Utils/AI/Toolbox/IncidentTools.js.map +1 -1
  636. package/build/dist/Server/Utils/AI/Toolbox/Index.js +37 -0
  637. package/build/dist/Server/Utils/AI/Toolbox/Index.js.map +1 -1
  638. package/build/dist/Server/Utils/AI/Toolbox/MonitorTools.js +259 -14
  639. package/build/dist/Server/Utils/AI/Toolbox/MonitorTools.js.map +1 -1
  640. package/build/dist/Server/Utils/AI/Toolbox/NoteWriteTools.js +235 -0
  641. package/build/dist/Server/Utils/AI/Toolbox/NoteWriteTools.js.map +1 -0
  642. package/build/dist/Server/Utils/AI/Toolbox/OnCallTools.js +1000 -0
  643. package/build/dist/Server/Utils/AI/Toolbox/OnCallTools.js.map +1 -0
  644. package/build/dist/Server/Utils/AI/Toolbox/RunbookTools.js +356 -0
  645. package/build/dist/Server/Utils/AI/Toolbox/RunbookTools.js.map +1 -0
  646. package/build/dist/Server/Utils/AI/Toolbox/SloTools.js +394 -0
  647. package/build/dist/Server/Utils/AI/Toolbox/SloTools.js.map +1 -0
  648. package/build/dist/Server/Utils/AI/Toolbox/StatusPageTools.js +465 -0
  649. package/build/dist/Server/Utils/AI/Toolbox/StatusPageTools.js.map +1 -0
  650. package/build/dist/Server/Utils/AI/Toolbox/TeamTools.js +280 -0
  651. package/build/dist/Server/Utils/AI/Toolbox/TeamTools.js.map +1 -0
  652. package/build/dist/Server/Utils/AI/Toolbox/TimelineTools.js +527 -0
  653. package/build/dist/Server/Utils/AI/Toolbox/TimelineTools.js.map +1 -0
  654. package/build/dist/Server/Utils/AI/Toolbox/WorkflowProbeTools.js +548 -0
  655. package/build/dist/Server/Utils/AI/Toolbox/WorkflowProbeTools.js.map +1 -0
  656. package/build/dist/Server/Utils/ClientIp.js +137 -0
  657. package/build/dist/Server/Utils/ClientIp.js.map +1 -0
  658. package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js +38 -0
  659. package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js.map +1 -1
  660. package/build/dist/Server/Utils/Dashboard/PublicDashboardSloHistoryPolicy.js +89 -0
  661. package/build/dist/Server/Utils/Dashboard/PublicDashboardSloHistoryPolicy.js.map +1 -0
  662. package/build/dist/Server/Utils/Dashboard/PublicDashboardSloWidget.js +77 -0
  663. package/build/dist/Server/Utils/Dashboard/PublicDashboardSloWidget.js.map +1 -0
  664. package/build/dist/Server/Utils/Express.js +12 -12
  665. package/build/dist/Server/Utils/Express.js.map +1 -1
  666. package/build/dist/Server/Utils/LLM/LLMService.js +70 -7
  667. package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
  668. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +121 -11
  669. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  670. package/build/dist/Server/Utils/SSRFProtection.js +82 -21
  671. package/build/dist/Server/Utils/SSRFProtection.js.map +1 -1
  672. package/build/dist/Server/Utils/StartServer.js +12 -4
  673. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  674. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +165 -18
  675. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
  676. package/build/dist/Server/Utils/Telemetry/InventoryEntityRegistry.js +507 -0
  677. package/build/dist/Server/Utils/Telemetry/InventoryEntityRegistry.js.map +1 -0
  678. package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +122 -47
  679. package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
  680. package/build/dist/Server/Utils/VM/VMAPI.js +51 -4
  681. package/build/dist/Server/Utils/VM/VMAPI.js.map +1 -1
  682. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +7 -3
  683. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
  684. package/build/dist/Types/AI/AIChatMessageStatus.js +8 -1
  685. package/build/dist/Types/AI/AIChatMessageStatus.js.map +1 -1
  686. package/build/dist/Types/AI/AIChatTypes.js +12 -0
  687. package/build/dist/Types/AI/AIChatTypes.js.map +1 -1
  688. package/build/dist/Types/Database/AccessControl/OwnerOnlyColumn.js +60 -0
  689. package/build/dist/Types/Database/AccessControl/OwnerOnlyColumn.js.map +1 -0
  690. package/build/dist/Types/Exception/ExceptionCode.js +2 -0
  691. package/build/dist/Types/Exception/ExceptionCode.js.map +1 -1
  692. package/build/dist/Types/Exception/ServiceUnavailableException.js +8 -0
  693. package/build/dist/Types/Exception/ServiceUnavailableException.js.map +1 -0
  694. package/build/dist/Types/Exception/TooManyRequestsException.js +8 -0
  695. package/build/dist/Types/Exception/TooManyRequestsException.js.map +1 -0
  696. package/build/dist/Types/IP/IP.js +87 -43
  697. package/build/dist/Types/IP/IP.js.map +1 -1
  698. package/build/dist/Types/NetworkDevice/NetworkDeviceMonitoringMethod.js +50 -0
  699. package/build/dist/Types/NetworkDevice/NetworkDeviceMonitoringMethod.js.map +1 -0
  700. package/build/dist/Types/OnCallDutyPolicy/Layer.js +186 -123
  701. package/build/dist/Types/OnCallDutyPolicy/Layer.js.map +1 -1
  702. package/build/dist/Types/OnCallDutyPolicy/OnCallDutyPolicyStatus.js +13 -0
  703. package/build/dist/Types/OnCallDutyPolicy/OnCallDutyPolicyStatus.js.map +1 -1
  704. package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js +105 -11
  705. package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js.map +1 -1
  706. package/build/dist/Types/Permission.js +174 -0
  707. package/build/dist/Types/Permission.js.map +1 -1
  708. package/build/dist/Types/SerializableObjectDictionary.js +133 -39
  709. package/build/dist/Types/SerializableObjectDictionary.js.map +1 -1
  710. package/build/dist/Types/Telemetry/EntityRelationshipType.js +1 -1
  711. package/build/dist/Types/Telemetry/EntitySource.js +39 -0
  712. package/build/dist/Types/Telemetry/EntitySource.js.map +1 -0
  713. package/build/dist/Types/Telemetry/EntityType.js +28 -1
  714. package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
  715. package/build/dist/Types/Telemetry/EntityTypeGroups.js +57 -0
  716. package/build/dist/Types/Telemetry/EntityTypeGroups.js.map +1 -0
  717. package/build/dist/Types/Workflow/Component.js +21 -0
  718. package/build/dist/Types/Workflow/Component.js.map +1 -1
  719. package/build/dist/Types/Workflow/Components/API.js +35 -0
  720. package/build/dist/Types/Workflow/Components/API.js.map +1 -1
  721. package/build/dist/Types/Workflow/Components/BaseModel.js +68 -26
  722. package/build/dist/Types/Workflow/Components/BaseModel.js.map +1 -1
  723. package/build/dist/Types/Workflow/Components/Discord.js +1 -0
  724. package/build/dist/Types/Workflow/Components/Discord.js.map +1 -1
  725. package/build/dist/Types/Workflow/Components/Email.js +12 -3
  726. package/build/dist/Types/Workflow/Components/Email.js.map +1 -1
  727. package/build/dist/Types/Workflow/Components/JavaScript.js +7 -0
  728. package/build/dist/Types/Workflow/Components/JavaScript.js.map +1 -1
  729. package/build/dist/Types/Workflow/Components/MicrosoftTeams.js +3 -2
  730. package/build/dist/Types/Workflow/Components/MicrosoftTeams.js.map +1 -1
  731. package/build/dist/Types/Workflow/Components/Slack.js +1 -0
  732. package/build/dist/Types/Workflow/Components/Slack.js.map +1 -1
  733. package/build/dist/Types/Workflow/Components/Telegram.js +1 -0
  734. package/build/dist/Types/Workflow/Components/Telegram.js.map +1 -1
  735. package/build/dist/Types/Workflow/StepTrace.js +104 -0
  736. package/build/dist/Types/Workflow/StepTrace.js.map +1 -0
  737. package/build/dist/Types/Workflow/TemplateSyntax.js +338 -0
  738. package/build/dist/Types/Workflow/TemplateSyntax.js.map +1 -0
  739. package/build/dist/Types/Workflow/Templates.js +2111 -0
  740. package/build/dist/Types/Workflow/Templates.js.map +1 -0
  741. package/build/dist/UI/Components/Calendar/Calendar.js +1 -1
  742. package/build/dist/UI/Components/Calendar/Calendar.js.map +1 -1
  743. package/build/dist/UI/Components/Checkbox/Checkbox.js +1 -1
  744. package/build/dist/UI/Components/Checkbox/Checkbox.js.map +1 -1
  745. package/build/dist/UI/Components/Date/CustomTimeRangeModal.js +126 -0
  746. package/build/dist/UI/Components/Date/CustomTimeRangeModal.js.map +1 -0
  747. package/build/dist/UI/Components/Date/TimeRangePickerDropdown.js +123 -0
  748. package/build/dist/UI/Components/Date/TimeRangePickerDropdown.js.map +1 -0
  749. package/build/dist/UI/Components/Dictionary/Dictionary.js +47 -17
  750. package/build/dist/UI/Components/Dictionary/Dictionary.js.map +1 -1
  751. package/build/dist/UI/Components/FormModal/BasicFormModal.js.map +1 -1
  752. package/build/dist/UI/Components/Forms/Fields/ColorPicker.js +52 -13
  753. package/build/dist/UI/Components/Forms/Fields/ColorPicker.js.map +1 -1
  754. package/build/dist/UI/Components/Forms/Fields/IconPicker.js +28 -12
  755. package/build/dist/UI/Components/Forms/Fields/IconPicker.js.map +1 -1
  756. package/build/dist/UI/Components/Forms/Validation.js +44 -0
  757. package/build/dist/UI/Components/Forms/Validation.js.map +1 -1
  758. package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js +27 -4
  759. package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js.map +1 -1
  760. package/build/dist/UI/Components/Input/Input.js +13 -4
  761. package/build/dist/UI/Components/Input/Input.js.map +1 -1
  762. package/build/dist/UI/Components/KeyboardShortcut/KeyboardKey.js +163 -0
  763. package/build/dist/UI/Components/KeyboardShortcut/KeyboardKey.js.map +1 -0
  764. package/build/dist/UI/Components/KeyboardShortcut/KeyboardShortcut.js +47 -0
  765. package/build/dist/UI/Components/KeyboardShortcut/KeyboardShortcut.js.map +1 -0
  766. package/build/dist/UI/Components/LogsViewer/LogsViewer.js +4 -4
  767. package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
  768. package/build/dist/UI/Components/LogsViewer/components/ActiveFilterChips.js +11 -1
  769. package/build/dist/UI/Components/LogsViewer/components/ActiveFilterChips.js.map +1 -1
  770. package/build/dist/UI/Components/LogsViewer/components/KeyboardShortcutsHelp.js +10 -8
  771. package/build/dist/UI/Components/LogsViewer/components/KeyboardShortcutsHelp.js.map +1 -1
  772. package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js +227 -14
  773. package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js.map +1 -1
  774. package/build/dist/UI/Components/LogsViewer/components/LogTimeRangePicker.js +5 -108
  775. package/build/dist/UI/Components/LogsViewer/components/LogTimeRangePicker.js.map +1 -1
  776. package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js +5 -0
  777. package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js.map +1 -1
  778. package/build/dist/UI/Components/LogsViewer/components/LogsTable.js +69 -5
  779. package/build/dist/UI/Components/LogsViewer/components/LogsTable.js.map +1 -1
  780. package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js +8 -0
  781. package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js.map +1 -1
  782. package/build/dist/UI/Components/LogsViewer/types.js.map +1 -1
  783. package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js +9 -2
  784. package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js.map +1 -1
  785. package/build/dist/UI/Components/Modal/Modal.js +31 -5
  786. package/build/dist/UI/Components/Modal/Modal.js.map +1 -1
  787. package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +8 -21
  788. package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -1
  789. package/build/dist/UI/Components/ProjectInvitations/PendingProjectInvitations.js +251 -0
  790. package/build/dist/UI/Components/ProjectInvitations/PendingProjectInvitations.js.map +1 -0
  791. package/build/dist/UI/Components/SimpleLogViewer/SimpleLogViewer.js +9 -2
  792. package/build/dist/UI/Components/SimpleLogViewer/SimpleLogViewer.js.map +1 -1
  793. package/build/dist/UI/Components/Table/Table.js +27 -15
  794. package/build/dist/UI/Components/Table/Table.js.map +1 -1
  795. package/build/dist/UI/Components/Table/TableBody.js +24 -18
  796. package/build/dist/UI/Components/Table/TableBody.js.map +1 -1
  797. package/build/dist/UI/Components/Table/TableHeader.js +9 -1
  798. package/build/dist/UI/Components/Table/TableHeader.js.map +1 -1
  799. package/build/dist/UI/Components/Table/TableRow.js +29 -21
  800. package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
  801. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.js +5 -105
  802. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.js.map +1 -1
  803. package/build/dist/UI/Components/Workflow/ArgumentsForm.js +261 -14
  804. package/build/dist/UI/Components/Workflow/ArgumentsForm.js.map +1 -1
  805. package/build/dist/UI/Components/Workflow/Component.js +20 -19
  806. package/build/dist/UI/Components/Workflow/Component.js.map +1 -1
  807. package/build/dist/UI/Components/Workflow/ComponentReturnValueViewer.js +10 -1
  808. package/build/dist/UI/Components/Workflow/ComponentReturnValueViewer.js.map +1 -1
  809. package/build/dist/UI/Components/Workflow/ComponentSettingsModal.js +35 -7
  810. package/build/dist/UI/Components/Workflow/ComponentSettingsModal.js.map +1 -1
  811. package/build/dist/UI/Components/Workflow/ComponentValuePickerModal.js +57 -7
  812. package/build/dist/UI/Components/Workflow/ComponentValuePickerModal.js.map +1 -1
  813. package/build/dist/UI/Components/Workflow/ComponentsModal.js +53 -18
  814. package/build/dist/UI/Components/Workflow/ComponentsModal.js.map +1 -1
  815. package/build/dist/UI/Components/Workflow/DocumentationViewer.js +19 -6
  816. package/build/dist/UI/Components/Workflow/DocumentationViewer.js.map +1 -1
  817. package/build/dist/UI/Components/Workflow/GraphLint.js +425 -0
  818. package/build/dist/UI/Components/Workflow/GraphLint.js.map +1 -0
  819. package/build/dist/UI/Components/Workflow/GraphLintSummary.js +231 -0
  820. package/build/dist/UI/Components/Workflow/GraphLintSummary.js.map +1 -0
  821. package/build/dist/UI/Components/Workflow/ModelColumnEditor.js +320 -0
  822. package/build/dist/UI/Components/Workflow/ModelColumnEditor.js.map +1 -0
  823. package/build/dist/UI/Components/Workflow/ModelSchema.js +156 -0
  824. package/build/dist/UI/Components/Workflow/ModelSchema.js.map +1 -0
  825. package/build/dist/UI/Components/Workflow/RunForm.js +22 -6
  826. package/build/dist/UI/Components/Workflow/RunForm.js.map +1 -1
  827. package/build/dist/UI/Components/Workflow/RunStatusWatcher.js +76 -0
  828. package/build/dist/UI/Components/Workflow/RunStatusWatcher.js.map +1 -0
  829. package/build/dist/UI/Components/Workflow/StepTraceViewer.js +76 -0
  830. package/build/dist/UI/Components/Workflow/StepTraceViewer.js.map +1 -0
  831. package/build/dist/UI/Components/Workflow/UseRunWatch.js +123 -0
  832. package/build/dist/UI/Components/Workflow/UseRunWatch.js.map +1 -0
  833. package/build/dist/UI/Components/Workflow/Utils.js +73 -1
  834. package/build/dist/UI/Components/Workflow/Utils.js.map +1 -1
  835. package/build/dist/UI/Components/Workflow/VariableModal.js +3 -2
  836. package/build/dist/UI/Components/Workflow/VariableModal.js.map +1 -1
  837. package/build/dist/UI/Components/Workflow/Workflow.js +92 -7
  838. package/build/dist/UI/Components/Workflow/Workflow.js.map +1 -1
  839. package/build/dist/UI/Components/Workflow/WorkflowIssuesModal.js +99 -0
  840. package/build/dist/UI/Components/Workflow/WorkflowIssuesModal.js.map +1 -0
  841. package/build/dist/UI/Components/Workflow/WorkflowLogModal.js +56 -0
  842. package/build/dist/UI/Components/Workflow/WorkflowLogModal.js.map +1 -0
  843. package/build/dist/UI/Components/Workflow/WorkflowStatusBar.js +92 -0
  844. package/build/dist/UI/Components/Workflow/WorkflowStatusBar.js.map +1 -0
  845. package/build/dist/UI/Types/LayeredDismissal.js +21 -0
  846. package/build/dist/UI/Types/LayeredDismissal.js.map +1 -0
  847. package/build/dist/UI/Types/UseAnchoredFieldPopup.js +74 -1
  848. package/build/dist/UI/Types/UseAnchoredFieldPopup.js.map +1 -1
  849. package/build/dist/UI/Utils/AIChatExport/ConversationMarkdown.js +9 -0
  850. package/build/dist/UI/Utils/AIChatExport/ConversationMarkdown.js.map +1 -1
  851. package/build/dist/UI/Utils/ModelAPI/ModelAPI.js +1 -1
  852. package/build/dist/UI/Utils/ModelAPI/ModelAPI.js.map +1 -1
  853. package/build/dist/UI/Utils/Platform.js +118 -0
  854. package/build/dist/UI/Utils/Platform.js.map +1 -0
  855. package/build/dist/UI/Utils/ProjectInvitationDisplay.js +106 -0
  856. package/build/dist/UI/Utils/ProjectInvitationDisplay.js.map +1 -0
  857. package/build/dist/Utils/Monitor/NetworkDeviceLinkRuleUtil.js +108 -0
  858. package/build/dist/Utils/Monitor/NetworkDeviceLinkRuleUtil.js.map +1 -0
  859. package/build/dist/Utils/Monitor/NetworkDeviceRoleUtil.js +386 -0
  860. package/build/dist/Utils/Monitor/NetworkDeviceRoleUtil.js.map +1 -0
  861. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +661 -126
  862. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
  863. package/build/dist/Utils/Telemetry/CrossSignalScope.js +328 -0
  864. package/build/dist/Utils/Telemetry/CrossSignalScope.js.map +1 -0
  865. package/build/dist/Utils/Telemetry/EntityKey.js +57 -5
  866. package/build/dist/Utils/Telemetry/EntityKey.js.map +1 -1
  867. package/build/dist/Utils/Telemetry/EntityRelationship.js +1 -1
  868. package/jest.config.json +1 -0
  869. package/package.json +1 -1
  870. package/build/dist/Models/DatabaseModels/TelemetryEntity.js.map +0 -1
  871. package/build/dist/Models/DatabaseModels/TelemetryEntityRelationship.js.map +0 -1
  872. package/build/dist/Server/Services/TelemetryEntityRelationshipService.js.map +0 -1
  873. package/build/dist/Server/Services/TelemetryEntityService.js.map +0 -1
@@ -27,12 +27,76 @@ import ObjectID from "../../Types/ObjectID";
27
27
  import Permission from "../../Types/Permission";
28
28
  import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
29
29
 
30
+ /*
31
+ * Who, other than the owner, may look at a member's paging configuration, and
32
+ * who may repair it. Named once and spread everywhere so the table-level gate
33
+ * and the per-column gates cannot drift apart - a column quietly narrower than
34
+ * its table is how a required field becomes unwritable by the very permission
35
+ * that was supposed to be able to write it.
36
+ */
37
+ const ADMIN_READ_PERMISSIONS: Array<Permission> = [
38
+ Permission.ProjectOwner,
39
+ Permission.ProjectAdmin,
40
+ Permission.ReadProjectUserNotificationRule,
41
+ ];
42
+
43
+ const ADMIN_WRITE_PERMISSIONS: Array<Permission> = [
44
+ Permission.ProjectOwner,
45
+ Permission.ProjectAdmin,
46
+ Permission.EditProjectUserNotificationRule,
47
+ ];
48
+
49
+ /*
50
+ * Two audiences, one table, and the difference between them is decided by which
51
+ * permission let the caller through rather than by two different endpoints.
52
+ *
53
+ * Permission.CurrentUser stays first in every list and
54
+ * @CurrentUserCanAccessRecordBy("userId") stays on the class, because together
55
+ * they are what keeps an ordinary member scoped. TenantPermission
56
+ * .isAccessGrantedOnlyByCurrentUser intersects what the caller holds with what
57
+ * the model accepts: a plain member matches nothing here but the auto-granted
58
+ * CurrentUser, so addCurrentUserScopeToQuery rewrites their query to
59
+ * `userId = me` and rejects outright any attempt to name somebody else. Adding
60
+ * the admin entries below does not weaken that - a member holds none of them,
61
+ * so their intersection is unchanged.
62
+ *
63
+ * For a caller who DOES hold one of them the intersection is no longer
64
+ * CurrentUser alone, the ownership predicate is not applied, and they can read
65
+ * and repair another member's rules. TeamMember already carries exactly this
66
+ * combination and behaves the same way, which is the reason to reuse the
67
+ * mechanism here rather than invent a second one.
68
+ *
69
+ * That capability is the entire point of this table being reachable by an
70
+ * administrator at all. An on-call policy can say "page the engineer on duty",
71
+ * but whether that page arrives is decided by rows in THIS table, and until now
72
+ * nobody but the engineer themselves could see them. A member with no matching
73
+ * rule was silently unpageable, and the only person able to notice was the
74
+ * person who was not being notified.
75
+ *
76
+ * ProjectOwner and ProjectAdmin are listed ALONGSIDE the granular permissions,
77
+ * not instead of them, and that is load-bearing rather than belt-and-braces.
78
+ * Existing project teams are seeded with ROLES only, so a brand-new granular
79
+ * permission is held by literally nobody on the day it ships; a list containing
80
+ * only EditProjectUserNotificationRule would leave the feature dead on arrival
81
+ * for every project that already exists.
82
+ *
83
+ * Note the asymmetry with the seven notification-method models this rule points
84
+ * at (UserEmail, UserSMS, UserCall, UserPush, UserWhatsApp, UserTelegram,
85
+ * UserWebhook). There, only `read` is widened. An administrator may see which
86
+ * methods a member has and repair the rules that route to them, but may never
87
+ * create or edit a method on somebody else's behalf. Letting them would hand
88
+ * any administrator a paging-hijack primitive - add a phone number or webhook
89
+ * you control, point the victim's rules at it, and their pages arrive at your
90
+ * device - and it would not even solve the problem it appears to solve, because
91
+ * a member with no methods needs to verify a device THEY own. The lever for
92
+ * that case is a reminder, not a keyboard.
93
+ */
30
94
  @TenantColumn("projectId")
31
95
  @TableAccessControl({
32
- create: [Permission.CurrentUser],
33
- read: [Permission.CurrentUser],
34
- delete: [Permission.CurrentUser],
35
- update: [Permission.CurrentUser],
96
+ create: [Permission.CurrentUser, ...ADMIN_WRITE_PERMISSIONS],
97
+ read: [Permission.CurrentUser, ...ADMIN_READ_PERMISSIONS],
98
+ delete: [Permission.CurrentUser, ...ADMIN_WRITE_PERMISSIONS],
99
+ update: [Permission.CurrentUser, ...ADMIN_WRITE_PERMISSIONS],
36
100
  })
37
101
  @CrudApiEndpoint(new Route("/user-notification-rule"))
38
102
  @Entity({
@@ -47,9 +111,15 @@ import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
47
111
  })
48
112
  @CurrentUserCanAccessRecordBy("userId")
49
113
  class UserNotificationRule extends BaseModel {
114
+ /*
115
+ * Writable at create, readable by an administrator, and permanently frozen
116
+ * afterwards - see the essay on `userId` below, which applies to this column
117
+ * for the same reason. A rule that could be moved between projects would
118
+ * escape the tenant scope it was created under.
119
+ */
50
120
  @ColumnAccessControl({
51
- create: [Permission.CurrentUser],
52
- read: [Permission.CurrentUser],
121
+ create: [Permission.CurrentUser, ...ADMIN_WRITE_PERMISSIONS],
122
+ read: [Permission.CurrentUser, ...ADMIN_READ_PERMISSIONS],
53
123
  update: [],
54
124
  })
55
125
  @TableColumn({
@@ -73,9 +143,13 @@ class UserNotificationRule extends BaseModel {
73
143
  @JoinColumn({ name: "projectId" })
74
144
  public project?: Project = undefined;
75
145
 
146
+ /*
147
+ * update: [] - deliberately, and not merely inherited from the shape this
148
+ * model had before administrators could touch it. See `userId`.
149
+ */
76
150
  @ColumnAccessControl({
77
- create: [Permission.CurrentUser],
78
- read: [Permission.CurrentUser],
151
+ create: [Permission.CurrentUser, ...ADMIN_WRITE_PERMISSIONS],
152
+ read: [Permission.CurrentUser, ...ADMIN_READ_PERMISSIONS],
79
153
  update: [],
80
154
  })
81
155
  @Index()
@@ -94,9 +168,17 @@ class UserNotificationRule extends BaseModel {
94
168
  })
95
169
  public projectId?: ObjectID = undefined;
96
170
 
171
+ /*
172
+ * The rule type, together with the severity relations further down, is the
173
+ * ADDRESS of this rule - the cell in the grid it occupies. Changing it would
174
+ * silently move a rule from one cell to another, which reads as an edit but
175
+ * behaves as a delete plus a create, so it stays create-only for everybody.
176
+ * An administrator repairing a member's setup adds and removes rules; they do
177
+ * not slide an existing one sideways.
178
+ */
97
179
  @ColumnAccessControl({
98
- create: [Permission.CurrentUser],
99
- read: [Permission.CurrentUser],
180
+ create: [Permission.CurrentUser, ...ADMIN_WRITE_PERMISSIONS],
181
+ read: [Permission.CurrentUser, ...ADMIN_READ_PERMISSIONS],
100
182
  update: [],
101
183
  })
102
184
  @TableColumn({
@@ -115,9 +197,17 @@ class UserNotificationRule extends BaseModel {
115
197
  })
116
198
  public ruleType?: NotificationRuleType = undefined;
117
199
 
200
+ /*
201
+ * The relation spelling of the ownership column. It is `update: []` for the
202
+ * same reason `userId` is, and it has to be stated separately because the two
203
+ * are different decorated members over one physical column: an update
204
+ * expressed as `user: { _id }` is resolved by TypeORM to the same join column
205
+ * that `userId` writes. Closing one spelling and leaving the other open would
206
+ * close nothing at all.
207
+ */
118
208
  @ColumnAccessControl({
119
- create: [Permission.CurrentUser],
120
- read: [Permission.CurrentUser],
209
+ create: [Permission.CurrentUser, ...ADMIN_WRITE_PERMISSIONS],
210
+ read: [Permission.CurrentUser, ...ADMIN_READ_PERMISSIONS],
121
211
  update: [],
122
212
  })
123
213
  @TableColumn({
@@ -141,9 +231,40 @@ class UserNotificationRule extends BaseModel {
141
231
  @JoinColumn({ name: "userId" })
142
232
  public user?: User = undefined;
143
233
 
234
+ /*
235
+ * READ THIS BEFORE WIDENING `update` HERE.
236
+ *
237
+ * This column is the ownership column - the one @CurrentUserCanAccessRecordBy
238
+ * points at, and therefore the one that decides whose pages this rule is
239
+ * consulted for. It is writable at CREATE, because provisioning a rule on
240
+ * behalf of a member who has none is the entire point of the administrator
241
+ * capability; it is writable at UPDATE by nobody, including the
242
+ * administrators who may otherwise rewrite every other field on the row.
243
+ *
244
+ * The temptation to mirror the widened lists onto this column is strong and
245
+ * wrong. An administrator who can re-point an EXISTING rule's userId does not
246
+ * gain a convenience, they gain a paging hijack: take a rule that already
247
+ * points at their own verified phone, move its userId to a colleague, and the
248
+ * colleague's pages now ring the administrator's handset - or take the
249
+ * colleague's rule and hand it to themselves. Nothing about that is
250
+ * distinguishable from a legitimate edit at the row level, and it is exactly
251
+ * the hole the create-side ownership gate was written to close
252
+ * (Common/Server/Types/Database/Permissions/CreatePermission.ts), reopened
253
+ * through a different verb.
254
+ *
255
+ * Create is safe by comparison only because it is guarded: the create gate
256
+ * defers to a real role permission rather than stamping the caller, and the
257
+ * service layer verifies that the supplied userId is a member of
258
+ * props.tenantId before the row is written. A rule pointed at a stranger from
259
+ * another project is refused there, not here.
260
+ *
261
+ * The correct way for an administrator to move a rule to a different member is
262
+ * to delete it and create another. That leaves two audit events instead of a
263
+ * silent mutation, which is the behaviour we want.
264
+ */
144
265
  @ColumnAccessControl({
145
- create: [Permission.CurrentUser],
146
- read: [Permission.CurrentUser],
266
+ create: [Permission.CurrentUser, ...ADMIN_WRITE_PERMISSIONS],
267
+ read: [Permission.CurrentUser, ...ADMIN_READ_PERMISSIONS],
147
268
  update: [],
148
269
  })
149
270
  @TableColumn({
@@ -160,9 +281,16 @@ class UserNotificationRule extends BaseModel {
160
281
  @Index()
161
282
  public userId?: ObjectID = undefined;
162
283
 
284
+ /*
285
+ * Read is widened but create is not, because this column is stamped
286
+ * server-side from props.userId after the permission checks have run and is
287
+ * never accepted from a request body. Widening the read matters for a reason
288
+ * beyond completeness: it is what lets a member see that a rule on their own
289
+ * account was written by an administrator rather than by themselves.
290
+ */
163
291
  @ColumnAccessControl({
164
292
  create: [Permission.CurrentUser],
165
- read: [Permission.CurrentUser],
293
+ read: [Permission.CurrentUser, ...ADMIN_READ_PERMISSIONS],
166
294
  update: [],
167
295
  })
168
296
  @TableColumn({
@@ -189,7 +317,7 @@ class UserNotificationRule extends BaseModel {
189
317
 
190
318
  @ColumnAccessControl({
191
319
  create: [Permission.CurrentUser],
192
- read: [Permission.CurrentUser],
320
+ read: [Permission.CurrentUser, ...ADMIN_READ_PERMISSIONS],
193
321
  update: [],
194
322
  })
195
323
  @TableColumn({
@@ -253,8 +381,64 @@ class UserNotificationRule extends BaseModel {
253
381
  })
254
382
  public deletedByUserId?: ObjectID = undefined;
255
383
 
384
+ /*
385
+ * THE SEVEN METHOD RELATIONS BELOW ARE THE MOST DANGEROUS COLUMNS ON THIS
386
+ * MODEL. What follows applies to every one of them - userCall, userPush,
387
+ * userSms, userWhatsApp, userTelegram, userWebhook and userEmail, in both
388
+ * their relation and their `*Id` spelling - and is written out once here
389
+ * rather than fourteen times.
390
+ *
391
+ * A rule is a pair: the ownership column decides WHOSE pages select the row,
392
+ * and the method relation decides WHERE those pages are delivered. The two
393
+ * halves are read from different tables and nothing in the schema requires
394
+ * them to agree. A row owned by a victim and pointing at an administrator's
395
+ * own webhook or email is perfectly well-formed, and it silently redirects the
396
+ * victim's pages to the administrator's device. That is the whole hijack, and
397
+ * it needs no other bug to work.
398
+ *
399
+ * The `*Id` columns are open to UPDATE because repairing a member's routing is
400
+ * the capability this phase exists to provide: "your rules point at an email
401
+ * you never verified" is only actionable if somebody can re-point them at one
402
+ * the member did verify. But THIS ACCESS CONTROL LIST IS NOT WHAT MAKES THAT
403
+ * SAFE. A column list answers "may this caller write this column at all"; it
404
+ * never sees the VALUE being written, so it cannot tell a repair from a
405
+ * redirect.
406
+ *
407
+ * What makes it safe is a service-layer assertion: whenever one of these FKs
408
+ * is written, on create or on update, the referenced method row must belong to
409
+ * the same user as the rule's own userId - and on update that userId is
410
+ * re-read from the database rather than taken from the request body, because
411
+ * the body is exactly what an attacker controls. DO NOT REMOVE THAT ASSERTION
412
+ * BELIEVING THIS DECORATOR COVERS IT. It does not, and the failure is silent:
413
+ * everything keeps working, pages just start arriving somewhere else.
414
+ *
415
+ * The relation spellings stay `update: []` while the `*Id` spellings open.
416
+ * That is not an oversight. They are two decorated members over one physical
417
+ * join column, so leaving both writable would give the same hijack two
418
+ * different shapes to arrive in, and the ownership assertion would have to
419
+ * recognise both to be complete. One spelling in, one spelling out, and the
420
+ * check has exactly one form to validate.
421
+ */
422
+ /*
423
+ * READ IS OWNER-ONLY ON THE RELATION, EVEN THOUGH THIS TABLE IS ADMIN-READABLE.
424
+ *
425
+ * Widening the relation would re-open the exposure that reverting the seven
426
+ * method models was meant to close, by a different route. A read of this
427
+ * table is NOT pinned to the caller's own rows for an administrator - that is
428
+ * the whole point of the phase - and QueryPermission.checkRelationQueryPermission
429
+ * authorises each nested field with relatedModel.hasReadPermissions, a
430
+ * name-intersection in which Permission.CurrentUser is auto-granted to every
431
+ * authenticated caller. So `select: { userCall: { phone: true } }` on somebody
432
+ * else's rule would hand back their raw phone number with no row scope
433
+ * anywhere in the path.
434
+ *
435
+ * The FK below stays admin-readable: an id is not sensitive, and it is what
436
+ * correlates a rule with the masked entry in OnCallReadinessService's
437
+ * ReadinessMethod { methodId, methodType, maskedIdentifier, isVerified }.
438
+ * That masked payload is the administrator's sanctioned view of a method.
439
+ */
256
440
  @ColumnAccessControl({
257
- create: [Permission.CurrentUser],
441
+ create: [Permission.CurrentUser, ...ADMIN_WRITE_PERMISSIONS],
258
442
  read: [Permission.CurrentUser],
259
443
  update: [],
260
444
  })
@@ -279,10 +463,11 @@ class UserNotificationRule extends BaseModel {
279
463
  @JoinColumn({ name: "userCallId" })
280
464
  public userCall?: UserCall = undefined;
281
465
 
466
+ // Re-pointable by an administrator. Read the essay above `userCall` first.
282
467
  @ColumnAccessControl({
283
- create: [Permission.CurrentUser],
284
- read: [Permission.CurrentUser],
285
- update: [],
468
+ create: [Permission.CurrentUser, ...ADMIN_WRITE_PERMISSIONS],
469
+ read: [Permission.CurrentUser, ...ADMIN_READ_PERMISSIONS],
470
+ update: [...ADMIN_WRITE_PERMISSIONS],
286
471
  })
287
472
  @Index()
288
473
  @TableColumn({
@@ -300,8 +485,26 @@ class UserNotificationRule extends BaseModel {
300
485
  })
301
486
  public userCallId?: ObjectID = undefined;
302
487
 
488
+ /*
489
+ * READ IS OWNER-ONLY ON THE RELATION, EVEN THOUGH THIS TABLE IS ADMIN-READABLE.
490
+ *
491
+ * Widening the relation would re-open the exposure that reverting the seven
492
+ * method models was meant to close, by a different route. A read of this
493
+ * table is NOT pinned to the caller's own rows for an administrator - that is
494
+ * the whole point of the phase - and QueryPermission.checkRelationQueryPermission
495
+ * authorises each nested field with relatedModel.hasReadPermissions, a
496
+ * name-intersection in which Permission.CurrentUser is auto-granted to every
497
+ * authenticated caller. So `select: { userPush: { deviceToken: true } }` on somebody
498
+ * else's rule would hand back their raw device token with no row scope
499
+ * anywhere in the path.
500
+ *
501
+ * The FK below stays admin-readable: an id is not sensitive, and it is what
502
+ * correlates a rule with the masked entry in OnCallReadinessService's
503
+ * ReadinessMethod { methodId, methodType, maskedIdentifier, isVerified }.
504
+ * That masked payload is the administrator's sanctioned view of a method.
505
+ */
303
506
  @ColumnAccessControl({
304
- create: [Permission.CurrentUser],
507
+ create: [Permission.CurrentUser, ...ADMIN_WRITE_PERMISSIONS],
305
508
  read: [Permission.CurrentUser],
306
509
  update: [],
307
510
  })
@@ -326,10 +529,11 @@ class UserNotificationRule extends BaseModel {
326
529
  @JoinColumn({ name: "userPushId" })
327
530
  public userPush?: UserPush = undefined;
328
531
 
532
+ // Re-pointable by an administrator. Read the essay above `userCall` first.
329
533
  @ColumnAccessControl({
330
- create: [Permission.CurrentUser],
331
- read: [Permission.CurrentUser],
332
- update: [],
534
+ create: [Permission.CurrentUser, ...ADMIN_WRITE_PERMISSIONS],
535
+ read: [Permission.CurrentUser, ...ADMIN_READ_PERMISSIONS],
536
+ update: [...ADMIN_WRITE_PERMISSIONS],
333
537
  })
334
538
  @Index()
335
539
  @TableColumn({
@@ -347,8 +551,26 @@ class UserNotificationRule extends BaseModel {
347
551
  })
348
552
  public userPushId?: ObjectID = undefined;
349
553
 
554
+ /*
555
+ * READ IS OWNER-ONLY ON THE RELATION, EVEN THOUGH THIS TABLE IS ADMIN-READABLE.
556
+ *
557
+ * Widening the relation would re-open the exposure that reverting the seven
558
+ * method models was meant to close, by a different route. A read of this
559
+ * table is NOT pinned to the caller's own rows for an administrator - that is
560
+ * the whole point of the phase - and QueryPermission.checkRelationQueryPermission
561
+ * authorises each nested field with relatedModel.hasReadPermissions, a
562
+ * name-intersection in which Permission.CurrentUser is auto-granted to every
563
+ * authenticated caller. So `select: { userSms: { phone: true } }` on somebody
564
+ * else's rule would hand back their raw phone number with no row scope
565
+ * anywhere in the path.
566
+ *
567
+ * The FK below stays admin-readable: an id is not sensitive, and it is what
568
+ * correlates a rule with the masked entry in OnCallReadinessService's
569
+ * ReadinessMethod { methodId, methodType, maskedIdentifier, isVerified }.
570
+ * That masked payload is the administrator's sanctioned view of a method.
571
+ */
350
572
  @ColumnAccessControl({
351
- create: [Permission.CurrentUser],
573
+ create: [Permission.CurrentUser, ...ADMIN_WRITE_PERMISSIONS],
352
574
  read: [Permission.CurrentUser],
353
575
  update: [],
354
576
  })
@@ -373,10 +595,11 @@ class UserNotificationRule extends BaseModel {
373
595
  @JoinColumn({ name: "userSmsId" })
374
596
  public userSms?: UserSMS = undefined;
375
597
 
598
+ // Re-pointable by an administrator. Read the essay above `userCall` first.
376
599
  @ColumnAccessControl({
377
- create: [Permission.CurrentUser],
378
- read: [Permission.CurrentUser],
379
- update: [],
600
+ create: [Permission.CurrentUser, ...ADMIN_WRITE_PERMISSIONS],
601
+ read: [Permission.CurrentUser, ...ADMIN_READ_PERMISSIONS],
602
+ update: [...ADMIN_WRITE_PERMISSIONS],
380
603
  })
381
604
  @Index()
382
605
  @TableColumn({
@@ -394,8 +617,26 @@ class UserNotificationRule extends BaseModel {
394
617
  })
395
618
  public userSmsId?: ObjectID = undefined;
396
619
 
620
+ /*
621
+ * READ IS OWNER-ONLY ON THE RELATION, EVEN THOUGH THIS TABLE IS ADMIN-READABLE.
622
+ *
623
+ * Widening the relation would re-open the exposure that reverting the seven
624
+ * method models was meant to close, by a different route. A read of this
625
+ * table is NOT pinned to the caller's own rows for an administrator - that is
626
+ * the whole point of the phase - and QueryPermission.checkRelationQueryPermission
627
+ * authorises each nested field with relatedModel.hasReadPermissions, a
628
+ * name-intersection in which Permission.CurrentUser is auto-granted to every
629
+ * authenticated caller. So `select: { userWhatsApp: { phone: true } }` on somebody
630
+ * else's rule would hand back their raw phone number with no row scope
631
+ * anywhere in the path.
632
+ *
633
+ * The FK below stays admin-readable: an id is not sensitive, and it is what
634
+ * correlates a rule with the masked entry in OnCallReadinessService's
635
+ * ReadinessMethod { methodId, methodType, maskedIdentifier, isVerified }.
636
+ * That masked payload is the administrator's sanctioned view of a method.
637
+ */
397
638
  @ColumnAccessControl({
398
- create: [Permission.CurrentUser],
639
+ create: [Permission.CurrentUser, ...ADMIN_WRITE_PERMISSIONS],
399
640
  read: [Permission.CurrentUser],
400
641
  update: [],
401
642
  })
@@ -421,10 +662,11 @@ class UserNotificationRule extends BaseModel {
421
662
  @JoinColumn({ name: "userWhatsAppId" })
422
663
  public userWhatsApp?: UserWhatsApp = undefined;
423
664
 
665
+ // Re-pointable by an administrator. Read the essay above `userCall` first.
424
666
  @ColumnAccessControl({
425
- create: [Permission.CurrentUser],
426
- read: [Permission.CurrentUser],
427
- update: [],
667
+ create: [Permission.CurrentUser, ...ADMIN_WRITE_PERMISSIONS],
668
+ read: [Permission.CurrentUser, ...ADMIN_READ_PERMISSIONS],
669
+ update: [...ADMIN_WRITE_PERMISSIONS],
428
670
  })
429
671
  @Index()
430
672
  @TableColumn({
@@ -442,8 +684,26 @@ class UserNotificationRule extends BaseModel {
442
684
  })
443
685
  public userWhatsAppId?: ObjectID = undefined;
444
686
 
687
+ /*
688
+ * READ IS OWNER-ONLY ON THE RELATION, EVEN THOUGH THIS TABLE IS ADMIN-READABLE.
689
+ *
690
+ * Widening the relation would re-open the exposure that reverting the seven
691
+ * method models was meant to close, by a different route. A read of this
692
+ * table is NOT pinned to the caller's own rows for an administrator - that is
693
+ * the whole point of the phase - and QueryPermission.checkRelationQueryPermission
694
+ * authorises each nested field with relatedModel.hasReadPermissions, a
695
+ * name-intersection in which Permission.CurrentUser is auto-granted to every
696
+ * authenticated caller. So `select: { userTelegram: { telegramChatId: true } }` on somebody
697
+ * else's rule would hand back their raw Telegram chat id with no row scope
698
+ * anywhere in the path.
699
+ *
700
+ * The FK below stays admin-readable: an id is not sensitive, and it is what
701
+ * correlates a rule with the masked entry in OnCallReadinessService's
702
+ * ReadinessMethod { methodId, methodType, maskedIdentifier, isVerified }.
703
+ * That masked payload is the administrator's sanctioned view of a method.
704
+ */
445
705
  @ColumnAccessControl({
446
- create: [Permission.CurrentUser],
706
+ create: [Permission.CurrentUser, ...ADMIN_WRITE_PERMISSIONS],
447
707
  read: [Permission.CurrentUser],
448
708
  update: [],
449
709
  })
@@ -469,10 +729,11 @@ class UserNotificationRule extends BaseModel {
469
729
  @JoinColumn({ name: "userTelegramId" })
470
730
  public userTelegram?: UserTelegram = undefined;
471
731
 
732
+ // Re-pointable by an administrator. Read the essay above `userCall` first.
472
733
  @ColumnAccessControl({
473
- create: [Permission.CurrentUser],
474
- read: [Permission.CurrentUser],
475
- update: [],
734
+ create: [Permission.CurrentUser, ...ADMIN_WRITE_PERMISSIONS],
735
+ read: [Permission.CurrentUser, ...ADMIN_READ_PERMISSIONS],
736
+ update: [...ADMIN_WRITE_PERMISSIONS],
476
737
  })
477
738
  @Index()
478
739
  @TableColumn({
@@ -490,8 +751,26 @@ class UserNotificationRule extends BaseModel {
490
751
  })
491
752
  public userTelegramId?: ObjectID = undefined;
492
753
 
754
+ /*
755
+ * READ IS OWNER-ONLY ON THE RELATION, EVEN THOUGH THIS TABLE IS ADMIN-READABLE.
756
+ *
757
+ * Widening the relation would re-open the exposure that reverting the seven
758
+ * method models was meant to close, by a different route. A read of this
759
+ * table is NOT pinned to the caller's own rows for an administrator - that is
760
+ * the whole point of the phase - and QueryPermission.checkRelationQueryPermission
761
+ * authorises each nested field with relatedModel.hasReadPermissions, a
762
+ * name-intersection in which Permission.CurrentUser is auto-granted to every
763
+ * authenticated caller. So `select: { userWebhook: { webhookUrl: true } }` on somebody
764
+ * else's rule would hand back their raw webhook URL with no row scope
765
+ * anywhere in the path.
766
+ *
767
+ * The FK below stays admin-readable: an id is not sensitive, and it is what
768
+ * correlates a rule with the masked entry in OnCallReadinessService's
769
+ * ReadinessMethod { methodId, methodType, maskedIdentifier, isVerified }.
770
+ * That masked payload is the administrator's sanctioned view of a method.
771
+ */
493
772
  @ColumnAccessControl({
494
- create: [Permission.CurrentUser],
773
+ create: [Permission.CurrentUser, ...ADMIN_WRITE_PERMISSIONS],
495
774
  read: [Permission.CurrentUser],
496
775
  update: [],
497
776
  })
@@ -517,10 +796,11 @@ class UserNotificationRule extends BaseModel {
517
796
  @JoinColumn({ name: "userWebhookId" })
518
797
  public userWebhook?: UserWebhook = undefined;
519
798
 
799
+ // Re-pointable by an administrator. Read the essay above `userCall` first.
520
800
  @ColumnAccessControl({
521
- create: [Permission.CurrentUser],
522
- read: [Permission.CurrentUser],
523
- update: [],
801
+ create: [Permission.CurrentUser, ...ADMIN_WRITE_PERMISSIONS],
802
+ read: [Permission.CurrentUser, ...ADMIN_READ_PERMISSIONS],
803
+ update: [...ADMIN_WRITE_PERMISSIONS],
524
804
  })
525
805
  @Index()
526
806
  @TableColumn({
@@ -538,8 +818,26 @@ class UserNotificationRule extends BaseModel {
538
818
  })
539
819
  public userWebhookId?: ObjectID = undefined;
540
820
 
821
+ /*
822
+ * READ IS OWNER-ONLY ON THE RELATION, EVEN THOUGH THIS TABLE IS ADMIN-READABLE.
823
+ *
824
+ * Widening the relation would re-open the exposure that reverting the seven
825
+ * method models was meant to close, by a different route. A read of this
826
+ * table is NOT pinned to the caller's own rows for an administrator - that is
827
+ * the whole point of the phase - and QueryPermission.checkRelationQueryPermission
828
+ * authorises each nested field with relatedModel.hasReadPermissions, a
829
+ * name-intersection in which Permission.CurrentUser is auto-granted to every
830
+ * authenticated caller. So `select: { userEmail: { email: true } }` on somebody
831
+ * else's rule would hand back their raw email address with no row scope
832
+ * anywhere in the path.
833
+ *
834
+ * The FK below stays admin-readable: an id is not sensitive, and it is what
835
+ * correlates a rule with the masked entry in OnCallReadinessService's
836
+ * ReadinessMethod { methodId, methodType, maskedIdentifier, isVerified }.
837
+ * That masked payload is the administrator's sanctioned view of a method.
838
+ */
541
839
  @ColumnAccessControl({
542
- create: [Permission.CurrentUser],
840
+ create: [Permission.CurrentUser, ...ADMIN_WRITE_PERMISSIONS],
543
841
  read: [Permission.CurrentUser],
544
842
  update: [],
545
843
  })
@@ -564,10 +862,11 @@ class UserNotificationRule extends BaseModel {
564
862
  @JoinColumn({ name: "userEmailId" })
565
863
  public userEmail?: UserEmail = undefined;
566
864
 
865
+ // Re-pointable by an administrator. Read the essay above `userCall` first.
567
866
  @ColumnAccessControl({
568
- create: [Permission.CurrentUser],
569
- read: [Permission.CurrentUser],
570
- update: [],
867
+ create: [Permission.CurrentUser, ...ADMIN_WRITE_PERMISSIONS],
868
+ read: [Permission.CurrentUser, ...ADMIN_READ_PERMISSIONS],
869
+ update: [...ADMIN_WRITE_PERMISSIONS],
571
870
  })
572
871
  @Index()
573
872
  @TableColumn({
@@ -585,10 +884,18 @@ class UserNotificationRule extends BaseModel {
585
884
  })
586
885
  public userEmailId?: ObjectID = undefined;
587
886
 
887
+ /*
888
+ * The escalation delay, and one of only two plain preference columns an
889
+ * administrator may rewrite. It is here rather than frozen because "you are
890
+ * on the escalation policy but your first rule waits thirty minutes" is a
891
+ * real, common misconfiguration, and correcting a number carries none of the
892
+ * redirect risk the method relations do - the page still goes to the same
893
+ * place, it just goes sooner.
894
+ */
588
895
  @ColumnAccessControl({
589
- create: [Permission.CurrentUser],
590
- read: [Permission.CurrentUser],
591
- update: [Permission.CurrentUser],
896
+ create: [Permission.CurrentUser, ...ADMIN_WRITE_PERMISSIONS],
897
+ read: [Permission.CurrentUser, ...ADMIN_READ_PERMISSIONS],
898
+ update: [Permission.CurrentUser, ...ADMIN_WRITE_PERMISSIONS],
592
899
  })
593
900
  @Index()
594
901
  @TableColumn({
@@ -608,9 +915,12 @@ class UserNotificationRule extends BaseModel {
608
915
  })
609
916
  public notifyAfterMinutes?: number = undefined;
610
917
 
918
+ /*
919
+ * Part of the rule's address, like `ruleType` - create-only for everybody.
920
+ */
611
921
  @ColumnAccessControl({
612
- create: [Permission.CurrentUser],
613
- read: [Permission.CurrentUser],
922
+ create: [Permission.CurrentUser, ...ADMIN_WRITE_PERMISSIONS],
923
+ read: [Permission.CurrentUser, ...ADMIN_READ_PERMISSIONS],
614
924
  update: [],
615
925
  })
616
926
  @TableColumn({
@@ -636,8 +946,8 @@ class UserNotificationRule extends BaseModel {
636
946
  public incidentSeverity?: IncidentSeverity = undefined;
637
947
 
638
948
  @ColumnAccessControl({
639
- create: [Permission.CurrentUser],
640
- read: [Permission.CurrentUser],
949
+ create: [Permission.CurrentUser, ...ADMIN_WRITE_PERMISSIONS],
950
+ read: [Permission.CurrentUser, ...ADMIN_READ_PERMISSIONS],
641
951
  update: [],
642
952
  })
643
953
  @Index()
@@ -659,8 +969,8 @@ class UserNotificationRule extends BaseModel {
659
969
  // alert severity.
660
970
 
661
971
  @ColumnAccessControl({
662
- create: [Permission.CurrentUser],
663
- read: [Permission.CurrentUser],
972
+ create: [Permission.CurrentUser, ...ADMIN_WRITE_PERMISSIONS],
973
+ read: [Permission.CurrentUser, ...ADMIN_READ_PERMISSIONS],
664
974
  update: [],
665
975
  })
666
976
  @TableColumn({
@@ -686,8 +996,8 @@ class UserNotificationRule extends BaseModel {
686
996
  public alertSeverity?: AlertSeverity = undefined;
687
997
 
688
998
  @ColumnAccessControl({
689
- create: [Permission.CurrentUser],
690
- read: [Permission.CurrentUser],
999
+ create: [Permission.CurrentUser, ...ADMIN_WRITE_PERMISSIONS],
1000
+ read: [Permission.CurrentUser, ...ADMIN_READ_PERMISSIONS],
691
1001
  update: [],
692
1002
  })
693
1003
  @Index()
@@ -705,6 +1015,66 @@ class UserNotificationRule extends BaseModel {
705
1015
  transformer: ObjectID.getDatabaseTransformer(),
706
1016
  })
707
1017
  public alertSeverityId?: ObjectID = undefined;
1018
+
1019
+ /*
1020
+ * An opt-out row is a rule that exists in order to send nothing. It carries a
1021
+ * `ruleType` and a severity exactly like a normal rule, sets `isOptOut` to true, and
1022
+ * holds NO notification-method relation at all — there is no userEmail, userSms,
1023
+ * userCall, userPush, userWhatsApp, userTelegram or userWebhook on it, and that
1024
+ * absence is the point rather than a misconfiguration.
1025
+ *
1026
+ * It exists because "this user has zero rules matching this ruleType and severity" is
1027
+ * otherwise two completely different situations wearing the same clothes. Almost
1028
+ * always it means the user never configured anything for that cell — a severity added
1029
+ * after they joined, an episode rule type they never opened the page for — and a page
1030
+ * routed to them must still land somewhere. Occasionally it means the user genuinely
1031
+ * asked not to be woken for that cell, and paging them anyway would be the bug.
1032
+ *
1033
+ * Before this column the runtime could not tell those apart, so it chose the safe-
1034
+ * looking option and delivered nothing, which is how pages were being lost silently.
1035
+ * Making deliberate silence expressible as a row is the precondition for the fallback:
1036
+ * once "do not page me" has somewhere to live, the remaining zero-row cases can be
1037
+ * treated as misconfiguration and rescued by notifying the user on whatever verified
1038
+ * method they do have.
1039
+ *
1040
+ * Note the `update` permission below. Every column on this model except
1041
+ * `notifyAfterMinutes` is `update: []`, so copying a neighbour's access control would
1042
+ * have left this flag writable only at create time — a user could opt out but never
1043
+ * opt back in without deleting and recreating the row. Muting and unmuting is exactly
1044
+ * the kind of preference that gets toggled, so it is explicitly updatable by its owner.
1045
+ *
1046
+ * An administrator may toggle it too, and that deserves a word because it looks
1047
+ * like the one place where the admin capability could be used to silence somebody.
1048
+ * It could - but an administrator who wanted a colleague unpageable has a far
1049
+ * blunter tool available in the same breath, which is to delete their rules
1050
+ * outright, and that is a capability nobody proposes withholding. The reason
1051
+ * this direction matters more is the opposite one: a member who opted out of a
1052
+ * severity months ago and forgot is precisely the invisible gap this phase
1053
+ * exists to close, and leaving an administrator able to SEE the opt-out but not
1054
+ * lift it would stop one step short of the fix. Both directions are audited
1055
+ * against props.userId, so a suppression an administrator made is attributable.
1056
+ */
1057
+ @ColumnAccessControl({
1058
+ create: [Permission.CurrentUser, ...ADMIN_WRITE_PERMISSIONS],
1059
+ read: [Permission.CurrentUser, ...ADMIN_READ_PERMISSIONS],
1060
+ update: [Permission.CurrentUser, ...ADMIN_WRITE_PERMISSIONS],
1061
+ })
1062
+ @TableColumn({
1063
+ type: TableColumnType.Boolean,
1064
+ required: false,
1065
+ isDefaultValueColumn: true,
1066
+ title: "Opt Out of Notifications",
1067
+ description:
1068
+ "When true, this rule deliberately suppresses notifications for its rule type and severity instead of delivering any. A rule with this set carries no notification method.",
1069
+ defaultValue: false,
1070
+ example: false,
1071
+ })
1072
+ @Column({
1073
+ type: ColumnType.Boolean,
1074
+ nullable: true,
1075
+ default: false,
1076
+ })
1077
+ public isOptOut?: boolean = undefined;
708
1078
  }
709
1079
 
710
1080
  export default UserNotificationRule;