@oneuptime/common 14.0.12 → 14.0.13
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.
- package/Models/DatabaseModels/AlertGroupingRule.ts +4 -3
- package/Models/DatabaseModels/AlertMeasurement.ts +16 -9
- package/Models/DatabaseModels/AlertReminderRule.ts +4 -3
- package/Models/DatabaseModels/AlertSeverity.ts +5 -2
- package/Models/DatabaseModels/AlertState.ts +5 -2
- package/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.ts +17 -0
- package/Models/DatabaseModels/{IncidentForm.ts → Form.ts} +97 -205
- package/Models/DatabaseModels/{IncidentFormSubmission.ts → FormSubmission.ts} +158 -76
- package/Models/DatabaseModels/Incident.ts +1 -1
- package/Models/DatabaseModels/IncidentCustomField.ts +7 -3
- package/Models/DatabaseModels/IncidentGroupingRule.ts +4 -3
- package/Models/DatabaseModels/IncidentMeasurement.ts +15 -8
- package/Models/DatabaseModels/IncidentReminderRule.ts +4 -3
- package/Models/DatabaseModels/IncidentSeverity.ts +5 -2
- package/Models/DatabaseModels/IncidentSlaRule.ts +4 -3
- package/Models/DatabaseModels/IncidentState.ts +5 -2
- package/Models/DatabaseModels/IncidentTemplate.ts +1 -1
- package/Models/DatabaseModels/IncomingCallPolicyEscalationRule.ts +5 -1
- package/Models/DatabaseModels/Index.ts +4 -4
- package/Models/DatabaseModels/LogDropFilter.ts +4 -3
- package/Models/DatabaseModels/LogPipeline.ts +4 -3
- package/Models/DatabaseModels/LogPipelineProcessor.ts +4 -3
- package/Models/DatabaseModels/LogScrubRule.ts +3 -2
- package/Models/DatabaseModels/MetricPipelineRule.ts +3 -2
- package/Models/DatabaseModels/MetricRecordingRule.ts +7 -2
- package/Models/DatabaseModels/MonitorStatus.ts +4 -1
- package/Models/DatabaseModels/NetworkDeviceRole.ts +3 -1
- package/Models/DatabaseModels/NetworkSiteAssignmentRule.ts +9 -3
- package/Models/DatabaseModels/Project.ts +18 -11
- package/Models/DatabaseModels/RunbookRule.ts +343 -0
- package/Models/DatabaseModels/ScheduledMaintenance.ts +3 -1
- package/Models/DatabaseModels/ScheduledMaintenanceMeasurement.ts +15 -8
- package/Models/DatabaseModels/ScheduledMaintenanceReminderRule.ts +4 -3
- package/Models/DatabaseModels/ScheduledMaintenanceState.ts +5 -2
- package/Models/DatabaseModels/ScheduledMaintenanceTemplate.ts +1 -2
- package/Models/DatabaseModels/StatusPageFooterLink.ts +5 -1
- package/Models/DatabaseModels/StatusPageHeaderLink.ts +5 -1
- package/Models/DatabaseModels/StatusPageHistoryChartBarColorRule.ts +5 -1
- package/Models/DatabaseModels/TraceDropFilter.ts +4 -3
- package/Models/DatabaseModels/TracePipeline.ts +4 -3
- package/Models/DatabaseModels/TracePipelineProcessor.ts +4 -3
- package/Models/DatabaseModels/TraceRecordingRule.ts +7 -2
- package/Models/DatabaseModels/TraceScrubRule.ts +3 -2
- package/Models/DatabaseModels/UserNotificationEmailRollupItem.ts +49 -1
- package/Server/API/BaseAnalyticsAPI.ts +17 -0
- package/Server/API/{IncidentFormAPI.ts → FormAPI.ts} +77 -83
- package/Server/Infrastructure/Postgres/SchemaMigrations/1797300000000-TurnOnLinkedAlertSwitchesByDefault.ts +40 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1797400000000-MigrateIncidentFormsToForms.ts +348 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1797500000000-AddRunbookRuleMatchCriteria.ts +178 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1797600000000-AddSeverityAndStateColorsToNotificationEmailRollup.ts +26 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +8 -0
- package/Server/Middleware/{IncidentFormRateLimit.ts → FormRateLimit.ts} +186 -194
- package/Server/Services/AlertEpisodeService.ts +5 -3
- package/Server/Services/AlertMeasurementService.ts +120 -23
- package/Server/Services/AlertReminderRuleService.ts +0 -31
- package/Server/Services/AlertService.ts +5 -3
- package/Server/Services/AlertSeverityService.ts +15 -109
- package/Server/Services/AlertStateService.ts +28 -119
- package/Server/Services/AnalyticsDatabaseService.ts +102 -9
- package/Server/Services/DatabaseService.ts +302 -0
- package/Server/Services/FormService.ts +1161 -0
- package/Server/Services/FormSubmissionService.ts +22 -0
- package/Server/Services/IncidentAlertService.ts +57 -24
- package/Server/Services/IncidentCustomFieldService.ts +4 -113
- package/Server/Services/IncidentEpisodeService.ts +5 -3
- package/Server/Services/IncidentMeasurementService.ts +123 -23
- package/Server/Services/IncidentReminderRuleService.ts +0 -31
- package/Server/Services/IncidentService.ts +5 -3
- package/Server/Services/IncidentSeverityService.ts +15 -114
- package/Server/Services/IncidentSlaRuleService.ts +0 -32
- package/Server/Services/IncidentStateService.ts +28 -119
- package/Server/Services/IncidentStateTimelineService.ts +2 -2
- package/Server/Services/IncomingCallPolicyEscalationRuleService.ts +22 -190
- package/Server/Services/Index.ts +4 -4
- package/Server/Services/LogService.ts +13 -0
- package/Server/Services/MetricRecordingRuleService.ts +106 -0
- package/Server/Services/MonitorStatusService.ts +27 -131
- package/Server/Services/OnCallDutyPolicyEscalationRuleService.ts +41 -0
- package/Server/Services/OnCallDutyPolicyService.ts +343 -0
- package/Server/Services/ProjectService.ts +62 -73
- package/Server/Services/RunbookRuleEngineService.ts +413 -41
- package/Server/Services/RunbookRuleService.ts +97 -0
- package/Server/Services/ScheduledMaintenanceMeasurementService.ts +126 -23
- package/Server/Services/ScheduledMaintenanceReminderRuleService.ts +0 -31
- package/Server/Services/ScheduledMaintenanceService.ts +5 -3
- package/Server/Services/ScheduledMaintenanceStateService.ts +28 -129
- package/Server/Services/SpanService.ts +21 -2
- package/Server/Services/StatusPageFooterLinkService.ts +9 -198
- package/Server/Services/StatusPageHeaderLinkService.ts +8 -197
- package/Server/Services/StatusPageHistoryChartBarColorRuleService.ts +9 -198
- package/Server/Services/StatusPageSubscriberNotificationTemplateService.ts +17 -5
- package/Server/Services/StatusPageSubscriberNotificationTemplateStatusPageService.ts +7 -6
- package/Server/Services/TraceRecordingRuleService.ts +15 -2
- package/Server/Services/UserNotificationRuleService.ts +41 -0
- package/Server/Types/AnalyticsDatabase/CountBy.ts +14 -0
- package/Server/Utils/Database/ListOrderMaintainer.ts +465 -0
- package/Server/Utils/Database/StateOrderGuard.ts +390 -0
- package/Server/Utils/EmailRollup/EmailRollupFlushRunner.ts +2 -0
- package/Server/Utils/EmailRollup/EmailRollupRenderer.ts +86 -3
- package/Server/Utils/EmailRollup/EmailRollupWriter.ts +41 -0
- package/Server/Utils/Form/FormRecordOptions.ts +147 -0
- package/Server/Utils/Form/FormSubmissionNote.ts +215 -0
- package/Server/Utils/Form/FormTargetHandler.ts +410 -0
- package/Server/Utils/Form/FormTargets.ts +28 -0
- package/Server/Utils/Form/IncidentFormTarget.ts +580 -0
- package/Server/Utils/Form/ScheduledMaintenanceFormTarget.ts +401 -0
- package/Server/Utils/Measurement/MeasurementDefinitionChange.ts +81 -0
- package/Server/Utils/Measurement/MeasurementDefinitionValidator.ts +9 -4
- package/Server/Utils/Measurement/MeasurementKeyAssigner.ts +50 -0
- package/Server/Utils/Measurement/MeasurementMetricWriter.ts +22 -2
- package/Server/Utils/Measurement/MeasurementStateReference.ts +95 -0
- package/Server/Utils/Slo/SloOwnerReferenceValidator.ts +1 -1
- package/Server/Utils/StatusPage/IncidentSubscriberAudienceBuilder.ts +8 -7
- package/Server/Utils/StatusPage/IncidentTemplateVariableBuilder.ts +24 -16
- package/Server/Utils/StatusPage/SubscriberIncidentEmailBuilder.ts +9 -1
- package/Server/Utils/StatusPage/SubscriberNotificationPreviewBuilder.ts +4 -0
- package/Server/Utils/StatusPage/SubscriberTemplateIncidentRecordAccess.ts +7 -5
- package/Tests/App/Accounts/FormPage.test.tsx +761 -0
- package/Tests/App/Accounts/FormServerMessages.test.ts +115 -0
- package/Tests/App/Accounts/FormUtils.test.ts +557 -0
- package/Tests/App/AdminDashboard/AdminMenusFolded.test.tsx +299 -0
- package/Tests/App/AdminDashboard/AdminProductsMenuUnfolded.test.tsx +133 -0
- package/Tests/App/ArchivedEntriesInAdvancedSection.test.tsx +662 -0
- package/Tests/App/Dashboard/AIInsightsKubernetesClusterPage.test.tsx +5 -4
- package/Tests/App/Dashboard/AdminUserNotificationMethodsPage.test.tsx +58 -0
- package/Tests/App/Dashboard/AlertEpisodeViewFields.test.tsx +25 -3
- package/Tests/App/Dashboard/AlertsSideMenu.test.tsx +108 -4
- package/Tests/App/Dashboard/ApiKeyCreateForm.test.ts +652 -0
- package/Tests/App/Dashboard/ApiKeyViewPermissions.test.tsx +756 -0
- package/Tests/App/Dashboard/ApiKeysCreateAccess.test.tsx +797 -0
- package/Tests/App/Dashboard/ArchivedResourceNavigation.test.tsx +50 -2
- package/Tests/App/Dashboard/BulkChangeStateModalColors.test.tsx +136 -0
- package/Tests/App/Dashboard/ClusterAccessNotice.test.tsx +7 -2
- package/Tests/App/Dashboard/ConnectedWorkspaces.test.tsx +771 -0
- package/Tests/App/Dashboard/CoreListEmptyStates.test.tsx +77 -20
- package/Tests/App/Dashboard/CreateOAuthWorkflowVariableFormSteps.test.tsx +6 -4
- package/Tests/App/Dashboard/CreateReviewStepRoleSummary.test.tsx +2 -2
- package/Tests/App/Dashboard/CreateReviewStepSelectionSummary.test.tsx +4 -4
- package/Tests/App/Dashboard/CreateWorkflowModal.test.tsx +549 -123
- package/Tests/App/Dashboard/CriteriaFilterDefaults.test.ts +64 -1
- package/Tests/App/Dashboard/CriteriaFilterMonitorTypeChange.test.ts +127 -0
- package/Tests/App/Dashboard/CriteriaName.test.ts +831 -0
- package/Tests/App/Dashboard/CustomFieldDefinitionTableRender.test.tsx +485 -0
- package/Tests/App/Dashboard/CustomFieldSimpleCreate.test.tsx +1070 -0
- package/Tests/App/Dashboard/CustomFieldSimpleCreateRender.test.tsx +747 -0
- package/Tests/App/Dashboard/CustomFieldTablesTwoColumns.test.tsx +523 -0
- package/Tests/App/Dashboard/CustomFieldsSettingsIncidentOptions.test.tsx +92 -59
- package/Tests/App/Dashboard/DashboardComponentsAToLHelpersTranslation.test.ts +256 -0
- package/Tests/App/Dashboard/DashboardComponentsAToLTranslation.test.tsx +482 -0
- package/Tests/App/Dashboard/DashboardComponentsMRTranslation.test.tsx +805 -0
- package/Tests/App/Dashboard/DashboardFrenchLocale.test.tsx +335 -0
- package/Tests/App/Dashboard/DashboardGermanLocale.test.tsx +250 -0
- package/Tests/App/Dashboard/DashboardJapaneseLocale.test.tsx +435 -0
- package/Tests/App/Dashboard/DashboardPagesTranslation.test.tsx +449 -0
- package/Tests/App/Dashboard/DashboardPagesUtilsTranslation.test.ts +487 -0
- package/Tests/App/Dashboard/DashboardPhoneProductsMenu.test.tsx +262 -0
- package/Tests/App/Dashboard/DashboardRuntimeLocales.test.tsx +635 -0
- package/Tests/App/Dashboard/DashboardSpanishLocale.test.tsx +405 -0
- package/Tests/App/Dashboard/DeclareFormsAdvancedRender.test.tsx +550 -0
- package/Tests/App/Dashboard/DefaultInviteTeam.test.ts +600 -0
- package/Tests/App/Dashboard/DeveloperDocsGuides.test.ts +569 -127
- package/Tests/App/Dashboard/DeveloperDocsPage.test.tsx +337 -51
- package/Tests/App/Dashboard/DiscoveryScanStatusMessage.test.tsx +10 -1
- package/Tests/App/Dashboard/EntityFilterDropdownColors.test.tsx +269 -0
- package/Tests/App/Dashboard/EntityFilterDropdownUnlistedSelection.test.tsx +23 -12
- package/Tests/App/Dashboard/EscalationRuleForm.test.ts +426 -0
- package/Tests/App/Dashboard/EscalationRuleFormGuard.test.ts +239 -0
- package/Tests/App/Dashboard/EscalationRuleOneStep.test.tsx +997 -0
- package/Tests/App/Dashboard/EscalationRuleRowActions.test.tsx +38 -10
- package/Tests/App/Dashboard/EventNotes.test.tsx +2 -2
- package/Tests/App/Dashboard/EventNotesUtil.test.ts +2 -2
- package/Tests/App/Dashboard/EventStatusPanel.test.tsx +87 -0
- package/Tests/App/Dashboard/FeedFilterSortIntegration.test.tsx +349 -145
- package/Tests/App/Dashboard/FeedOptionsLocales.test.ts +50 -18
- package/Tests/App/Dashboard/FeedOrdering.test.ts +116 -24
- package/Tests/App/Dashboard/FlameGraphLosesItsSpans.test.tsx +102 -0
- package/Tests/App/Dashboard/FormBuilderData.test.ts +280 -0
- package/Tests/App/Dashboard/FormBuilderParts.test.tsx +794 -0
- package/Tests/App/Dashboard/FormBuilderState.test.ts +630 -0
- package/Tests/App/Dashboard/FormBuilderUi.test.tsx +850 -0
- package/Tests/App/Dashboard/FormMappingCard.test.tsx +492 -0
- package/Tests/App/Dashboard/FormOnSubmit.test.ts +693 -0
- package/Tests/App/Dashboard/{IncidentFormPlan.test.ts → FormPlan.test.ts} +15 -15
- package/Tests/App/Dashboard/{IncidentFormShareLinkCard.test.tsx → FormShareLinkCard.test.tsx} +53 -73
- package/Tests/App/Dashboard/FormStatusCard.test.tsx +354 -0
- package/Tests/App/Dashboard/FormTargetCard.test.tsx +315 -0
- package/Tests/App/Dashboard/FormsMovedPagesAndSubmissions.test.tsx +270 -0
- package/Tests/App/Dashboard/FormsPages.test.tsx +574 -0
- package/Tests/App/Dashboard/GeneratedKeyForms.test.tsx +500 -0
- package/Tests/App/Dashboard/GroupingRuleComponents.test.tsx +792 -0
- package/Tests/App/Dashboard/GroupingRuleFormFlow.test.tsx +1109 -0
- package/Tests/App/Dashboard/GroupingRulePages.test.tsx +672 -0
- package/Tests/App/Dashboard/GroupingRuleTranslationRender.test.tsx +244 -0
- package/Tests/App/Dashboard/IncidentCreateAcknowledgeAlerts.test.tsx +7 -4
- package/Tests/App/Dashboard/IncidentCreateFromAlerts.test.tsx +33 -15
- package/Tests/App/Dashboard/IncidentCreateStatusPageScope.test.tsx +640 -23
- package/Tests/App/Dashboard/IncidentCreateTemplateCustomFieldSettings.test.tsx +2 -0
- package/Tests/App/Dashboard/IncidentCustomFieldCreateSettingsForm.test.ts +37 -345
- package/Tests/App/Dashboard/IncidentCustomFieldSettingsCard.test.tsx +6 -541
- package/Tests/App/Dashboard/IncidentCustomFieldTemplateVariables.test.tsx +188 -28
- package/Tests/App/Dashboard/IncidentEpisodeViewFields.test.tsx +25 -3
- package/Tests/App/Dashboard/IncidentLinkedAlertsSettingsPage.test.tsx +583 -0
- package/Tests/App/Dashboard/IncidentNoteTemplatePlaceholders.test.tsx +350 -52
- package/Tests/App/Dashboard/IncidentNoteTemplateVariablesLoader.test.ts +7 -2
- package/Tests/App/Dashboard/IncidentRoleFormField.test.tsx +405 -0
- package/Tests/App/Dashboard/IncidentRolesSettingsPage.test.tsx +659 -0
- package/Tests/App/Dashboard/IncidentRuleConditions.test.tsx +405 -0
- package/Tests/App/Dashboard/IncidentSettingsStatusPageScope.test.tsx +236 -21
- package/Tests/App/Dashboard/IncidentStatesPageTable.test.tsx +440 -0
- package/Tests/App/Dashboard/IncidentTemplateCustomFieldSettings.test.tsx +24 -4
- package/Tests/App/Dashboard/IncidentTemplateStatusPageScopeCard.test.tsx +135 -3
- package/Tests/App/Dashboard/IncidentsSideMenu.test.tsx +201 -14
- package/Tests/App/Dashboard/InventoryTypeAndStatusFacets.test.tsx +12 -5
- package/Tests/App/Dashboard/InvestigationConversationData.test.ts +36 -12
- package/Tests/App/Dashboard/InvestigationDrawer.test.tsx +56 -0
- package/Tests/App/Dashboard/InviteUserDefaultTeam.test.tsx +586 -0
- package/Tests/App/Dashboard/KubernetesClusterOverviewZoom.test.tsx +6 -3
- package/Tests/App/Dashboard/LabelsFormField.test.tsx +554 -0
- package/Tests/App/Dashboard/LogsResultTotal.test.tsx +827 -0
- package/Tests/App/Dashboard/MarkdownTemplateDialogsWide.test.tsx +306 -0
- package/Tests/App/Dashboard/MeasurementForms.test.tsx +927 -0
- package/Tests/App/Dashboard/MeasurementListAndChart.test.tsx +290 -0
- package/Tests/App/Dashboard/MeasurementPagesI18n.test.ts +148 -0
- package/Tests/App/Dashboard/MeasurementSetup.test.ts +618 -0
- package/Tests/App/Dashboard/MenuSpecificFoldedSections.test.tsx +494 -0
- package/Tests/App/Dashboard/MessageQueueOverviewPresentation.test.ts +4 -4
- package/Tests/App/Dashboard/MessageQueueRulePages.test.tsx +40 -17
- package/Tests/App/Dashboard/MessageQueueSideMenus.test.tsx +35 -10
- package/Tests/App/Dashboard/MessageQueueViewPages.test.tsx +3 -1
- package/Tests/App/Dashboard/MetricDescriptionsCatalog.test.ts +11 -2
- package/Tests/App/Dashboard/MonitorCriteriaActionToggles.test.tsx +0 -1
- package/Tests/App/Dashboard/MonitorCriteriaAdvancedOptions.test.tsx +0 -2
- package/Tests/App/Dashboard/MonitorCriteriaNameAndDescription.test.tsx +534 -0
- package/Tests/App/Dashboard/MonitorCriteriaOwners.test.tsx +281 -0
- package/Tests/App/Dashboard/MonitorCriteriaTemplateVariables.test.tsx +191 -0
- package/Tests/App/Dashboard/MonitorRecommendationSeverityColors.test.ts +73 -0
- package/Tests/App/Dashboard/MonitorStatusChangesCard.test.tsx +70 -6
- package/Tests/App/Dashboard/MonitorStepsCriteriaAlignmentWiring.test.tsx +168 -4
- package/Tests/App/Dashboard/MonitorStepsDefaultStatusAdvanced.test.tsx +448 -0
- package/Tests/App/Dashboard/NavigationSearchKeywords.test.tsx +54 -0
- package/Tests/App/Dashboard/NetworkMetricTooltips.test.ts +9 -4
- package/Tests/App/Dashboard/NetworkSideMenu.test.tsx +80 -7
- package/Tests/App/Dashboard/NotificationMethodTabsWorkspaces.test.tsx +280 -0
- package/Tests/App/Dashboard/NumberPrefixPageRedirects.test.tsx +365 -0
- package/Tests/App/Dashboard/NumberPrefixSettingsPages.test.tsx +1048 -0
- package/Tests/App/Dashboard/OnCallCalendarFeedSideMenus.test.tsx +11 -2
- package/Tests/App/Dashboard/OnCallPolicyCreateFormGuard.test.ts +328 -0
- package/Tests/App/Dashboard/OnCallPolicyFirstResponders.test.tsx +639 -0
- package/Tests/App/Dashboard/OnCallPolicySummaryNobodyPaged.test.tsx +293 -0
- package/Tests/App/Dashboard/OnCallPreventionGuards.test.tsx +36 -18
- package/Tests/App/Dashboard/OnCallReadinessSurfaces.test.tsx +7 -1
- package/Tests/App/Dashboard/OnCallRulesDeleteGuard.test.tsx +1 -1
- package/Tests/App/Dashboard/OwnersCard.test.tsx +422 -0
- package/Tests/App/Dashboard/ProductOrientation.test.tsx +147 -9
- package/Tests/App/Dashboard/ProductSettingsSectionCollapsed.test.tsx +28 -14
- package/Tests/App/Dashboard/ResourceAiInsightsPage.test.tsx +3 -2
- package/Tests/App/Dashboard/ResourceFeed.test.tsx +162 -130
- package/Tests/App/Dashboard/ResourceFeedPageWiring.test.ts +1 -1
- package/Tests/App/Dashboard/ResourceFeedPagesFilterSort.test.tsx +115 -81
- package/Tests/App/Dashboard/RoleCardSelectOptions.test.ts +204 -0
- package/Tests/App/Dashboard/RunbookRuleConditions.test.tsx +773 -0
- package/Tests/App/Dashboard/RunnerKubernetesAgentForm.test.tsx +12 -1
- package/Tests/App/Dashboard/RunnerNavigation.test.tsx +32 -11
- package/Tests/App/Dashboard/ScheduledMaintenanceCreateForm.test.tsx +798 -0
- package/Tests/App/Dashboard/ScheduledMaintenanceFormsStructure.test.ts +517 -0
- package/Tests/App/Dashboard/ScheduledMaintenanceOverviewPage.test.tsx +183 -0
- package/Tests/App/Dashboard/ScheduledMaintenanceSideMenu.test.tsx +103 -4
- package/Tests/App/Dashboard/ScheduledMaintenanceTemplateForm.test.tsx +602 -0
- package/Tests/App/Dashboard/SearchEngineIndexingCard.test.tsx +436 -0
- package/Tests/App/Dashboard/SecurityEventsViewer.test.tsx +104 -0
- package/Tests/App/Dashboard/SetupGuideStepVariants.test.tsx +135 -0
- package/Tests/App/Dashboard/SideMenuHarness.tsx +20 -0
- package/Tests/App/Dashboard/SloFeed.test.tsx +33 -48
- package/Tests/App/Dashboard/SloListSideMenu.test.tsx +36 -1
- package/Tests/App/Dashboard/SloMonitorRuleCriteria.test.tsx +66 -7
- package/Tests/App/Dashboard/SloViewSideMenu.test.tsx +15 -4
- package/Tests/App/Dashboard/StateSettingsPages.test.tsx +581 -0
- package/Tests/App/Dashboard/StateTimelinePagesLiveState.test.tsx +373 -0
- package/Tests/App/Dashboard/StatusPageAdvancedOptionsRedirect.test.tsx +321 -0
- package/Tests/App/Dashboard/StatusPageAdvancedSettingsPage.test.tsx +271 -0
- package/Tests/App/Dashboard/StatusPageBrandingMenu.test.tsx +176 -0
- package/Tests/App/Dashboard/StatusPageBrandingPage.test.tsx +694 -0
- package/Tests/App/Dashboard/StatusPageBrandingRedirects.test.tsx +400 -0
- package/Tests/App/Dashboard/StatusPageDisplaySettingsCard.test.tsx +1439 -0
- package/Tests/App/Dashboard/StatusPageSubscriberSettingsPages.test.tsx +888 -0
- package/Tests/App/Dashboard/SubscriberAudienceSummary.test.tsx +382 -17
- package/Tests/App/Dashboard/SubscriberChannelOffPanel.test.tsx +393 -0
- package/Tests/App/Dashboard/SubscriberChannelsCard.test.tsx +832 -0
- package/Tests/App/Dashboard/SubscriberNotificationWarnings.test.tsx +215 -0
- package/Tests/App/Dashboard/SubscriberTemplateVariables.test.tsx +314 -0
- package/Tests/App/Dashboard/TemplateFormsNoInternalDataWarning.test.tsx +698 -0
- package/Tests/App/Dashboard/TracesResultTotal.test.tsx +543 -0
- package/Tests/App/Dashboard/TracesStatusChartAndFacet.test.tsx +2 -1
- package/Tests/App/Dashboard/TriggerRuleCriteriaNames.test.tsx +142 -0
- package/Tests/App/Dashboard/UserSettingsEmailPreferences.test.tsx +11 -3
- package/Tests/App/Dashboard/UserSettingsNotificationSettings.test.tsx +172 -1
- package/Tests/App/Dashboard/VMwareMetricTooltips.test.ts +12 -6
- package/Tests/App/Dashboard/WorkflowRunsLogsMenus.test.tsx +44 -7
- package/Tests/App/Dashboard/WorkflowRunsPages.test.tsx +5 -1
- package/Tests/App/Dashboard/WorkflowTemplatePicker.test.tsx +780 -755
- package/Tests/App/Dashboard/WorkflowVariableCreateFormSteps.test.tsx +37 -0
- package/Tests/App/Dashboard/WorkflowVariableListsGuard.test.ts +308 -0
- package/Tests/App/Dashboard/WorkflowVariablesTable.test.tsx +89 -55
- package/Tests/App/Dashboard/WorkflowVariablesTableRender.test.tsx +621 -0
- package/Tests/App/Dashboard/WorkspaceConnectionPages.test.tsx +628 -0
- package/Tests/App/Dashboard/WorkspaceConnectionsGuards.test.ts +398 -0
- package/Tests/App/Dashboard/WorkspaceConnectionsWiring.test.ts +213 -0
- package/Tests/App/Dashboard/WorkspaceDisconnectRefresh.test.tsx +318 -0
- package/Tests/App/Dashboard/WorkspaceMenusConnected.test.tsx +581 -0
- package/Tests/App/Dashboard/WorkspaceSideMenuSection.test.ts +433 -0
- package/Tests/App/PublicDashboard/AutoRefreshPickerTick.test.tsx +209 -0
- package/Tests/App/RarelyUsedMenuSectionsCollapsed.test.tsx +771 -0
- package/Tests/App/StatusPage/BulkAddStatusPageMonitorsModal.test.tsx +74 -5
- package/Tests/App/StatusPage/StatusPageSubscribeFromFirstStep.test.tsx +382 -0
- package/Tests/Helpers/FormStepsScan.ts +770 -55
- package/Tests/Helpers/HookOrderScan.ts +307 -0
- package/Tests/Helpers/ToggleUsageScan.ts +4 -2
- package/Tests/Models/DatabaseModels/{IncidentFormModel.test.ts → FormModel.test.ts} +433 -495
- package/Tests/Models/DatabaseModels/IncidentAlertModel.test.ts +76 -5
- package/Tests/Models/DatabaseModels/RunbookRuleCriteriaColumns.test.ts +117 -0
- package/Tests/Models/GeneratedKeyColumns.test.ts +145 -0
- package/Tests/Models/IncidentCustomFieldApiSchemaContract.test.ts +10 -1
- package/Tests/Models/ListOrderColumnModels.test.ts +332 -0
- package/Tests/Models/RelationColumnModelTypes.test.ts +135 -0
- package/Tests/ResponsiveSpacing.test.ts +627 -0
- package/Tests/ResponsiveSpacing.ts +508 -0
- package/Tests/ResponsiveVisibility.test.ts +65 -0
- package/Tests/ResponsiveVisibility.ts +34 -0
- package/Tests/Server/API/BaseAnalyticsAPICountExact.test.ts +185 -0
- package/Tests/Server/API/{IncidentFormAPI.test.ts → FormAPI.test.ts} +92 -93
- package/Tests/Server/API/{IncidentFormPublicRoutes.test.ts → FormPublicRoutes.test.ts} +182 -126
- package/Tests/Server/API/IncidentSubscriberAudienceAPI.test.ts +70 -3
- package/Tests/Server/Infrastructure/Postgres/AddIncidentFormsMigration.test.ts +48 -52
- package/Tests/Server/Infrastructure/Postgres/AddRunbookRuleMatchCriteriaMigration.test.ts +316 -0
- package/Tests/Server/Infrastructure/Postgres/MigrateIncidentFormsToFormsMigration.test.ts +688 -0
- package/Tests/Server/Infrastructure/Postgres/TurnOnLinkedAlertSwitchesByDefaultMigration.test.ts +229 -0
- package/Tests/Server/Infrastructure/Postgres/UserNotificationEmailRollupColorMigration.test.ts +116 -0
- package/Tests/Server/Infrastructure/Postgres/UserNotificationEmailRollupTableMigration.test.ts +109 -22
- package/Tests/Server/Middleware/{IncidentFormRateLimit.test.ts → FormRateLimit.test.ts} +214 -227
- package/Tests/Server/Services/AlertMeasurementService.test.ts +62 -33
- package/Tests/Server/Services/AnalyticsDatabaseServiceExactCount.test.ts +397 -0
- package/Tests/Server/Services/DatabaseServiceListOrder.test.ts +713 -0
- package/Tests/Server/Services/{IncidentFormOwnersCreatedNotification.test.ts → FormOwnersCreatedNotification.test.ts} +44 -30
- package/Tests/Server/Services/FormPublicForm.test.ts +990 -0
- package/Tests/Server/Services/FormPublicSubmission.test.ts +1468 -0
- package/Tests/Server/Services/{IncidentFormRegistration.test.ts → FormRegistration.test.ts} +37 -45
- package/Tests/Server/Services/FormService.test.ts +709 -0
- package/Tests/Server/Services/{IncidentFormSubmissionTemplateBranch.test.ts → FormSubmissionTemplateBranch.test.ts} +100 -157
- package/Tests/Server/Services/GroupingRuleSimpleSetupEngine.test.ts +627 -0
- package/Tests/Server/Services/IncidentAlertPostgres.test.ts +26 -3
- package/Tests/Server/Services/IncidentAlertStateCascade.test.ts +169 -8
- package/Tests/Server/Services/IncidentFormPostgres.test.ts +250 -494
- package/Tests/Server/Services/IncidentMeasurementService.test.ts +37 -17
- package/Tests/Server/Services/IncidentSeverityDeletePausesComplianceRules.test.ts +19 -33
- package/Tests/Server/Services/IncomingCallPolicyEscalationRuleTarget.test.ts +14 -36
- package/Tests/Server/Services/MeasurementDashboardEdits.test.ts +390 -0
- package/Tests/Server/Services/MeasurementKeyGeneration.test.ts +484 -0
- package/Tests/Server/Services/MonitorStatusServiceValidation.test.ts +302 -105
- package/Tests/Server/Services/OnCallDutyPolicyEscalationRuleDefaultName.test.ts +339 -0
- package/Tests/Server/Services/OnCallDutyPolicyFirstResponders.test.ts +815 -0
- package/Tests/Server/Services/OnCallDutyPolicyFirstRespondersFreePlan.test.ts +270 -0
- package/Tests/Server/Services/ProjectServiceDefaultIncidentRoles.test.ts +392 -0
- package/Tests/Server/Services/ProjectServiceLinkedAlertDefaults.test.ts +188 -0
- package/Tests/Server/Services/ProjectServiceNumberPrefix.test.ts +327 -0
- package/Tests/Server/Services/RecordingRuleOutputMetricNameGeneration.test.ts +367 -0
- package/Tests/Server/Services/RunbookRuleEngineService.test.ts +1543 -0
- package/Tests/Server/Services/RunbookRuleService.test.ts +478 -0
- package/Tests/Server/Services/ScheduledMaintenanceMeasurementService.test.ts +73 -38
- package/Tests/Server/Services/SeverityCreationRuleBackfill.test.ts +52 -20
- package/Tests/Server/Services/StateListServicesOrder.test.ts +441 -0
- package/Tests/Server/Services/StatusPageSubscriberNotificationTemplateIncidentRecordAccess.test.ts +191 -27
- package/Tests/Server/Services/TeamComplianceSettingPostgres.test.ts +11 -3
- package/Tests/Server/Services/TelemetryExactCount.test.ts +410 -0
- package/Tests/Server/Types/Database/FeedEventTypeFilterQuery.test.ts +5 -4
- package/Tests/Server/Types/Database/Permissions/FormSubmissionRelationSelect.test.ts +201 -0
- package/Tests/Server/Utils/Database/ListOrderMaintainer.test.ts +157 -0
- package/Tests/Server/Utils/Database/StateOrderGuard.test.ts +720 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupMetadataIntegration.test.ts +92 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupRenderer.test.ts +373 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupTestHarness.ts +7 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupWriter.test.ts +252 -0
- package/Tests/Server/Utils/Form/FormSubmissionNote.test.ts +402 -0
- package/Tests/Server/Utils/Measurement/MeasurementDefinitionChange.test.ts +130 -0
- package/Tests/Server/Utils/Measurement/MeasurementMetricWriter.test.ts +86 -0
- package/Tests/Server/Utils/Measurement/MeasurementStateReference.test.ts +129 -0
- package/Tests/Server/Utils/Monitor/DefaultMonitorCriteriaOutcomes.test.ts +577 -0
- package/Tests/Server/Utils/StatusPage/IncidentTemplateVariableBuilder.test.ts +223 -46
- package/Tests/Server/Utils/StatusPage/SubscriberIncidentEmailBuilder.test.ts +58 -45
- package/Tests/Server/Utils/StatusPage/SubscriberNotificationPreviewBuilder.test.ts +76 -1
- package/Tests/Types/CustomField/CustomFieldCreateSettings.test.ts +5 -173
- package/Tests/Types/CustomField/CustomFieldVariableKey.test.ts +160 -17
- package/Tests/Types/Form/FormField.test.ts +1552 -0
- package/Tests/Types/{Incident/IncidentFormIpAllowlist.test.ts → Form/FormIpAllowlist.test.ts} +21 -23
- package/Tests/Types/Form/FormPublic.test.ts +1295 -0
- package/Tests/Types/Form/FormSubmissionAnswer.test.ts +206 -0
- package/Tests/Types/Form/FormTargetCatalog.test.ts +389 -0
- package/Tests/Types/Form/FormTargetSettings.test.ts +459 -0
- package/Tests/Types/Form/LegacyIncidentFormConversion.test.ts +341 -0
- package/Tests/Types/Measurement/MeasurementKey.test.ts +195 -0
- package/Tests/Types/Measurement/MeasurementUnit.test.ts +139 -0
- package/Tests/Types/Metrics/RecordingRuleOutputMetricName.test.ts +93 -0
- package/Tests/Types/Monitor/MonitorCriteria.test.ts +150 -0
- package/Tests/Types/Monitor/MonitorCriteriaActionValidation.test.ts +10 -4
- package/Tests/Types/Monitor/MonitorCriteriaInstance.test.ts +436 -7
- package/Tests/Types/OnCallDutyPolicy/EscalationRuleDefaults.test.ts +230 -0
- package/Tests/Types/OnCallDutyPolicy/FirstResponders.test.ts +218 -0
- package/Tests/Types/Rules/RuleCriteriaFieldRegistry.test.ts +82 -2
- package/Tests/Types/Rum/SessionReplayCustomEvents.test.ts +75 -1
- package/Tests/Types/Runbook/RunbookRuleCriteria.test.ts +343 -0
- package/Tests/Types/ScheduledMaintenance/MaintenanceWindow.test.ts +313 -0
- package/Tests/Types/StatusPage/SubscriberNotificationTemplateCompiler.test.ts +9 -5
- package/Tests/Types/StatusPage/SubscriberNotificationTemplatePreview.test.ts +42 -1
- package/Tests/Types/StatusPage/SubscriberNotificationTemplateVariables.test.ts +135 -23
- package/Tests/Types/Template/TemplateVariable.test.ts +385 -0
- package/Tests/Types/Workflow/ComponentDocumentation.test.ts +2 -2
- package/Tests/Types/Workspace/NotificationRules/NotificationRuleConditionColors.test.ts +216 -0
- package/Tests/UI/Components/ActionButton/RowActions.test.tsx +214 -14
- package/Tests/UI/Components/ActionButton/RowActionsAccessibility.test.tsx +9 -0
- package/Tests/UI/Components/ActionButton/RowActionsTrigger.test.tsx +3 -0
- package/Tests/UI/Components/ActionButton/SplitActionButtons.test.ts +2 -0
- package/Tests/UI/Components/AdvancedPageSection.test.tsx +211 -0
- package/Tests/UI/Components/AppliedFilters.test.tsx +187 -0
- package/Tests/UI/Components/BasicFormModalSteps.test.tsx +220 -4
- package/Tests/UI/Components/BulkOwnerActions.test.tsx +366 -174
- package/Tests/UI/Components/BulkUpdateForm.test.tsx +2 -0
- package/Tests/UI/Components/BulkUpdateFormConfirmDetails.test.tsx +4 -0
- package/Tests/UI/Components/CardModelDetailEditModalTitle.test.tsx +195 -0
- package/Tests/UI/Components/CardSelect.test.tsx +45 -0
- package/Tests/UI/Components/CollapsibleSection.test.tsx +85 -0
- package/Tests/UI/Components/CustomFields/MapFromCustomFieldInput.test.tsx +192 -1
- package/Tests/UI/Components/Detail/BooleanValue.test.tsx +97 -0
- package/Tests/UI/Components/Detail/DetailIdLine.test.tsx +464 -0
- package/Tests/UI/Components/Detail/DetailIdLineDarkMode.test.ts +230 -0
- package/Tests/UI/Components/Detail/DetailIdLineInLocale.test.tsx +212 -0
- package/Tests/UI/Components/Detail/DetailRecordId.test.ts +142 -0
- package/Tests/UI/Components/Detail/DetailRecordIdLine.test.tsx +647 -0
- package/Tests/UI/Components/Detail/PlaceholderText.test.tsx +249 -0
- package/Tests/UI/Components/EditionLabelLicenseStatus.test.tsx +14 -0
- package/Tests/UI/Components/FacetSidebarControls.test.tsx +3 -2
- package/Tests/UI/Components/FeedActionsMenu.test.tsx +192 -0
- package/Tests/UI/Components/FeedCard.test.tsx +467 -0
- package/Tests/UI/Components/FeedEventTypeChecklist.test.tsx +779 -0
- package/Tests/UI/Components/FeedFilterModal.test.tsx +232 -0
- package/Tests/UI/Components/FeedFilterSummary.test.tsx +335 -0
- package/Tests/UI/Components/FeedMoreMenu.test.tsx +488 -0
- package/Tests/UI/Components/FeedOptions.test.ts +79 -195
- package/Tests/UI/Components/Filters/FilterRowsChangeFilter.test.tsx +300 -0
- package/Tests/UI/Components/Forms/AdvancedStepsGuard.test.ts +231 -0
- package/Tests/UI/Components/Forms/BasicFormCollapsibleSections.test.tsx +332 -0
- package/Tests/UI/Components/Forms/BasicFormFinishFromAnyStep.test.tsx +729 -0
- package/Tests/UI/Components/Forms/BasicFormPeoplePicker.test.tsx +345 -0
- package/Tests/UI/Components/Forms/CreateFormDefaultsGuard.test.ts +818 -0
- package/Tests/UI/Components/Forms/DeclareAndCreateFormsGuard.test.ts +589 -0
- package/Tests/UI/Components/Forms/FinishFromAnyStep.test.ts +571 -0
- package/Tests/UI/Components/Forms/FinishFromAnyStepGuard.test.ts +566 -0
- package/Tests/UI/Components/Forms/FormFieldMarkdown.test.tsx +11 -5
- package/Tests/UI/Components/Forms/FormFieldPasswordManagers.test.tsx +301 -0
- package/Tests/UI/Components/Forms/FormFieldTemplateVariables.test.tsx +349 -0
- package/Tests/UI/Components/Forms/FormFieldToggleRow.test.tsx +76 -0
- package/Tests/UI/Components/Forms/FormModalWidth.test.tsx +424 -0
- package/Tests/UI/Components/Forms/FormSummary.test.tsx +428 -1
- package/Tests/UI/Components/Forms/GeneratedKeyField.test.tsx +527 -0
- package/Tests/UI/Components/Forms/GeneratedKeyFieldDarkMode.test.ts +157 -0
- package/Tests/UI/Components/Forms/GeneratedKeyFieldI18n.test.ts +182 -0
- package/Tests/UI/Components/Forms/GeneratedKeyGuard.test.ts +386 -0
- package/Tests/UI/Components/Forms/LabelsFormFieldGuard.test.ts +1237 -0
- package/Tests/UI/Components/Forms/LongFormStepsGuard.test.ts +307 -4
- package/Tests/UI/Components/Forms/MarkdownFormsAreWide.test.ts +458 -0
- package/Tests/UI/Components/Forms/ModelFormCreateDefaults.test.tsx +584 -0
- package/Tests/UI/Components/Forms/ModelFormDropdownOptionsRefused.test.tsx +3 -2
- package/Tests/UI/Components/Forms/ModelFormModalFormRef.test.tsx +188 -0
- package/Tests/UI/Components/Forms/ModelFormOnBeforeUpdate.test.tsx +332 -0
- package/Tests/UI/Components/Forms/ModelFormPeoplePicker.test.tsx +452 -0
- package/Tests/UI/Components/Forms/ModelFormRuleCriteria.test.tsx +205 -2
- package/Tests/UI/Components/Forms/ModelFormStateDropdownColors.test.tsx +558 -0
- package/Tests/UI/Components/Forms/OverloadedFormStepsGuard.test.ts +88 -32
- package/Tests/UI/Components/Forms/SteppedFormFooterTiming.test.tsx +193 -0
- package/Tests/UI/Components/Forms/Utils/AdvancedFormSection.test.ts +401 -0
- package/Tests/UI/Components/Forms/Utils/CreateFormDefaults.test.ts +246 -0
- package/Tests/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.test.ts +10 -1
- package/Tests/UI/Components/Icon.test.tsx +51 -3
- package/Tests/UI/Components/InputPasswordManagers.test.tsx +189 -0
- package/Tests/UI/Components/List.test.tsx +136 -3
- package/Tests/UI/Components/ListDragAndDrop.test.tsx +203 -0
- package/Tests/UI/Components/LogsViewerResultTotal.test.tsx +532 -0
- package/Tests/UI/Components/MarkdownEditor.test.tsx +3 -3
- package/Tests/UI/Components/MarkdownEditorToolbar.test.tsx +693 -0
- package/Tests/UI/Components/MarkdownEditorToolbarDarkMode.test.ts +287 -0
- package/Tests/UI/Components/MarkdownToolbarLayout.test.ts +366 -0
- package/Tests/UI/Components/MarkdownViewerCopy.test.tsx +40 -1
- package/Tests/UI/Components/MasterPageExtensionEvents.test.tsx +236 -0
- package/Tests/UI/Components/MenuItemIcons.tsx +152 -0
- package/Tests/UI/Components/ModelListEmptyState.test.tsx +107 -14
- package/Tests/UI/Components/ModelTable/BaseModelTableBulkDelete.test.tsx +3 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableBulkSelectAll.test.tsx +2 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableColumnCustomization.test.tsx +2 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableCreateButtonTitle.test.tsx +78 -6
- package/Tests/UI/Components/ModelTable/BaseModelTableDeleteAndEmptyStates.test.tsx +5 -4
- package/Tests/UI/Components/ModelTable/BaseModelTableDeleteLock.test.tsx +425 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableDeleteNames.test.tsx +2 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableDragReorder.test.tsx +661 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableEmptyStateAction.test.tsx +432 -92
- package/Tests/UI/Components/ModelTable/BaseModelTableFilterModalRows.test.tsx +286 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableMenuIcons.test.tsx +682 -0
- package/Tests/UI/Components/ModelTable/BaseModelTablePermissionGating.test.tsx +2 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableRowActions.test.tsx +4 -0
- package/Tests/UI/Components/ModelTable/ColumnCustomizationModal.test.tsx +2 -1
- package/Tests/UI/Components/ModelTable/FeedMoreMenuMatchesTable.test.tsx +321 -0
- package/Tests/UI/Components/ModelTable/ModelTableEmptyState.test.ts +741 -0
- package/Tests/UI/Components/ModelTable/ModelTableWrapContent.test.tsx +2 -0
- package/Tests/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.test.ts +70 -0
- package/Tests/UI/Components/MoreMenuCheckedItems.test.tsx +307 -0
- package/Tests/UI/Components/MoreMenuItemColor.test.tsx +187 -0
- package/Tests/UI/Components/MoreMenuPortal.test.tsx +3 -0
- package/Tests/UI/Components/NavBar.test.tsx +108 -1
- package/Tests/UI/Components/NavBarCategoryToggleDarkMode.test.ts +176 -0
- package/Tests/UI/Components/NavBarMenuCatalog.test.tsx +486 -0
- package/Tests/UI/Components/NavBarMenuFolding.test.tsx +757 -0
- package/Tests/UI/Components/NavBarMenuSearch.test.tsx +290 -213
- package/Tests/UI/Components/ObjectID/ObjectIDView.test.tsx +191 -0
- package/Tests/UI/Components/Pagination.test.tsx +1038 -1
- package/Tests/UI/Components/PaginationIntegration.test.tsx +120 -3
- package/Tests/UI/Components/PaginationSummary.test.ts +300 -0
- package/Tests/UI/Components/PaginationTranslation.test.tsx +310 -0
- package/Tests/UI/Components/PeoplePicker/OwnersFieldGuard.test.ts +420 -0
- package/Tests/UI/Components/PeoplePicker/OwnersFormField.test.ts +167 -0
- package/Tests/UI/Components/PeoplePicker/PeopleListAndAvatar.test.tsx +306 -0
- package/Tests/UI/Components/PeoplePicker/PeoplePicker.test.tsx +702 -0
- package/Tests/UI/Components/PeoplePicker/PeoplePickerKinds.test.ts +453 -0
- package/Tests/UI/Components/PeoplePicker/PeoplePickerOnCallScheduleKind.test.ts +371 -0
- package/Tests/UI/Components/PeoplePicker/PeoplePickerTypes.test.ts +251 -0
- package/Tests/UI/Components/Pill.test.tsx +128 -0
- package/Tests/UI/Components/PublicFormFields.test.ts +321 -0
- package/Tests/UI/Components/ResetObjectID.test.tsx +6 -6
- package/Tests/UI/Components/RowActionsLockedForRow.test.tsx +316 -0
- package/Tests/UI/Components/RuleCriteria/RuleCriteriaBuilder.test.tsx +900 -270
- package/Tests/UI/Components/RuleCriteria/RuleCriteriaBuilderDarkMode.test.ts +220 -0
- package/Tests/UI/Components/RuleCriteria/RuleCriteriaBuilderI18n.test.ts +259 -0
- package/Tests/UI/Components/RuleCriteria/RuleCriteriaBuilderTranslation.test.tsx +182 -0
- package/Tests/UI/Components/RuleCriteria/RuleCriteriaFields.test.ts +906 -0
- package/Tests/UI/Components/RuleCriteria/RuleCriteriaModelTable.test.tsx +181 -7
- package/Tests/UI/Components/RuleCriteria/RuleCriteriaNamesGuard.test.ts +391 -0
- package/Tests/UI/Components/RuleRun/RuleDetailFields.test.tsx +113 -31
- package/Tests/UI/Components/RuleRun/RuleEnabledField.test.ts +100 -0
- package/Tests/UI/Components/RuleRun/RuleTable.test.tsx +29 -0
- package/Tests/UI/Components/RuleRun/RuleTableCreateForm.test.tsx +308 -0
- package/Tests/UI/Components/SharedComponentsInLocale.test.tsx +286 -0
- package/Tests/UI/Components/SharedComponentsOwnWordsInLocale.test.tsx +487 -0
- package/Tests/UI/Components/SideMenuSection.test.tsx +75 -3
- package/Tests/UI/Components/SideMenuSectionState.test.tsx +99 -5
- package/Tests/UI/Components/SideOverSpacing.test.tsx +219 -0
- package/Tests/UI/Components/SrOnlyForeignRule.test.tsx +5 -23
- package/Tests/UI/Components/StateTimeline/CurrentlyActiveIndicator.test.tsx +227 -0
- package/Tests/UI/Components/StateTimeline/StateTimelineColumns.test.tsx +535 -0
- package/Tests/UI/Components/StateTimeline/StateTimelineDuration.test.tsx +236 -0
- package/Tests/UI/Components/StateTimeline/StateTimelineEndsAt.test.tsx +133 -0
- package/Tests/UI/Components/SteppedEditFormSave.test.tsx +100 -5
- package/Tests/UI/Components/Table/EmptyTableMessage.test.ts +422 -0
- package/Tests/UI/Components/Table/TableDragAndDrop.test.tsx +575 -0
- package/Tests/UI/Components/Table/TableEmptyState.test.tsx +300 -62
- package/Tests/UI/Components/Table/TableEmptyStateBuilders.test.ts +239 -0
- package/Tests/UI/Components/Table/TableEmptyStateComponent.test.tsx +492 -0
- package/Tests/UI/Components/Table/TableEmptyStateDarkMode.test.ts +239 -0
- package/Tests/UI/Components/TableBulkCsvExport.test.tsx +2 -0
- package/Tests/UI/Components/TableColumnList.test.tsx +108 -0
- package/Tests/UI/Components/TableLoadingStates.test.tsx +2 -0
- package/Tests/UI/Components/TableRowActions.test.tsx +6 -42
- package/Tests/UI/Components/TableRowSelectability.test.tsx +2 -0
- package/Tests/UI/Components/TelemetryViewer/TelemetryViewerResultTotal.test.tsx +371 -0
- package/Tests/UI/Components/TemplateVariables/InsertTemplateVariableButton.test.tsx +353 -0
- package/Tests/UI/Components/TemplateVariables/MarkdownConvertersTemplateVariables.test.ts +121 -0
- package/Tests/UI/Components/TemplateVariables/MarkdownEditorTemplateVariables.test.tsx +634 -0
- package/Tests/UI/Components/TemplateVariables/TemplateVariableMenu.test.tsx +371 -0
- package/Tests/UI/Components/TemplateVariables/TemplateVariableTextControl.test.tsx +438 -0
- package/Tests/UI/Components/TemplateVariables/TemplateVariablesList.test.tsx +352 -0
- package/Tests/UI/Components/TemplateVariables/TextControlUtil.test.tsx +206 -0
- package/Tests/UI/Components/Toggle.test.tsx +185 -30
- package/Tests/UI/Components/ToggleMatchesProduct.test.tsx +251 -0
- package/Tests/UI/Components/ToggleUsageGuard.test.ts +1 -1
- package/Tests/UI/Components/Workflow/ComponentPicker/ComponentPickerBottomSpacing.test.tsx +293 -0
- package/Tests/UI/Components/Workflow/RunModalSpacing.test.tsx +171 -0
- package/Tests/UI/Components/Workflow/WorkflowBuilderInLocale.test.tsx +719 -0
- package/Tests/UI/Components/Workflow/WorkflowSentencesInLocale.test.ts +444 -0
- package/Tests/UI/Components/useFeedOptions.test.tsx +1 -1
- package/Tests/UI/DeleteConfirmationNamesGuard.test.ts +64 -3
- package/Tests/UI/EsbuildConfig.test.ts +39 -0
- package/Tests/UI/EsbuildLocales.test.ts +1430 -0
- package/Tests/UI/ForeignHiddenRuleGuard.test.ts +5 -5
- package/Tests/UI/HookOrderGuard.test.ts +375 -0
- package/Tests/UI/Monitor/MonitorStepRetrySettings.test.tsx +0 -1
- package/Tests/UI/Monitor/MonitorSummaryResponseGoesMissing.test.tsx +147 -0
- package/Tests/UI/Rum/ChunkLoader.test.ts +441 -0
- package/Tests/UI/Rum/InactivityMap.test.ts +582 -1
- package/Tests/UI/Rum/ReplayEngine.test.ts +433 -0
- package/Tests/UI/Rum/ReplayPlaybackIntent.test.ts +27 -0
- package/Tests/UI/Rum/ReplayRail.test.tsx +106 -0
- package/Tests/UI/Rum/ReplayRailDetail.test.tsx +85 -0
- package/Tests/UI/Rum/ReplaySignals.test.ts +115 -0
- package/Tests/UI/Rum/ReplayStageOverlays.test.tsx +151 -0
- package/Tests/UI/Rum/ReplayTimeline.test.tsx +129 -0
- package/Tests/UI/Rum/ReplayUi.test.tsx +150 -1
- package/Tests/UI/Rum/SessionReplayUsersTable.test.tsx +7 -4
- package/Tests/UI/Styles/PaginationDarkTheme.test.tsx +274 -0
- package/Tests/UI/Styles/PillDarkTheme.test.tsx +22 -0
- package/Tests/UI/Styles/ToggleTheme.test.ts +425 -191
- package/Tests/UI/Styles/TopLayerBackdrop.test.ts +734 -0
- package/Tests/UI/Styles/TopLayerBackdropGuard.ts +789 -0
- package/Tests/UI/Utils/AnalyticsModelAPICountExact.test.ts +139 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +1 -37
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +3 -9
- package/Tests/UI/Utils/DropdownOptionColors.test.ts +398 -0
- package/Tests/UI/Utils/ForeignDomMutationGuard.test.tsx +711 -0
- package/Tests/UI/Utils/GlobalTranslation.test.ts +222 -0
- package/Tests/UI/Utils/GrantablePermission.test.ts +610 -0
- package/Tests/UI/Utils/Telemetry/ResultTotal.test.ts +234 -0
- package/Tests/UI/Utils/Telemetry/UseResultTotal.test.tsx +616 -0
- package/Tests/UI/Utils/Translator.test.ts +502 -0
- package/Tests/UI/Utils/UseClockTick.test.tsx +137 -2
- package/Tests/UI/Utils/UseLiveDuration.test.tsx +625 -0
- package/Tests/Utils/ColorContrast.test.ts +108 -0
- package/Tests/Utils/DeveloperDocs/AiAssistantExamples.test.ts +14 -0
- package/Tests/Utils/DeveloperDocs/ApiExamples.test.ts +10 -117
- package/Tests/Utils/DeveloperDocs/DeveloperDocsLiveFixture.ts +114 -0
- package/Tests/Utils/DeveloperDocs/ExampleBuilder.test.ts +851 -0
- package/Tests/Utils/DeveloperDocs/ExampleValues.test.ts +101 -0
- package/Tests/Utils/DeveloperDocs/Hcl.test.ts +204 -0
- package/Tests/Utils/DeveloperDocs/LiveData.test.ts +273 -0
- package/Tests/Utils/DeveloperDocs/PageLookups.test.ts +297 -0
- package/Tests/Utils/DeveloperDocs/ResourceProfiles.test.ts +582 -0
- package/Tests/Utils/DeveloperDocs/TerraformConfig.test.ts +216 -22
- package/Tests/Utils/DeveloperDocs/TerraformSchema.test.ts +94 -0
- package/Tests/Utils/Email/EmailColorUtil.test.ts +356 -0
- package/Tests/Utils/Episode/EpisodeTemplateVariables.test.ts +106 -0
- package/Tests/Utils/Incident/IncidentNoteTemplateVariables.test.ts +143 -21
- package/Tests/Utils/KeyFromName.test.ts +442 -0
- package/Tests/Utils/ListOrder.test.ts +889 -0
- package/Tests/Utils/Markdown/UntrustedMarkdown.test.ts +4 -6
- package/Tests/Utils/Measurement/MeasurementMoments.test.ts +531 -0
- package/Tests/Utils/Project/NumberPrefix.test.ts +452 -0
- package/Tests/Utils/StateOrder.test.ts +850 -0
- package/Types/CustomField/CustomFieldCreateSettings.ts +15 -123
- package/Types/CustomField/CustomFieldValueFormat.ts +3 -2
- package/Types/CustomField/CustomFieldVariableKey.ts +140 -111
- package/Types/Database/ListOrderColumn.ts +61 -0
- package/Types/Form/FormField.ts +1193 -0
- package/Types/{Incident/IncidentFormIpAllowlist.ts → Form/FormIpAllowlist.ts} +50 -50
- package/Types/Form/FormPublic.ts +1321 -0
- package/Types/Form/FormSubmissionAnswer.ts +159 -0
- package/Types/Form/FormTargetCatalog.ts +299 -0
- package/Types/Form/FormTargetSettings.ts +450 -0
- package/Types/Form/FormTargetType.ts +86 -0
- package/Types/Form/LegacyIncidentFormConversion.ts +249 -0
- package/Types/Measurement/MeasurementKey.ts +107 -0
- package/Types/Measurement/MeasurementUnit.ts +97 -0
- package/Types/Metrics/RecordingRuleOutputMetricName.ts +73 -0
- package/Types/Monitor/MonitorCriteria.ts +27 -0
- package/Types/Monitor/MonitorCriteriaInstance.ts +213 -28
- package/Types/Monitor/MonitorStep.ts +2 -0
- package/Types/Monitor/MonitorSteps.ts +2 -0
- package/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.ts +6 -3
- package/Types/OnCallDutyPolicy/EscalationRuleDefaults.ts +147 -0
- package/Types/OnCallDutyPolicy/FirstResponders.ts +161 -0
- package/Types/Permission.ts +41 -35
- package/Types/Rules/RuleCriteriaFieldRegistry.ts +46 -1
- package/Types/Rum/SessionReplay.ts +25 -0
- package/Types/Rum/SessionReplayCustomEvents.ts +60 -0
- package/Types/Runbook/RunbookRuleCriteria.ts +206 -0
- package/Types/ScheduledMaintenance/MaintenanceWindow.ts +167 -0
- package/Types/StatusPage/IncidentSubscriberAudience.ts +4 -3
- package/Types/StatusPage/SubscriberNotificationTemplatePreview.ts +8 -2
- package/Types/StatusPage/SubscriberNotificationTemplateVariables.ts +68 -27
- package/Types/Template/TemplateVariable.ts +297 -0
- package/Types/Workspace/NotificationRules/NotificationRuleCondition.ts +27 -56
- package/UI/Components/404.tsx +8 -2
- package/UI/Components/AI/GenerateFromAIModal.tsx +11 -6
- package/UI/Components/AIAgent/AIAgent.tsx +8 -2
- package/UI/Components/ActionButton/ActionButtonSchema.ts +17 -1
- package/UI/Components/ActionButton/RowActions.tsx +34 -19
- package/UI/Components/ActionButton/SplitActionButtons.ts +36 -3
- package/UI/Components/ActionCard/ActionCard.tsx +14 -2
- package/UI/Components/AdvancedPageSection/AdvancedPageSection.tsx +82 -0
- package/UI/Components/AttachmentList/EventAttachmentList.tsx +8 -4
- package/UI/Components/AttributesJSON/AttributesJSONPreferences.ts +5 -4
- package/UI/Components/AttributesJSON/AttributesJSONView.tsx +18 -4
- package/UI/Components/AttributesJSON/AttributesViewToggle.tsx +12 -3
- package/UI/Components/AttributesJSON/CopyAttributesAsJSONButton.tsx +76 -23
- package/UI/Components/AutocompleteTextInput/AutocompleteTextInput.tsx +7 -2
- package/UI/Components/Breadcrumbs/Breadcrumbs.tsx +1 -1
- package/UI/Components/BulkUpdate/BulkOwnerActions.tsx +55 -150
- package/UI/Components/BulkUpdate/BulkUpdateForm.tsx +94 -30
- package/UI/Components/Button/Button.tsx +1 -1
- package/UI/Components/Button/DropdownButton.tsx +1 -1
- package/UI/Components/CSVFileUpload/CSVFileUpload.tsx +88 -20
- package/UI/Components/Captcha/Captcha.tsx +4 -1
- package/UI/Components/Card/CardMoreMenu.tsx +30 -0
- package/UI/Components/CardSelect/CardSelect.tsx +51 -17
- package/UI/Components/Charts/ChartGroup/ChartGroup.tsx +13 -8
- package/UI/Components/Charts/ChartGroup/NoDataMessage.tsx +5 -1
- package/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.tsx +9 -1
- package/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.tsx +26 -5
- package/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.tsx +11 -1
- package/UI/Components/Charts/ChartLibrary/BarChart/BarChart.tsx +11 -1
- package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +11 -1
- package/UI/Components/Charts/TimeRangeZoom/ResetTimeRangeZoomButton.tsx +12 -4
- package/UI/Components/Checkbox/Checkbox.tsx +6 -4
- package/UI/Components/CodeBlock/CodeBlock.tsx +9 -2
- package/UI/Components/CodeEditor/CodeEditor.tsx +82 -29
- package/UI/Components/CollapsibleSection/CollapsibleSection.tsx +38 -4
- package/UI/Components/ColorViewer/ColorViewer.tsx +13 -2
- package/UI/Components/CopyTextButton/CopyTextButton.tsx +7 -3
- package/UI/Components/CopyableButton/CopyableButton.tsx +7 -4
- package/UI/Components/CustomFields/CustomFieldsDetail.tsx +10 -1
- package/UI/Components/CustomFields/DropdownOptionsInput.tsx +22 -3
- package/UI/Components/CustomFields/MapFromCustomFieldInput.tsx +137 -25
- package/UI/Components/Dashboard/DashboardVariableControl.tsx +27 -6
- package/UI/Components/Date/CustomTimeRangeModal.tsx +17 -13
- package/UI/Components/Date/RangeStartAndEndDateEdit.tsx +36 -16
- package/UI/Components/Date/RangeStartAndEndDateView.tsx +9 -1
- package/UI/Components/Date/StartAndEndDate.tsx +9 -2
- package/UI/Components/Date/TimeRangePickerDropdown.tsx +21 -9
- package/UI/Components/DeleteConfirmation/DeleteConfirmationMessage.tsx +50 -9
- package/UI/Components/Detail/BooleanValue.tsx +45 -0
- package/UI/Components/Detail/Detail.tsx +122 -55
- package/UI/Components/Detail/DetailIdLine.tsx +229 -0
- package/UI/Components/Detail/DetailRecordId.ts +96 -0
- package/UI/Components/Detail/Field.ts +10 -0
- package/UI/Components/Detail/PlaceholderText.tsx +22 -1
- package/UI/Components/Dictionary/Dictionary.tsx +11 -1
- package/UI/Components/Dictionary/DictionaryOfStingsViewer.tsx +9 -2
- package/UI/Components/Dropdown/Dropdown.tsx +6 -3
- package/UI/Components/DuplicateModel/DuplicateModel.tsx +31 -6
- package/UI/Components/EditionLabel/EditionLabel.tsx +333 -191
- package/UI/Components/EntityDropdown/EntityDropdown.tsx +65 -32
- package/UI/Components/ErrorBoundary.tsx +40 -21
- package/UI/Components/ErrorMessage/ErrorMessage.tsx +1 -1
- package/UI/Components/EventItem/EventItem.tsx +14 -4
- package/UI/Components/Events/RecurringViewElement.tsx +24 -3
- package/UI/Components/ExpandableText/ExpandableText.tsx +6 -1
- package/UI/Components/Feed/FeedActionsMenu.tsx +49 -0
- package/UI/Components/Feed/FeedCard.tsx +156 -0
- package/UI/Components/Feed/FeedEventTypeChecklist.tsx +239 -0
- package/UI/Components/Feed/FeedFilterModal.tsx +54 -0
- package/UI/Components/Feed/FeedFilterSummary.tsx +114 -0
- package/UI/Components/Feed/FeedItem.tsx +5 -1
- package/UI/Components/Feed/FeedMoreMenu.tsx +100 -0
- package/UI/Components/Feed/FeedOptions.ts +44 -114
- package/UI/Components/FilePicker/FilePicker.tsx +60 -44
- package/UI/Components/FilterButtons/FilterButtons.tsx +6 -2
- package/UI/Components/Filters/AppliedFilters.tsx +90 -0
- package/UI/Components/Filters/BooleanFilter.tsx +5 -1
- package/UI/Components/Filters/DateFilter.tsx +33 -6
- package/UI/Components/Filters/DropdownFilter.tsx +5 -1
- package/UI/Components/Filters/EntityFilter.tsx +55 -18
- package/UI/Components/Filters/FilterPlaceholder.ts +21 -0
- package/UI/Components/Filters/FilterViewer.tsx +205 -143
- package/UI/Components/Filters/FiltersForm.tsx +19 -4
- package/UI/Components/Filters/NumberFilter.tsx +34 -11
- package/UI/Components/Filters/TextFilter.tsx +29 -10
- package/UI/Components/FormModal/BasicFormModal.tsx +69 -6
- package/UI/Components/Forms/BasicForm.tsx +206 -20
- package/UI/Components/Forms/BasicModelForm.tsx +2 -0
- package/UI/Components/Forms/CollapsibleFormSection.tsx +32 -3
- package/UI/Components/Forms/Fields/ColorPicker.tsx +6 -3
- package/UI/Components/Forms/Fields/FormField.tsx +282 -136
- package/UI/Components/Forms/Fields/GeneratedKeyField.tsx +336 -0
- package/UI/Components/Forms/Fields/IconPicker.tsx +7 -4
- package/UI/Components/Forms/Fields/PermissionPicker.tsx +11 -4
- package/UI/Components/Forms/FormSummary.tsx +161 -15
- package/UI/Components/Forms/ModelForm.tsx +186 -14
- package/UI/Components/Forms/Steps/Steps.tsx +4 -1
- package/UI/Components/Forms/Types/Field.ts +110 -1
- package/UI/Components/Forms/Types/FormFieldSchemaType.ts +5 -0
- package/UI/Components/Forms/Utils/AdvancedFormSection.ts +262 -0
- package/UI/Components/Forms/Utils/CreateFormDefaults.ts +192 -0
- package/UI/Components/Forms/Utils/FinishFromAnyStep.ts +284 -0
- package/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.ts +2 -0
- package/UI/Components/Forms/Utils/FormModalWidth.ts +63 -0
- package/UI/Components/Forms/Validation.ts +84 -46
- package/UI/Components/FullPageModal/FullPageModal.tsx +4 -1
- package/UI/Components/Graphs/UptimeBarTooltip.tsx +10 -2
- package/UI/Components/Header/Notifications/Notifications.tsx +7 -4
- package/UI/Components/Header/ProjectPicker/CreateNewProjectButton.tsx +5 -1
- package/UI/Components/Header/ProjectPicker/ProjectPickerFilterBox.tsx +7 -1
- package/UI/Components/Header/SearchBox.tsx +5 -1
- package/UI/Components/HeaderAlert/HeaderModelAlert.tsx +6 -1
- package/UI/Components/HeaderAlert/NotificationBell/NotificationBell.tsx +6 -1
- package/UI/Components/HeaderAlert/NotificationBell/NotificationBellDropdown.tsx +5 -2
- package/UI/Components/HeaderAlert/NotificationBell/NotificationBellSection.tsx +4 -1
- package/UI/Components/HiddenText/HiddenText.tsx +4 -1
- package/UI/Components/Icon/Icon.tsx +7 -4
- package/UI/Components/ImportExport/ExportModelCard.tsx +21 -3
- package/UI/Components/ImportExport/ImportModelsModal.tsx +61 -13
- package/UI/Components/Input/Input.tsx +40 -2
- package/UI/Components/IpAddressList/IpAddressList.tsx +12 -4
- package/UI/Components/JSONTable/JSONTable.tsx +19 -5
- package/UI/Components/LabelRule/ImportLabelRulesModal.tsx +90 -28
- package/UI/Components/Link/Link.tsx +6 -3
- package/UI/Components/List/List.tsx +152 -19
- package/UI/Components/List/ListBody.tsx +15 -1
- package/UI/Components/List/ListRow.tsx +32 -19
- package/UI/Components/List/ListSkeleton.tsx +4 -1
- package/UI/Components/Loader/Loader.tsx +12 -4
- package/UI/Components/LogsViewer/LogsViewer.tsx +60 -3
- package/UI/Components/LogsViewer/components/ActiveFilterChips.tsx +16 -4
- package/UI/Components/LogsViewer/components/ColumnSelector.tsx +32 -17
- package/UI/Components/LogsViewer/components/FacetValueRow.tsx +13 -7
- package/UI/Components/LogsViewer/components/HistogramTooltip.tsx +6 -1
- package/UI/Components/LogsViewer/components/KeyboardShortcutsHelp.tsx +18 -7
- package/UI/Components/LogsViewer/components/LiveLogsToggle.tsx +4 -1
- package/UI/Components/LogsViewer/components/LogDetailsPanel.tsx +43 -23
- package/UI/Components/LogsViewer/components/LogSearchBar.tsx +11 -3
- package/UI/Components/LogsViewer/components/LogSearchHelp.tsx +24 -14
- package/UI/Components/LogsViewer/components/LogSearchSuggestions.tsx +10 -2
- package/UI/Components/LogsViewer/components/LogsAnalyticsView.tsx +19 -5
- package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +4 -1
- package/UI/Components/LogsViewer/components/LogsHistogram.tsx +13 -6
- package/UI/Components/LogsViewer/components/LogsPagination.tsx +10 -0
- package/UI/Components/LogsViewer/components/LogsTable.tsx +44 -16
- package/UI/Components/LogsViewer/components/LogsViewerToolbar.tsx +65 -20
- package/UI/Components/LogsViewer/components/SavedViewsDropdown.tsx +18 -11
- package/UI/Components/Markdown.tsx/LazyMarkdownViewer.tsx +7 -1
- package/UI/Components/Markdown.tsx/MarkdownConverters.ts +18 -0
- package/UI/Components/Markdown.tsx/MarkdownEditor.tsx +1072 -249
- package/UI/Components/Markdown.tsx/MarkdownToolbarLayout.ts +260 -0
- package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +37 -8
- package/UI/Components/MasterPage/MasterPage.tsx +4 -1
- package/UI/Components/MemberRoleAssignment/MemberRoleAssignment.tsx +56 -23
- package/UI/Components/ModelDelete/ModelDelete.tsx +22 -4
- package/UI/Components/ModelDetail/CardModelDetail.tsx +26 -3
- package/UI/Components/ModelDetail/ModelDetail.tsx +17 -6
- package/UI/Components/ModelFormModal/ModelFormModal.tsx +51 -14
- package/UI/Components/ModelList/ModelList.tsx +93 -11
- package/UI/Components/ModelList/StaticModelList.tsx +24 -10
- package/UI/Components/ModelTable/BaseModelTable.tsx +715 -338
- package/UI/Components/ModelTable/ColumnCustomizationModal.tsx +73 -29
- package/UI/Components/ModelTable/CustomFieldColumns.tsx +2 -1
- package/UI/Components/ModelTable/EmptyStateOptions.ts +47 -0
- package/UI/Components/ModelTable/ModelTable.tsx +40 -10
- package/UI/Components/ModelTable/ModelTableEmptyState.ts +337 -0
- package/UI/Components/ModelTable/TableView.tsx +13 -6
- package/UI/Components/Monitor/SeriesLabelsViewer.tsx +4 -1
- package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +39 -1
- package/UI/Components/MonitorTemplateVariables/TemplateVariablesModal.tsx +63 -20
- package/UI/Components/MoreMenu/MoreMenu.tsx +27 -11
- package/UI/Components/MoreMenu/MoreMenuItem.tsx +63 -5
- package/UI/Components/Navbar/NavBar.tsx +25 -29
- package/UI/Components/Navbar/NavBarCategoryToggle.tsx +120 -0
- package/UI/Components/Navbar/NavBarMenuCatalog.ts +250 -0
- package/UI/Components/Navbar/NavBarMenuModal.tsx +391 -162
- package/UI/Components/Navbar/NavBarMobileMenu.tsx +140 -0
- package/UI/Components/ObjectID/ObjectIDView.tsx +54 -4
- package/UI/Components/OsVersionDisplay/OsVersionDisplay.tsx +8 -1
- package/UI/Components/Page/ModelPage.tsx +11 -5
- package/UI/Components/Page/Page.tsx +1 -1
- package/UI/Components/Pagination/Pagination.tsx +257 -112
- package/UI/Components/Pagination/PaginationCopy.ts +71 -0
- package/UI/Components/Pagination/PaginationSummary.ts +113 -0
- package/UI/Components/Pagination/Screenshots/README.md +11 -9
- package/UI/Components/Pagination/Screenshots/pagination-before-after.png +0 -0
- package/UI/Components/Pagination/Screenshots/pagination-dark.png +0 -0
- package/UI/Components/Pagination/Screenshots/pagination-go-to-page-modal.png +0 -0
- package/UI/Components/Pagination/Screenshots/pagination-long-list.png +0 -0
- package/UI/Components/Pagination/Screenshots/pagination-mobile.png +0 -0
- package/UI/Components/Pagination/Screenshots/pagination-telemetry.png +0 -0
- package/UI/Components/PeoplePicker/OwnersFormField.ts +95 -0
- package/UI/Components/PeoplePicker/OwnersPicker.tsx +74 -0
- package/UI/Components/PeoplePicker/PeopleAvatar.tsx +213 -0
- package/UI/Components/PeoplePicker/PeopleList.tsx +198 -0
- package/UI/Components/PeoplePicker/PeoplePicker.tsx +242 -0
- package/UI/Components/PeoplePicker/PeoplePickerKinds.ts +599 -0
- package/UI/Components/PeoplePicker/PeoplePickerTypes.ts +244 -0
- package/UI/Components/PeoplePicker/PeopleSearchPopup.tsx +537 -0
- package/UI/Components/PeoplePicker/usePeopleOptions.ts +264 -0
- package/UI/Components/Pill/Pill.tsx +35 -2
- package/UI/Components/Pill/PillColors.ts +22 -261
- package/UI/Components/Probe/Probe.tsx +5 -2
- package/UI/Components/ProgressBar/ProgressBar.tsx +17 -2
- package/UI/Components/ProgressButtons/ProgressButtons.tsx +8 -1
- package/UI/Components/ProjectInvitations/PendingProjectInvitations.tsx +49 -15
- package/UI/Components/PublicForm/PublicFormFields.ts +359 -0
- package/UI/Components/ResetObjectID/ResetObjectID.tsx +31 -4
- package/UI/Components/RuleCriteria/RuleCriteriaBuilder.tsx +500 -574
- package/UI/Components/RuleCriteria/RuleCriteriaFields.ts +895 -0
- package/UI/Components/RuleCriteria/RuleCriteriaModelForm.tsx +45 -7
- package/UI/Components/RuleCriteria/RuleCriteriaModelTable.tsx +105 -12
- package/UI/Components/RuleCriteria/RuleCriteriaSummary.tsx +34 -30
- package/UI/Components/RuleRun/RuleDetailFields.tsx +90 -2
- package/UI/Components/RuleRun/RuleEnabledField.ts +51 -0
- package/UI/Components/RuleRun/RuleTable.tsx +13 -1
- package/UI/Components/RuleRun/RuleView.tsx +22 -4
- package/UI/Components/RuleRun/RunRuleNowModal.tsx +11 -1
- package/UI/Components/Runbook/StepTimeoutInput.tsx +22 -11
- package/UI/Components/SavedViews/SavedViewsFacetSection.tsx +28 -10
- package/UI/Components/SavedViews/SavedViewsSearchInput.tsx +6 -2
- package/UI/Components/SavedViews/SavedViewsShowMoreButton.tsx +9 -1
- package/UI/Components/SideMenu/SideMenu.tsx +4 -6
- package/UI/Components/SideMenu/SideMenuSection.tsx +5 -3
- package/UI/Components/SideMenu/SideMenuSectionState.ts +52 -9
- package/UI/Components/SideOver/SideOver.tsx +24 -6
- package/UI/Components/SimpleLogViewer/SimpleLogViewer.tsx +4 -1
- package/UI/Components/StackedProgressBar/StackedProgressBar.tsx +4 -1
- package/UI/Components/StateTimeline/CurrentlyActiveIndicator.tsx +48 -0
- package/UI/Components/StateTimeline/StateTimelineColumns.tsx +134 -0
- package/UI/Components/StateTimeline/StateTimelineDuration.tsx +56 -0
- package/UI/Components/StateTimeline/StateTimelineEndsAt.tsx +37 -0
- package/UI/Components/StatusBadge/StatusBadge.tsx +3 -1
- package/UI/Components/StatusBubble/StatusBubble.tsx +8 -2
- package/UI/Components/StatusPage/ResourceGrid.tsx +55 -16
- package/UI/Components/StatusPage/ResourceGroupNavigator.tsx +67 -22
- package/UI/Components/StatusPage/ResourceList.tsx +46 -18
- package/UI/Components/Table/DragHandle.tsx +74 -0
- package/UI/Components/Table/EmptyTableMessage.ts +272 -34
- package/UI/Components/Table/Table.tsx +248 -68
- package/UI/Components/Table/TableBody.tsx +43 -2
- package/UI/Components/Table/TableEmptyState.tsx +250 -0
- package/UI/Components/Table/TableEmptyStateBuilders.ts +187 -0
- package/UI/Components/Table/TableRow.tsx +107 -32
- package/UI/Components/Table/TableSkeletonRows.tsx +9 -2
- package/UI/Components/TableColumnList/TableColumnListComponent.tsx +13 -3
- package/UI/Components/Tabs/Tabs.tsx +4 -1
- package/UI/Components/TelemetryViewer/FacetVisibility.ts +44 -9
- package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +79 -10
- package/UI/Components/TelemetryViewer/components/FacetSearchInput.tsx +11 -4
- package/UI/Components/TelemetryViewer/components/FacetShowMoreButton.tsx +9 -1
- package/UI/Components/TelemetryViewer/components/HiddenFacetsFooter.tsx +15 -7
- package/UI/Components/TelemetryViewer/components/LockedFilterChip.tsx +99 -33
- package/UI/Components/TelemetryViewer/components/SavedViewsDropdown.tsx +18 -11
- package/UI/Components/TelemetryViewer/components/TelemetryActiveFilterChips.tsx +9 -3
- package/UI/Components/TelemetryViewer/components/TelemetryDetailPanel.tsx +6 -3
- package/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.tsx +4 -1
- package/UI/Components/TelemetryViewer/components/TelemetryFacetValueRow.tsx +13 -7
- package/UI/Components/TelemetryViewer/components/TelemetryHistogram.tsx +15 -8
- package/UI/Components/TelemetryViewer/components/TelemetryHistogramTooltip.tsx +6 -1
- package/UI/Components/TelemetryViewer/components/TelemetryItemLabel.ts +18 -0
- package/UI/Components/TelemetryViewer/components/TelemetryPagination.tsx +17 -11
- package/UI/Components/TelemetryViewer/components/TelemetryResultTotal.tsx +132 -0
- package/UI/Components/TelemetryViewer/components/TelemetrySearchBar.tsx +9 -4
- package/UI/Components/TelemetryViewer/components/TelemetrySearchHelp.tsx +30 -17
- package/UI/Components/TelemetryViewer/components/TelemetrySearchSuggestions.tsx +10 -2
- package/UI/Components/TemplateVariables/InsertTemplateVariableButton.tsx +162 -0
- package/UI/Components/TemplateVariables/TemplateVariableIcons.tsx +55 -0
- package/UI/Components/TemplateVariables/TemplateVariableMenu.tsx +351 -0
- package/UI/Components/TemplateVariables/TemplateVariablePopup.tsx +255 -0
- package/UI/Components/TemplateVariables/TemplateVariableTextControl.tsx +128 -0
- package/UI/Components/TemplateVariables/TemplateVariablesCopy.ts +38 -0
- package/UI/Components/TemplateVariables/TemplateVariablesList.tsx +277 -0
- package/UI/Components/TemplateVariables/TextControlUtil.ts +295 -0
- package/UI/Components/TemplateVariables/useTemplateVariableTyping.tsx +350 -0
- package/UI/Components/TimePicker/TimePicker.tsx +36 -20
- package/UI/Components/Toggle/Toggle.tsx +39 -45
- package/UI/Components/Tooltip/InfoTooltip.tsx +6 -1
- package/UI/Components/Tooltip/Tooltip.tsx +4 -1
- package/UI/Components/TranslatedSentence/TranslatedSentence.tsx +76 -0
- package/UI/Components/Workflow/ArgumentsForm.tsx +51 -12
- package/UI/Components/Workflow/ColumnEditor/AddColumnPicker.tsx +20 -14
- package/UI/Components/Workflow/ColumnEditor/ColumnConditionRow.tsx +19 -6
- package/UI/Components/Workflow/ColumnEditor/ColumnControl.ts +28 -14
- package/UI/Components/Workflow/ColumnEditor/ColumnFieldRow.tsx +24 -10
- package/UI/Components/Workflow/ColumnEditor/ColumnOperators.ts +17 -14
- package/UI/Components/Workflow/ColumnEditor/ColumnPickerOptions.ts +2 -1
- package/UI/Components/Workflow/ColumnEditor/ColumnRowSerialization.ts +3 -2
- package/UI/Components/Workflow/ColumnEditor/ColumnValueInput.tsx +21 -8
- package/UI/Components/Workflow/ColumnEditor/ModelQueryBuilder.tsx +11 -6
- package/UI/Components/Workflow/ColumnEditor/ModelRecordForm.tsx +29 -9
- package/UI/Components/Workflow/Component.tsx +8 -3
- package/UI/Components/Workflow/ComponentArgumentsViewer.tsx +20 -2
- package/UI/Components/Workflow/ComponentPicker/PickerItems.tsx +46 -18
- package/UI/Components/Workflow/ComponentPortViewer.tsx +6 -1
- package/UI/Components/Workflow/ComponentReturnValueViewer.tsx +10 -2
- package/UI/Components/Workflow/ComponentSettingsModal.tsx +30 -9
- package/UI/Components/Workflow/ComponentSettingsSection.tsx +7 -2
- package/UI/Components/Workflow/ComponentsModal.tsx +137 -54
- package/UI/Components/Workflow/Condition/ConditionEditor.tsx +52 -21
- package/UI/Components/Workflow/Condition/ConditionModel.ts +45 -17
- package/UI/Components/Workflow/CronScheduleField.tsx +54 -31
- package/UI/Components/Workflow/DocumentationViewer.tsx +10 -2
- package/UI/Components/Workflow/GraphLint.ts +78 -13
- package/UI/Components/Workflow/GraphLintSummary.ts +24 -11
- package/UI/Components/Workflow/ManualTriggerPanel.tsx +26 -6
- package/UI/Components/Workflow/ModelColumnEditor.tsx +95 -33
- package/UI/Components/Workflow/ModelFieldPicker.tsx +100 -34
- package/UI/Components/Workflow/RunForm.tsx +13 -3
- package/UI/Components/Workflow/RunStatusWatcher.ts +50 -8
- package/UI/Components/Workflow/StepTraceViewer.tsx +130 -42
- package/UI/Components/Workflow/UseRunWatch.ts +2 -1
- package/UI/Components/Workflow/Utils.ts +7 -1
- package/UI/Components/Workflow/ValuePicker/InsertValueButton.tsx +8 -5
- package/UI/Components/Workflow/ValuePicker/ValuePickerMenu.tsx +105 -39
- package/UI/Components/Workflow/ValuePicker/ValuePickerPopup.tsx +4 -1
- package/UI/Components/Workflow/ValuePicker/ValueSingleField.tsx +10 -5
- package/UI/Components/Workflow/ValuePicker/ValueTextField.tsx +11 -7
- package/UI/Components/Workflow/WorkflowIssuesModal.tsx +48 -16
- package/UI/Components/Workflow/WorkflowLogModal.tsx +9 -5
- package/UI/Components/Workflow/WorkflowStatusBar.tsx +26 -13
- package/UI/Styles/Theme.css +21 -26
- package/UI/Types/UseAnchoredFieldPopup.ts +8 -2
- package/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.ts +12 -0
- package/UI/Utils/Dropdown.ts +106 -5
- package/UI/Utils/ForeignDomMutationGuard.ts +225 -0
- package/UI/Utils/GrantablePermission.ts +197 -0
- package/UI/Utils/PermissionGate.ts +50 -4
- package/UI/Utils/Rules/RuleRunClient.ts +14 -4
- package/UI/Utils/Telemetry/ResultTotal.ts +150 -0
- package/UI/Utils/Telemetry/UseResultTotal.ts +173 -0
- package/UI/Utils/TranslateTemplate.ts +617 -19
- package/UI/Utils/Translation.tsx +56 -2
- package/UI/Utils/UseClockTick.ts +43 -3
- package/UI/Utils/UseLiveDuration.ts +155 -0
- package/UI/Utils/UseTranslator.ts +22 -0
- package/UI/esbuild-config.js +3 -0
- package/UI/esbuild-locales.d.ts +60 -0
- package/UI/esbuild-locales.js +358 -0
- package/Utils/ColorContrast.ts +274 -0
- package/Utils/DeveloperDocs/AiAssistantExamples.ts +3 -2
- package/Utils/DeveloperDocs/ApiExamples.ts +5 -271
- package/Utils/DeveloperDocs/ExampleBuilder.ts +1775 -0
- package/Utils/DeveloperDocs/ExampleValues.ts +82 -0
- package/Utils/DeveloperDocs/Hcl.ts +153 -33
- package/Utils/DeveloperDocs/LiveData.ts +292 -0
- package/Utils/DeveloperDocs/PageLookups.ts +370 -0
- package/Utils/DeveloperDocs/ResourceProfiles.ts +2025 -0
- package/Utils/DeveloperDocs/TerraformConfig.ts +139 -143
- package/Utils/DeveloperDocs/TerraformMonitorSteps.ts +63 -10
- package/Utils/DeveloperDocs/TerraformSchema.ts +88 -1
- package/Utils/Email/EmailColorUtil.ts +135 -0
- package/Utils/Episode/EpisodeTemplateVariables.ts +75 -0
- package/Utils/Incident/IncidentNoteTemplateVariables.ts +37 -6
- package/Utils/Incident/IncidentSlaNoteTemplateVariables.ts +33 -0
- package/Utils/KeyFromName.ts +230 -0
- package/Utils/ListOrder.ts +417 -0
- package/Utils/Measurement/MeasurementMoments.ts +699 -0
- package/Utils/Project/NumberPrefix.ts +188 -0
- package/Utils/Slo/SloBurnRateTemplate.ts +24 -0
- package/Utils/StateOrder.ts +631 -0
- package/build/dist/Models/DatabaseModels/AlertGroupingRule.js +4 -3
- package/build/dist/Models/DatabaseModels/AlertGroupingRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertMeasurement.js +17 -10
- package/build/dist/Models/DatabaseModels/AlertMeasurement.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertReminderRule.js +4 -3
- package/build/dist/Models/DatabaseModels/AlertReminderRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertSeverity.js +4 -2
- package/build/dist/Models/DatabaseModels/AlertSeverity.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertState.js +4 -2
- package/build/dist/Models/DatabaseModels/AlertState.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js +8 -0
- package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js.map +1 -1
- package/build/dist/Models/DatabaseModels/{IncidentForm.js → Form.js} +113 -219
- package/build/dist/Models/DatabaseModels/Form.js.map +1 -0
- package/build/dist/Models/DatabaseModels/{IncidentFormSubmission.js → FormSubmission.js} +170 -89
- package/build/dist/Models/DatabaseModels/FormSubmission.js.map +1 -0
- package/build/dist/Models/DatabaseModels/Incident.js +1 -1
- package/build/dist/Models/DatabaseModels/IncidentCustomField.js +7 -3
- package/build/dist/Models/DatabaseModels/IncidentCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentGroupingRule.js +4 -3
- package/build/dist/Models/DatabaseModels/IncidentGroupingRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentMeasurement.js +16 -9
- package/build/dist/Models/DatabaseModels/IncidentMeasurement.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentReminderRule.js +4 -3
- package/build/dist/Models/DatabaseModels/IncidentReminderRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentSeverity.js +4 -2
- package/build/dist/Models/DatabaseModels/IncidentSeverity.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentSlaRule.js +4 -3
- package/build/dist/Models/DatabaseModels/IncidentSlaRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentState.js +4 -2
- package/build/dist/Models/DatabaseModels/IncidentState.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentTemplate.js +1 -1
- package/build/dist/Models/DatabaseModels/IncomingCallPolicyEscalationRule.js +4 -1
- package/build/dist/Models/DatabaseModels/IncomingCallPolicyEscalationRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +4 -4
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/LogDropFilter.js +4 -3
- package/build/dist/Models/DatabaseModels/LogDropFilter.js.map +1 -1
- package/build/dist/Models/DatabaseModels/LogPipeline.js +4 -3
- package/build/dist/Models/DatabaseModels/LogPipeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/LogPipelineProcessor.js +4 -3
- package/build/dist/Models/DatabaseModels/LogPipelineProcessor.js.map +1 -1
- package/build/dist/Models/DatabaseModels/LogScrubRule.js +3 -2
- package/build/dist/Models/DatabaseModels/LogScrubRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MetricPipelineRule.js +3 -2
- package/build/dist/Models/DatabaseModels/MetricPipelineRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MetricRecordingRule.js +9 -3
- package/build/dist/Models/DatabaseModels/MetricRecordingRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorStatus.js +4 -1
- package/build/dist/Models/DatabaseModels/MonitorStatus.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceRole.js +3 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceRole.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkSiteAssignmentRule.js +9 -3
- package/build/dist/Models/DatabaseModels/NetworkSiteAssignmentRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Project.js +22 -13
- package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RunbookRule.js +334 -0
- package/build/dist/Models/DatabaseModels/RunbookRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +3 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceMeasurement.js +16 -9
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceMeasurement.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceReminderRule.js +4 -3
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceReminderRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceState.js +4 -2
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceState.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js +1 -2
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageFooterLink.js +4 -1
- package/build/dist/Models/DatabaseModels/StatusPageFooterLink.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageHeaderLink.js +4 -1
- package/build/dist/Models/DatabaseModels/StatusPageHeaderLink.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageHistoryChartBarColorRule.js +4 -1
- package/build/dist/Models/DatabaseModels/StatusPageHistoryChartBarColorRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TraceDropFilter.js +4 -3
- package/build/dist/Models/DatabaseModels/TraceDropFilter.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TracePipeline.js +4 -3
- package/build/dist/Models/DatabaseModels/TracePipeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TracePipelineProcessor.js +4 -3
- package/build/dist/Models/DatabaseModels/TracePipelineProcessor.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TraceRecordingRule.js +9 -3
- package/build/dist/Models/DatabaseModels/TraceRecordingRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TraceScrubRule.js +3 -2
- package/build/dist/Models/DatabaseModels/TraceScrubRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js +53 -1
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js.map +1 -1
- package/build/dist/Server/API/BaseAnalyticsAPI.js +15 -0
- package/build/dist/Server/API/BaseAnalyticsAPI.js.map +1 -1
- package/build/dist/Server/API/{IncidentFormAPI.js → FormAPI.js} +57 -57
- package/build/dist/Server/API/FormAPI.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1797300000000-TurnOnLinkedAlertSwitchesByDefault.js +29 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1797300000000-TurnOnLinkedAlertSwitchesByDefault.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1797400000000-MigrateIncidentFormsToForms.js +173 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1797400000000-MigrateIncidentFormsToForms.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1797500000000-AddRunbookRuleMatchCriteria.js +77 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1797500000000-AddRunbookRuleMatchCriteria.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1797600000000-AddSeverityAndStateColorsToNotificationEmailRollup.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1797600000000-AddSeverityAndStateColorsToNotificationEmailRollup.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +8 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/{IncidentFormRateLimit.js → FormRateLimit.js} +159 -146
- package/build/dist/Server/Middleware/FormRateLimit.js.map +1 -0
- package/build/dist/Server/Services/AlertEpisodeService.js +2 -3
- package/build/dist/Server/Services/AlertEpisodeService.js.map +1 -1
- package/build/dist/Server/Services/AlertMeasurementService.js +111 -20
- package/build/dist/Server/Services/AlertMeasurementService.js.map +1 -1
- package/build/dist/Server/Services/AlertReminderRuleService.js +0 -30
- package/build/dist/Server/Services/AlertReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/AlertService.js +2 -3
- package/build/dist/Server/Services/AlertService.js.map +1 -1
- package/build/dist/Server/Services/AlertSeverityService.js +14 -85
- package/build/dist/Server/Services/AlertSeverityService.js.map +1 -1
- package/build/dist/Server/Services/AlertStateService.js +28 -97
- package/build/dist/Server/Services/AlertStateService.js.map +1 -1
- package/build/dist/Server/Services/AnalyticsDatabaseService.js +82 -7
- package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +216 -0
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/FormService.js +870 -0
- package/build/dist/Server/Services/FormService.js.map +1 -0
- package/build/dist/Server/Services/FormSubmissionService.js +21 -0
- package/build/dist/Server/Services/FormSubmissionService.js.map +1 -0
- package/build/dist/Server/Services/IncidentAlertService.js +30 -12
- package/build/dist/Server/Services/IncidentAlertService.js.map +1 -1
- package/build/dist/Server/Services/IncidentCustomFieldService.js +0 -83
- package/build/dist/Server/Services/IncidentCustomFieldService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeService.js +2 -3
- package/build/dist/Server/Services/IncidentEpisodeService.js.map +1 -1
- package/build/dist/Server/Services/IncidentMeasurementService.js +114 -20
- package/build/dist/Server/Services/IncidentMeasurementService.js.map +1 -1
- package/build/dist/Server/Services/IncidentReminderRuleService.js +0 -30
- package/build/dist/Server/Services/IncidentReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +2 -3
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/IncidentSeverityService.js +14 -87
- package/build/dist/Server/Services/IncidentSeverityService.js.map +1 -1
- package/build/dist/Server/Services/IncidentSlaRuleService.js +0 -30
- package/build/dist/Server/Services/IncidentSlaRuleService.js.map +1 -1
- package/build/dist/Server/Services/IncidentStateService.js +28 -97
- package/build/dist/Server/Services/IncidentStateService.js.map +1 -1
- package/build/dist/Server/Services/IncidentStateTimelineService.js +2 -2
- package/build/dist/Server/Services/IncomingCallPolicyEscalationRuleService.js +14 -145
- package/build/dist/Server/Services/IncomingCallPolicyEscalationRuleService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +4 -4
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/LogService.js +9 -0
- package/build/dist/Server/Services/LogService.js.map +1 -1
- package/build/dist/Server/Services/MetricRecordingRuleService.js +92 -0
- package/build/dist/Server/Services/MetricRecordingRuleService.js.map +1 -1
- package/build/dist/Server/Services/MonitorStatusService.js +25 -108
- package/build/dist/Server/Services/MonitorStatusService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js +33 -0
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyService.js +261 -0
- package/build/dist/Server/Services/OnCallDutyPolicyService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +49 -62
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/RunbookRuleEngineService.js +289 -32
- package/build/dist/Server/Services/RunbookRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RunbookRuleService.js +87 -0
- package/build/dist/Server/Services/RunbookRuleService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceMeasurementService.js +117 -20
- package/build/dist/Server/Services/ScheduledMaintenanceMeasurementService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js +0 -30
- package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceService.js +2 -3
- package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceStateService.js +28 -99
- package/build/dist/Server/Services/ScheduledMaintenanceStateService.js.map +1 -1
- package/build/dist/Server/Services/SpanService.js +17 -2
- package/build/dist/Server/Services/SpanService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageFooterLinkService.js +8 -169
- package/build/dist/Server/Services/StatusPageFooterLinkService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageHeaderLinkService.js +7 -168
- package/build/dist/Server/Services/StatusPageHeaderLinkService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageHistoryChartBarColorRuleService.js +8 -169
- package/build/dist/Server/Services/StatusPageHistoryChartBarColorRuleService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateService.js +14 -5
- package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateStatusPageService.js +7 -6
- package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateStatusPageService.js.map +1 -1
- package/build/dist/Server/Services/TraceRecordingRuleService.js +11 -2
- package/build/dist/Server/Services/TraceRecordingRuleService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationRuleService.js +25 -59
- package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
- package/build/dist/Server/Utils/Database/ListOrderMaintainer.js +311 -0
- package/build/dist/Server/Utils/Database/ListOrderMaintainer.js.map +1 -0
- package/build/dist/Server/Utils/Database/StateOrderGuard.js +239 -0
- package/build/dist/Server/Utils/Database/StateOrderGuard.js.map +1 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js +2 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js.map +1 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js +44 -3
- package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js.map +1 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js +29 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js.map +1 -1
- package/build/dist/Server/Utils/Form/FormRecordOptions.js +111 -0
- package/build/dist/Server/Utils/Form/FormRecordOptions.js.map +1 -0
- package/build/dist/Server/Utils/Form/FormSubmissionNote.js +154 -0
- package/build/dist/Server/Utils/Form/FormSubmissionNote.js.map +1 -0
- package/build/dist/Server/Utils/Form/FormTargetHandler.js +232 -0
- package/build/dist/Server/Utils/Form/FormTargetHandler.js.map +1 -0
- package/build/dist/Server/Utils/Form/FormTargets.js +13 -0
- package/build/dist/Server/Utils/Form/FormTargets.js.map +1 -0
- package/build/dist/Server/Utils/Form/IncidentFormTarget.js +400 -0
- package/build/dist/Server/Utils/Form/IncidentFormTarget.js.map +1 -0
- package/build/dist/Server/Utils/Form/ScheduledMaintenanceFormTarget.js +245 -0
- package/build/dist/Server/Utils/Form/ScheduledMaintenanceFormTarget.js.map +1 -0
- package/build/dist/Server/Utils/Measurement/MeasurementDefinitionChange.js +43 -0
- package/build/dist/Server/Utils/Measurement/MeasurementDefinitionChange.js.map +1 -0
- package/build/dist/Server/Utils/Measurement/MeasurementDefinitionValidator.js +6 -4
- package/build/dist/Server/Utils/Measurement/MeasurementDefinitionValidator.js.map +1 -1
- package/build/dist/Server/Utils/Measurement/MeasurementKeyAssigner.js +33 -0
- package/build/dist/Server/Utils/Measurement/MeasurementKeyAssigner.js.map +1 -0
- package/build/dist/Server/Utils/Measurement/MeasurementMetricWriter.js +15 -2
- package/build/dist/Server/Utils/Measurement/MeasurementMetricWriter.js.map +1 -1
- package/build/dist/Server/Utils/Measurement/MeasurementStateReference.js +72 -0
- package/build/dist/Server/Utils/Measurement/MeasurementStateReference.js.map +1 -0
- package/build/dist/Server/Utils/Slo/SloOwnerReferenceValidator.js +1 -1
- package/build/dist/Server/Utils/StatusPage/IncidentSubscriberAudienceBuilder.js +7 -7
- package/build/dist/Server/Utils/StatusPage/IncidentSubscriberAudienceBuilder.js.map +1 -1
- package/build/dist/Server/Utils/StatusPage/IncidentTemplateVariableBuilder.js +14 -10
- package/build/dist/Server/Utils/StatusPage/IncidentTemplateVariableBuilder.js.map +1 -1
- package/build/dist/Server/Utils/StatusPage/SubscriberIncidentEmailBuilder.js +9 -15
- package/build/dist/Server/Utils/StatusPage/SubscriberIncidentEmailBuilder.js.map +1 -1
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationPreviewBuilder.js +4 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationPreviewBuilder.js.map +1 -1
- package/build/dist/Server/Utils/StatusPage/SubscriberTemplateIncidentRecordAccess.js +5 -4
- package/build/dist/Server/Utils/StatusPage/SubscriberTemplateIncidentRecordAccess.js.map +1 -1
- package/build/dist/Types/CustomField/CustomFieldCreateSettings.js +15 -66
- package/build/dist/Types/CustomField/CustomFieldCreateSettings.js.map +1 -1
- package/build/dist/Types/CustomField/CustomFieldValueFormat.js +3 -2
- package/build/dist/Types/CustomField/CustomFieldValueFormat.js.map +1 -1
- package/build/dist/Types/CustomField/CustomFieldVariableKey.js +97 -88
- package/build/dist/Types/CustomField/CustomFieldVariableKey.js.map +1 -1
- package/build/dist/Types/Database/ListOrderColumn.js +12 -0
- package/build/dist/Types/Database/ListOrderColumn.js.map +1 -0
- package/build/dist/Types/Form/FormField.js +713 -0
- package/build/dist/Types/Form/FormField.js.map +1 -0
- package/build/dist/Types/{Incident/IncidentFormIpAllowlist.js → Form/FormIpAllowlist.js} +3 -3
- package/build/dist/Types/Form/FormIpAllowlist.js.map +1 -0
- package/build/dist/Types/Form/FormPublic.js +786 -0
- package/build/dist/Types/Form/FormPublic.js.map +1 -0
- package/build/dist/Types/Form/FormSubmissionAnswer.js +82 -0
- package/build/dist/Types/Form/FormSubmissionAnswer.js.map +1 -0
- package/build/dist/Types/Form/FormTargetCatalog.js +213 -0
- package/build/dist/Types/Form/FormTargetCatalog.js.map +1 -0
- package/build/dist/Types/Form/FormTargetSettings.js +276 -0
- package/build/dist/Types/Form/FormTargetSettings.js.map +1 -0
- package/build/dist/Types/Form/FormTargetType.js +56 -0
- package/build/dist/Types/Form/FormTargetType.js.map +1 -0
- package/build/dist/Types/Form/LegacyIncidentFormConversion.js +131 -0
- package/build/dist/Types/Form/LegacyIncidentFormConversion.js.map +1 -0
- package/build/dist/Types/Measurement/MeasurementKey.js +72 -0
- package/build/dist/Types/Measurement/MeasurementKey.js.map +1 -0
- package/build/dist/Types/Measurement/MeasurementUnit.js +74 -0
- package/build/dist/Types/Measurement/MeasurementUnit.js.map +1 -0
- package/build/dist/Types/Metrics/RecordingRuleOutputMetricName.js +48 -0
- package/build/dist/Types/Metrics/RecordingRuleOutputMetricName.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorCriteria.js +22 -0
- package/build/dist/Types/Monitor/MonitorCriteria.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +191 -25
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorSteps.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js +3 -3
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js.map +1 -1
- package/build/dist/Types/OnCallDutyPolicy/EscalationRuleDefaults.js +95 -0
- package/build/dist/Types/OnCallDutyPolicy/EscalationRuleDefaults.js.map +1 -0
- package/build/dist/Types/OnCallDutyPolicy/FirstResponders.js +87 -0
- package/build/dist/Types/OnCallDutyPolicy/FirstResponders.js.map +1 -0
- package/build/dist/Types/Permission.js +41 -34
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js +38 -1
- package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js.map +1 -1
- package/build/dist/Types/Rum/SessionReplay.js +24 -0
- package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
- package/build/dist/Types/Rum/SessionReplayCustomEvents.js +17 -0
- package/build/dist/Types/Rum/SessionReplayCustomEvents.js.map +1 -1
- package/build/dist/Types/Runbook/RunbookRuleCriteria.js +151 -0
- package/build/dist/Types/Runbook/RunbookRuleCriteria.js.map +1 -0
- package/build/dist/Types/ScheduledMaintenance/MaintenanceWindow.js +105 -0
- package/build/dist/Types/ScheduledMaintenance/MaintenanceWindow.js.map +1 -0
- package/build/dist/Types/StatusPage/IncidentSubscriberAudience.js.map +1 -1
- package/build/dist/Types/StatusPage/SubscriberNotificationTemplatePreview.js +3 -2
- package/build/dist/Types/StatusPage/SubscriberNotificationTemplatePreview.js.map +1 -1
- package/build/dist/Types/StatusPage/SubscriberNotificationTemplateVariables.js +47 -22
- package/build/dist/Types/StatusPage/SubscriberNotificationTemplateVariables.js.map +1 -1
- package/build/dist/Types/Template/TemplateVariable.js +157 -0
- package/build/dist/Types/Template/TemplateVariable.js.map +1 -0
- package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js +21 -54
- package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js.map +1 -1
- package/build/dist/UI/Components/404.js +4 -2
- package/build/dist/UI/Components/404.js.map +1 -1
- package/build/dist/UI/Components/AI/GenerateFromAIModal.js +6 -4
- package/build/dist/UI/Components/AI/GenerateFromAIModal.js.map +1 -1
- package/build/dist/UI/Components/AIAgent/AIAgent.js +5 -2
- package/build/dist/UI/Components/AIAgent/AIAgent.js.map +1 -1
- package/build/dist/UI/Components/ActionButton/RowActions.js +23 -10
- package/build/dist/UI/Components/ActionButton/RowActions.js.map +1 -1
- package/build/dist/UI/Components/ActionButton/SplitActionButtons.js +19 -1
- package/build/dist/UI/Components/ActionButton/SplitActionButtons.js.map +1 -1
- package/build/dist/UI/Components/ActionCard/ActionCard.js +10 -1
- package/build/dist/UI/Components/ActionCard/ActionCard.js.map +1 -1
- package/build/dist/UI/Components/AdvancedPageSection/AdvancedPageSection.js +15 -0
- package/build/dist/UI/Components/AdvancedPageSection/AdvancedPageSection.js.map +1 -0
- package/build/dist/UI/Components/AttachmentList/EventAttachmentList.js +8 -4
- package/build/dist/UI/Components/AttachmentList/EventAttachmentList.js.map +1 -1
- package/build/dist/UI/Components/AttributesJSON/AttributesJSONPreferences.js +5 -4
- package/build/dist/UI/Components/AttributesJSON/AttributesJSONPreferences.js.map +1 -1
- package/build/dist/UI/Components/AttributesJSON/AttributesJSONView.js +11 -4
- package/build/dist/UI/Components/AttributesJSON/AttributesJSONView.js.map +1 -1
- package/build/dist/UI/Components/AttributesJSON/AttributesViewToggle.js +8 -3
- package/build/dist/UI/Components/AttributesJSON/AttributesViewToggle.js.map +1 -1
- package/build/dist/UI/Components/AttributesJSON/CopyAttributesAsJSONButton.js +47 -23
- package/build/dist/UI/Components/AttributesJSON/CopyAttributesAsJSONButton.js.map +1 -1
- package/build/dist/UI/Components/AutocompleteTextInput/AutocompleteTextInput.js +4 -2
- package/build/dist/UI/Components/AutocompleteTextInput/AutocompleteTextInput.js.map +1 -1
- package/build/dist/UI/Components/Breadcrumbs/Breadcrumbs.js +1 -1
- package/build/dist/UI/Components/Breadcrumbs/Breadcrumbs.js.map +1 -1
- package/build/dist/UI/Components/BulkUpdate/BulkOwnerActions.js +35 -131
- package/build/dist/UI/Components/BulkUpdate/BulkOwnerActions.js.map +1 -1
- package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js +57 -48
- package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js.map +1 -1
- package/build/dist/UI/Components/Button/Button.js +1 -1
- package/build/dist/UI/Components/Button/Button.js.map +1 -1
- package/build/dist/UI/Components/Button/DropdownButton.js +1 -1
- package/build/dist/UI/Components/Button/DropdownButton.js.map +1 -1
- package/build/dist/UI/Components/CSVFileUpload/CSVFileUpload.js +41 -28
- package/build/dist/UI/Components/CSVFileUpload/CSVFileUpload.js.map +1 -1
- package/build/dist/UI/Components/Captcha/Captcha.js +3 -1
- package/build/dist/UI/Components/Captcha/Captcha.js.map +1 -1
- package/build/dist/UI/Components/Card/CardMoreMenu.js +19 -0
- package/build/dist/UI/Components/Card/CardMoreMenu.js.map +1 -0
- package/build/dist/UI/Components/CardSelect/CardSelect.js +26 -16
- package/build/dist/UI/Components/CardSelect/CardSelect.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js +10 -8
- package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartGroup/NoDataMessage.js +3 -1
- package/build/dist/UI/Components/Charts/ChartGroup/NoDataMessage.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.js +3 -3
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.js +19 -5
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js +6 -4
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js +6 -4
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +6 -4
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/TimeRangeZoom/ResetTimeRangeZoomButton.js +9 -4
- package/build/dist/UI/Components/Charts/TimeRangeZoom/ResetTimeRangeZoomButton.js.map +1 -1
- package/build/dist/UI/Components/Checkbox/Checkbox.js +5 -3
- package/build/dist/UI/Components/Checkbox/Checkbox.js.map +1 -1
- package/build/dist/UI/Components/CodeBlock/CodeBlock.js +3 -1
- package/build/dist/UI/Components/CodeBlock/CodeBlock.js.map +1 -1
- package/build/dist/UI/Components/CodeEditor/CodeEditor.js +52 -28
- package/build/dist/UI/Components/CodeEditor/CodeEditor.js.map +1 -1
- package/build/dist/UI/Components/CollapsibleSection/CollapsibleSection.js +11 -6
- package/build/dist/UI/Components/CollapsibleSection/CollapsibleSection.js.map +1 -1
- package/build/dist/UI/Components/ColorViewer/ColorViewer.js +10 -2
- package/build/dist/UI/Components/ColorViewer/ColorViewer.js.map +1 -1
- package/build/dist/UI/Components/CopyTextButton/CopyTextButton.js +5 -2
- package/build/dist/UI/Components/CopyTextButton/CopyTextButton.js.map +1 -1
- package/build/dist/UI/Components/CopyableButton/CopyableButton.js +4 -2
- package/build/dist/UI/Components/CopyableButton/CopyableButton.js.map +1 -1
- package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js +7 -1
- package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js.map +1 -1
- package/build/dist/UI/Components/CustomFields/DropdownOptionsInput.js +16 -7
- package/build/dist/UI/Components/CustomFields/DropdownOptionsInput.js.map +1 -1
- package/build/dist/UI/Components/CustomFields/MapFromCustomFieldInput.js +63 -17
- package/build/dist/UI/Components/CustomFields/MapFromCustomFieldInput.js.map +1 -1
- package/build/dist/UI/Components/Dashboard/DashboardVariableControl.js +14 -11
- package/build/dist/UI/Components/Dashboard/DashboardVariableControl.js.map +1 -1
- package/build/dist/UI/Components/Date/CustomTimeRangeModal.js +13 -12
- package/build/dist/UI/Components/Date/CustomTimeRangeModal.js.map +1 -1
- package/build/dist/UI/Components/Date/RangeStartAndEndDateEdit.js +18 -16
- package/build/dist/UI/Components/Date/RangeStartAndEndDateEdit.js.map +1 -1
- package/build/dist/UI/Components/Date/RangeStartAndEndDateView.js +4 -1
- package/build/dist/UI/Components/Date/RangeStartAndEndDateView.js.map +1 -1
- package/build/dist/UI/Components/Date/StartAndEndDate.js +4 -2
- package/build/dist/UI/Components/Date/StartAndEndDate.js.map +1 -1
- package/build/dist/UI/Components/Date/TimeRangePickerDropdown.js +18 -8
- package/build/dist/UI/Components/Date/TimeRangePickerDropdown.js.map +1 -1
- package/build/dist/UI/Components/DeleteConfirmation/DeleteConfirmationMessage.js +30 -5
- package/build/dist/UI/Components/DeleteConfirmation/DeleteConfirmationMessage.js.map +1 -1
- package/build/dist/UI/Components/Detail/BooleanValue.js +15 -0
- package/build/dist/UI/Components/Detail/BooleanValue.js.map +1 -0
- package/build/dist/UI/Components/Detail/Detail.js +75 -40
- package/build/dist/UI/Components/Detail/Detail.js.map +1 -1
- package/build/dist/UI/Components/Detail/DetailIdLine.js +100 -0
- package/build/dist/UI/Components/Detail/DetailIdLine.js.map +1 -0
- package/build/dist/UI/Components/Detail/DetailRecordId.js +72 -0
- package/build/dist/UI/Components/Detail/DetailRecordId.js.map +1 -0
- package/build/dist/UI/Components/Detail/PlaceholderText.js +17 -1
- package/build/dist/UI/Components/Detail/PlaceholderText.js.map +1 -1
- package/build/dist/UI/Components/Dictionary/Dictionary.js +7 -1
- package/build/dist/UI/Components/Dictionary/Dictionary.js.map +1 -1
- package/build/dist/UI/Components/Dictionary/DictionaryOfStingsViewer.js +4 -2
- package/build/dist/UI/Components/Dictionary/DictionaryOfStingsViewer.js.map +1 -1
- package/build/dist/UI/Components/Dropdown/Dropdown.js +5 -4
- package/build/dist/UI/Components/Dropdown/Dropdown.js.map +1 -1
- package/build/dist/UI/Components/DuplicateModel/DuplicateModel.js +19 -5
- package/build/dist/UI/Components/DuplicateModel/DuplicateModel.js.map +1 -1
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js +177 -134
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
- package/build/dist/UI/Components/EntityDropdown/EntityDropdown.js +32 -26
- package/build/dist/UI/Components/EntityDropdown/EntityDropdown.js.map +1 -1
- package/build/dist/UI/Components/ErrorBoundary.js +16 -13
- package/build/dist/UI/Components/ErrorBoundary.js.map +1 -1
- package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js +2 -2
- package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js.map +1 -1
- package/build/dist/UI/Components/EventItem/EventItem.js +8 -4
- package/build/dist/UI/Components/EventItem/EventItem.js.map +1 -1
- package/build/dist/UI/Components/Events/RecurringViewElement.js +16 -5
- package/build/dist/UI/Components/Events/RecurringViewElement.js.map +1 -1
- package/build/dist/UI/Components/ExpandableText/ExpandableText.js +3 -1
- package/build/dist/UI/Components/ExpandableText/ExpandableText.js.map +1 -1
- package/build/dist/UI/Components/Feed/FeedActionsMenu.js +24 -0
- package/build/dist/UI/Components/Feed/FeedActionsMenu.js.map +1 -0
- package/build/dist/UI/Components/Feed/FeedCard.js +79 -0
- package/build/dist/UI/Components/Feed/FeedCard.js.map +1 -0
- package/build/dist/UI/Components/Feed/FeedEventTypeChecklist.js +122 -0
- package/build/dist/UI/Components/Feed/FeedEventTypeChecklist.js.map +1 -0
- package/build/dist/UI/Components/Feed/FeedFilterModal.js +23 -0
- package/build/dist/UI/Components/Feed/FeedFilterModal.js.map +1 -0
- package/build/dist/UI/Components/Feed/FeedFilterSummary.js +50 -0
- package/build/dist/UI/Components/Feed/FeedFilterSummary.js.map +1 -0
- package/build/dist/UI/Components/Feed/FeedItem.js +4 -1
- package/build/dist/UI/Components/Feed/FeedItem.js.map +1 -1
- package/build/dist/UI/Components/Feed/FeedMoreMenu.js +50 -0
- package/build/dist/UI/Components/Feed/FeedMoreMenu.js.map +1 -0
- package/build/dist/UI/Components/Feed/FeedOptions.js +29 -65
- package/build/dist/UI/Components/Feed/FeedOptions.js.map +1 -1
- package/build/dist/UI/Components/FilePicker/FilePicker.js +27 -27
- package/build/dist/UI/Components/FilePicker/FilePicker.js.map +1 -1
- package/build/dist/UI/Components/FilterButtons/FilterButtons.js +4 -2
- package/build/dist/UI/Components/FilterButtons/FilterButtons.js.map +1 -1
- package/build/dist/UI/Components/Filters/AppliedFilters.js +32 -0
- package/build/dist/UI/Components/Filters/AppliedFilters.js.map +1 -0
- package/build/dist/UI/Components/Filters/BooleanFilter.js +4 -1
- package/build/dist/UI/Components/Filters/BooleanFilter.js.map +1 -1
- package/build/dist/UI/Components/Filters/DateFilter.js +24 -5
- package/build/dist/UI/Components/Filters/DateFilter.js.map +1 -1
- package/build/dist/UI/Components/Filters/DropdownFilter.js +4 -1
- package/build/dist/UI/Components/Filters/DropdownFilter.js.map +1 -1
- package/build/dist/UI/Components/Filters/EntityFilter.js +28 -13
- package/build/dist/UI/Components/Filters/EntityFilter.js.map +1 -1
- package/build/dist/UI/Components/Filters/FilterPlaceholder.js +13 -0
- package/build/dist/UI/Components/Filters/FilterPlaceholder.js.map +1 -0
- package/build/dist/UI/Components/Filters/FilterViewer.js +81 -101
- package/build/dist/UI/Components/Filters/FilterViewer.js.map +1 -1
- package/build/dist/UI/Components/Filters/FiltersForm.js +15 -4
- package/build/dist/UI/Components/Filters/FiltersForm.js.map +1 -1
- package/build/dist/UI/Components/Filters/NumberFilter.js +26 -9
- package/build/dist/UI/Components/Filters/NumberFilter.js.map +1 -1
- package/build/dist/UI/Components/Filters/TextFilter.js +23 -8
- package/build/dist/UI/Components/Filters/TextFilter.js.map +1 -1
- package/build/dist/UI/Components/FormModal/BasicFormModal.js +51 -6
- package/build/dist/UI/Components/FormModal/BasicFormModal.js.map +1 -1
- package/build/dist/UI/Components/Forms/BasicForm.js +139 -23
- package/build/dist/UI/Components/Forms/BasicForm.js.map +1 -1
- package/build/dist/UI/Components/Forms/BasicModelForm.js +1 -1
- package/build/dist/UI/Components/Forms/BasicModelForm.js.map +1 -1
- package/build/dist/UI/Components/Forms/CollapsibleFormSection.js +16 -3
- package/build/dist/UI/Components/Forms/CollapsibleFormSection.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/ColorPicker.js +4 -2
- package/build/dist/UI/Components/Forms/Fields/ColorPicker.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/FormField.js +124 -62
- package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/GeneratedKeyField.js +146 -0
- package/build/dist/UI/Components/Forms/Fields/GeneratedKeyField.js.map +1 -0
- package/build/dist/UI/Components/Forms/Fields/IconPicker.js +5 -3
- package/build/dist/UI/Components/Forms/Fields/IconPicker.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/PermissionPicker.js +5 -3
- package/build/dist/UI/Components/Forms/Fields/PermissionPicker.js.map +1 -1
- package/build/dist/UI/Components/Forms/FormSummary.js +97 -15
- package/build/dist/UI/Components/Forms/FormSummary.js.map +1 -1
- package/build/dist/UI/Components/Forms/ModelForm.js +110 -10
- package/build/dist/UI/Components/Forms/ModelForm.js.map +1 -1
- package/build/dist/UI/Components/Forms/Steps/Steps.js +3 -1
- package/build/dist/UI/Components/Forms/Steps/Steps.js.map +1 -1
- package/build/dist/UI/Components/Forms/Types/Field.js.map +1 -1
- package/build/dist/UI/Components/Forms/Types/FormFieldSchemaType.js +5 -0
- package/build/dist/UI/Components/Forms/Types/FormFieldSchemaType.js.map +1 -1
- package/build/dist/UI/Components/Forms/Utils/AdvancedFormSection.js +151 -0
- package/build/dist/UI/Components/Forms/Utils/AdvancedFormSection.js.map +1 -0
- package/build/dist/UI/Components/Forms/Utils/CreateFormDefaults.js +92 -0
- package/build/dist/UI/Components/Forms/Utils/CreateFormDefaults.js.map +1 -0
- package/build/dist/UI/Components/Forms/Utils/FinishFromAnyStep.js +132 -0
- package/build/dist/UI/Components/Forms/Utils/FinishFromAnyStep.js.map +1 -0
- package/build/dist/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.js +2 -0
- package/build/dist/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.js.map +1 -1
- package/build/dist/UI/Components/Forms/Utils/FormModalWidth.js +43 -0
- package/build/dist/UI/Components/Forms/Utils/FormModalWidth.js.map +1 -0
- package/build/dist/UI/Components/Forms/Validation.js +51 -34
- package/build/dist/UI/Components/Forms/Validation.js.map +1 -1
- package/build/dist/UI/Components/FullPageModal/FullPageModal.js +3 -1
- package/build/dist/UI/Components/FullPageModal/FullPageModal.js.map +1 -1
- package/build/dist/UI/Components/Graphs/UptimeBarTooltip.js +6 -5
- package/build/dist/UI/Components/Graphs/UptimeBarTooltip.js.map +1 -1
- package/build/dist/UI/Components/Header/Notifications/Notifications.js +5 -5
- package/build/dist/UI/Components/Header/Notifications/Notifications.js.map +1 -1
- package/build/dist/UI/Components/Header/ProjectPicker/CreateNewProjectButton.js +3 -1
- package/build/dist/UI/Components/Header/ProjectPicker/CreateNewProjectButton.js.map +1 -1
- package/build/dist/UI/Components/Header/ProjectPicker/ProjectPickerFilterBox.js +3 -1
- package/build/dist/UI/Components/Header/ProjectPicker/ProjectPickerFilterBox.js.map +1 -1
- package/build/dist/UI/Components/Header/SearchBox.js +3 -1
- package/build/dist/UI/Components/Header/SearchBox.js.map +1 -1
- package/build/dist/UI/Components/HeaderAlert/HeaderModelAlert.js +3 -1
- package/build/dist/UI/Components/HeaderAlert/HeaderModelAlert.js.map +1 -1
- package/build/dist/UI/Components/HeaderAlert/NotificationBell/NotificationBell.js +3 -1
- package/build/dist/UI/Components/HeaderAlert/NotificationBell/NotificationBell.js.map +1 -1
- package/build/dist/UI/Components/HeaderAlert/NotificationBell/NotificationBellDropdown.js +4 -2
- package/build/dist/UI/Components/HeaderAlert/NotificationBell/NotificationBellDropdown.js.map +1 -1
- package/build/dist/UI/Components/HeaderAlert/NotificationBell/NotificationBellSection.js +3 -1
- package/build/dist/UI/Components/HeaderAlert/NotificationBell/NotificationBellSection.js.map +1 -1
- package/build/dist/UI/Components/HiddenText/HiddenText.js +3 -1
- package/build/dist/UI/Components/HiddenText/HiddenText.js.map +1 -1
- package/build/dist/UI/Components/Icon/Icon.js +5 -4
- package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
- package/build/dist/UI/Components/ImportExport/ExportModelCard.js +13 -2
- package/build/dist/UI/Components/ImportExport/ExportModelCard.js.map +1 -1
- package/build/dist/UI/Components/ImportExport/ImportModelsModal.js +38 -7
- package/build/dist/UI/Components/ImportExport/ImportModelsModal.js.map +1 -1
- package/build/dist/UI/Components/Input/Input.js +27 -3
- package/build/dist/UI/Components/Input/Input.js.map +1 -1
- package/build/dist/UI/Components/IpAddressList/IpAddressList.js +8 -5
- package/build/dist/UI/Components/IpAddressList/IpAddressList.js.map +1 -1
- package/build/dist/UI/Components/JSONTable/JSONTable.js +10 -8
- package/build/dist/UI/Components/JSONTable/JSONTable.js.map +1 -1
- package/build/dist/UI/Components/LabelRule/ImportLabelRulesModal.js +45 -32
- package/build/dist/UI/Components/LabelRule/ImportLabelRulesModal.js.map +1 -1
- package/build/dist/UI/Components/Link/Link.js +5 -2
- package/build/dist/UI/Components/Link/Link.js.map +1 -1
- package/build/dist/UI/Components/List/List.js +78 -14
- package/build/dist/UI/Components/List/List.js.map +1 -1
- package/build/dist/UI/Components/List/ListBody.js +11 -4
- package/build/dist/UI/Components/List/ListBody.js.map +1 -1
- package/build/dist/UI/Components/List/ListRow.js +10 -12
- package/build/dist/UI/Components/List/ListRow.js.map +1 -1
- package/build/dist/UI/Components/List/ListSkeleton.js +3 -1
- package/build/dist/UI/Components/List/ListSkeleton.js.map +1 -1
- package/build/dist/UI/Components/Loader/Loader.js +6 -4
- package/build/dist/UI/Components/Loader/Loader.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js +34 -5
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/ActiveFilterChips.js +15 -7
- package/build/dist/UI/Components/LogsViewer/components/ActiveFilterChips.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/ColumnSelector.js +20 -16
- package/build/dist/UI/Components/LogsViewer/components/ColumnSelector.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/FacetValueRow.js +8 -4
- package/build/dist/UI/Components/LogsViewer/components/FacetValueRow.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/HistogramTooltip.js +3 -1
- package/build/dist/UI/Components/LogsViewer/components/HistogramTooltip.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/KeyboardShortcutsHelp.js +8 -7
- package/build/dist/UI/Components/LogsViewer/components/KeyboardShortcutsHelp.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LiveLogsToggle.js +3 -1
- package/build/dist/UI/Components/LogsViewer/components/LiveLogsToggle.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js +24 -22
- package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogSearchBar.js +7 -3
- package/build/dist/UI/Components/LogsViewer/components/LogSearchBar.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogSearchHelp.js +13 -15
- package/build/dist/UI/Components/LogsViewer/components/LogSearchHelp.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogSearchSuggestions.js +4 -5
- package/build/dist/UI/Components/LogsViewer/components/LogSearchSuggestions.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js +13 -6
- package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js +3 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js +7 -5
- package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsPagination.js +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsPagination.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsTable.js +32 -18
- package/build/dist/UI/Components/LogsViewer/components/LogsTable.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js +32 -22
- package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/SavedViewsDropdown.js +17 -11
- package/build/dist/UI/Components/LogsViewer/components/SavedViewsDropdown.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/LazyMarkdownViewer.js +3 -1
- package/build/dist/UI/Components/Markdown.tsx/LazyMarkdownViewer.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js +17 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js +674 -112
- package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownToolbarLayout.js +150 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownToolbarLayout.js.map +1 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +18 -7
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
- package/build/dist/UI/Components/MasterPage/MasterPage.js +3 -1
- package/build/dist/UI/Components/MasterPage/MasterPage.js.map +1 -1
- package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js +30 -28
- package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js.map +1 -1
- package/build/dist/UI/Components/ModelDelete/ModelDelete.js +19 -4
- package/build/dist/UI/Components/ModelDelete/ModelDelete.js.map +1 -1
- package/build/dist/UI/Components/ModelDetail/CardModelDetail.js +15 -3
- package/build/dist/UI/Components/ModelDetail/CardModelDetail.js.map +1 -1
- package/build/dist/UI/Components/ModelDetail/ModelDetail.js +10 -5
- package/build/dist/UI/Components/ModelDetail/ModelDetail.js.map +1 -1
- package/build/dist/UI/Components/ModelFormModal/ModelFormModal.js +36 -12
- package/build/dist/UI/Components/ModelFormModal/ModelFormModal.js.map +1 -1
- package/build/dist/UI/Components/ModelList/ModelList.js +53 -7
- package/build/dist/UI/Components/ModelList/ModelList.js.map +1 -1
- package/build/dist/UI/Components/ModelList/StaticModelList.js +14 -7
- package/build/dist/UI/Components/ModelList/StaticModelList.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +451 -220
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/ColumnCustomizationModal.js +46 -39
- package/build/dist/UI/Components/ModelTable/ColumnCustomizationModal.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/CustomFieldColumns.js +2 -1
- package/build/dist/UI/Components/ModelTable/CustomFieldColumns.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/EmptyStateOptions.js +2 -0
- package/build/dist/UI/Components/ModelTable/EmptyStateOptions.js.map +1 -0
- package/build/dist/UI/Components/ModelTable/ModelTable.js +29 -5
- package/build/dist/UI/Components/ModelTable/ModelTable.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/ModelTableEmptyState.js +191 -0
- package/build/dist/UI/Components/ModelTable/ModelTableEmptyState.js.map +1 -0
- package/build/dist/UI/Components/ModelTable/TableView.js +9 -5
- package/build/dist/UI/Components/ModelTable/TableView.js.map +1 -1
- package/build/dist/UI/Components/Monitor/SeriesLabelsViewer.js +3 -1
- package/build/dist/UI/Components/Monitor/SeriesLabelsViewer.js.map +1 -1
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +23 -1
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesModal.js +28 -22
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesModal.js.map +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js +24 -11
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js.map +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js +16 -4
- package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBar.js +11 -19
- package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBarCategoryToggle.js +44 -0
- package/build/dist/UI/Components/Navbar/NavBarCategoryToggle.js.map +1 -0
- package/build/dist/UI/Components/Navbar/NavBarMenuCatalog.js +154 -0
- package/build/dist/UI/Components/Navbar/NavBarMenuCatalog.js.map +1 -0
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +210 -86
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBarMobileMenu.js +57 -0
- package/build/dist/UI/Components/Navbar/NavBarMobileMenu.js.map +1 -0
- package/build/dist/UI/Components/ObjectID/ObjectIDView.js +31 -5
- package/build/dist/UI/Components/ObjectID/ObjectIDView.js.map +1 -1
- package/build/dist/UI/Components/OsVersionDisplay/OsVersionDisplay.js +7 -1
- package/build/dist/UI/Components/OsVersionDisplay/OsVersionDisplay.js.map +1 -1
- package/build/dist/UI/Components/Page/ModelPage.js +8 -2
- package/build/dist/UI/Components/Page/ModelPage.js.map +1 -1
- package/build/dist/UI/Components/Page/Page.js +1 -1
- package/build/dist/UI/Components/Page/Page.js.map +1 -1
- package/build/dist/UI/Components/Pagination/Pagination.js +143 -65
- package/build/dist/UI/Components/Pagination/Pagination.js.map +1 -1
- package/build/dist/UI/Components/Pagination/PaginationCopy.js +51 -0
- package/build/dist/UI/Components/Pagination/PaginationCopy.js.map +1 -0
- package/build/dist/UI/Components/Pagination/PaginationSummary.js +53 -0
- package/build/dist/UI/Components/Pagination/PaginationSummary.js.map +1 -0
- package/build/dist/UI/Components/PeoplePicker/OwnersFormField.js +59 -0
- package/build/dist/UI/Components/PeoplePicker/OwnersFormField.js.map +1 -0
- package/build/dist/UI/Components/PeoplePicker/OwnersPicker.js +30 -0
- package/build/dist/UI/Components/PeoplePicker/OwnersPicker.js.map +1 -0
- package/build/dist/UI/Components/PeoplePicker/PeopleAvatar.js +109 -0
- package/build/dist/UI/Components/PeoplePicker/PeopleAvatar.js.map +1 -0
- package/build/dist/UI/Components/PeoplePicker/PeopleList.js +72 -0
- package/build/dist/UI/Components/PeoplePicker/PeopleList.js.map +1 -0
- package/build/dist/UI/Components/PeoplePicker/PeoplePicker.js +93 -0
- package/build/dist/UI/Components/PeoplePicker/PeoplePicker.js.map +1 -0
- package/build/dist/UI/Components/PeoplePicker/PeoplePickerKinds.js +379 -0
- package/build/dist/UI/Components/PeoplePicker/PeoplePickerKinds.js.map +1 -0
- package/build/dist/UI/Components/PeoplePicker/PeoplePickerTypes.js +129 -0
- package/build/dist/UI/Components/PeoplePicker/PeoplePickerTypes.js.map +1 -0
- package/build/dist/UI/Components/PeoplePicker/PeopleSearchPopup.js +280 -0
- package/build/dist/UI/Components/PeoplePicker/PeopleSearchPopup.js.map +1 -0
- package/build/dist/UI/Components/PeoplePicker/usePeopleOptions.js +151 -0
- package/build/dist/UI/Components/PeoplePicker/usePeopleOptions.js.map +1 -0
- package/build/dist/UI/Components/Pill/Pill.js +14 -3
- package/build/dist/UI/Components/Pill/Pill.js.map +1 -1
- package/build/dist/UI/Components/Pill/PillColors.js +22 -181
- package/build/dist/UI/Components/Pill/PillColors.js.map +1 -1
- package/build/dist/UI/Components/Probe/Probe.js +4 -2
- package/build/dist/UI/Components/Probe/Probe.js.map +1 -1
- package/build/dist/UI/Components/ProgressBar/ProgressBar.js +14 -7
- package/build/dist/UI/Components/ProgressBar/ProgressBar.js.map +1 -1
- package/build/dist/UI/Components/ProgressButtons/ProgressButtons.js +3 -1
- package/build/dist/UI/Components/ProgressButtons/ProgressButtons.js.map +1 -1
- package/build/dist/UI/Components/ProjectInvitations/PendingProjectInvitations.js +27 -8
- package/build/dist/UI/Components/ProjectInvitations/PendingProjectInvitations.js.map +1 -1
- package/build/dist/UI/Components/PublicForm/PublicFormFields.js +248 -0
- package/build/dist/UI/Components/PublicForm/PublicFormFields.js.map +1 -0
- package/build/dist/UI/Components/ResetObjectID/ResetObjectID.js +15 -2
- package/build/dist/UI/Components/ResetObjectID/ResetObjectID.js.map +1 -1
- package/build/dist/UI/Components/RuleCriteria/RuleCriteriaBuilder.js +215 -335
- package/build/dist/UI/Components/RuleCriteria/RuleCriteriaBuilder.js.map +1 -1
- package/build/dist/UI/Components/RuleCriteria/RuleCriteriaFields.js +585 -0
- package/build/dist/UI/Components/RuleCriteria/RuleCriteriaFields.js.map +1 -0
- package/build/dist/UI/Components/RuleCriteria/RuleCriteriaModelForm.js +32 -6
- package/build/dist/UI/Components/RuleCriteria/RuleCriteriaModelForm.js.map +1 -1
- package/build/dist/UI/Components/RuleCriteria/RuleCriteriaModelTable.js +69 -16
- package/build/dist/UI/Components/RuleCriteria/RuleCriteriaModelTable.js.map +1 -1
- package/build/dist/UI/Components/RuleCriteria/RuleCriteriaSummary.js +18 -19
- package/build/dist/UI/Components/RuleCriteria/RuleCriteriaSummary.js.map +1 -1
- package/build/dist/UI/Components/RuleRun/RuleDetailFields.js +53 -2
- package/build/dist/UI/Components/RuleRun/RuleDetailFields.js.map +1 -1
- package/build/dist/UI/Components/RuleRun/RuleEnabledField.js +41 -0
- package/build/dist/UI/Components/RuleRun/RuleEnabledField.js.map +1 -0
- package/build/dist/UI/Components/RuleRun/RuleTable.js +9 -1
- package/build/dist/UI/Components/RuleRun/RuleTable.js.map +1 -1
- package/build/dist/UI/Components/RuleRun/RuleView.js +11 -4
- package/build/dist/UI/Components/RuleRun/RuleView.js.map +1 -1
- package/build/dist/UI/Components/RuleRun/RunRuleNowModal.js +8 -1
- package/build/dist/UI/Components/RuleRun/RunRuleNowModal.js.map +1 -1
- package/build/dist/UI/Components/Runbook/StepTimeoutInput.js +12 -13
- package/build/dist/UI/Components/Runbook/StepTimeoutInput.js.map +1 -1
- package/build/dist/UI/Components/SavedViews/SavedViewsFacetSection.js +19 -8
- package/build/dist/UI/Components/SavedViews/SavedViewsFacetSection.js.map +1 -1
- package/build/dist/UI/Components/SavedViews/SavedViewsSearchInput.js +5 -2
- package/build/dist/UI/Components/SavedViews/SavedViewsSearchInput.js.map +1 -1
- package/build/dist/UI/Components/SavedViews/SavedViewsShowMoreButton.js +5 -1
- package/build/dist/UI/Components/SavedViews/SavedViewsShowMoreButton.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenu.js +4 -6
- package/build/dist/UI/Components/SideMenu/SideMenu.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenuSection.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenuSectionState.js +52 -9
- package/build/dist/UI/Components/SideMenu/SideMenuSectionState.js.map +1 -1
- package/build/dist/UI/Components/SideOver/SideOver.js +9 -6
- package/build/dist/UI/Components/SideOver/SideOver.js.map +1 -1
- package/build/dist/UI/Components/SimpleLogViewer/SimpleLogViewer.js +3 -1
- package/build/dist/UI/Components/SimpleLogViewer/SimpleLogViewer.js.map +1 -1
- package/build/dist/UI/Components/StackedProgressBar/StackedProgressBar.js +3 -1
- package/build/dist/UI/Components/StackedProgressBar/StackedProgressBar.js.map +1 -1
- package/build/dist/UI/Components/StateTimeline/CurrentlyActiveIndicator.js +28 -0
- package/build/dist/UI/Components/StateTimeline/CurrentlyActiveIndicator.js.map +1 -0
- package/build/dist/UI/Components/StateTimeline/StateTimelineColumns.js +55 -0
- package/build/dist/UI/Components/StateTimeline/StateTimelineColumns.js.map +1 -0
- package/build/dist/UI/Components/StateTimeline/StateTimelineDuration.js +28 -0
- package/build/dist/UI/Components/StateTimeline/StateTimelineDuration.js.map +1 -0
- package/build/dist/UI/Components/StateTimeline/StateTimelineEndsAt.js +19 -0
- package/build/dist/UI/Components/StateTimeline/StateTimelineEndsAt.js.map +1 -0
- package/build/dist/UI/Components/StatusBadge/StatusBadge.js +4 -1
- package/build/dist/UI/Components/StatusBadge/StatusBadge.js.map +1 -1
- package/build/dist/UI/Components/StatusBubble/StatusBubble.js +7 -2
- package/build/dist/UI/Components/StatusBubble/StatusBubble.js.map +1 -1
- package/build/dist/UI/Components/StatusPage/ResourceGrid.js +31 -20
- package/build/dist/UI/Components/StatusPage/ResourceGrid.js.map +1 -1
- package/build/dist/UI/Components/StatusPage/ResourceGroupNavigator.js +34 -16
- package/build/dist/UI/Components/StatusPage/ResourceGroupNavigator.js.map +1 -1
- package/build/dist/UI/Components/StatusPage/ResourceList.js +28 -11
- package/build/dist/UI/Components/StatusPage/ResourceList.js.map +1 -1
- package/build/dist/UI/Components/Table/DragHandle.js +30 -0
- package/build/dist/UI/Components/Table/DragHandle.js.map +1 -0
- package/build/dist/UI/Components/Table/EmptyTableMessage.js +159 -35
- package/build/dist/UI/Components/Table/EmptyTableMessage.js.map +1 -1
- package/build/dist/UI/Components/Table/Table.js +140 -50
- package/build/dist/UI/Components/Table/Table.js.map +1 -1
- package/build/dist/UI/Components/Table/TableBody.js +26 -2
- package/build/dist/UI/Components/Table/TableBody.js.map +1 -1
- package/build/dist/UI/Components/Table/TableEmptyState.js +118 -0
- package/build/dist/UI/Components/Table/TableEmptyState.js.map +1 -0
- package/build/dist/UI/Components/Table/TableEmptyStateBuilders.js +114 -0
- package/build/dist/UI/Components/Table/TableEmptyStateBuilders.js.map +1 -0
- package/build/dist/UI/Components/Table/TableRow.js +46 -20
- package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
- package/build/dist/UI/Components/Table/TableSkeletonRows.js +4 -2
- package/build/dist/UI/Components/Table/TableSkeletonRows.js.map +1 -1
- package/build/dist/UI/Components/TableColumnList/TableColumnListComponent.js +11 -2
- package/build/dist/UI/Components/TableColumnList/TableColumnListComponent.js.map +1 -1
- package/build/dist/UI/Components/Tabs/Tabs.js +3 -1
- package/build/dist/UI/Components/Tabs/Tabs.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/FacetVisibility.js +27 -8
- package/build/dist/UI/Components/TelemetryViewer/FacetVisibility.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +31 -9
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/FacetSearchInput.js +9 -2
- package/build/dist/UI/Components/TelemetryViewer/components/FacetSearchInput.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/FacetShowMoreButton.js +5 -1
- package/build/dist/UI/Components/TelemetryViewer/components/FacetShowMoreButton.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/HiddenFacetsFooter.js +8 -3
- package/build/dist/UI/Components/TelemetryViewer/components/HiddenFacetsFooter.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterChip.js +56 -27
- package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterChip.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/SavedViewsDropdown.js +17 -11
- package/build/dist/UI/Components/TelemetryViewer/components/SavedViewsDropdown.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryActiveFilterChips.js +9 -3
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryActiveFilterChips.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryDetailPanel.js +4 -2
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryDetailPanel.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js +3 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetValueRow.js +8 -4
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetValueRow.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js +9 -5
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogramTooltip.js +3 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogramTooltip.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryItemLabel.js +11 -0
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryItemLabel.js.map +1 -0
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryPagination.js +3 -10
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryPagination.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryResultTotal.js +60 -0
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryResultTotal.js.map +1 -0
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetrySearchBar.js +5 -3
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetrySearchBar.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetrySearchHelp.js +13 -13
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetrySearchHelp.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetrySearchSuggestions.js +4 -5
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetrySearchSuggestions.js.map +1 -1
- package/build/dist/UI/Components/TemplateVariables/InsertTemplateVariableButton.js +90 -0
- package/build/dist/UI/Components/TemplateVariables/InsertTemplateVariableButton.js.map +1 -0
- package/build/dist/UI/Components/TemplateVariables/TemplateVariableIcons.js +15 -0
- package/build/dist/UI/Components/TemplateVariables/TemplateVariableIcons.js.map +1 -0
- package/build/dist/UI/Components/TemplateVariables/TemplateVariableMenu.js +159 -0
- package/build/dist/UI/Components/TemplateVariables/TemplateVariableMenu.js.map +1 -0
- package/build/dist/UI/Components/TemplateVariables/TemplateVariablePopup.js +160 -0
- package/build/dist/UI/Components/TemplateVariables/TemplateVariablePopup.js.map +1 -0
- package/build/dist/UI/Components/TemplateVariables/TemplateVariableTextControl.js +73 -0
- package/build/dist/UI/Components/TemplateVariables/TemplateVariableTextControl.js.map +1 -0
- package/build/dist/UI/Components/TemplateVariables/TemplateVariablesCopy.js +28 -0
- package/build/dist/UI/Components/TemplateVariables/TemplateVariablesCopy.js.map +1 -0
- package/build/dist/UI/Components/TemplateVariables/TemplateVariablesList.js +98 -0
- package/build/dist/UI/Components/TemplateVariables/TemplateVariablesList.js.map +1 -0
- package/build/dist/UI/Components/TemplateVariables/TextControlUtil.js +197 -0
- package/build/dist/UI/Components/TemplateVariables/TextControlUtil.js.map +1 -0
- package/build/dist/UI/Components/TemplateVariables/useTemplateVariableTyping.js +184 -0
- package/build/dist/UI/Components/TemplateVariables/useTemplateVariableTyping.js.map +1 -0
- package/build/dist/UI/Components/TimePicker/TimePicker.js +22 -21
- package/build/dist/UI/Components/TimePicker/TimePicker.js.map +1 -1
- package/build/dist/UI/Components/Toggle/Toggle.js +39 -25
- package/build/dist/UI/Components/Toggle/Toggle.js.map +1 -1
- package/build/dist/UI/Components/Tooltip/InfoTooltip.js +6 -1
- package/build/dist/UI/Components/Tooltip/InfoTooltip.js.map +1 -1
- package/build/dist/UI/Components/Tooltip/Tooltip.js +5 -3
- package/build/dist/UI/Components/Tooltip/Tooltip.js.map +1 -1
- package/build/dist/UI/Components/TranslatedSentence/TranslatedSentence.js +22 -0
- package/build/dist/UI/Components/TranslatedSentence/TranslatedSentence.js.map +1 -0
- package/build/dist/UI/Components/Workflow/ArgumentsForm.js +23 -9
- package/build/dist/UI/Components/Workflow/ArgumentsForm.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ColumnEditor/AddColumnPicker.js +15 -14
- package/build/dist/UI/Components/Workflow/ColumnEditor/AddColumnPicker.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnConditionRow.js +8 -6
- package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnConditionRow.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnControl.js +22 -14
- package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnControl.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnFieldRow.js +15 -12
- package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnFieldRow.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnOperators.js +15 -14
- package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnOperators.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnPickerOptions.js +2 -1
- package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnPickerOptions.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnRowSerialization.js +3 -2
- package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnRowSerialization.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnValueInput.js +13 -6
- package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnValueInput.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ColumnEditor/ModelQueryBuilder.js +9 -6
- package/build/dist/UI/Components/Workflow/ColumnEditor/ModelQueryBuilder.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ColumnEditor/ModelRecordForm.js +20 -10
- package/build/dist/UI/Components/Workflow/ColumnEditor/ModelRecordForm.js.map +1 -1
- package/build/dist/UI/Components/Workflow/Component.js +7 -3
- package/build/dist/UI/Components/Workflow/Component.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ComponentArgumentsViewer.js +10 -3
- package/build/dist/UI/Components/Workflow/ComponentArgumentsViewer.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ComponentPicker/PickerItems.js +33 -15
- package/build/dist/UI/Components/Workflow/ComponentPicker/PickerItems.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ComponentPortViewer.js +3 -1
- package/build/dist/UI/Components/Workflow/ComponentPortViewer.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ComponentReturnValueViewer.js +7 -2
- package/build/dist/UI/Components/Workflow/ComponentReturnValueViewer.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ComponentSettingsModal.js +15 -6
- package/build/dist/UI/Components/Workflow/ComponentSettingsModal.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ComponentSettingsSection.js +4 -2
- package/build/dist/UI/Components/Workflow/ComponentSettingsSection.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ComponentsModal.js +67 -48
- package/build/dist/UI/Components/Workflow/ComponentsModal.js.map +1 -1
- package/build/dist/UI/Components/Workflow/Condition/ConditionEditor.js +35 -17
- package/build/dist/UI/Components/Workflow/Condition/ConditionEditor.js.map +1 -1
- package/build/dist/UI/Components/Workflow/Condition/ConditionModel.js +23 -11
- package/build/dist/UI/Components/Workflow/Condition/ConditionModel.js.map +1 -1
- package/build/dist/UI/Components/Workflow/CronScheduleField.js +25 -24
- package/build/dist/UI/Components/Workflow/CronScheduleField.js.map +1 -1
- package/build/dist/UI/Components/Workflow/DocumentationViewer.js +10 -2
- package/build/dist/UI/Components/Workflow/DocumentationViewer.js.map +1 -1
- package/build/dist/UI/Components/Workflow/GraphLint.js +40 -13
- package/build/dist/UI/Components/Workflow/GraphLint.js.map +1 -1
- package/build/dist/UI/Components/Workflow/GraphLintSummary.js +16 -7
- package/build/dist/UI/Components/Workflow/GraphLintSummary.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ManualTriggerPanel.js +11 -8
- package/build/dist/UI/Components/Workflow/ManualTriggerPanel.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ModelColumnEditor.js +47 -38
- package/build/dist/UI/Components/Workflow/ModelColumnEditor.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ModelFieldPicker.js +54 -37
- package/build/dist/UI/Components/Workflow/ModelFieldPicker.js.map +1 -1
- package/build/dist/UI/Components/Workflow/RunForm.js +13 -5
- package/build/dist/UI/Components/Workflow/RunForm.js.map +1 -1
- package/build/dist/UI/Components/Workflow/RunStatusWatcher.js +27 -6
- package/build/dist/UI/Components/Workflow/RunStatusWatcher.js.map +1 -1
- package/build/dist/UI/Components/Workflow/StepTraceViewer.js +68 -44
- package/build/dist/UI/Components/Workflow/StepTraceViewer.js.map +1 -1
- package/build/dist/UI/Components/Workflow/UseRunWatch.js +2 -2
- package/build/dist/UI/Components/Workflow/UseRunWatch.js.map +1 -1
- package/build/dist/UI/Components/Workflow/Utils.js +4 -1
- package/build/dist/UI/Components/Workflow/Utils.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ValuePicker/InsertValueButton.js +4 -2
- package/build/dist/UI/Components/Workflow/ValuePicker/InsertValueButton.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ValuePicker/ValuePickerMenu.js +60 -48
- package/build/dist/UI/Components/Workflow/ValuePicker/ValuePickerMenu.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ValuePicker/ValuePickerPopup.js +3 -1
- package/build/dist/UI/Components/Workflow/ValuePicker/ValuePickerPopup.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ValuePicker/ValueSingleField.js +6 -3
- package/build/dist/UI/Components/Workflow/ValuePicker/ValueSingleField.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ValuePicker/ValueTextField.js +7 -4
- package/build/dist/UI/Components/Workflow/ValuePicker/ValueTextField.js.map +1 -1
- package/build/dist/UI/Components/Workflow/WorkflowIssuesModal.js +21 -20
- package/build/dist/UI/Components/Workflow/WorkflowIssuesModal.js.map +1 -1
- package/build/dist/UI/Components/Workflow/WorkflowLogModal.js +9 -5
- package/build/dist/UI/Components/Workflow/WorkflowLogModal.js.map +1 -1
- package/build/dist/UI/Components/Workflow/WorkflowStatusBar.js +16 -9
- package/build/dist/UI/Components/Workflow/WorkflowStatusBar.js.map +1 -1
- package/build/dist/UI/Types/UseAnchoredFieldPopup.js +2 -2
- package/build/dist/UI/Types/UseAnchoredFieldPopup.js.map +1 -1
- package/build/dist/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.js +2 -4
- package/build/dist/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.js.map +1 -1
- package/build/dist/UI/Utils/Dropdown.js +74 -2
- package/build/dist/UI/Utils/Dropdown.js.map +1 -1
- package/build/dist/UI/Utils/ForeignDomMutationGuard.js +111 -0
- package/build/dist/UI/Utils/ForeignDomMutationGuard.js.map +1 -0
- package/build/dist/UI/Utils/GrantablePermission.js +108 -0
- package/build/dist/UI/Utils/GrantablePermission.js.map +1 -0
- package/build/dist/UI/Utils/PermissionGate.js +30 -2
- package/build/dist/UI/Utils/PermissionGate.js.map +1 -1
- package/build/dist/UI/Utils/Rules/RuleRunClient.js +10 -2
- package/build/dist/UI/Utils/Rules/RuleRunClient.js.map +1 -1
- package/build/dist/UI/Utils/Telemetry/ResultTotal.js +102 -0
- package/build/dist/UI/Utils/Telemetry/ResultTotal.js.map +1 -0
- package/build/dist/UI/Utils/Telemetry/UseResultTotal.js +94 -0
- package/build/dist/UI/Utils/Telemetry/UseResultTotal.js.map +1 -0
- package/build/dist/UI/Utils/TranslateTemplate.js +353 -13
- package/build/dist/UI/Utils/TranslateTemplate.js.map +1 -1
- package/build/dist/UI/Utils/Translation.js +23 -2
- package/build/dist/UI/Utils/Translation.js.map +1 -1
- package/build/dist/UI/Utils/UseClockTick.js +20 -2
- package/build/dist/UI/Utils/UseClockTick.js.map +1 -1
- package/build/dist/UI/Utils/UseLiveDuration.js +66 -0
- package/build/dist/UI/Utils/UseLiveDuration.js.map +1 -0
- package/build/dist/UI/Utils/UseTranslator.js +20 -0
- package/build/dist/UI/Utils/UseTranslator.js.map +1 -0
- package/build/dist/Utils/ColorContrast.js +182 -0
- package/build/dist/Utils/ColorContrast.js.map +1 -0
- package/build/dist/Utils/DeveloperDocs/AiAssistantExamples.js +3 -3
- package/build/dist/Utils/DeveloperDocs/AiAssistantExamples.js.map +1 -1
- package/build/dist/Utils/DeveloperDocs/ApiExamples.js +1 -177
- package/build/dist/Utils/DeveloperDocs/ApiExamples.js.map +1 -1
- package/build/dist/Utils/DeveloperDocs/ExampleBuilder.js +1116 -0
- package/build/dist/Utils/DeveloperDocs/ExampleBuilder.js.map +1 -0
- package/build/dist/Utils/DeveloperDocs/ExampleValues.js +67 -0
- package/build/dist/Utils/DeveloperDocs/ExampleValues.js.map +1 -1
- package/build/dist/Utils/DeveloperDocs/Hcl.js +93 -17
- package/build/dist/Utils/DeveloperDocs/Hcl.js.map +1 -1
- package/build/dist/Utils/DeveloperDocs/LiveData.js +142 -0
- package/build/dist/Utils/DeveloperDocs/LiveData.js.map +1 -0
- package/build/dist/Utils/DeveloperDocs/PageLookups.js +224 -0
- package/build/dist/Utils/DeveloperDocs/PageLookups.js.map +1 -0
- package/build/dist/Utils/DeveloperDocs/ResourceProfiles.js +1447 -0
- package/build/dist/Utils/DeveloperDocs/ResourceProfiles.js.map +1 -0
- package/build/dist/Utils/DeveloperDocs/TerraformConfig.js +82 -79
- package/build/dist/Utils/DeveloperDocs/TerraformConfig.js.map +1 -1
- package/build/dist/Utils/DeveloperDocs/TerraformMonitorSteps.js +35 -12
- package/build/dist/Utils/DeveloperDocs/TerraformMonitorSteps.js.map +1 -1
- package/build/dist/Utils/DeveloperDocs/TerraformSchema.js +54 -0
- package/build/dist/Utils/DeveloperDocs/TerraformSchema.js.map +1 -1
- package/build/dist/Utils/Email/EmailColorUtil.js +101 -0
- package/build/dist/Utils/Email/EmailColorUtil.js.map +1 -0
- package/build/dist/Utils/Episode/EpisodeTemplateVariables.js +60 -0
- package/build/dist/Utils/Episode/EpisodeTemplateVariables.js.map +1 -0
- package/build/dist/Utils/Incident/IncidentNoteTemplateVariables.js +26 -5
- package/build/dist/Utils/Incident/IncidentNoteTemplateVariables.js.map +1 -1
- package/build/dist/Utils/Incident/IncidentSlaNoteTemplateVariables.js +26 -0
- package/build/dist/Utils/Incident/IncidentSlaNoteTemplateVariables.js.map +1 -0
- package/build/dist/Utils/KeyFromName.js +139 -0
- package/build/dist/Utils/KeyFromName.js.map +1 -0
- package/build/dist/Utils/ListOrder.js +242 -0
- package/build/dist/Utils/ListOrder.js.map +1 -0
- package/build/dist/Utils/Measurement/MeasurementMoments.js +477 -0
- package/build/dist/Utils/Measurement/MeasurementMoments.js.map +1 -0
- package/build/dist/Utils/Project/NumberPrefix.js +126 -0
- package/build/dist/Utils/Project/NumberPrefix.js.map +1 -0
- package/build/dist/Utils/Slo/SloBurnRateTemplate.js +17 -0
- package/build/dist/Utils/Slo/SloBurnRateTemplate.js.map +1 -1
- package/build/dist/Utils/StateOrder.js +384 -0
- package/build/dist/Utils/StateOrder.js.map +1 -0
- package/package.json +1 -1
- package/Server/Services/IncidentFormService.ts +0 -1566
- package/Server/Services/IncidentFormSubmissionService.ts +0 -97
- package/Tests/App/Accounts/IncidentFormPage.test.tsx +0 -2036
- package/Tests/App/Accounts/IncidentFormServerMessages.test.ts +0 -119
- package/Tests/App/Accounts/IncidentFormUtils.test.ts +0 -1157
- package/Tests/App/Dashboard/IncidentFormsPages.test.tsx +0 -1324
- package/Tests/Server/Services/IncidentCustomFieldDeleteFormQuestions.test.ts +0 -297
- package/Tests/Server/Services/IncidentFormPublicForm.test.ts +0 -1260
- package/Tests/Server/Services/IncidentFormPublicSubmission.test.ts +0 -2520
- package/Tests/Server/Services/IncidentFormService.test.ts +0 -663
- package/Tests/Server/Services/IncidentFormSubmissionService.test.ts +0 -430
- package/Tests/Types/Incident/IncidentFormPublic.test.ts +0 -1916
- package/Tests/UI/Components/FeedOptionsButton.test.tsx +0 -2610
- package/Tests/UI/Components/Item.test.tsx +0 -72
- package/Tests/UI/Components/OrderedStatesList.test.tsx +0 -148
- package/Tests/UI/Components/OrderedStatesListCreateGate.test.tsx +0 -174
- package/Types/Incident/IncidentFormPublic.ts +0 -1145
- package/UI/Components/EventHistoryList/NoEventDay.tsx +0 -27
- package/UI/Components/Feed/FeedOptionsButton.tsx +0 -692
- package/UI/Components/OrderedStatesList/Item.tsx +0 -76
- package/UI/Components/OrderedStatesList/OrderedStatesList.tsx +0 -261
- package/build/dist/Models/DatabaseModels/IncidentForm.js.map +0 -1
- package/build/dist/Models/DatabaseModels/IncidentFormSubmission.js.map +0 -1
- package/build/dist/Server/API/IncidentFormAPI.js.map +0 -1
- package/build/dist/Server/Middleware/IncidentFormRateLimit.js.map +0 -1
- package/build/dist/Server/Services/IncidentFormService.js +0 -1202
- package/build/dist/Server/Services/IncidentFormService.js.map +0 -1
- package/build/dist/Server/Services/IncidentFormSubmissionService.js +0 -91
- package/build/dist/Server/Services/IncidentFormSubmissionService.js.map +0 -1
- package/build/dist/Types/Incident/IncidentFormIpAllowlist.js.map +0 -1
- package/build/dist/Types/Incident/IncidentFormPublic.js +0 -678
- package/build/dist/Types/Incident/IncidentFormPublic.js.map +0 -1
- package/build/dist/UI/Components/EventHistoryList/NoEventDay.js +0 -16
- package/build/dist/UI/Components/EventHistoryList/NoEventDay.js.map +0 -1
- package/build/dist/UI/Components/Feed/FeedOptionsButton.js +0 -346
- package/build/dist/UI/Components/Feed/FeedOptionsButton.js.map +0 -1
- package/build/dist/UI/Components/OrderedStatesList/Item.js +0 -29
- package/build/dist/UI/Components/OrderedStatesList/Item.js.map +0 -1
- package/build/dist/UI/Components/OrderedStatesList/OrderedStatesList.js +0 -101
- package/build/dist/UI/Components/OrderedStatesList/OrderedStatesList.js.map +0 -1
|
@@ -1,1202 +0,0 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
-
};
|
|
10
|
-
import { IsBillingEnabled, getAllEnvVars } from "../EnvironmentConfig";
|
|
11
|
-
import DatabaseService from "./DatabaseService";
|
|
12
|
-
import IncidentCustomFieldService from "./IncidentCustomFieldService";
|
|
13
|
-
import IncidentFormSubmissionService from "./IncidentFormSubmissionService";
|
|
14
|
-
import IncidentInternalNoteService from "./IncidentInternalNoteService";
|
|
15
|
-
import IncidentService from "./IncidentService";
|
|
16
|
-
import IncidentSeverityService from "./IncidentSeverityService";
|
|
17
|
-
import IncidentTemplateOwnerTeamService from "./IncidentTemplateOwnerTeamService";
|
|
18
|
-
import IncidentTemplateOwnerUserService from "./IncidentTemplateOwnerUserService";
|
|
19
|
-
import IncidentTemplateService from "./IncidentTemplateService";
|
|
20
|
-
import ProjectService from "./ProjectService";
|
|
21
|
-
import SortOrder from "../../Types/BaseDatabase/SortOrder";
|
|
22
|
-
import SubscriptionPlan, { PlanType, } from "../../Types/Billing/SubscriptionPlan";
|
|
23
|
-
import { compactCustomFieldCreateSettings, getIncidentFormAskedDefinitions, validateCustomFieldCreateSettings, } from "../../Types/CustomField/CustomFieldCreateSettings";
|
|
24
|
-
import { getCustomFieldInheritanceSource, getCustomFieldMappingRelationSelect, isCustomFieldInheritedByRecord, } from "../../Types/CustomField/CustomFieldMappingCatalog";
|
|
25
|
-
import CustomFieldType from "../../Types/CustomField/CustomFieldType";
|
|
26
|
-
import LIMIT_MAX, { LIMIT_PER_PROJECT } from "../../Types/Database/LimitMax";
|
|
27
|
-
import Email from "../../Types/Email";
|
|
28
|
-
import BadDataException from "../../Types/Exception/BadDataException";
|
|
29
|
-
import ForbiddenException from "../../Types/Exception/ForbiddenException";
|
|
30
|
-
import NotFoundException from "../../Types/Exception/NotFoundException";
|
|
31
|
-
import ServerException from "../../Types/Exception/ServerException";
|
|
32
|
-
import { INCIDENT_FORM_QUESTION_LABELS, INCIDENT_FORM_TITLE_MAX_LENGTH, WHOLE_EMAIL_ADDRESS, formatIncidentFormSubmissionErrors, getPublicIncidentForm, isIncidentFormFieldSetting, validateIncidentFormSubmission, } from "../../Types/Incident/IncidentFormPublic";
|
|
33
|
-
import { getIncidentFormIpAllowlistEntries, getIpv4OfMappedAddress, validateIncidentFormIpAllowlist, } from "../../Types/Incident/IncidentFormIpAllowlist";
|
|
34
|
-
import IP from "../../Types/IP/IP";
|
|
35
|
-
import ObjectID from "../../Types/ObjectID";
|
|
36
|
-
import IpCanonicalUtil from "../../Utils/IpCanonicalUtil";
|
|
37
|
-
import { escapeMarkdownInline } from "../../Utils/Markdown/MarkdownEscape";
|
|
38
|
-
import { neutralizeChatControlSequences, neutralizeUntrustedMarkdown, neutralizeUntrustedPlainText, } from "../../Utils/Markdown/UntrustedMarkdown";
|
|
39
|
-
import Incident from "../../Models/DatabaseModels/Incident";
|
|
40
|
-
import IncidentCustomField from "../../Models/DatabaseModels/IncidentCustomField";
|
|
41
|
-
import Model from "../../Models/DatabaseModels/IncidentForm";
|
|
42
|
-
import IncidentFormSubmission from "../../Models/DatabaseModels/IncidentFormSubmission";
|
|
43
|
-
import IncidentInternalNote from "../../Models/DatabaseModels/IncidentInternalNote";
|
|
44
|
-
import IncidentTemplate from "../../Models/DatabaseModels/IncidentTemplate";
|
|
45
|
-
import IncidentFormRateLimit from "../Middleware/IncidentFormRateLimit";
|
|
46
|
-
import CaptchaUtil from "../Utils/Captcha";
|
|
47
|
-
import ProjectScopedReferenceValidator, { resolveReferenceId, } from "../Utils/Database/ProjectScopedReferenceValidator";
|
|
48
|
-
import logger from "../Utils/Logger";
|
|
49
|
-
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
50
|
-
/*
|
|
51
|
-
* What an incident form may hold. The public page that submits a form - and
|
|
52
|
-
* the incident each submission declares - trust everything checked here, so
|
|
53
|
-
* a form is refused at the write that would make it wrong rather than at a
|
|
54
|
-
* stranger's submission:
|
|
55
|
-
*
|
|
56
|
-
* - its link key is minted on create, never taken from the request, and
|
|
57
|
-
* only ever replaced by another UUID;
|
|
58
|
-
* - its custom field questions and description question are settings the
|
|
59
|
-
* public page and the submit route understand;
|
|
60
|
-
* - its IP allowlist holds only entries the public routes can match;
|
|
61
|
-
* - its severity and template belong to its own project, because every
|
|
62
|
-
* incident declared through it is created in that project with them;
|
|
63
|
-
* - it has a severity: a submission needs one, and "incidentSeverityId is
|
|
64
|
-
* required" says less than the message below.
|
|
65
|
-
*
|
|
66
|
-
* The public routes themselves live in IncidentFormAPI, and are thin: what a
|
|
67
|
-
* visitor is told about a form and what a submission turns into are decided
|
|
68
|
-
* here, in getPublicForm and submitPublicForm.
|
|
69
|
-
*/
|
|
70
|
-
export const INCIDENT_FORM_SEVERITY_REQUIRED_MESSAGE = "An incident form needs a severity for the incidents it declares. Choose one of the project's incident severities.";
|
|
71
|
-
export const INCIDENT_FORM_DESCRIPTION_SETTING_MESSAGE = "Description Question must be Required, Optional or Hidden.";
|
|
72
|
-
export const INCIDENT_FORM_SHARE_KEY_MESSAGE = "Share Key must be a UUID, such as the one the dashboard's Reset Link generates.";
|
|
73
|
-
/*
|
|
74
|
-
* The one answer a public request gets for every form it may not use: a
|
|
75
|
-
* link that is malformed or names no form, a form that is turned off, and a
|
|
76
|
-
* form whose project's plan does not include forms or whose subscription is
|
|
77
|
-
* unpaid (see isProjectOnPlan). They all read the same, word for word and
|
|
78
|
-
* status for status, so trying links tells a stranger nothing about which
|
|
79
|
-
* forms exist or why one is unavailable.
|
|
80
|
-
*/
|
|
81
|
-
export const INCIDENT_FORM_NOT_AVAILABLE_MESSAGE = "This form is not available. It may have been turned off, or the link may be out of date.";
|
|
82
|
-
/*
|
|
83
|
-
* The form's IP allowlist refused the visitor. Only reached for a form that
|
|
84
|
-
* exists and is on, so it can say what is wrong: the visitor can do
|
|
85
|
-
* something about their network, and nothing about a form that is gone.
|
|
86
|
-
*/
|
|
87
|
-
export const INCIDENT_FORM_NETWORK_NOT_ALLOWED_MESSAGE = "This form can only be opened from an allowed network.";
|
|
88
|
-
/*
|
|
89
|
-
* Neither the reporter, the form nor its template has a severity - the
|
|
90
|
-
* form's own was deleted (the column is cleared with it) and the template
|
|
91
|
-
* sets none. The reporter cannot fix that, so the message asks them to tell
|
|
92
|
-
* the people who can.
|
|
93
|
-
*/
|
|
94
|
-
export const INCIDENT_FORM_NO_SEVERITY_MESSAGE = "This form cannot declare an incident because it has no severity. Please let the team that shared it know.";
|
|
95
|
-
/*
|
|
96
|
-
* Declaring the incident itself failed. Why is logged with the form and the
|
|
97
|
-
* project; the reporter, who can only try again, is not handed internal
|
|
98
|
-
* messages or ids.
|
|
99
|
-
*/
|
|
100
|
-
export const INCIDENT_FORM_SUBMIT_FAILED_MESSAGE = "Your report could not be submitted. Please try again in a few minutes.";
|
|
101
|
-
/*
|
|
102
|
-
* An address an autolink carries whole everywhere: letters, digits, dots
|
|
103
|
-
* and hyphens, and of the rest of what an address may hold only "_", "~",
|
|
104
|
-
* "$", "'", "*" and "+" - the characters a mailto: link may carry as they
|
|
105
|
-
* are (RFC 6068) and that every renderer here keeps inside an autolink.
|
|
106
|
-
* Every other one is written as an explicit link (see
|
|
107
|
-
* getIncidentFormReporterNote), because somewhere the autolink would
|
|
108
|
-
* write to another address:
|
|
109
|
-
*
|
|
110
|
-
* - "!" anywhere: micromark, behind the dashboard and slackify, does not
|
|
111
|
-
* take "!" in an autolink's address, so <first.last!ops@corp.example>
|
|
112
|
-
* became a link to ops@corp.example (and a leading "!", like a leading
|
|
113
|
-
* "#", opens like a Slack control sequence);
|
|
114
|
-
* - "^": marked, which renders the owners' email, drops "^" from its
|
|
115
|
-
* autolink rule, so <jane^doe@corp.example> linked doe@corp.example;
|
|
116
|
-
* - "#", "?" and "%": a mail client reads them in a mailto: link as a
|
|
117
|
-
* fragment, headers or an escape - <a#b@example.com> writes to "a",
|
|
118
|
-
* <a%41@example.com> to aA@example.com - and slackify cannot even read
|
|
119
|
-
* an address with a stray "%" in it;
|
|
120
|
-
* - "&", "/", "=", "`", "{", "|" and "}": RFC 6068 has them
|
|
121
|
-
* percent-encoded in a mailto: link, which an autolink cannot do.
|
|
122
|
-
*/
|
|
123
|
-
const EXPLICIT_LINK_ADDRESS_PATTERN = /[^a-z0-9.@_~$'*+-]/i;
|
|
124
|
-
/*
|
|
125
|
-
* The characters of an address a mailto: link carries only percent-encoded
|
|
126
|
-
* (RFC 6068): all but unreserved characters and "!", "$", "'", "*", "+"
|
|
127
|
-
* and "@".
|
|
128
|
-
*/
|
|
129
|
-
const MAILTO_ENCODED_CHARACTER_PATTERN = /[^a-z0-9.@_~!$'*+-]/gi;
|
|
130
|
-
// A mailto: link that writes to exactly this address.
|
|
131
|
-
const getMailtoLink = (email) => {
|
|
132
|
-
return `mailto:${email.replace(MAILTO_ENCODED_CHARACTER_PATTERN, (character) => {
|
|
133
|
-
return `%${character
|
|
134
|
-
.charCodeAt(0)
|
|
135
|
-
.toString(16)
|
|
136
|
-
.toUpperCase()
|
|
137
|
-
.padStart(2, "0")}`;
|
|
138
|
-
})}`;
|
|
139
|
-
};
|
|
140
|
-
/**
|
|
141
|
-
* The private note a submission leaves on the incident it declared: which
|
|
142
|
-
* form it came through, and who sent it as far as they said. Private, so the
|
|
143
|
-
* reporter's name and address never reach a status page the way the
|
|
144
|
-
* incident's description can.
|
|
145
|
-
*
|
|
146
|
-
* Every value is escaped where it is placed, as every feed sentence the
|
|
147
|
-
* server writes escapes the names in it. The note is posted as it is - no
|
|
148
|
-
* person reads it over first - so a name such as "[x](javascript:...)" must
|
|
149
|
-
* reach the responders as those characters, not as a link, and "**bold**"
|
|
150
|
-
* as asterisks rather than as emphasis. The form's name is escaped too: an
|
|
151
|
-
* admin chose it, but it sits inside the note's own bold.
|
|
152
|
-
*
|
|
153
|
-
* The note is posted to the incident's Slack and Teams channels as well, so
|
|
154
|
-
* a name such as "<!channel>" must not reach Slack as a mention either: the
|
|
155
|
-
* names go through neutralizeChatControlSequences before they are escaped.
|
|
156
|
-
*
|
|
157
|
-
* The address is the exception: it is written as an autolink,
|
|
158
|
-
* <jane@example.com>, so every renderer links the whole of it. It has
|
|
159
|
-
* already passed WHOLE_EMAIL_ADDRESS - one dot-atom address, with no space,
|
|
160
|
-
* bracket, angle bracket or backslash that could end the autolink early.
|
|
161
|
-
* Backslash-escaping it instead broke the link where it matters: marked,
|
|
162
|
-
* which renders the owners' "note posted" email, restarts its bare-address
|
|
163
|
-
* link after every escape, so mary\-jane.watson@corp.example linked
|
|
164
|
-
* mailto:jane.watson@corp.example - somebody else's mailbox. An address an
|
|
165
|
-
* autolink would not carry whole in every renderer, or that a mailto: link
|
|
166
|
-
* carries only percent-encoded (see EXPLICIT_LINK_ADDRESS_PATTERN: one with
|
|
167
|
-
* "!", "^", "#", "?", "%" and the like in it) is written as a plain link
|
|
168
|
-
* instead, [address](mailto:...), with those characters percent-encoded in
|
|
169
|
-
* its address - a form marked, the dashboard and slackify all link whole.
|
|
170
|
-
* A value that is not one whole address (the function is exported, and
|
|
171
|
-
* could be handed anything) is escaped like the name.
|
|
172
|
-
*/
|
|
173
|
-
export const getIncidentFormReporterNote = (data) => {
|
|
174
|
-
var _a;
|
|
175
|
-
const formName = escapeMarkdownInline(neutralizeChatControlSequences(data.formName)).trim();
|
|
176
|
-
const form = formName
|
|
177
|
-
? `the incident form **${formName}**`
|
|
178
|
-
: "an incident form";
|
|
179
|
-
const reporterName = escapeMarkdownInline(neutralizeChatControlSequences(data.reporterName)).trim();
|
|
180
|
-
const email = String((_a = data.reporterEmail) !== null && _a !== void 0 ? _a : "").trim();
|
|
181
|
-
let reporterEmail = escapeMarkdownInline(neutralizeChatControlSequences(email)).trim();
|
|
182
|
-
if (email && WHOLE_EMAIL_ADDRESS.test(email)) {
|
|
183
|
-
reporterEmail = EXPLICIT_LINK_ADDRESS_PATTERN.test(email)
|
|
184
|
-
? `[${escapeMarkdownInline(email)}](${getMailtoLink(email)})`
|
|
185
|
-
: `<${email}>`;
|
|
186
|
-
}
|
|
187
|
-
if (reporterName && reporterEmail) {
|
|
188
|
-
return `Reported through ${form} by ${reporterName} (${reporterEmail}).`;
|
|
189
|
-
}
|
|
190
|
-
if (reporterName || reporterEmail) {
|
|
191
|
-
return `Reported through ${form} by ${reporterName || reporterEmail}.`;
|
|
192
|
-
}
|
|
193
|
-
return `Reported anonymously through ${form}.`;
|
|
194
|
-
};
|
|
195
|
-
/*
|
|
196
|
-
* Incident.title is a varchar(500), and breaking a chat sequence or image
|
|
197
|
-
* syntax in the title adds an invisible character (see
|
|
198
|
-
* neutralizeIncidentFormTitle), so a title of nearly 500 characters full of
|
|
199
|
-
* "<!" or "![" can outgrow it. Worded as the validator's own length refusal.
|
|
200
|
-
*/
|
|
201
|
-
export const INCIDENT_FORM_TITLE_TOO_LONG_MESSAGE = `${INCIDENT_FORM_QUESTION_LABELS.title} cannot be more than ${INCIDENT_FORM_TITLE_MAX_LENGTH} characters.`;
|
|
202
|
-
const KNOWN_CUSTOM_FIELD_TYPES = Object.values(CustomFieldType);
|
|
203
|
-
/*
|
|
204
|
-
* A reporter's title as the incident stores it - one definition, for the
|
|
205
|
-
* length check before anything is declared and for the report itself. It
|
|
206
|
-
* is plain text, but much of OneUptime places an incident's title into
|
|
207
|
-
* Markdown as it is: an episode grouped from the incident takes it as its
|
|
208
|
-
* title, and episode feed items, chat messages, summaries and note
|
|
209
|
-
* templates carry it on, rendered without the viewer's safe mode. So its
|
|
210
|
-
* chat control sequences, its image syntax and any mermaid fence in it are
|
|
211
|
-
* broken with an invisible character (neutralizeUntrustedPlainText) -
|
|
212
|
-
* wherever the title lands, it mentions nobody and fetches nothing - and it
|
|
213
|
-
* still reads exactly as typed, in an email subject and a text message too.
|
|
214
|
-
*/
|
|
215
|
-
const neutralizeIncidentFormTitle = (title) => {
|
|
216
|
-
return neutralizeUntrustedPlainText(title);
|
|
217
|
-
};
|
|
218
|
-
/**
|
|
219
|
-
* The validated answers as the incident stores them, with nothing left in
|
|
220
|
-
* them that acts on its own when shown (see UntrustedMarkdown): a
|
|
221
|
-
* stranger's report is posted to the project's Slack and Teams channels and
|
|
222
|
-
* rendered for every responder and in owners' emails, and nobody reads it
|
|
223
|
-
* over first.
|
|
224
|
-
*
|
|
225
|
-
* - The title (see neutralizeIncidentFormTitle): chat control sequences
|
|
226
|
-
* such as <!channel>, image syntax and mermaid fences are broken,
|
|
227
|
-
* invisibly.
|
|
228
|
-
* - Every Text or Long Text answer (and an answer to a field of a type this
|
|
229
|
-
* version does not know, which the form asks as text): chat control
|
|
230
|
-
* sequences are broken, invisibly.
|
|
231
|
-
* - The description and every Markdown answer: chat control sequences are
|
|
232
|
-
* broken, and images become links and mermaid diagrams code, so nothing
|
|
233
|
-
* is fetched or run.
|
|
234
|
-
* - Everything else - a dropdown option, a number, a date, a yes/no - was
|
|
235
|
-
* checked against its field and is left as it is.
|
|
236
|
-
*
|
|
237
|
-
* The reporter's name and address are left as validated: the submission
|
|
238
|
-
* record shows them as plain text, and the private note neutralises them
|
|
239
|
-
* where it places them (getIncidentFormReporterNote).
|
|
240
|
-
*/
|
|
241
|
-
export const neutralizeIncidentFormReport = (data) => {
|
|
242
|
-
/*
|
|
243
|
-
* The answers are copied key by key, defined rather than assigned, as
|
|
244
|
-
* the validator stores them: a field may be named "__proto__", and
|
|
245
|
-
* assigning that name (which a spread compiles to) would set the
|
|
246
|
-
* object's prototype instead of copying the answer.
|
|
247
|
-
*/
|
|
248
|
-
const customFields = {};
|
|
249
|
-
for (const [name, value] of Object.entries(data.answers.customFields)) {
|
|
250
|
-
Object.defineProperty(customFields, name, {
|
|
251
|
-
value: value,
|
|
252
|
-
enumerable: true,
|
|
253
|
-
writable: true,
|
|
254
|
-
configurable: true,
|
|
255
|
-
});
|
|
256
|
-
}
|
|
257
|
-
const report = Object.assign(Object.assign({}, data.answers), { title: neutralizeIncidentFormTitle(data.answers.title), customFields: customFields });
|
|
258
|
-
if (data.answers.description) {
|
|
259
|
-
report.description = neutralizeUntrustedMarkdown(data.answers.description);
|
|
260
|
-
}
|
|
261
|
-
for (const definition of data.askedDefinitions) {
|
|
262
|
-
const name = definition.name;
|
|
263
|
-
if (typeof name !== "string" ||
|
|
264
|
-
!Object.prototype.hasOwnProperty.call(report.customFields, name)) {
|
|
265
|
-
continue;
|
|
266
|
-
}
|
|
267
|
-
const value = report.customFields[name];
|
|
268
|
-
if (typeof value !== "string") {
|
|
269
|
-
continue;
|
|
270
|
-
}
|
|
271
|
-
const type = definition.customFieldType || "";
|
|
272
|
-
let neutralized = value;
|
|
273
|
-
if (type === CustomFieldType.Markdown) {
|
|
274
|
-
neutralized = neutralizeUntrustedMarkdown(value);
|
|
275
|
-
}
|
|
276
|
-
else if (type === CustomFieldType.Text ||
|
|
277
|
-
type === CustomFieldType.LongText ||
|
|
278
|
-
!KNOWN_CUSTOM_FIELD_TYPES.includes(type)) {
|
|
279
|
-
neutralized = neutralizeChatControlSequences(value);
|
|
280
|
-
}
|
|
281
|
-
Object.defineProperty(report.customFields, name, {
|
|
282
|
-
value: neutralized,
|
|
283
|
-
enumerable: true,
|
|
284
|
-
writable: true,
|
|
285
|
-
configurable: true,
|
|
286
|
-
});
|
|
287
|
-
}
|
|
288
|
-
return report;
|
|
289
|
-
};
|
|
290
|
-
export class Service extends DatabaseService {
|
|
291
|
-
constructor() {
|
|
292
|
-
super(Model);
|
|
293
|
-
}
|
|
294
|
-
async onBeforeCreate(createBy) {
|
|
295
|
-
/*
|
|
296
|
-
* Always a fresh key, whatever the request carried: a key the caller
|
|
297
|
-
* chose could be one somebody else already knows. The column is computed,
|
|
298
|
-
* so a key in the request is not refused - it is replaced.
|
|
299
|
-
*/
|
|
300
|
-
createBy.data.shareKey = ObjectID.generate();
|
|
301
|
-
if (!resolveReferenceId(createBy.data.incidentSeverityId) &&
|
|
302
|
-
!resolveReferenceId(createBy.data.incidentSeverity)) {
|
|
303
|
-
throw new BadDataException(INCIDENT_FORM_SEVERITY_REQUIRED_MESSAGE);
|
|
304
|
-
}
|
|
305
|
-
this.assertValidCustomFieldSettings(createBy.data.customFieldSettings);
|
|
306
|
-
this.assertValidIpAllowlist(createBy.data.ipWhitelist);
|
|
307
|
-
/*
|
|
308
|
-
* Null is the column's default on create (DatabaseService drops a null
|
|
309
|
-
* sent for a default-value column), so only a value is checked here.
|
|
310
|
-
*/
|
|
311
|
-
if (createBy.data.descriptionSetting !== undefined &&
|
|
312
|
-
createBy.data.descriptionSetting !== null) {
|
|
313
|
-
this.assertValidDescriptionSetting(createBy.data.descriptionSetting);
|
|
314
|
-
}
|
|
315
|
-
await ProjectScopedReferenceValidator.validateReferencesBelongToProject({
|
|
316
|
-
projectId: createBy.props.tenantId || createBy.data.projectId,
|
|
317
|
-
subject: "incident form",
|
|
318
|
-
references: this.getProjectScopedReferences(createBy.data),
|
|
319
|
-
});
|
|
320
|
-
return { createBy, carryForward: null };
|
|
321
|
-
}
|
|
322
|
-
async onBeforeUpdate(updateBy) {
|
|
323
|
-
const data = updateBy.data;
|
|
324
|
-
/*
|
|
325
|
-
* The severity column is nullable only so that deleting a severity
|
|
326
|
-
* leaves its forms behind; clearing it by hand would leave a form that
|
|
327
|
-
* refuses every submission.
|
|
328
|
-
*/
|
|
329
|
-
for (const column of ["incidentSeverityId", "incidentSeverity"]) {
|
|
330
|
-
if (Object.prototype.hasOwnProperty.call(data, column) &&
|
|
331
|
-
data[column] !== undefined &&
|
|
332
|
-
!resolveReferenceId(data[column])) {
|
|
333
|
-
throw new BadDataException(INCIDENT_FORM_SEVERITY_REQUIRED_MESSAGE);
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
if (data["customFieldSettings"] !== undefined) {
|
|
337
|
-
this.assertValidCustomFieldSettings(data["customFieldSettings"]);
|
|
338
|
-
}
|
|
339
|
-
if (data["ipWhitelist"] !== undefined) {
|
|
340
|
-
this.assertValidIpAllowlist(data["ipWhitelist"]);
|
|
341
|
-
}
|
|
342
|
-
// NOT NULL in the database, so null is refused here rather than there.
|
|
343
|
-
if (data["descriptionSetting"] !== undefined) {
|
|
344
|
-
this.assertValidDescriptionSetting(data["descriptionSetting"]);
|
|
345
|
-
}
|
|
346
|
-
if (data["shareKey"] !== undefined) {
|
|
347
|
-
this.assertValidShareKey(data["shareKey"]);
|
|
348
|
-
}
|
|
349
|
-
const references = this.getProjectScopedReferences(updateBy.data);
|
|
350
|
-
if (references.every((reference) => {
|
|
351
|
-
return !reference.id;
|
|
352
|
-
})) {
|
|
353
|
-
return { updateBy, carryForward: null };
|
|
354
|
-
}
|
|
355
|
-
/*
|
|
356
|
-
* Root/API updates do not always carry a tenantId, so fall back to the
|
|
357
|
-
* project of each form the query actually matches.
|
|
358
|
-
*/
|
|
359
|
-
const projectIds = updateBy.props.tenantId
|
|
360
|
-
? [updateBy.props.tenantId]
|
|
361
|
-
: await this.getProjectIdsForUpdateQuery(updateBy);
|
|
362
|
-
for (const projectId of projectIds) {
|
|
363
|
-
await ProjectScopedReferenceValidator.validateReferencesBelongToProject({
|
|
364
|
-
projectId: projectId,
|
|
365
|
-
subject: "incident form",
|
|
366
|
-
references: references,
|
|
367
|
-
});
|
|
368
|
-
}
|
|
369
|
-
return { updateBy, carryForward: null };
|
|
370
|
-
}
|
|
371
|
-
/**
|
|
372
|
-
* What the public page shows for the form a link names: its questions, in
|
|
373
|
-
* the safe subset getPublicIncidentForm builds field by field - never the
|
|
374
|
-
* form's id, project, template, link key or allowlist, never a custom
|
|
375
|
-
* field the form does not ask, and the project's severities only when the
|
|
376
|
-
* reporter may choose one.
|
|
377
|
-
*
|
|
378
|
-
* clientIp is the trusted client address (resolveClientIp), or undefined
|
|
379
|
-
* when there is none; a form with an IP allowlist refuses the latter.
|
|
380
|
-
*/
|
|
381
|
-
async getPublicForm(data) {
|
|
382
|
-
const form = await this.getFormForPublicRequest(data);
|
|
383
|
-
const [askedDefinitions, severities] = await Promise.all([
|
|
384
|
-
this.getAskedCustomFields(form),
|
|
385
|
-
this.getSeveritiesForReporter(form),
|
|
386
|
-
]);
|
|
387
|
-
return getPublicIncidentForm({
|
|
388
|
-
form: form,
|
|
389
|
-
askedDefinitions: askedDefinitions,
|
|
390
|
-
severities: severities,
|
|
391
|
-
isCaptchaRequired: CaptchaUtil.isCaptchaEnabled(),
|
|
392
|
-
});
|
|
393
|
-
}
|
|
394
|
-
/**
|
|
395
|
-
* Declares the incident a public submission reports, and tells the
|
|
396
|
-
* reporter its number.
|
|
397
|
-
*
|
|
398
|
-
* In order, each step refusing before the next one costs anything: the
|
|
399
|
-
* same checks as getPublicForm (link, form on, plan, network), then the
|
|
400
|
-
* instance captcha when it is on, then the answers against the form's
|
|
401
|
-
* questions (validateIncidentFormSubmission) and the length of the title
|
|
402
|
-
* as it will be stored, then the severity, and last the form's hourly
|
|
403
|
-
* ceiling (IncidentFormRateLimit.reserveFormSubmission), which only a
|
|
404
|
-
* submission that passed all of those may spend. Only then are the
|
|
405
|
-
* answers made safe to show (neutralizeIncidentFormReport) - the one step
|
|
406
|
-
* whose cost grows with the Markdown in them, and one that cannot refuse
|
|
407
|
-
* - and the incident created, as root, from them and the form's own
|
|
408
|
-
* settings. Nothing else in the request reaches it, least of all a
|
|
409
|
-
* project id: the incident goes to the form's project.
|
|
410
|
-
*
|
|
411
|
-
* Once the incident exists the reporter is told it was declared whatever
|
|
412
|
-
* happens next. The submission record and the private note are each
|
|
413
|
-
* attempted, and a failure is logged rather than turned into an error
|
|
414
|
-
* that would invite the reporter to send - and page on-call with - the
|
|
415
|
-
* same report again. (The template's owners go with the create itself:
|
|
416
|
-
* see declareIncident.)
|
|
417
|
-
*/
|
|
418
|
-
async submitPublicForm(data) {
|
|
419
|
-
var _a, _b, _c;
|
|
420
|
-
const form = await this.getFormForPublicRequest({
|
|
421
|
-
shareKey: data.shareKey,
|
|
422
|
-
clientIp: data.clientIp,
|
|
423
|
-
});
|
|
424
|
-
if (CaptchaUtil.isCaptchaEnabled()) {
|
|
425
|
-
await CaptchaUtil.verifyCaptcha({
|
|
426
|
-
token: (_a = data.request) === null || _a === void 0 ? void 0 : _a.captchaToken,
|
|
427
|
-
remoteIp: data.captchaRemoteIp || null,
|
|
428
|
-
});
|
|
429
|
-
}
|
|
430
|
-
const [askedDefinitions, severities] = await Promise.all([
|
|
431
|
-
this.getAskedCustomFields(form),
|
|
432
|
-
this.getSeveritiesForReporter(form),
|
|
433
|
-
]);
|
|
434
|
-
const validation = validateIncidentFormSubmission({
|
|
435
|
-
form: form,
|
|
436
|
-
askedDefinitions: askedDefinitions,
|
|
437
|
-
severities: severities,
|
|
438
|
-
data: (_b = data.request) === null || _b === void 0 ? void 0 : _b.data,
|
|
439
|
-
});
|
|
440
|
-
if (!validation.isValid) {
|
|
441
|
-
throw new BadDataException(formatIncidentFormSubmissionErrors(validation.errors));
|
|
442
|
-
}
|
|
443
|
-
const answers = validation.value;
|
|
444
|
-
// The title as it will be stored, which must still fit Incident.title.
|
|
445
|
-
if (neutralizeIncidentFormTitle(answers.title).length >
|
|
446
|
-
INCIDENT_FORM_TITLE_MAX_LENGTH) {
|
|
447
|
-
throw new BadDataException(INCIDENT_FORM_TITLE_TOO_LONG_MESSAGE);
|
|
448
|
-
}
|
|
449
|
-
const incidentSeverityId = await this.getSubmissionSeverityId({ form, answers });
|
|
450
|
-
/*
|
|
451
|
-
* Everything that can refuse this submission has passed, so only now
|
|
452
|
-
* does it count against the form's hourly ceiling - the bound on how
|
|
453
|
-
* many incidents, and pages, its link can cause. Counted any earlier, a
|
|
454
|
-
* request refused by the IP allowlist, the captcha or the answers would
|
|
455
|
-
* use up the allowance everybody shares. Fails closed (503) when the
|
|
456
|
-
* counter cannot be reached; over the ceiling it is a 429, which the
|
|
457
|
-
* route answers with Retry-After.
|
|
458
|
-
*/
|
|
459
|
-
await IncidentFormRateLimit.reserveFormSubmission({
|
|
460
|
-
shareKey: data.shareKey,
|
|
461
|
-
});
|
|
462
|
-
/*
|
|
463
|
-
* Only a submission about to declare an incident - which the ceiling
|
|
464
|
-
* above bounds - pays for reading its Markdown; one refused on the way
|
|
465
|
-
* here never does.
|
|
466
|
-
*/
|
|
467
|
-
const report = neutralizeIncidentFormReport({
|
|
468
|
-
answers: answers,
|
|
469
|
-
askedDefinitions: askedDefinitions,
|
|
470
|
-
});
|
|
471
|
-
const incident = await this.declareIncident({
|
|
472
|
-
form,
|
|
473
|
-
answers: report,
|
|
474
|
-
incidentSeverityId,
|
|
475
|
-
});
|
|
476
|
-
if (incident.id) {
|
|
477
|
-
await this.recordSubmission({ form, incidentId: incident.id, answers });
|
|
478
|
-
await this.addReporterNote({ form, incidentId: incident.id, answers });
|
|
479
|
-
}
|
|
480
|
-
else {
|
|
481
|
-
logger.error(`IncidentFormService: incident form ${(_c = form.id) === null || _c === void 0 ? void 0 : _c.toString()} declared an incident that came back without an id; its submission and note were not added.`, this.getLogAttributes(form));
|
|
482
|
-
}
|
|
483
|
-
const result = {};
|
|
484
|
-
const incidentNumber = incident.incidentNumberWithPrefix ||
|
|
485
|
-
(typeof incident.incidentNumber === "number"
|
|
486
|
-
? `#${incident.incidentNumber}`
|
|
487
|
-
: undefined);
|
|
488
|
-
if (incidentNumber) {
|
|
489
|
-
result.incidentNumber = incidentNumber;
|
|
490
|
-
}
|
|
491
|
-
if (form.successMessage && form.successMessage.trim().length > 0) {
|
|
492
|
-
result.successMessage = form.successMessage;
|
|
493
|
-
}
|
|
494
|
-
return result;
|
|
495
|
-
}
|
|
496
|
-
/*
|
|
497
|
-
* Whether the form's project is on a plan that includes incident forms.
|
|
498
|
-
*
|
|
499
|
-
* Checked by hand because the public routes read as root, and root never
|
|
500
|
-
* carries a plan, so none of the model's billing gate runs for them. This
|
|
501
|
-
* stands in for all of it (BillingPermission.checkBillingPermissions), not
|
|
502
|
-
* only @TableBillingAccessControl: a project whose subscription is unpaid
|
|
503
|
-
* is off plan too. The dashboard refuses every IncidentForm request of
|
|
504
|
-
* such a project - its admins cannot even turn a form off - so its link
|
|
505
|
-
* must not keep declaring incidents and paging on-call meanwhile.
|
|
506
|
-
*
|
|
507
|
-
* Fails closed: a project whose plan cannot be read (deleted mid-request,
|
|
508
|
-
* still onboarding) is treated as below plan - that costs one "not
|
|
509
|
-
* available" page, where failing open would let anyone with a link page
|
|
510
|
-
* on-call on a plan that does not include forms.
|
|
511
|
-
*/
|
|
512
|
-
async isProjectOnPlan(projectId) {
|
|
513
|
-
if (!IsBillingEnabled) {
|
|
514
|
-
return true;
|
|
515
|
-
}
|
|
516
|
-
try {
|
|
517
|
-
const current = await ProjectService.getCurrentPlan(projectId);
|
|
518
|
-
if (!current.plan || current.isSubscriptionUnpaid) {
|
|
519
|
-
return false;
|
|
520
|
-
}
|
|
521
|
-
return SubscriptionPlan.isFeatureAccessibleOnCurrentPlan(PlanType.Growth, current.plan, getAllEnvVars());
|
|
522
|
-
}
|
|
523
|
-
catch (err) {
|
|
524
|
-
logger.warn(`IncidentFormService: could not read the plan of project ${projectId.toString()}; treating it as below plan.`);
|
|
525
|
-
logger.warn(err);
|
|
526
|
-
return false;
|
|
527
|
-
}
|
|
528
|
-
}
|
|
529
|
-
/*
|
|
530
|
-
* Whether a form's IP allowlist lets this client address in: one IP
|
|
531
|
-
* address or CIDR range per line, as the dashboard's public IP allowlist.
|
|
532
|
-
* The same address resolution as the dashboard's too (resolveClientIp: the
|
|
533
|
-
* trusted end of X-Forwarded-For), so a caller cannot name their own
|
|
534
|
-
* address by sending the header.
|
|
535
|
-
*
|
|
536
|
-
* A list with no entries - empty, or only blank lines left behind by a
|
|
537
|
-
* textarea - lets anyone in, as the column's description promises. Once
|
|
538
|
-
* there is an entry, a request whose address cannot be established is
|
|
539
|
-
* refused, and so is one IP.isInWhitelist cannot read: this is an access
|
|
540
|
-
* decision, so every doubt is a no.
|
|
541
|
-
*
|
|
542
|
-
* An address is compared in its canonical spelling on both sides
|
|
543
|
-
* (IpCanonicalUtil): IP.isInWhitelist matches an IPv6 entry letter for
|
|
544
|
-
* letter, and "2001:DB8::1" or "2001:db8:0:0:0:0:0:1" written in the list
|
|
545
|
-
* is the very address the proxy reports as "2001:db8::1". Nothing is
|
|
546
|
-
* rewritten in the stored list, and ranges are left to the matcher.
|
|
547
|
-
*
|
|
548
|
-
* An IPv4 visitor is compared as its IPv4 address, whichever way it was
|
|
549
|
-
* reported, so the list's IPv4 entries and ranges match it:
|
|
550
|
-
* resolveClientIp unwraps the dotted IPv6 spelling ("::ffff:203.0.113.7")
|
|
551
|
-
* already, and one a proxy wrote in hex ("::ffff:cb00:7107") is read the
|
|
552
|
-
* same way here. The list itself cannot hold that spelling: it is refused
|
|
553
|
-
* when saved (validateIncidentFormIpAllowlist).
|
|
554
|
-
*/
|
|
555
|
-
isClientIpAllowed(data) {
|
|
556
|
-
const entries = getIncidentFormIpAllowlistEntries(data.ipWhitelist).map((entry) => {
|
|
557
|
-
return IP.isIP(entry) ? IpCanonicalUtil.canonicalize(entry) : entry;
|
|
558
|
-
});
|
|
559
|
-
if (entries.length === 0) {
|
|
560
|
-
return true;
|
|
561
|
-
}
|
|
562
|
-
if (!data.clientIp) {
|
|
563
|
-
return false;
|
|
564
|
-
}
|
|
565
|
-
const clientIp = IP.isIP(data.clientIp)
|
|
566
|
-
? getIpv4OfMappedAddress(data.clientIp) ||
|
|
567
|
-
IpCanonicalUtil.canonicalize(data.clientIp)
|
|
568
|
-
: data.clientIp;
|
|
569
|
-
try {
|
|
570
|
-
return IP.isInWhitelist({
|
|
571
|
-
ip: clientIp,
|
|
572
|
-
whitelist: entries,
|
|
573
|
-
});
|
|
574
|
-
}
|
|
575
|
-
catch (_a) {
|
|
576
|
-
return false;
|
|
577
|
-
}
|
|
578
|
-
}
|
|
579
|
-
/**
|
|
580
|
-
* Takes a deleted incident custom field off every form of its project:
|
|
581
|
-
* its key is removed from each form's questions (customFieldSettings).
|
|
582
|
-
* Returns how many forms asked it.
|
|
583
|
-
*
|
|
584
|
-
* Forms ask fields by template key, and a field created later with the
|
|
585
|
-
* same name gets the same key back (generateCustomFieldVariableKey) - as
|
|
586
|
-
* does any field whose name gives the same key. Left behind, the key
|
|
587
|
-
* would put that new field, with its own description and dropdown
|
|
588
|
-
* options, straight onto every public form that asked the deleted one,
|
|
589
|
-
* and no admin could clear it from the Questions card meanwhile: the card
|
|
590
|
-
* lists only fields that exist. A public form must never show a field an
|
|
591
|
-
* admin did not choose for it. Templates keep their settings on purpose -
|
|
592
|
-
* a field created again gets its template setting back - so only forms
|
|
593
|
-
* are touched here.
|
|
594
|
-
*
|
|
595
|
-
* One raw statement, as CustomFieldRename moves values: removing a
|
|
596
|
-
* reference to a deleted field changes no form an admin configured, so it
|
|
597
|
-
* must not start every form's "On Update" workflow, bump its version or
|
|
598
|
-
* move its updatedAt. The table and column names come from the entity
|
|
599
|
-
* metadata and every value is a bound parameter.
|
|
600
|
-
*/
|
|
601
|
-
async removeCustomFieldFromQuestions(data) {
|
|
602
|
-
var _a, _b;
|
|
603
|
-
const repository = this.getRepository();
|
|
604
|
-
const metadata = repository.metadata;
|
|
605
|
-
const settingsColumn = (_a = metadata.findColumnWithPropertyName("customFieldSettings")) === null || _a === void 0 ? void 0 : _a.databaseName;
|
|
606
|
-
const projectIdColumn = (_b = metadata.findColumnWithPropertyName("projectId")) === null || _b === void 0 ? void 0 : _b.databaseName;
|
|
607
|
-
if (!settingsColumn || !projectIdColumn) {
|
|
608
|
-
throw new ServerException(`Cannot remove a custom field from ${metadata.tableName}: it has no customFieldSettings or projectId column.`);
|
|
609
|
-
}
|
|
610
|
-
/*
|
|
611
|
-
* In a CTE so the statement answers with the rows it wrote. jsonb_typeof
|
|
612
|
-
* guards the operators: on a jsonb array "-" and jsonb_exists act on its
|
|
613
|
-
* string elements, and settings that are not an object hold no keys.
|
|
614
|
-
*/
|
|
615
|
-
const result = await repository.manager.query(`WITH "updated" AS (
|
|
616
|
-
UPDATE "${metadata.tableName}"
|
|
617
|
-
SET "${settingsColumn}" = "${settingsColumn}" - $2::text
|
|
618
|
-
WHERE "${projectIdColumn}" = $1
|
|
619
|
-
AND jsonb_typeof("${settingsColumn}") = 'object'
|
|
620
|
-
AND jsonb_exists("${settingsColumn}", $2::text)
|
|
621
|
-
RETURNING 1
|
|
622
|
-
) SELECT COUNT(*)::int AS "count" FROM "updated"`, [data.projectId.toString(), data.variableKey]);
|
|
623
|
-
const row = Array.isArray(result)
|
|
624
|
-
? result[0]
|
|
625
|
-
: undefined;
|
|
626
|
-
return Number(row === null || row === void 0 ? void 0 : row["count"]) || 0;
|
|
627
|
-
}
|
|
628
|
-
/*
|
|
629
|
-
* The form a public request names, once the request has passed every
|
|
630
|
-
* check that comes before learning anything about it. Checked in this
|
|
631
|
-
* order, each needing the one before: the link has a share key's shape
|
|
632
|
-
* (so junk never reaches Postgres), a form holds that key, the form is on,
|
|
633
|
-
* its project's plan includes forms, and the visitor's network is allowed.
|
|
634
|
-
*/
|
|
635
|
-
async getFormForPublicRequest(data) {
|
|
636
|
-
const shareKey = typeof data.shareKey === "string"
|
|
637
|
-
? data.shareKey.trim().toLowerCase()
|
|
638
|
-
: "";
|
|
639
|
-
if (!ObjectID.isValidUUID(shareKey)) {
|
|
640
|
-
throw new NotFoundException(INCIDENT_FORM_NOT_AVAILABLE_MESSAGE);
|
|
641
|
-
}
|
|
642
|
-
const form = await this.findOneBy({
|
|
643
|
-
query: {
|
|
644
|
-
shareKey: new ObjectID(shareKey),
|
|
645
|
-
},
|
|
646
|
-
select: {
|
|
647
|
-
_id: true,
|
|
648
|
-
projectId: true,
|
|
649
|
-
name: true,
|
|
650
|
-
description: true,
|
|
651
|
-
isEnabled: true,
|
|
652
|
-
incidentSeverityId: true,
|
|
653
|
-
allowReporterToChooseSeverity: true,
|
|
654
|
-
incidentTemplateId: true,
|
|
655
|
-
descriptionSetting: true,
|
|
656
|
-
customFieldSettings: true,
|
|
657
|
-
isReporterDetailsRequired: true,
|
|
658
|
-
successMessage: true,
|
|
659
|
-
ipWhitelist: true,
|
|
660
|
-
},
|
|
661
|
-
props: {
|
|
662
|
-
isRoot: true,
|
|
663
|
-
},
|
|
664
|
-
});
|
|
665
|
-
// Only a form that is switched on. A missing or null switch is off.
|
|
666
|
-
if (!form || !form.id || !form.projectId || form.isEnabled !== true) {
|
|
667
|
-
throw new NotFoundException(INCIDENT_FORM_NOT_AVAILABLE_MESSAGE);
|
|
668
|
-
}
|
|
669
|
-
if (!(await this.isProjectOnPlan(form.projectId))) {
|
|
670
|
-
throw new NotFoundException(INCIDENT_FORM_NOT_AVAILABLE_MESSAGE);
|
|
671
|
-
}
|
|
672
|
-
if (!this.isClientIpAllowed({
|
|
673
|
-
ipWhitelist: form.ipWhitelist,
|
|
674
|
-
clientIp: data.clientIp,
|
|
675
|
-
})) {
|
|
676
|
-
if (!data.clientIp) {
|
|
677
|
-
logger.error(`IncidentFormService: could not establish the client address of a request to incident form ${form.id.toString()}, which has an IP allowlist; refused.`, this.getLogAttributes(form));
|
|
678
|
-
}
|
|
679
|
-
throw new ForbiddenException(INCIDENT_FORM_NETWORK_NOT_ALLOWED_MESSAGE);
|
|
680
|
-
}
|
|
681
|
-
return form;
|
|
682
|
-
}
|
|
683
|
-
/*
|
|
684
|
-
* The custom fields the form asks, in the order to ask them, with each
|
|
685
|
-
* one's Required taken from the form (getIncidentFormAskedDefinitions).
|
|
686
|
-
* The same list serves the page and checks the answers, so a submission
|
|
687
|
-
* can only answer what the page showed. A form that asks no field does
|
|
688
|
-
* not read the project's fields at all.
|
|
689
|
-
*
|
|
690
|
-
* Less the fields the incident will copy from a monitor instead (see
|
|
691
|
-
* leaveOutInheritedFields).
|
|
692
|
-
*/
|
|
693
|
-
async getAskedCustomFields(form) {
|
|
694
|
-
const askedSettings = compactCustomFieldCreateSettings(form.customFieldSettings, {
|
|
695
|
-
dropHidden: true,
|
|
696
|
-
});
|
|
697
|
-
if (Object.keys(askedSettings).length === 0) {
|
|
698
|
-
return [];
|
|
699
|
-
}
|
|
700
|
-
const definitions = await IncidentCustomFieldService.findBy({
|
|
701
|
-
query: {
|
|
702
|
-
projectId: form.projectId,
|
|
703
|
-
},
|
|
704
|
-
select: {
|
|
705
|
-
name: true,
|
|
706
|
-
description: true,
|
|
707
|
-
customFieldType: true,
|
|
708
|
-
dropdownOptions: true,
|
|
709
|
-
variableKey: true,
|
|
710
|
-
sortOrder: true,
|
|
711
|
-
mapFromResourceType: true,
|
|
712
|
-
mapFromCustomFieldName: true,
|
|
713
|
-
},
|
|
714
|
-
limit: LIMIT_PER_PROJECT,
|
|
715
|
-
skip: 0,
|
|
716
|
-
/*
|
|
717
|
-
* The order the dashboard reads them in (fetchIncidentCustomFieldDefinitions):
|
|
718
|
-
* by Sort Order, and - because DatabaseService appends the primary
|
|
719
|
-
* key to every sort - by _id among fields that have none. The stable
|
|
720
|
-
* sortCustomFieldDefinitions below keeps that tie order, so fields
|
|
721
|
-
* without a sort order are asked in the order the form's Questions
|
|
722
|
-
* card lists them. With no sort, DatabaseService would read them
|
|
723
|
-
* newest first, and the reporter would get a different order than
|
|
724
|
-
* the admin set up.
|
|
725
|
-
*/
|
|
726
|
-
sort: {
|
|
727
|
-
sortOrder: SortOrder.Ascending,
|
|
728
|
-
},
|
|
729
|
-
props: {
|
|
730
|
-
isRoot: true,
|
|
731
|
-
},
|
|
732
|
-
});
|
|
733
|
-
return await this.leaveOutInheritedFields({
|
|
734
|
-
form: form,
|
|
735
|
-
askedDefinitions: getIncidentFormAskedDefinitions(definitions, form.customFieldSettings),
|
|
736
|
-
});
|
|
737
|
-
}
|
|
738
|
-
/*
|
|
739
|
-
* A field mapped from a monitor field takes the monitor's value when the
|
|
740
|
-
* incident has a monitor: IncidentService applies the mapping last on
|
|
741
|
-
* create, over whatever the reporter answered. So such a field is not
|
|
742
|
-
* asked once the incident will have a monitor - the rule the dashboard's
|
|
743
|
-
* Declare Incident form follows (isCustomFieldInheritedByRecord) - and an
|
|
744
|
-
* answer sent anyway is dropped as one to a question the form does not
|
|
745
|
-
* ask, rather than being required and then silently thrown away.
|
|
746
|
-
*
|
|
747
|
-
* A form's incident only gets monitors from the form's template, so the
|
|
748
|
-
* template is what decides, read per request (its monitors can change
|
|
749
|
-
* after the form's questions are set), and only when the form has one and
|
|
750
|
-
* asks a mapped field.
|
|
751
|
-
*/
|
|
752
|
-
async leaveOutInheritedFields(data) {
|
|
753
|
-
const definitionTableName = new IncidentCustomField().tableName || undefined;
|
|
754
|
-
const sources = [];
|
|
755
|
-
for (const definition of data.askedDefinitions) {
|
|
756
|
-
const source = getCustomFieldInheritanceSource({
|
|
757
|
-
definitionTableName: definitionTableName,
|
|
758
|
-
definition: definition,
|
|
759
|
-
});
|
|
760
|
-
if (source && !sources.includes(source)) {
|
|
761
|
-
sources.push(source);
|
|
762
|
-
}
|
|
763
|
-
}
|
|
764
|
-
if (sources.length === 0 || !data.form.incidentTemplateId) {
|
|
765
|
-
return data.askedDefinitions;
|
|
766
|
-
}
|
|
767
|
-
/*
|
|
768
|
-
* The template's own relations stand for the incident's: the template
|
|
769
|
-
* branch copies them onto it. A relation the template does not have
|
|
770
|
-
* cannot reach the incident.
|
|
771
|
-
*/
|
|
772
|
-
const template = new IncidentTemplate();
|
|
773
|
-
const select = {};
|
|
774
|
-
for (const source of sources) {
|
|
775
|
-
if (template.hasColumn(source.targetRelationProperty)) {
|
|
776
|
-
Object.assign(select, getCustomFieldMappingRelationSelect(source));
|
|
777
|
-
}
|
|
778
|
-
}
|
|
779
|
-
if (Object.keys(select).length === 0) {
|
|
780
|
-
return data.askedDefinitions;
|
|
781
|
-
}
|
|
782
|
-
const stored = await IncidentTemplateService.findOneBy({
|
|
783
|
-
query: {
|
|
784
|
-
_id: data.form.incidentTemplateId.toString(),
|
|
785
|
-
projectId: data.form.projectId,
|
|
786
|
-
},
|
|
787
|
-
select: select,
|
|
788
|
-
props: {
|
|
789
|
-
isRoot: true,
|
|
790
|
-
},
|
|
791
|
-
});
|
|
792
|
-
if (!stored) {
|
|
793
|
-
return data.askedDefinitions;
|
|
794
|
-
}
|
|
795
|
-
return data.askedDefinitions.filter((definition) => {
|
|
796
|
-
return !isCustomFieldInheritedByRecord({
|
|
797
|
-
definitionTableName: definitionTableName,
|
|
798
|
-
definition: definition,
|
|
799
|
-
record: stored,
|
|
800
|
-
});
|
|
801
|
-
});
|
|
802
|
-
}
|
|
803
|
-
/*
|
|
804
|
-
* The project's severities, in their own order, for a form that lets the
|
|
805
|
-
* reporter choose one; none otherwise, since nothing would use them. Both
|
|
806
|
-
* what the page lists and what a submission's choice is checked against.
|
|
807
|
-
*/
|
|
808
|
-
async getSeveritiesForReporter(form) {
|
|
809
|
-
if (form.allowReporterToChooseSeverity !== true) {
|
|
810
|
-
return [];
|
|
811
|
-
}
|
|
812
|
-
const severities = await IncidentSeverityService.findBy({
|
|
813
|
-
query: {
|
|
814
|
-
projectId: form.projectId,
|
|
815
|
-
},
|
|
816
|
-
select: {
|
|
817
|
-
_id: true,
|
|
818
|
-
name: true,
|
|
819
|
-
color: true,
|
|
820
|
-
order: true,
|
|
821
|
-
},
|
|
822
|
-
sort: {
|
|
823
|
-
order: SortOrder.Ascending,
|
|
824
|
-
},
|
|
825
|
-
limit: LIMIT_PER_PROJECT,
|
|
826
|
-
skip: 0,
|
|
827
|
-
props: {
|
|
828
|
-
isRoot: true,
|
|
829
|
-
},
|
|
830
|
-
});
|
|
831
|
-
const listed = [];
|
|
832
|
-
for (const severity of severities) {
|
|
833
|
-
if (!severity.id) {
|
|
834
|
-
continue;
|
|
835
|
-
}
|
|
836
|
-
const entry = {
|
|
837
|
-
_id: severity.id.toString(),
|
|
838
|
-
name: severity.name || "",
|
|
839
|
-
};
|
|
840
|
-
if (severity.color) {
|
|
841
|
-
entry.color = severity.color.toString();
|
|
842
|
-
}
|
|
843
|
-
listed.push(entry);
|
|
844
|
-
}
|
|
845
|
-
return listed;
|
|
846
|
-
}
|
|
847
|
-
/*
|
|
848
|
-
* The severity to declare the incident with: the reporter's choice when
|
|
849
|
-
* the form offers one and they made it (validateIncidentFormSubmission has
|
|
850
|
-
* already checked it is one of the project's), otherwise the form's own.
|
|
851
|
-
*
|
|
852
|
-
* A form's severity is required, but deleting that severity clears it, so
|
|
853
|
-
* a form can be left without one. Then its template's severity applies -
|
|
854
|
-
* returned as "none" so IncidentService's template branch fills it in -
|
|
855
|
-
* and with no template severity either the submission is refused here,
|
|
856
|
-
* with a message the reporter can pass on, rather than failing inside the
|
|
857
|
-
* create as a missing required column.
|
|
858
|
-
*/
|
|
859
|
-
async getSubmissionSeverityId(data) {
|
|
860
|
-
if (data.answers.incidentSeverityId) {
|
|
861
|
-
return new ObjectID(data.answers.incidentSeverityId);
|
|
862
|
-
}
|
|
863
|
-
if (data.form.incidentSeverityId) {
|
|
864
|
-
return data.form.incidentSeverityId;
|
|
865
|
-
}
|
|
866
|
-
if (data.form.incidentTemplateId) {
|
|
867
|
-
const template = await IncidentTemplateService.findOneBy({
|
|
868
|
-
query: {
|
|
869
|
-
_id: data.form.incidentTemplateId.toString(),
|
|
870
|
-
projectId: data.form.projectId,
|
|
871
|
-
},
|
|
872
|
-
select: {
|
|
873
|
-
incidentSeverityId: true,
|
|
874
|
-
},
|
|
875
|
-
props: {
|
|
876
|
-
isRoot: true,
|
|
877
|
-
},
|
|
878
|
-
});
|
|
879
|
-
if (template === null || template === void 0 ? void 0 : template.incidentSeverityId) {
|
|
880
|
-
return undefined;
|
|
881
|
-
}
|
|
882
|
-
}
|
|
883
|
-
throw new BadDataException(INCIDENT_FORM_NO_SEVERITY_MESSAGE);
|
|
884
|
-
}
|
|
885
|
-
/*
|
|
886
|
-
* Creates the incident, as root, in the form's project.
|
|
887
|
-
*
|
|
888
|
-
* With a template, createdIncidentTemplateId hands the rest to
|
|
889
|
-
* IncidentService's template branch: the initial state, the severity when
|
|
890
|
-
* none is set here, the description when the reporter wrote none, the
|
|
891
|
-
* monitors, services, labels, on-call policies and status pages, and the
|
|
892
|
-
* template's custom field values under the reporter's answers. That branch
|
|
893
|
-
* only runs when no state is given, so currentIncidentStateId is never set
|
|
894
|
-
* here; and it only fills in what is undefined, so an unanswered
|
|
895
|
-
* description is left out rather than sent empty.
|
|
896
|
-
*
|
|
897
|
-
* The incident starts off every status page and without notifying their
|
|
898
|
-
* subscribers, whatever the template says: a stranger's report is for the
|
|
899
|
-
* responders to triage before anything about it is published. It is not
|
|
900
|
-
* private, and has no creating user - nobody signed in to send it.
|
|
901
|
-
*
|
|
902
|
-
* The template's owners are handed over with the create, not added once
|
|
903
|
-
* it returns: IncidentService adds them after the incident's Slack and
|
|
904
|
-
* Microsoft Teams channels exist, so their own hooks invite them to those
|
|
905
|
-
* channels (added any earlier, they would find no channel to join, and
|
|
906
|
-
* nothing invites an existing owner later). notifyOwners asks for them to
|
|
907
|
-
* be notified - they are the people a report through this form is meant
|
|
908
|
-
* to reach - and IncidentService holds the incident's "Incident Created"
|
|
909
|
-
* notification until they are its owners, so that it reaches them rather
|
|
910
|
-
* than the project's owners.
|
|
911
|
-
*/
|
|
912
|
-
async declareIncident(data) {
|
|
913
|
-
var _a;
|
|
914
|
-
const owners = await this.getTemplateOwners(data.form);
|
|
915
|
-
const miscDataProps = {};
|
|
916
|
-
if (owners.userIds.length > 0) {
|
|
917
|
-
miscDataProps["ownerUsers"] = owners.userIds;
|
|
918
|
-
}
|
|
919
|
-
if (owners.teamIds.length > 0) {
|
|
920
|
-
miscDataProps["ownerTeams"] = owners.teamIds;
|
|
921
|
-
}
|
|
922
|
-
if (Object.keys(miscDataProps).length > 0) {
|
|
923
|
-
miscDataProps["notifyOwners"] = true;
|
|
924
|
-
}
|
|
925
|
-
const incident = new Incident();
|
|
926
|
-
incident.projectId = data.form.projectId;
|
|
927
|
-
incident.title = data.answers.title;
|
|
928
|
-
if (data.answers.description) {
|
|
929
|
-
incident.description = data.answers.description;
|
|
930
|
-
}
|
|
931
|
-
if (data.incidentSeverityId) {
|
|
932
|
-
incident.incidentSeverityId = data.incidentSeverityId;
|
|
933
|
-
}
|
|
934
|
-
if (data.form.incidentTemplateId) {
|
|
935
|
-
incident.createdIncidentTemplateId =
|
|
936
|
-
data.form.incidentTemplateId.toString();
|
|
937
|
-
}
|
|
938
|
-
incident.customFields = data.answers.customFields;
|
|
939
|
-
incident.isVisibleOnStatusPage = false;
|
|
940
|
-
incident.shouldStatusPageSubscribersBeNotifiedOnIncidentCreated = false;
|
|
941
|
-
const createBy = {
|
|
942
|
-
data: incident,
|
|
943
|
-
props: {
|
|
944
|
-
isRoot: true,
|
|
945
|
-
},
|
|
946
|
-
};
|
|
947
|
-
if (Object.keys(miscDataProps).length > 0) {
|
|
948
|
-
createBy.miscDataProps = miscDataProps;
|
|
949
|
-
}
|
|
950
|
-
try {
|
|
951
|
-
return await IncidentService.create(createBy);
|
|
952
|
-
}
|
|
953
|
-
catch (err) {
|
|
954
|
-
logger.error(`IncidentFormService: incident form ${(_a = data.form.id) === null || _a === void 0 ? void 0 : _a.toString()} could not declare an incident.`, this.getLogAttributes(data.form));
|
|
955
|
-
logger.error(err, this.getLogAttributes(data.form));
|
|
956
|
-
throw new ServerException(INCIDENT_FORM_SUBMIT_FAILED_MESSAGE);
|
|
957
|
-
}
|
|
958
|
-
}
|
|
959
|
-
/*
|
|
960
|
-
* The owners of the form's template, which become the incident's: none
|
|
961
|
-
* when the form has no template, or its template no owners. A failure to
|
|
962
|
-
* read them is logged, and the incident is declared without them - the
|
|
963
|
-
* report still reaches on-call through the template's policies and the
|
|
964
|
-
* project's rules.
|
|
965
|
-
*/
|
|
966
|
-
async getTemplateOwners(form) {
|
|
967
|
-
var _a;
|
|
968
|
-
const owners = { userIds: [], teamIds: [] };
|
|
969
|
-
if (!form.incidentTemplateId) {
|
|
970
|
-
return owners;
|
|
971
|
-
}
|
|
972
|
-
try {
|
|
973
|
-
const query = {
|
|
974
|
-
incidentTemplateId: form.incidentTemplateId,
|
|
975
|
-
projectId: form.projectId,
|
|
976
|
-
};
|
|
977
|
-
const [ownerUsers, ownerTeams] = await Promise.all([
|
|
978
|
-
IncidentTemplateOwnerUserService.findBy({
|
|
979
|
-
query: query,
|
|
980
|
-
select: {
|
|
981
|
-
userId: true,
|
|
982
|
-
},
|
|
983
|
-
limit: LIMIT_PER_PROJECT,
|
|
984
|
-
skip: 0,
|
|
985
|
-
props: {
|
|
986
|
-
isRoot: true,
|
|
987
|
-
},
|
|
988
|
-
}),
|
|
989
|
-
IncidentTemplateOwnerTeamService.findBy({
|
|
990
|
-
query: query,
|
|
991
|
-
select: {
|
|
992
|
-
teamId: true,
|
|
993
|
-
},
|
|
994
|
-
limit: LIMIT_PER_PROJECT,
|
|
995
|
-
skip: 0,
|
|
996
|
-
props: {
|
|
997
|
-
isRoot: true,
|
|
998
|
-
},
|
|
999
|
-
}),
|
|
1000
|
-
]);
|
|
1001
|
-
for (const owner of ownerUsers) {
|
|
1002
|
-
if (owner.userId) {
|
|
1003
|
-
owners.userIds.push(owner.userId);
|
|
1004
|
-
}
|
|
1005
|
-
}
|
|
1006
|
-
for (const owner of ownerTeams) {
|
|
1007
|
-
if (owner.teamId) {
|
|
1008
|
-
owners.teamIds.push(owner.teamId);
|
|
1009
|
-
}
|
|
1010
|
-
}
|
|
1011
|
-
}
|
|
1012
|
-
catch (err) {
|
|
1013
|
-
logger.error(`IncidentFormService: could not read the owners of the template of incident form ${(_a = form.id) === null || _a === void 0 ? void 0 : _a.toString()}; the incident is declared without them.`, this.getLogAttributes(form));
|
|
1014
|
-
logger.error(err, this.getLogAttributes(form));
|
|
1015
|
-
return { userIds: [], teamIds: [] };
|
|
1016
|
-
}
|
|
1017
|
-
return owners;
|
|
1018
|
-
}
|
|
1019
|
-
// The record the dashboard lists under the form's Submissions.
|
|
1020
|
-
async recordSubmission(data) {
|
|
1021
|
-
try {
|
|
1022
|
-
const submission = new IncidentFormSubmission();
|
|
1023
|
-
submission.projectId = data.form.projectId;
|
|
1024
|
-
submission.incidentFormId = data.form.id;
|
|
1025
|
-
submission.incidentId = data.incidentId;
|
|
1026
|
-
if (data.answers.reporterName) {
|
|
1027
|
-
submission.reporterName = data.answers.reporterName;
|
|
1028
|
-
}
|
|
1029
|
-
if (data.answers.reporterEmail) {
|
|
1030
|
-
submission.reporterEmail = new Email(data.answers.reporterEmail);
|
|
1031
|
-
}
|
|
1032
|
-
await IncidentFormSubmissionService.create({
|
|
1033
|
-
data: submission,
|
|
1034
|
-
props: {
|
|
1035
|
-
isRoot: true,
|
|
1036
|
-
},
|
|
1037
|
-
});
|
|
1038
|
-
}
|
|
1039
|
-
catch (err) {
|
|
1040
|
-
this.logFailureAfterIncident({
|
|
1041
|
-
form: data.form,
|
|
1042
|
-
incidentId: data.incidentId,
|
|
1043
|
-
step: "record the submission for",
|
|
1044
|
-
error: err,
|
|
1045
|
-
});
|
|
1046
|
-
}
|
|
1047
|
-
}
|
|
1048
|
-
// Who reported the incident, where only the responders can read it.
|
|
1049
|
-
async addReporterNote(data) {
|
|
1050
|
-
try {
|
|
1051
|
-
const note = new IncidentInternalNote();
|
|
1052
|
-
note.projectId = data.form.projectId;
|
|
1053
|
-
note.incidentId = data.incidentId;
|
|
1054
|
-
note.note = getIncidentFormReporterNote({
|
|
1055
|
-
formName: data.form.name,
|
|
1056
|
-
reporterName: data.answers.reporterName,
|
|
1057
|
-
reporterEmail: data.answers.reporterEmail,
|
|
1058
|
-
});
|
|
1059
|
-
await IncidentInternalNoteService.create({
|
|
1060
|
-
data: note,
|
|
1061
|
-
props: {
|
|
1062
|
-
isRoot: true,
|
|
1063
|
-
},
|
|
1064
|
-
});
|
|
1065
|
-
}
|
|
1066
|
-
catch (err) {
|
|
1067
|
-
this.logFailureAfterIncident({
|
|
1068
|
-
form: data.form,
|
|
1069
|
-
incidentId: data.incidentId,
|
|
1070
|
-
step: "add the reporter's private note to",
|
|
1071
|
-
error: err,
|
|
1072
|
-
});
|
|
1073
|
-
}
|
|
1074
|
-
}
|
|
1075
|
-
logFailureAfterIncident(data) {
|
|
1076
|
-
var _a;
|
|
1077
|
-
const attributes = Object.assign(Object.assign({}, this.getLogAttributes(data.form)), { incidentId: data.incidentId.toString() });
|
|
1078
|
-
logger.error(`IncidentFormService: could not ${data.step} incident ${data.incidentId.toString()}, declared through incident form ${(_a = data.form.id) === null || _a === void 0 ? void 0 : _a.toString()}. The incident stands.`, attributes);
|
|
1079
|
-
logger.error(data.error, attributes);
|
|
1080
|
-
}
|
|
1081
|
-
getLogAttributes(form) {
|
|
1082
|
-
var _a, _b;
|
|
1083
|
-
return {
|
|
1084
|
-
projectId: (_a = form.projectId) === null || _a === void 0 ? void 0 : _a.toString(),
|
|
1085
|
-
incidentFormId: (_b = form.id) === null || _b === void 0 ? void 0 : _b.toString(),
|
|
1086
|
-
};
|
|
1087
|
-
}
|
|
1088
|
-
/*
|
|
1089
|
-
* The public page asks exactly the fields these settings name, and the
|
|
1090
|
-
* submit route checks the answers against them, so a value they would
|
|
1091
|
-
* read as "nothing asked" must not be stored by mistake. Stored exactly as
|
|
1092
|
-
* sent when valid (see validateCustomFieldCreateSettings).
|
|
1093
|
-
*/
|
|
1094
|
-
assertValidCustomFieldSettings(value) {
|
|
1095
|
-
const problem = validateCustomFieldCreateSettings(value);
|
|
1096
|
-
if (problem) {
|
|
1097
|
-
throw new BadDataException(problem);
|
|
1098
|
-
}
|
|
1099
|
-
}
|
|
1100
|
-
/*
|
|
1101
|
-
* Every line an entry the public routes can match (see
|
|
1102
|
-
* IncidentFormIpAllowlist): an entry that can never match would lock every
|
|
1103
|
-
* reporter on that network out, silently. Refused, never rewritten.
|
|
1104
|
-
*/
|
|
1105
|
-
assertValidIpAllowlist(value) {
|
|
1106
|
-
const problem = validateIncidentFormIpAllowlist(value);
|
|
1107
|
-
if (problem) {
|
|
1108
|
-
throw new BadDataException(problem);
|
|
1109
|
-
}
|
|
1110
|
-
}
|
|
1111
|
-
assertValidDescriptionSetting(value) {
|
|
1112
|
-
if (!isIncidentFormFieldSetting(value)) {
|
|
1113
|
-
throw new BadDataException(INCIDENT_FORM_DESCRIPTION_SETTING_MESSAGE);
|
|
1114
|
-
}
|
|
1115
|
-
}
|
|
1116
|
-
/*
|
|
1117
|
-
* Form editors may replace the key - the dashboard's Reset Link sends a
|
|
1118
|
-
* freshly generated UUID - but the column is a uuid, so anything else
|
|
1119
|
-
* would fail inside Postgres, and null would leave a form with no link.
|
|
1120
|
-
*/
|
|
1121
|
-
assertValidShareKey(value) {
|
|
1122
|
-
const key = value instanceof ObjectID || typeof value === "string"
|
|
1123
|
-
? value.toString()
|
|
1124
|
-
: "";
|
|
1125
|
-
if (!ObjectID.isValidUUID(key)) {
|
|
1126
|
-
throw new BadDataException(INCIDENT_FORM_SHARE_KEY_MESSAGE);
|
|
1127
|
-
}
|
|
1128
|
-
}
|
|
1129
|
-
/*
|
|
1130
|
-
* Built per call rather than at module load: these services sit in an
|
|
1131
|
-
* import graph that loops back to this one, and a module-level table would
|
|
1132
|
-
* capture whichever of them had not finished loading yet as undefined.
|
|
1133
|
-
*/
|
|
1134
|
-
getProjectScopedReferences(data) {
|
|
1135
|
-
return [
|
|
1136
|
-
{
|
|
1137
|
-
modelName: "Incident Severity",
|
|
1138
|
-
id: resolveReferenceId(data.incidentSeverityId) ||
|
|
1139
|
-
resolveReferenceId(data.incidentSeverity),
|
|
1140
|
-
service: IncidentSeverityService,
|
|
1141
|
-
},
|
|
1142
|
-
{
|
|
1143
|
-
modelName: "Incident Template",
|
|
1144
|
-
id: resolveReferenceId(data.incidentTemplateId) ||
|
|
1145
|
-
resolveReferenceId(data.incidentTemplate),
|
|
1146
|
-
service: IncidentTemplateService,
|
|
1147
|
-
},
|
|
1148
|
-
];
|
|
1149
|
-
}
|
|
1150
|
-
async getProjectIdsForUpdateQuery(updateBy) {
|
|
1151
|
-
const forms = await this.findBy({
|
|
1152
|
-
query: updateBy.query,
|
|
1153
|
-
select: {
|
|
1154
|
-
projectId: true,
|
|
1155
|
-
},
|
|
1156
|
-
limit: LIMIT_MAX,
|
|
1157
|
-
skip: 0,
|
|
1158
|
-
props: {
|
|
1159
|
-
isRoot: true,
|
|
1160
|
-
},
|
|
1161
|
-
});
|
|
1162
|
-
const projectIds = {};
|
|
1163
|
-
for (const form of forms) {
|
|
1164
|
-
if (form.projectId) {
|
|
1165
|
-
projectIds[form.projectId.toString()] = form.projectId;
|
|
1166
|
-
}
|
|
1167
|
-
}
|
|
1168
|
-
return Object.values(projectIds);
|
|
1169
|
-
}
|
|
1170
|
-
}
|
|
1171
|
-
__decorate([
|
|
1172
|
-
CaptureSpan(),
|
|
1173
|
-
__metadata("design:type", Function),
|
|
1174
|
-
__metadata("design:paramtypes", [Object]),
|
|
1175
|
-
__metadata("design:returntype", Promise)
|
|
1176
|
-
], Service.prototype, "onBeforeCreate", null);
|
|
1177
|
-
__decorate([
|
|
1178
|
-
CaptureSpan(),
|
|
1179
|
-
__metadata("design:type", Function),
|
|
1180
|
-
__metadata("design:paramtypes", [Object]),
|
|
1181
|
-
__metadata("design:returntype", Promise)
|
|
1182
|
-
], Service.prototype, "onBeforeUpdate", null);
|
|
1183
|
-
__decorate([
|
|
1184
|
-
CaptureSpan(),
|
|
1185
|
-
__metadata("design:type", Function),
|
|
1186
|
-
__metadata("design:paramtypes", [Object]),
|
|
1187
|
-
__metadata("design:returntype", Promise)
|
|
1188
|
-
], Service.prototype, "getPublicForm", null);
|
|
1189
|
-
__decorate([
|
|
1190
|
-
CaptureSpan(),
|
|
1191
|
-
__metadata("design:type", Function),
|
|
1192
|
-
__metadata("design:paramtypes", [Object]),
|
|
1193
|
-
__metadata("design:returntype", Promise)
|
|
1194
|
-
], Service.prototype, "submitPublicForm", null);
|
|
1195
|
-
__decorate([
|
|
1196
|
-
CaptureSpan(),
|
|
1197
|
-
__metadata("design:type", Function),
|
|
1198
|
-
__metadata("design:paramtypes", [ObjectID]),
|
|
1199
|
-
__metadata("design:returntype", Promise)
|
|
1200
|
-
], Service.prototype, "isProjectOnPlan", null);
|
|
1201
|
-
export default new Service();
|
|
1202
|
-
//# sourceMappingURL=IncidentFormService.js.map
|