@oneuptime/common 12.0.12 → 12.0.14
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/DatabaseBaseModel/DatabaseBaseModel.ts +32 -5
- package/Models/DatabaseModels/NetworkDevice.ts +64 -0
- package/Models/DatabaseModels/OnCallDutyPolicySchedule.ts +14 -0
- package/Models/DatabaseModels/StatusPage.ts +59 -0
- package/Models/DatabaseModels/StatusPageOidc.ts +2 -0
- package/Models/DatabaseModels/UserCall.ts +94 -3
- package/Models/DatabaseModels/UserEmail.ts +94 -3
- package/Models/DatabaseModels/UserIncomingCallNumber.ts +94 -3
- package/Models/DatabaseModels/UserPush.ts +37 -0
- package/Models/DatabaseModels/UserSMS.ts +94 -3
- package/Models/DatabaseModels/UserWhatsApp.ts +93 -2
- package/Models/DatabaseModels/WorkspaceProjectAuthToken.ts +19 -2
- package/Server/API/AIChatAPI.ts +55 -56
- package/Server/API/BaseAPI.ts +79 -14
- package/Server/API/CommonAPI.ts +89 -0
- package/Server/API/MicrosoftTeamsAPI.ts +20 -9
- package/Server/API/SlackAPI.ts +13 -10
- package/Server/API/StatusPageAPI.ts +2197 -2128
- package/Server/API/TelemetryAPI.ts +72 -3
- package/Server/API/UserCallAPI.ts +53 -45
- package/Server/API/UserEmailAPI.ts +53 -44
- package/Server/API/UserIncomingCallNumberAPI.ts +48 -38
- package/Server/API/UserNotificationMethodAdminAPI.ts +481 -0
- package/Server/API/UserPushAPI.ts +126 -2
- package/Server/API/UserSmsAPI.ts +53 -44
- package/Server/API/UserWhatsAppAPI.ts +53 -50
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787142779538-MigrationName.ts +154 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787156982416-MigrationName.ts +17 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787500000000-AddEnableSearchEngineIndexingToStatusPage.ts +30 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787600000000-AddNetworkDeviceReachabilityColumns.ts +47 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787700000000-FixTotpOtpUrlAlgorithm.ts +45 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +10 -0
- package/Server/Middleware/UserAuthorization.ts +11 -2
- package/Server/Middleware/VerificationCodeRateLimit.ts +586 -0
- package/Server/Services/AnalyticsDatabaseService.ts +169 -0
- package/Server/Services/ApiKeyPermissionService.ts +116 -2
- package/Server/Services/DatabaseService.ts +118 -6
- package/Server/Services/LogAggregationService.ts +39 -0
- package/Server/Services/LogService.ts +21 -0
- package/Server/Services/NetworkSiteService.ts +12 -0
- package/Server/Services/PushNotificationService.ts +127 -12
- package/Server/Services/SpanService.ts +21 -0
- package/Server/Services/TeamMemberService.ts +53 -13
- package/Server/Services/TraceAggregationService.ts +15 -0
- package/Server/Services/UserCallService.ts +55 -24
- package/Server/Services/UserEmailService.ts +83 -17
- package/Server/Services/UserIncomingCallNumberService.ts +49 -85
- package/Server/Services/UserNotificationMethodAdminService.ts +1527 -0
- package/Server/Services/UserNotificationRuleService.ts +26 -0
- package/Server/Services/UserPushService.ts +89 -0
- package/Server/Services/UserSmsService.ts +50 -17
- package/Server/Services/UserWhatsAppService.ts +48 -15
- package/Server/Services/WorkspaceNotificationRuleService.ts +172 -220
- package/Server/Types/AnalyticsDatabase/ModelPermission.ts +9 -0
- package/Server/Types/Database/Permissions/AccessControlPermission.ts +47 -16
- package/Server/Types/Database/QueryHelper.ts +30 -0
- package/Server/Utils/APIKey/AccessPermission.ts +16 -40
- package/Server/Utils/AnalyticsDatabase/QuerySettingsHelper.ts +59 -0
- package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +144 -0
- package/Server/Utils/ChannelVerification.ts +510 -0
- package/Server/Utils/LogRedaction.ts +576 -0
- package/Server/Utils/Logger.ts +123 -46
- package/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.ts +13 -16
- package/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.ts +94 -23
- package/Server/Utils/Monitor/MonitorAlert.ts +24 -21
- package/Server/Utils/Monitor/MonitorIncident.ts +21 -18
- package/Server/Utils/Monitor/MonitorResource.ts +29 -9
- package/Server/Utils/Monitor/MonitorResourceContext.ts +107 -0
- package/Server/Utils/Monitor/MonitorStepResourceIdentity.ts +442 -0
- package/Server/Utils/Monitor/NetworkInventoryUtil.ts +28 -7
- package/Server/Utils/Monitor/SeriesResourceLabels.ts +3 -3
- package/Server/Utils/Monitor/SeriesResourceLinker.ts +96 -28
- package/Server/Utils/SessionReplay/SessionReplayGateCacheStore.ts +56 -10
- package/Server/Utils/StartServer.ts +30 -9
- package/Server/Utils/StatusPageSearchEngineIndexing.ts +33 -0
- package/Server/Utils/Telemetry/ResourceEntityFilter.ts +441 -0
- package/Server/Utils/TotpAuth.ts +137 -9
- package/Server/Utils/UserRegistrationToken.ts +182 -0
- package/Server/Utils/VerificationCode.ts +134 -0
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +488 -46
- package/Tests/App/Dashboard/AdminNotificationRulesPage.test.tsx +173 -94
- package/Tests/App/Dashboard/AdminUserNotificationMethodsPage.test.tsx +1151 -0
- package/Tests/App/Dashboard/AdminUserOnCallPages.test.tsx +905 -0
- package/Tests/App/Dashboard/DashboardCommandPalette.test.tsx +338 -0
- package/Tests/App/Dashboard/InvestigationPanel.test.tsx +1 -1
- package/Tests/App/Dashboard/MonitorTypePicker.test.tsx +328 -0
- package/Tests/App/StatusPage/StatusPageIndexPageRobotsMeta.test.ts +130 -0
- package/Tests/Models/DatabaseModels/DatabaseBaseModelToJSONObjectCache.test.ts +180 -0
- package/Tests/Models/StatusPageEnableSearchEngineIndexing.test.ts +157 -0
- package/Tests/Models/UserPushCriticalAlertColumn.test.ts +172 -0
- package/Tests/Server/API/AIChatCancelAndFeedback.test.ts +23 -1
- package/Tests/Server/API/AIChatRouteAuthorization.test.ts +785 -0
- package/Tests/Server/API/BaseAPIApiKeyAuth.test.ts +21 -8
- package/Tests/Server/API/BaseAPIGetListParallel.test.ts +519 -0
- package/Tests/Server/API/CommonAPIAuthGuard.test.ts +290 -0
- package/Tests/Server/API/MicrosoftTeamsManifest.test.ts +7 -1
- package/Tests/Server/API/NotificationChannelVerificationAPI.test.ts +543 -0
- package/Tests/Server/API/StatusPageOverviewCache.test.ts +474 -0
- package/Tests/Server/API/StatusPageSeoSearchEngineIndexing.test.ts +189 -0
- package/Tests/Server/API/UserIncomingCallNumberApi.test.ts +108 -18
- package/Tests/Server/API/UserNotificationMethodAdminAPI.test.ts +963 -0
- package/Tests/Server/API/UserPushCriticalAlertsApi.test.ts +114 -0
- package/Tests/Server/API/UserSmsApi.test.ts +107 -14
- package/Tests/Server/API/UserTotpAuthAPI.test.ts +427 -0
- package/Tests/Server/Infrastructure/InMemoryTTLCache.test.ts +158 -0
- package/Tests/Server/Infrastructure/Postgres/DeviceRoleAndDeclaredLinkParentMigration.test.ts +9 -60
- package/Tests/Server/Infrastructure/Postgres/FixTotpOtpUrlAlgorithmMigration.test.ts +315 -0
- package/Tests/Server/Middleware/ProjectAuthorizationApiKeyMiddleware.test.ts +24 -15
- package/Tests/Server/Middleware/UserAuthorization.test.ts +79 -0
- package/Tests/Server/Middleware/VerificationCodeRateLimit.test.ts +775 -0
- package/Tests/Server/Services/AddNetworkDeviceReachabilityColumnsMigration.test.ts +280 -0
- package/Tests/Server/Services/AnalyticsDatabasePaginationStability.test.ts +33 -13
- package/Tests/Server/Services/AnalyticsDatabaseSortKeyBoundary.test.ts +658 -0
- package/Tests/Server/Services/ApiKeyPermissionService.test.ts +347 -0
- package/Tests/Server/Services/CriticalOnCallAlertDelivery.test.ts +458 -0
- package/Tests/Server/Services/CriticalPushAlertPayload.test.ts +301 -0
- package/Tests/Server/Services/DatabaseServiceAtomicIncrement.test.ts +143 -0
- package/Tests/Server/Services/DatabaseServiceUpdateDebugLogging.test.ts +282 -0
- package/Tests/Server/Services/DeliverNotificationForRuleExtraction.test.ts +1 -0
- package/Tests/Server/Services/LogAggregationScanMemory.test.ts +421 -0
- package/Tests/Server/Services/LogAggregationService.test.ts +2 -2
- package/Tests/Server/Services/NetworkSiteService.test.ts +56 -2
- package/Tests/Server/Services/NotificationChannelCodeIssuance.test.ts +401 -0
- package/Tests/Server/Services/PushNotificationDeliveryOptions.test.ts +204 -0
- package/Tests/Server/Services/TeamMemberAutoAcceptInvitation.test.ts +21 -1
- package/Tests/Server/Services/TeamMemberInviteRegistrationToken.test.ts +290 -0
- package/Tests/Server/Services/TelemetryResourceFacetFilters.test.ts +267 -0
- package/Tests/Server/Services/UserNotificationMethodAdminService.test.ts +948 -0
- package/Tests/Server/Services/UserNotificationRuleExecuteItem.test.ts +1 -0
- package/Tests/Server/Services/UserPushCriticalAlertToggle.test.ts +255 -0
- package/Tests/Server/Services/UserTotpAuthEnrolment.test.ts +218 -0
- package/Tests/Server/Services/WorkspaceNotificationRuleTestRuleChannels.test.ts +702 -0
- package/Tests/Server/TestingUtils/AuthenticatorApp.ts +248 -0
- package/Tests/Server/Types/Database/Permissions/AccessControlPermission.test.ts +165 -0
- package/Tests/Server/Types/Database/Permissions/NotificationChannelVerificationColumns.test.ts +135 -0
- package/Tests/Server/Types/Database/Permissions/OnCallScheduleRelationSelect.test.ts +504 -0
- package/Tests/Server/Types/Database/QueryHelperFindWithSameTextAnyOf.test.ts +91 -0
- package/Tests/Server/Types/Workflow/Components/JsonToText.test.ts +384 -0
- package/Tests/Server/Types/Workflow/Components/MergeJson.test.ts +403 -0
- package/Tests/Server/Utils/APIKey/AccessPermission.test.ts +48 -36
- package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +213 -0
- package/Tests/Server/Utils/Browser.test.ts +162 -0
- package/Tests/Server/Utils/ChannelVerification.test.ts +689 -0
- package/Tests/Server/Utils/Express.test.ts +371 -0
- package/Tests/Server/Utils/LogRedaction.test.ts +415 -0
- package/Tests/Server/Utils/LoggerCredentialLeak.test.ts +245 -0
- package/Tests/Server/Utils/Monitor/Criteria/CustomCodeMonitorCriteria.test.ts +707 -0
- package/Tests/Server/Utils/Monitor/Criteria/DnsMonitorCriteria.test.ts +698 -0
- package/Tests/Server/Utils/Monitor/Criteria/IncomingEmailBodyCriteria.test.ts +243 -0
- package/Tests/Server/Utils/Monitor/Criteria/IncomingRequestBodyCriteria.test.ts +278 -0
- package/Tests/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.test.ts +374 -4
- package/Tests/Server/Utils/Monitor/MonitorAlertResourceLinking.test.ts +160 -20
- package/Tests/Server/Utils/Monitor/MonitorDependencySuppressionCreatorSkip.test.ts +13 -8
- package/Tests/Server/Utils/Monitor/MonitorIncidentResourceLinking.test.ts +162 -18
- package/Tests/Server/Utils/Monitor/MonitorResourceContext.test.ts +349 -0
- package/Tests/Server/Utils/Monitor/MonitorResourceIngestedStepSelection.test.ts +455 -0
- package/Tests/Server/Utils/Monitor/MonitorStepResourceIdentity.test.ts +690 -0
- package/Tests/Server/Utils/Monitor/MonitorSummaryPersistence.test.ts +7 -2
- package/Tests/Server/Utils/Monitor/NetworkDeviceReachabilityRoundTrip.test.ts +369 -0
- package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +86 -8
- package/Tests/Server/Utils/Monitor/SeriesResourceLinker.test.ts +92 -18
- package/Tests/Server/Utils/PrivacyFilterUtil.test.ts +64 -0
- package/Tests/Server/Utils/PushNotificationUtilCreators.test.ts +267 -0
- package/Tests/Server/Utils/SessionReplay/SessionReplayGateCacheStore.test.ts +207 -0
- package/Tests/Server/Utils/StartServerBodyVerify.test.ts +335 -0
- package/Tests/Server/Utils/StatusPageSearchEngineIndexing.test.ts +60 -0
- package/Tests/Server/Utils/Telemetry/OneuptimeLabel.test.ts +439 -0
- package/Tests/Server/Utils/Telemetry/ResourceEntityFilter.test.ts +435 -0
- package/Tests/Server/Utils/TotpAuth.test.ts +719 -0
- package/Tests/Server/Utils/UserRegistrationToken.test.ts +322 -0
- package/Tests/Server/Utils/VerificationCode.test.ts +296 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsChannelSend.test.ts +607 -62
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsInstalledTeamIdSpace.test.ts +778 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsTeamInstalls.test.ts +44 -10
- package/Tests/Types/API/HostnameFromAuthority.test.ts +164 -0
- package/Tests/Types/AutoRemediation/AutoRemediationSuggestionStatus.test.ts +192 -0
- package/Tests/Types/Call/CallRequest.test.ts +189 -0
- package/Tests/Types/Dashboard/DashboardSize.test.ts +226 -0
- package/Tests/Types/Database/AccessControl/ColumnAccessControlCache.test.ts +344 -0
- package/Tests/Types/Database/DatabasePropertyFindOperator.test.ts +518 -0
- package/Tests/Types/Database/TableColumnMetadataCache.test.ts +286 -0
- package/Tests/Types/Incident/IncidentSlaStatus.test.ts +191 -0
- package/Tests/Types/Metrics/MetricDashboardMetricType.test.ts +278 -0
- package/Tests/Types/Metrics/MetricPipelineRuleType.test.ts +517 -0
- package/Tests/Types/Monitor/IncomingMonitorDefaultCriteria.test.ts +470 -0
- package/Tests/Types/Monitor/MonitorCriteriaInstance.test.ts +6 -4
- package/Tests/Types/Monitor/MonitorStep.test.ts +100 -0
- package/Tests/Types/Monitor/MonitorTypeKeywords.test.ts +360 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCatalog.test.ts +262 -5
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCoverage.test.ts +1 -1
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +1 -1
- package/Tests/Types/Monitor/ServiceAlertTemplates.test.ts +905 -0
- package/Tests/Types/Service/ServiceLanguage.test.ts +255 -0
- package/Tests/Types/StatusPage/SearchEngineIndexing.test.ts +86 -0
- package/Tests/Types/Telemetry/ResourceEntityFacet.test.ts +254 -0
- package/Tests/Types/TextRandomGeneration.test.ts +211 -0
- package/Tests/UI/Components/Button.test.tsx +175 -1
- package/Tests/UI/Components/CardSelect.test.tsx +1021 -0
- package/Tests/UI/Components/CodeBlockLanguages.test.tsx +236 -0
- package/Tests/UI/Components/CommandPalette/CommandPalette.test.tsx +568 -0
- package/Tests/UI/Components/CommandPalette/CommandPaletteKeyboard.test.tsx +239 -0
- package/Tests/UI/Components/CommandPalette/CommandPaletteProviders.test.tsx +400 -0
- package/Tests/UI/Components/CommandPalette/PaletteFilter.test.ts +234 -0
- package/Tests/UI/Components/CommandPalette/RecentCommands.test.ts +97 -0
- package/Tests/UI/Components/CountModelSideMenuItemGuard.test.tsx +198 -0
- package/Tests/UI/Components/FeedItemSafeMode.test.tsx +1 -1
- package/Tests/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.test.ts +267 -0
- package/Tests/UI/Components/List.test.tsx +9 -2
- package/Tests/UI/Components/ListLoadingStates.test.tsx +173 -0
- package/Tests/UI/Components/MarkdownLazy.test.tsx +113 -0
- package/Tests/UI/Components/MarkdownMermaidRetry.test.tsx +110 -0
- package/Tests/UI/Components/MasterPage.test.tsx +36 -1
- package/Tests/UI/Components/ModelTable/useCustomFieldColumns.test.tsx +8 -0
- package/Tests/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.test.ts +692 -0
- package/Tests/UI/Components/MoreMenuMotion.test.tsx +118 -0
- package/Tests/UI/Components/NavBarCommandKGating.test.tsx +178 -0
- package/Tests/UI/Components/OrderedStatesList.test.tsx +19 -2
- package/Tests/UI/Components/SideOverMotion.test.tsx +109 -0
- package/Tests/UI/Components/Skeleton.test.tsx +71 -0
- package/Tests/UI/Components/TableLoadingStates.test.tsx +279 -0
- package/Tests/UI/Components/Tabs.test.tsx +24 -0
- package/Tests/UI/Components/Toast.test.tsx +130 -7
- package/Tests/UI/Components/ToastStacking.test.tsx +198 -0
- package/Tests/UI/Utils/Dropdown.test.ts +423 -0
- package/Tests/UI/Utils/ModelAPITenantHeader.test.ts +122 -0
- package/Tests/UI/Utils/ModelListCache.test.ts +338 -0
- package/Tests/UI/Utils/ProjectListCacheInvalidation.test.ts +225 -0
- package/Tests/Utils/API.test.ts +16 -2
- package/Tests/Utils/Dashboard/Components/DashboardKubernetesResourceListShared.test.ts +347 -0
- package/Tests/Utils/Dashboard/Components/DashboardListSharedArgs.test.ts +259 -0
- package/Tests/Utils/Dashboard/Components/DashboardMonitorListComponent.test.ts +466 -0
- package/Tests/Utils/Monitor/MonitorMetricType.test.ts +66 -1
- package/Tests/Utils/Monitor/NetworkTopologyUtil.test.ts +115 -6
- package/Tests/Utils/NetworkDevice/DeviceReachabilityUtil.test.ts +610 -0
- package/Tests/Utils/NetworkSite/SiteStatusRollupUtil.test.ts +114 -45
- package/Tests/Utils/Rum/UrlScrubberSegments.test.ts +362 -0
- package/Types/API/Hostname.ts +79 -0
- package/Types/Database/AccessControl/ColumnAccessControl.ts +33 -11
- package/Types/Database/AccessControl/ColumnBillingAccessControl.ts +33 -11
- package/Types/Database/DatabaseProperty.ts +38 -0
- package/Types/Database/TableColumn.ts +34 -7
- package/Types/Email/EmailTemplateType.ts +1 -0
- package/Types/Events/Recurring.ts +16 -1
- package/Types/Monitor/MonitorCriteriaInstance.ts +41 -20
- package/Types/Monitor/MonitorStep.ts +13 -1
- package/Types/Monitor/MonitorType.ts +345 -40
- package/Types/Monitor/Recommendation/MonitorRecommendationCatalog.ts +131 -8
- package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +48 -8
- package/Types/Monitor/SSLMonitor/SslMonitorResponse.ts +43 -0
- package/Types/Monitor/ServiceAlertTemplates.ts +1352 -0
- package/Types/Permission.ts +35 -0
- package/Types/PushNotification/AndroidNotificationChannel.ts +26 -0
- package/Types/PushNotification/PushNotificationMessage.ts +15 -0
- package/Types/PushNotification/PushNotificationRequest.ts +8 -16
- package/Types/Service/ServiceLanguage.ts +144 -0
- package/Types/StatusPage/SearchEngineIndexing.ts +61 -0
- package/Types/Telemetry/ResourceEntityFacet.ts +211 -0
- package/Types/Text.ts +111 -19
- package/UI/Components/Button/Button.tsx +27 -14
- package/UI/Components/CardSelect/CardSelect.tsx +714 -105
- package/UI/Components/CodeBlock/CodeBlock.tsx +54 -7
- package/UI/Components/CodeBlock/LanguageRegistry.ts +103 -0
- package/UI/Components/CommandPalette/CommandPalette.tsx +790 -0
- package/UI/Components/CommandPalette/PaletteFilter.ts +196 -0
- package/UI/Components/CommandPalette/PaletteRow.tsx +173 -0
- package/UI/Components/CommandPalette/RecentCommands.ts +57 -0
- package/UI/Components/CommandPalette/Types.ts +49 -0
- package/UI/Components/CommandPalette/UseProviderSearch.ts +129 -0
- package/UI/Components/Dropdown/Dropdown.tsx +6 -1
- package/UI/Components/EmptyState/EmptyState.tsx +8 -1
- package/UI/Components/Feed/FeedItem.tsx +1 -1
- package/UI/Components/Footer/Footer.tsx +32 -6
- package/UI/Components/Forms/Fields/FormField.tsx +3 -0
- package/UI/Components/Forms/Types/Field.ts +8 -0
- package/UI/Components/List/List.tsx +37 -5
- package/UI/Components/List/ListSkeleton.tsx +54 -0
- package/UI/Components/Loader/PageLoader.tsx +29 -8
- package/UI/Components/LogsViewer/components/LogsAnalyticsView.tsx +26 -4
- package/UI/Components/Markdown.tsx/LazyMarkdownViewer.tsx +23 -2
- package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +71 -26
- package/UI/Components/MasterPage/MasterPage.tsx +24 -11
- package/UI/Components/Modal/Modal.tsx +2 -2
- package/UI/Components/ModelTable/BaseModelTable.tsx +1 -1
- package/UI/Components/ModelTable/useCustomFieldColumns.ts +11 -5
- package/UI/Components/MoreMenu/MoreMenu.tsx +39 -1
- package/UI/Components/Navbar/NavBar.tsx +14 -1
- package/UI/Components/OrderedStatesList/OrderedStatesList.tsx +50 -5
- package/UI/Components/SideMenu/CountModelSideMenuItem.tsx +40 -1
- package/UI/Components/SideOver/SideOver.tsx +37 -2
- package/UI/Components/Skeleton/Skeleton.tsx +53 -0
- package/UI/Components/Table/Table.tsx +74 -44
- package/UI/Components/Table/TableSkeletonRows.tsx +141 -0
- package/UI/Components/Tabs/Tab.tsx +1 -1
- package/UI/Components/Toast/Toast.tsx +118 -53
- package/UI/Components/Toast/ToastInit.tsx +82 -32
- package/UI/Styles/Theme.css +40 -0
- package/UI/Utils/ModelAPI/ModelAPI.ts +20 -10
- package/UI/Utils/ModelListCache.ts +188 -0
- package/UI/Utils/Project.ts +29 -0
- package/Utils/API.ts +6 -1
- package/Utils/Monitor/MonitorMetricType.ts +16 -1
- package/Utils/Monitor/NetworkTopologyUtil.ts +60 -8
- package/Utils/NetworkDevice/DeviceReachabilityUtil.ts +262 -0
- package/Utils/NetworkSite/SiteStatusRollupUtil.ts +41 -24
- package/Utils/Telemetry/CrossSignalScope.ts +75 -4
- package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js +20 -4
- package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +66 -0
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js +14 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPage.js +60 -0
- package/build/dist/Models/DatabaseModels/StatusPage.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageOidc.js +2 -0
- package/build/dist/Models/DatabaseModels/StatusPageOidc.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserCall.js +101 -3
- package/build/dist/Models/DatabaseModels/UserCall.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserEmail.js +101 -3
- package/build/dist/Models/DatabaseModels/UserEmail.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserIncomingCallNumber.js +101 -3
- package/build/dist/Models/DatabaseModels/UserIncomingCallNumber.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserPush.js +38 -0
- package/build/dist/Models/DatabaseModels/UserPush.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserSMS.js +101 -3
- package/build/dist/Models/DatabaseModels/UserSMS.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserWhatsApp.js +100 -2
- package/build/dist/Models/DatabaseModels/UserWhatsApp.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkspaceProjectAuthToken.js.map +1 -1
- package/build/dist/Server/API/AIChatAPI.js +48 -35
- package/build/dist/Server/API/AIChatAPI.js.map +1 -1
- package/build/dist/Server/API/BaseAPI.js +69 -13
- package/build/dist/Server/API/BaseAPI.js.map +1 -1
- package/build/dist/Server/API/CommonAPI.js +59 -0
- package/build/dist/Server/API/CommonAPI.js.map +1 -1
- package/build/dist/Server/API/MicrosoftTeamsAPI.js +20 -6
- package/build/dist/Server/API/MicrosoftTeamsAPI.js.map +1 -1
- package/build/dist/Server/API/SlackAPI.js +13 -10
- package/build/dist/Server/API/SlackAPI.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +745 -673
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/API/TelemetryAPI.js +34 -3
- package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
- package/build/dist/Server/API/UserCallAPI.js +42 -38
- package/build/dist/Server/API/UserCallAPI.js.map +1 -1
- package/build/dist/Server/API/UserEmailAPI.js +42 -38
- package/build/dist/Server/API/UserEmailAPI.js.map +1 -1
- package/build/dist/Server/API/UserIncomingCallNumberAPI.js +37 -32
- package/build/dist/Server/API/UserIncomingCallNumberAPI.js.map +1 -1
- package/build/dist/Server/API/UserNotificationMethodAdminAPI.js +341 -0
- package/build/dist/Server/API/UserNotificationMethodAdminAPI.js.map +1 -0
- package/build/dist/Server/API/UserPushAPI.js +95 -2
- package/build/dist/Server/API/UserPushAPI.js.map +1 -1
- package/build/dist/Server/API/UserSmsAPI.js +42 -38
- package/build/dist/Server/API/UserSmsAPI.js.map +1 -1
- package/build/dist/Server/API/UserWhatsAppAPI.js +42 -40
- package/build/dist/Server/API/UserWhatsAppAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787142779538-MigrationName.js +89 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787142779538-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787156982416-MigrationName.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787156982416-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787500000000-AddEnableSearchEngineIndexingToStatusPage.js +23 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787500000000-AddEnableSearchEngineIndexingToStatusPage.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787600000000-AddNetworkDeviceReachabilityColumns.js +34 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787600000000-AddNetworkDeviceReachabilityColumns.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787700000000-FixTotpOtpUrlAlgorithm.js +40 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787700000000-FixTotpOtpUrlAlgorithm.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +10 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/UserAuthorization.js +6 -2
- package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/VerificationCodeRateLimit.js +393 -0
- package/build/dist/Server/Middleware/VerificationCodeRateLimit.js.map +1 -0
- package/build/dist/Server/Services/AnalyticsDatabaseService.js +136 -0
- package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
- package/build/dist/Server/Services/ApiKeyPermissionService.js +90 -1
- package/build/dist/Server/Services/ApiKeyPermissionService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +89 -6
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/LogAggregationService.js +7 -0
- package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
- package/build/dist/Server/Services/LogService.js +16 -0
- package/build/dist/Server/Services/LogService.js.map +1 -1
- package/build/dist/Server/Services/NetworkSiteService.js +12 -0
- package/build/dist/Server/Services/NetworkSiteService.js.map +1 -1
- package/build/dist/Server/Services/PushNotificationService.js +69 -30
- package/build/dist/Server/Services/PushNotificationService.js.map +1 -1
- package/build/dist/Server/Services/SpanService.js +16 -0
- package/build/dist/Server/Services/SpanService.js.map +1 -1
- package/build/dist/Server/Services/TeamMemberService.js +43 -7
- package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
- package/build/dist/Server/Services/TraceAggregationService.js +2 -0
- package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
- package/build/dist/Server/Services/UserCallService.js +54 -22
- package/build/dist/Server/Services/UserCallService.js.map +1 -1
- package/build/dist/Server/Services/UserEmailService.js +78 -17
- package/build/dist/Server/Services/UserEmailService.js.map +1 -1
- package/build/dist/Server/Services/UserIncomingCallNumberService.js +45 -74
- package/build/dist/Server/Services/UserIncomingCallNumberService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationMethodAdminService.js +1117 -0
- package/build/dist/Server/Services/UserNotificationMethodAdminService.js.map +1 -0
- package/build/dist/Server/Services/UserNotificationRuleService.js +20 -0
- package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
- package/build/dist/Server/Services/UserPushService.js +77 -0
- package/build/dist/Server/Services/UserPushService.js.map +1 -1
- package/build/dist/Server/Services/UserSmsService.js +50 -17
- package/build/dist/Server/Services/UserSmsService.js.map +1 -1
- package/build/dist/Server/Services/UserWhatsAppService.js +48 -15
- package/build/dist/Server/Services/UserWhatsAppService.js.map +1 -1
- package/build/dist/Server/Services/WorkspaceNotificationRuleService.js +137 -164
- package/build/dist/Server/Services/WorkspaceNotificationRuleService.js.map +1 -1
- package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js +9 -0
- package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/AccessControlPermission.js +21 -13
- package/build/dist/Server/Types/Database/Permissions/AccessControlPermission.js.map +1 -1
- package/build/dist/Server/Types/Database/QueryHelper.js +27 -0
- package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
- package/build/dist/Server/Utils/APIKey/AccessPermission.js +9 -32
- package/build/dist/Server/Utils/APIKey/AccessPermission.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/QuerySettingsHelper.js +46 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/QuerySettingsHelper.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +87 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
- package/build/dist/Server/Utils/ChannelVerification.js +348 -0
- package/build/dist/Server/Utils/ChannelVerification.js.map +1 -0
- package/build/dist/Server/Utils/LogRedaction.js +449 -0
- package/build/dist/Server/Utils/LogRedaction.js.map +1 -0
- package/build/dist/Server/Utils/Logger.js +98 -45
- package/build/dist/Server/Utils/Logger.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js +13 -12
- package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.js +65 -13
- package/build/dist/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js +20 -17
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js +17 -14
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorResource.js +20 -3
- package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorResourceContext.js +95 -0
- package/build/dist/Server/Utils/Monitor/MonitorResourceContext.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js +313 -0
- package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +27 -7
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +3 -3
- package/build/dist/Server/Utils/Monitor/SeriesResourceLinker.js +67 -26
- package/build/dist/Server/Utils/Monitor/SeriesResourceLinker.js.map +1 -1
- package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCacheStore.js +29 -10
- package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCacheStore.js.map +1 -1
- package/build/dist/Server/Utils/StartServer.js +10 -7
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/StatusPageSearchEngineIndexing.js +24 -0
- package/build/dist/Server/Utils/StatusPageSearchEngineIndexing.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js +311 -0
- package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js.map +1 -0
- package/build/dist/Server/Utils/TotpAuth.js +127 -8
- package/build/dist/Server/Utils/TotpAuth.js.map +1 -1
- package/build/dist/Server/Utils/UserRegistrationToken.js +170 -0
- package/build/dist/Server/Utils/UserRegistrationToken.js.map +1 -0
- package/build/dist/Server/Utils/VerificationCode.js +120 -0
- package/build/dist/Server/Utils/VerificationCode.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +366 -37
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
- package/build/dist/Types/API/Hostname.js +63 -0
- package/build/dist/Types/API/Hostname.js.map +1 -1
- package/build/dist/Types/Database/AccessControl/ColumnAccessControl.js +20 -6
- package/build/dist/Types/Database/AccessControl/ColumnAccessControl.js.map +1 -1
- package/build/dist/Types/Database/AccessControl/ColumnBillingAccessControl.js +20 -6
- package/build/dist/Types/Database/AccessControl/ColumnBillingAccessControl.js.map +1 -1
- package/build/dist/Types/Database/DatabaseProperty.js +38 -0
- package/build/dist/Types/Database/DatabaseProperty.js.map +1 -1
- package/build/dist/Types/Database/TableColumn.js +24 -6
- package/build/dist/Types/Database/TableColumn.js.map +1 -1
- package/build/dist/Types/Email/EmailTemplateType.js +1 -0
- package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
- package/build/dist/Types/Events/Recurring.js +13 -1
- package/build/dist/Types/Events/Recurring.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +42 -21
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +9 -1
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorType.js +330 -31
- package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js +77 -5
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js +18 -6
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js.map +1 -1
- package/build/dist/Types/Monitor/ServiceAlertTemplates.js +1028 -0
- package/build/dist/Types/Monitor/ServiceAlertTemplates.js.map +1 -0
- package/build/dist/Types/Permission.js +33 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/PushNotification/AndroidNotificationChannel.js +27 -0
- package/build/dist/Types/PushNotification/AndroidNotificationChannel.js.map +1 -0
- package/build/dist/Types/Service/ServiceLanguage.js +96 -0
- package/build/dist/Types/Service/ServiceLanguage.js.map +1 -0
- package/build/dist/Types/StatusPage/SearchEngineIndexing.js +55 -0
- package/build/dist/Types/StatusPage/SearchEngineIndexing.js.map +1 -0
- package/build/dist/Types/Telemetry/ResourceEntityFacet.js +156 -0
- package/build/dist/Types/Telemetry/ResourceEntityFacet.js.map +1 -0
- package/build/dist/Types/Text.js +82 -17
- package/build/dist/Types/Text.js.map +1 -1
- package/build/dist/UI/Components/Button/Button.js +22 -14
- package/build/dist/UI/Components/Button/Button.js.map +1 -1
- package/build/dist/UI/Components/CardSelect/CardSelect.js +360 -40
- package/build/dist/UI/Components/CardSelect/CardSelect.js.map +1 -1
- package/build/dist/UI/Components/CodeBlock/CodeBlock.js +35 -3
- package/build/dist/UI/Components/CodeBlock/CodeBlock.js.map +1 -1
- package/build/dist/UI/Components/CodeBlock/LanguageRegistry.js +57 -0
- package/build/dist/UI/Components/CodeBlock/LanguageRegistry.js.map +1 -0
- package/build/dist/UI/Components/CommandPalette/CommandPalette.js +439 -0
- package/build/dist/UI/Components/CommandPalette/CommandPalette.js.map +1 -0
- package/build/dist/UI/Components/CommandPalette/PaletteFilter.js +135 -0
- package/build/dist/UI/Components/CommandPalette/PaletteFilter.js.map +1 -0
- package/build/dist/UI/Components/CommandPalette/PaletteRow.js +83 -0
- package/build/dist/UI/Components/CommandPalette/PaletteRow.js.map +1 -0
- package/build/dist/UI/Components/CommandPalette/RecentCommands.js +47 -0
- package/build/dist/UI/Components/CommandPalette/RecentCommands.js.map +1 -0
- package/build/dist/UI/Components/CommandPalette/Types.js +2 -0
- package/build/dist/UI/Components/CommandPalette/Types.js.map +1 -0
- package/build/dist/UI/Components/CommandPalette/UseProviderSearch.js +88 -0
- package/build/dist/UI/Components/CommandPalette/UseProviderSearch.js.map +1 -0
- package/build/dist/UI/Components/Dropdown/Dropdown.js +6 -1
- package/build/dist/UI/Components/Dropdown/Dropdown.js.map +1 -1
- package/build/dist/UI/Components/EmptyState/EmptyState.js +1 -1
- package/build/dist/UI/Components/EmptyState/EmptyState.js.map +1 -1
- package/build/dist/UI/Components/Feed/FeedItem.js +1 -1
- package/build/dist/UI/Components/Feed/FeedItem.js.map +1 -1
- package/build/dist/UI/Components/Footer/Footer.js +7 -4
- package/build/dist/UI/Components/Footer/Footer.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/FormField.js +1 -1
- package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
- package/build/dist/UI/Components/List/List.js +19 -5
- package/build/dist/UI/Components/List/List.js.map +1 -1
- package/build/dist/UI/Components/List/ListSkeleton.js +21 -0
- package/build/dist/UI/Components/List/ListSkeleton.js.map +1 -0
- package/build/dist/UI/Components/Loader/PageLoader.js +15 -5
- package/build/dist/UI/Components/Loader/PageLoader.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js +16 -3
- package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/LazyMarkdownViewer.js +13 -1
- package/build/dist/UI/Components/Markdown.tsx/LazyMarkdownViewer.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +52 -25
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
- package/build/dist/UI/Components/MasterPage/MasterPage.js +10 -2
- package/build/dist/UI/Components/MasterPage/MasterPage.js.map +1 -1
- package/build/dist/UI/Components/Modal/Modal.js +2 -2
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/useCustomFieldColumns.js +9 -2
- package/build/dist/UI/Components/ModelTable/useCustomFieldColumns.js.map +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js +32 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBar.js +5 -1
- package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
- package/build/dist/UI/Components/OrderedStatesList/OrderedStatesList.js +29 -5
- package/build/dist/UI/Components/OrderedStatesList/OrderedStatesList.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/CountModelSideMenuItem.js +23 -1
- package/build/dist/UI/Components/SideMenu/CountModelSideMenuItem.js.map +1 -1
- package/build/dist/UI/Components/SideOver/SideOver.js +23 -2
- package/build/dist/UI/Components/SideOver/SideOver.js.map +1 -1
- package/build/dist/UI/Components/Skeleton/Skeleton.js +23 -0
- package/build/dist/UI/Components/Skeleton/Skeleton.js.map +1 -0
- package/build/dist/UI/Components/Table/Table.js +35 -24
- package/build/dist/UI/Components/Table/Table.js.map +1 -1
- package/build/dist/UI/Components/Table/TableSkeletonRows.js +52 -0
- package/build/dist/UI/Components/Table/TableSkeletonRows.js.map +1 -0
- package/build/dist/UI/Components/Tabs/Tab.js +1 -1
- package/build/dist/UI/Components/Tabs/Tab.js.map +1 -1
- package/build/dist/UI/Components/Toast/Toast.js +77 -23
- package/build/dist/UI/Components/Toast/Toast.js.map +1 -1
- package/build/dist/UI/Components/Toast/ToastInit.js +37 -15
- package/build/dist/UI/Components/Toast/ToastInit.js.map +1 -1
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js +18 -9
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js.map +1 -1
- package/build/dist/UI/Utils/ModelListCache.js +126 -0
- package/build/dist/UI/Utils/ModelListCache.js.map +1 -0
- package/build/dist/UI/Utils/Project.js +24 -1
- package/build/dist/UI/Utils/Project.js.map +1 -1
- package/build/dist/Utils/API.js +6 -1
- package/build/dist/Utils/API.js.map +1 -1
- package/build/dist/Utils/Monitor/MonitorMetricType.js +13 -1
- package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +34 -7
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js +177 -0
- package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js.map +1 -0
- package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js +23 -27
- package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js.map +1 -1
- package/build/dist/Utils/Telemetry/CrossSignalScope.js +44 -4
- package/build/dist/Utils/Telemetry/CrossSignalScope.js.map +1 -1
- package/jest.config.json +1 -1
- package/package.json +2 -3
- package/Server/Utils/Monitor/MonitorClusterContext.ts +0 -182
- package/Tests/__mocks__/otpauth.js +0 -30
- package/build/dist/Server/Utils/Monitor/MonitorClusterContext.js +0 -141
- package/build/dist/Server/Utils/Monitor/MonitorClusterContext.js.map +0 -1
|
@@ -16,6 +16,18 @@ export interface ComponentProps {
|
|
|
16
16
|
links: Array<FooterLink>;
|
|
17
17
|
style?: React.CSSProperties | undefined;
|
|
18
18
|
className?: string | undefined;
|
|
19
|
+
/*
|
|
20
|
+
* Classes for the inner row. The default adds its own horizontal padding,
|
|
21
|
+
* which double-indents the footer inside a layout that is already padded —
|
|
22
|
+
* the status page, for one. Override it to align the footer with the content
|
|
23
|
+
* above it.
|
|
24
|
+
*/
|
|
25
|
+
innerClassName?: string | undefined;
|
|
26
|
+
/*
|
|
27
|
+
* Classes for the copyright block. The default hides it between md and lg,
|
|
28
|
+
* which is not something every layout wants.
|
|
29
|
+
*/
|
|
30
|
+
copyrightClassName?: string | undefined;
|
|
19
31
|
}
|
|
20
32
|
|
|
21
33
|
const Footer: FunctionComponent<ComponentProps> = (
|
|
@@ -29,7 +41,12 @@ const Footer: FunctionComponent<ComponentProps> = (
|
|
|
29
41
|
}
|
|
30
42
|
style={props.style}
|
|
31
43
|
>
|
|
32
|
-
<div
|
|
44
|
+
<div
|
|
45
|
+
className={
|
|
46
|
+
props.innerClassName ||
|
|
47
|
+
"mx-auto w-full py-6 px-6 md:flex md:items-center md:justify-between lg:px-8"
|
|
48
|
+
}
|
|
49
|
+
>
|
|
33
50
|
{/* Mobile: Stack links vertically, Desktop: Horizontal layout */}
|
|
34
51
|
<div className="flex flex-col space-y-3 md:flex-row md:justify-center md:items-center md:space-y-0 md:space-x-8 md:order-2">
|
|
35
52
|
{props.links &&
|
|
@@ -63,14 +80,23 @@ const Footer: FunctionComponent<ComponentProps> = (
|
|
|
63
80
|
);
|
|
64
81
|
})}
|
|
65
82
|
</div>
|
|
66
|
-
{/*
|
|
67
|
-
|
|
68
|
-
|
|
83
|
+
{/*
|
|
84
|
+
* Guard the wrapper, not just the <p>: with no copyright configured
|
|
85
|
+
* the empty div still contributed its mt-5, leaving a dead gap under
|
|
86
|
+
* the links.
|
|
87
|
+
*/}
|
|
88
|
+
{props.copyright && (
|
|
89
|
+
<div
|
|
90
|
+
className={
|
|
91
|
+
props.copyrightClassName ||
|
|
92
|
+
"mt-5 md:order-1 md:mt-0 block md:hidden lg:block"
|
|
93
|
+
}
|
|
94
|
+
>
|
|
69
95
|
<p className="text-center text-sm text-gray-500">
|
|
70
96
|
© {props.copyright}
|
|
71
97
|
</p>
|
|
72
|
-
|
|
73
|
-
|
|
98
|
+
</div>
|
|
99
|
+
)}
|
|
74
100
|
</div>
|
|
75
101
|
</footer>
|
|
76
102
|
</React.Fragment>
|
|
@@ -521,6 +521,9 @@ const FormField: <T extends GenericObject>(
|
|
|
521
521
|
tabIndex={0}
|
|
522
522
|
dataTestId={props.field.dataTestId}
|
|
523
523
|
singleColumn={props.field.cardSelectSingleColumn}
|
|
524
|
+
searchable={props.field.cardSelectSearchable}
|
|
525
|
+
searchPlaceholder={props.field.cardSelectSearchPlaceholder}
|
|
526
|
+
collapsibleGroups={props.field.cardSelectCollapsibleGroups}
|
|
524
527
|
onChange={(value: string) => {
|
|
525
528
|
onChange(value);
|
|
526
529
|
props.setFieldValue(props.fieldName, value);
|
|
@@ -58,6 +58,14 @@ export default interface Field<TEntity> {
|
|
|
58
58
|
| Array<CardSelectOption | CardSelectOptionGroup>
|
|
59
59
|
| undefined;
|
|
60
60
|
cardSelectSingleColumn?: boolean | undefined;
|
|
61
|
+
/*
|
|
62
|
+
* Give the card picker a search box and collapse its groups behind their
|
|
63
|
+
* headers. Both are opt in: a picker with a handful of cards reads fine as
|
|
64
|
+
* a plain grid, and turning them on there would only add chrome.
|
|
65
|
+
*/
|
|
66
|
+
cardSelectSearchable?: boolean | undefined;
|
|
67
|
+
cardSelectSearchPlaceholder?: string | undefined;
|
|
68
|
+
cardSelectCollapsibleGroups?: boolean | undefined;
|
|
61
69
|
fetchDropdownOptions?:
|
|
62
70
|
| ((
|
|
63
71
|
item: FormValues<TEntity>,
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { GetReactElementFunction } from "../../Types/FunctionTypes";
|
|
2
2
|
import ActionButtonSchema from "../ActionButton/ActionButtonSchema";
|
|
3
|
-
import ComponentLoader from "../ComponentLoader/ComponentLoader";
|
|
4
3
|
import Field from "../Detail/Field";
|
|
5
4
|
import ErrorMessage from "../ErrorMessage/ErrorMessage";
|
|
6
5
|
import FilterViewer from "../Filters/FilterViewer";
|
|
@@ -8,6 +7,7 @@ import FilterType from "../Filters/Types/Filter";
|
|
|
8
7
|
import FilterData from "../Filters/Types/FilterData";
|
|
9
8
|
import Pagination from "../Pagination/Pagination";
|
|
10
9
|
import ListBody from "./ListBody";
|
|
10
|
+
import ListSkeleton from "./ListSkeleton";
|
|
11
11
|
import { ListDetailProps } from "./ListRow";
|
|
12
12
|
import GenericObject from "../../../Types/GenericObject";
|
|
13
13
|
import React, { ReactElement } from "react";
|
|
@@ -67,12 +67,30 @@ type ListFunction = <T extends GenericObject>(
|
|
|
67
67
|
const List: ListFunction = <T extends GenericObject>(
|
|
68
68
|
props: ComponentProps<T>,
|
|
69
69
|
): ReactElement => {
|
|
70
|
+
/*
|
|
71
|
+
* A refetch with cards already on screen (pagination, sort, refresh - the
|
|
72
|
+
* parent never clears `data` while fetching) keeps those cards visible and
|
|
73
|
+
* dims them; skeletons are only for a load with nothing to show yet.
|
|
74
|
+
*/
|
|
75
|
+
const isRefetchingWithData: boolean =
|
|
76
|
+
props.isLoading && props.data.length > 0;
|
|
77
|
+
|
|
70
78
|
const getListbody: GetReactElementFunction = (): ReactElement => {
|
|
71
|
-
if (props.isLoading) {
|
|
72
|
-
return
|
|
79
|
+
if (props.isLoading && props.data.length === 0) {
|
|
80
|
+
return (
|
|
81
|
+
<ListSkeleton
|
|
82
|
+
fieldsCount={props.fields.length}
|
|
83
|
+
itemsOnPage={props.itemsOnPage}
|
|
84
|
+
/>
|
|
85
|
+
);
|
|
73
86
|
}
|
|
74
87
|
|
|
75
|
-
|
|
88
|
+
/*
|
|
89
|
+
* Loading still wins over error and empty (same priority as before the
|
|
90
|
+
* skeletons): while a refetch is in flight the stale cards render, never
|
|
91
|
+
* a stale error or a premature "no items".
|
|
92
|
+
*/
|
|
93
|
+
if (!props.isLoading && props.error) {
|
|
76
94
|
return (
|
|
77
95
|
<div className="p-6">
|
|
78
96
|
<ErrorMessage
|
|
@@ -145,7 +163,21 @@ const List: ListFunction = <T extends GenericObject>(
|
|
|
145
163
|
}
|
|
146
164
|
}}
|
|
147
165
|
>
|
|
148
|
-
{
|
|
166
|
+
{/*
|
|
167
|
+
* Dims the stale cards while a refetch is in flight and blocks
|
|
168
|
+
* clicks on them - actions against data about to be replaced
|
|
169
|
+
* are a race.
|
|
170
|
+
*/}
|
|
171
|
+
<div
|
|
172
|
+
data-testid="list-content"
|
|
173
|
+
className={
|
|
174
|
+
isRefetchingWithData
|
|
175
|
+
? "opacity-60 pointer-events-none transition-opacity duration-150"
|
|
176
|
+
: "transition-opacity duration-150"
|
|
177
|
+
}
|
|
178
|
+
>
|
|
179
|
+
{getListbody()}
|
|
180
|
+
</div>
|
|
149
181
|
</DragDropContext>
|
|
150
182
|
{!props.disablePagination && (
|
|
151
183
|
<div className="mt-5 -mb-6">
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import Skeleton from "../Skeleton/Skeleton";
|
|
2
|
+
import React, { FunctionComponent, ReactElement } from "react";
|
|
3
|
+
|
|
4
|
+
export interface ComponentProps {
|
|
5
|
+
/*
|
|
6
|
+
* One placeholder line per field the real ListRow will render, so the
|
|
7
|
+
* cards are the right height before the data arrives.
|
|
8
|
+
*/
|
|
9
|
+
fieldsCount: number;
|
|
10
|
+
itemsOnPage: number;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/*
|
|
14
|
+
* Card-shaped placeholders for the list's first load, matching ListBody's
|
|
15
|
+
* wrapper (space-y-6 p-6 border-t) so nothing shifts when real rows land.
|
|
16
|
+
*/
|
|
17
|
+
const ListSkeleton: FunctionComponent<ComponentProps> = (
|
|
18
|
+
props: ComponentProps,
|
|
19
|
+
): ReactElement => {
|
|
20
|
+
// Enough cards to look like a page without painting offscreen ones.
|
|
21
|
+
const cardCount: number = Math.max(1, Math.min(props.itemsOnPage || 0, 6));
|
|
22
|
+
const cardIndexes: Array<number> = Array.from(Array(cardCount).keys());
|
|
23
|
+
const lineIndexes: Array<number> = Array.from(
|
|
24
|
+
Array(Math.max(1, props.fieldsCount)).keys(),
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
return (
|
|
28
|
+
<div
|
|
29
|
+
data-testid="list-skeleton-loader"
|
|
30
|
+
role="status"
|
|
31
|
+
aria-live="polite"
|
|
32
|
+
className="space-y-6 p-6 border-t border-gray-200"
|
|
33
|
+
>
|
|
34
|
+
<span className="sr-only">Loading...</span>
|
|
35
|
+
{cardIndexes.map((cardIndex: number) => {
|
|
36
|
+
return (
|
|
37
|
+
<div key={cardIndex} className="space-y-3">
|
|
38
|
+
{lineIndexes.map((lineIndex: number) => {
|
|
39
|
+
return (
|
|
40
|
+
<Skeleton
|
|
41
|
+
key={lineIndex}
|
|
42
|
+
className="h-4"
|
|
43
|
+
widthVariantIndex={cardIndex + lineIndex}
|
|
44
|
+
/>
|
|
45
|
+
);
|
|
46
|
+
})}
|
|
47
|
+
</div>
|
|
48
|
+
);
|
|
49
|
+
})}
|
|
50
|
+
</div>
|
|
51
|
+
);
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
export default ListSkeleton;
|
|
@@ -1,22 +1,43 @@
|
|
|
1
1
|
import Loader, { LoaderType } from "./Loader";
|
|
2
|
-
import {
|
|
2
|
+
import { Gray500 } from "../../../Types/BrandColors";
|
|
3
3
|
import React, { FunctionComponent, ReactElement } from "react";
|
|
4
4
|
|
|
5
5
|
export interface ComponentProps {
|
|
6
6
|
isVisible: boolean;
|
|
7
|
+
/*
|
|
8
|
+
* Lets a full-page caller reserve height (e.g. "min-h-[60vh]") without
|
|
9
|
+
* changing the footprint of the many inline, in-card call sites that rely on
|
|
10
|
+
* the default spacing.
|
|
11
|
+
*/
|
|
12
|
+
className?: string | undefined;
|
|
7
13
|
}
|
|
8
14
|
|
|
9
15
|
const PageLoader: FunctionComponent<ComponentProps> = (
|
|
10
16
|
props: ComponentProps,
|
|
11
17
|
): ReactElement => {
|
|
12
|
-
if (props.isVisible) {
|
|
13
|
-
return
|
|
14
|
-
<div className="m-auto w-full text-center w-max mt-52 align-middle flex items-center">
|
|
15
|
-
<Loader loaderType={LoaderType.Bar} color={VeryLightGray} size={200} />
|
|
16
|
-
</div>
|
|
17
|
-
);
|
|
18
|
+
if (!props.isVisible) {
|
|
19
|
+
return <></>;
|
|
18
20
|
}
|
|
19
|
-
|
|
21
|
+
|
|
22
|
+
/*
|
|
23
|
+
* The bar used to be VeryLightGray (#c2c2c2) on white — about 1.7:1, which
|
|
24
|
+
* reads as a blank page rather than a loading one. Gray500 is visible without
|
|
25
|
+
* being loud.
|
|
26
|
+
*
|
|
27
|
+
* "w-full" and "w-max" were both set here, so which one applied came down to
|
|
28
|
+
* the order Tailwind happened to emit them in. The loader is centred by the
|
|
29
|
+
* flex row inside <Loader>, so full width is the one that was wanted.
|
|
30
|
+
*/
|
|
31
|
+
return (
|
|
32
|
+
<div
|
|
33
|
+
className={
|
|
34
|
+
props.className ||
|
|
35
|
+
"m-auto mt-52 flex w-full items-center justify-center"
|
|
36
|
+
}
|
|
37
|
+
>
|
|
38
|
+
<Loader loaderType={LoaderType.Bar} color={Gray500} size={200} />
|
|
39
|
+
</div>
|
|
40
|
+
);
|
|
20
41
|
};
|
|
21
42
|
|
|
22
43
|
export default PageLoader;
|
|
@@ -26,6 +26,11 @@ import URL from "../../../../Types/API/URL";
|
|
|
26
26
|
import HTTPResponse from "../../../../Types/API/HTTPResponse";
|
|
27
27
|
import HTTPErrorResponse from "../../../../Types/API/HTTPErrorResponse";
|
|
28
28
|
import { JSONObject } from "../../../../Types/JSON";
|
|
29
|
+
import {
|
|
30
|
+
ResourceEntityFacetSelections,
|
|
31
|
+
collectResourceEntityFacetSelections,
|
|
32
|
+
collectServiceFacetSelections,
|
|
33
|
+
} from "../../../../Types/Telemetry/ResourceEntityFacet";
|
|
29
34
|
import { APP_API_URL } from "../../../Config";
|
|
30
35
|
import ModelAPI from "../../../Utils/ModelAPI/ModelAPI";
|
|
31
36
|
import ComponentLoader from "../../ComponentLoader/ComponentLoader";
|
|
@@ -381,12 +386,29 @@ const LogsAnalyticsView: FunctionComponent<LogsAnalyticsViewProps> = (
|
|
|
381
386
|
Array.from(severityValues);
|
|
382
387
|
}
|
|
383
388
|
|
|
384
|
-
const serviceFilterValues:
|
|
385
|
-
props.appliedFacetFilters.
|
|
389
|
+
const serviceFilterValues: Array<string> =
|
|
390
|
+
collectServiceFacetSelections(props.appliedFacetFilters.entries());
|
|
386
391
|
|
|
387
|
-
if (serviceFilterValues
|
|
392
|
+
if (serviceFilterValues.length > 0) {
|
|
388
393
|
(requestData as Record<string, unknown>)["serviceIds"] =
|
|
389
|
-
|
|
394
|
+
serviceFilterValues;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
/*
|
|
398
|
+
* Host / docker / podman / Kubernetes chips ride their own field —
|
|
399
|
+
* their ids are not `primaryEntityId` values for telemetry that
|
|
400
|
+
* carries a service.name, so the server resolves them to the
|
|
401
|
+
* resource's entity key. Without this the analytics tab silently
|
|
402
|
+
* ignored a cluster the sidebar was filtering by.
|
|
403
|
+
*/
|
|
404
|
+
const resourceFilters: ResourceEntityFacetSelections =
|
|
405
|
+
collectResourceEntityFacetSelections(
|
|
406
|
+
props.appliedFacetFilters.entries(),
|
|
407
|
+
);
|
|
408
|
+
|
|
409
|
+
if (Object.keys(resourceFilters).length > 0) {
|
|
410
|
+
(requestData as Record<string, unknown>)["resourceFilters"] =
|
|
411
|
+
resourceFilters;
|
|
390
412
|
}
|
|
391
413
|
|
|
392
414
|
const traceFilterValues: Set<string> | undefined =
|
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
/*
|
|
2
|
+
* Type-only on purpose: the sole static edge to MarkdownViewer must be
|
|
3
|
+
* erasable, so the viewer (and the mermaid chunk it lazily pulls) stays out
|
|
4
|
+
* of every eager bundle that imports this wrapper.
|
|
5
|
+
*/
|
|
6
|
+
import type { ComponentProps } from "./MarkdownViewer";
|
|
2
7
|
import React, {
|
|
3
8
|
FunctionComponent,
|
|
4
9
|
LazyExoticComponent,
|
|
@@ -15,7 +20,23 @@ const LazyMarkdownViewer: FunctionComponent<ComponentProps> = (
|
|
|
15
20
|
props: ComponentProps,
|
|
16
21
|
): JSX.Element => {
|
|
17
22
|
return (
|
|
18
|
-
<Suspense
|
|
23
|
+
<Suspense
|
|
24
|
+
fallback={
|
|
25
|
+
/*
|
|
26
|
+
* A bare "Loading..." string here painted raw English text in the
|
|
27
|
+
* middle of the page, then swapped it for content of a different
|
|
28
|
+
* height. Reserve roughly the space two lines of prose take instead.
|
|
29
|
+
*
|
|
30
|
+
* Spans rather than divs: callers such as EventItem render this inside
|
|
31
|
+
* a <p>, where block elements are invalid nesting.
|
|
32
|
+
*/
|
|
33
|
+
<span role="status" aria-live="polite" className="block space-y-2">
|
|
34
|
+
<span className="block h-4 w-3/4 animate-pulse rounded bg-gray-100" />
|
|
35
|
+
<span className="block h-4 w-1/2 animate-pulse rounded bg-gray-100" />
|
|
36
|
+
<span className="sr-only">Loading content</span>
|
|
37
|
+
</span>
|
|
38
|
+
}
|
|
39
|
+
>
|
|
19
40
|
<MarkdownViewer {...props} />
|
|
20
41
|
</Suspense>
|
|
21
42
|
);
|
|
@@ -76,7 +76,6 @@ SyntaxHighlighter.registerLanguage("ruby", ruby);
|
|
|
76
76
|
SyntaxHighlighter.registerLanguage("php", php);
|
|
77
77
|
SyntaxHighlighter.registerLanguage("graphql", graphql);
|
|
78
78
|
SyntaxHighlighter.registerLanguage("http", http);
|
|
79
|
-
import mermaid from "mermaid";
|
|
80
79
|
import DOMPurify from "dompurify";
|
|
81
80
|
import OneUptimeDate from "../../../Types/Date";
|
|
82
81
|
import { Theme, useTheme } from "../../Utils/Theme";
|
|
@@ -90,7 +89,48 @@ import { Theme, useTheme } from "../../Utils/Theme";
|
|
|
90
89
|
const ISO_8601_REGEX: RegExp =
|
|
91
90
|
/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,6})?Z$/;
|
|
92
91
|
|
|
93
|
-
|
|
92
|
+
/*
|
|
93
|
+
* mermaid's pre-bundled build is ~4.5MB — by far the heaviest dependency of
|
|
94
|
+
* this component — so it is loaded on demand the first time a mermaid fence
|
|
95
|
+
* actually renders. Plain markdown (the overwhelmingly common case) never
|
|
96
|
+
* pays for it: there is no static import and no module-scope initialization.
|
|
97
|
+
* The promise is cached module-wide so multiple diagrams share one load, and
|
|
98
|
+
* theme setup runs only after the load resolves.
|
|
99
|
+
*/
|
|
100
|
+
type MermaidApi = typeof import("mermaid").default;
|
|
101
|
+
|
|
102
|
+
let mermaidLoadPromise: Promise<MermaidApi> | null = null;
|
|
103
|
+
|
|
104
|
+
const loadMermaid: () => Promise<MermaidApi> = (): Promise<MermaidApi> => {
|
|
105
|
+
if (!mermaidLoadPromise) {
|
|
106
|
+
const loadPromise: Promise<MermaidApi> = import("mermaid").then(
|
|
107
|
+
(mermaidModule: { default: MermaidApi }): MermaidApi => {
|
|
108
|
+
return mermaidModule.default;
|
|
109
|
+
},
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
mermaidLoadPromise = loadPromise;
|
|
113
|
+
|
|
114
|
+
/*
|
|
115
|
+
* A failed chunk load (flaky network, deploy rotating hashed chunk
|
|
116
|
+
* names) must not be cached forever — clear the slot so the next
|
|
117
|
+
* diagram retries the import. The reset rides a side branch of the
|
|
118
|
+
* promise: the original is still returned below, so the caller that
|
|
119
|
+
* triggered this load sees the rejection through its own error path.
|
|
120
|
+
*/
|
|
121
|
+
loadPromise.catch((): void => {
|
|
122
|
+
if (mermaidLoadPromise === loadPromise) {
|
|
123
|
+
mermaidLoadPromise = null;
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
return mermaidLoadPromise;
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
const initializeMermaid: (mermaid: MermaidApi, theme: Theme) => void = (
|
|
131
|
+
mermaid: MermaidApi,
|
|
132
|
+
theme: Theme,
|
|
133
|
+
): void => {
|
|
94
134
|
const isDark: boolean = theme === Theme.Dark;
|
|
95
135
|
|
|
96
136
|
mermaid.initialize({
|
|
@@ -120,10 +160,8 @@ const initializeMermaid: (theme: Theme) => void = (theme: Theme): void => {
|
|
|
120
160
|
});
|
|
121
161
|
};
|
|
122
162
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
// Mermaid diagram component
|
|
126
|
-
const MermaidDiagram: FunctionComponent<{ chart: string }> = ({
|
|
163
|
+
// Mermaid diagram component (exported so tests can exercise the lazy load directly)
|
|
164
|
+
export const MermaidDiagram: FunctionComponent<{ chart: string }> = ({
|
|
127
165
|
chart,
|
|
128
166
|
}: {
|
|
129
167
|
chart: string;
|
|
@@ -136,27 +174,34 @@ const MermaidDiagram: FunctionComponent<{ chart: string }> = ({
|
|
|
136
174
|
let isCancelled: boolean = false;
|
|
137
175
|
|
|
138
176
|
const renderDiagram: () => Promise<void> = async (): Promise<void> => {
|
|
139
|
-
|
|
177
|
+
try {
|
|
178
|
+
/*
|
|
179
|
+
* Dynamic load first; a failed chunk load surfaces through the same
|
|
180
|
+
* error path as a failed render. Theme setup MUST follow the load —
|
|
181
|
+
* there is deliberately no module-scope initialization any more.
|
|
182
|
+
*/
|
|
183
|
+
const mermaid: MermaidApi = await loadMermaid();
|
|
184
|
+
if (!containerRef.current || isCancelled) {
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
140
187
|
containerRef.current.innerHTML = "";
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
containerRef.current.appendChild(errorEl);
|
|
159
|
-
}
|
|
188
|
+
initializeMermaid(mermaid, theme);
|
|
189
|
+
const id: string = `mermaid-${Math.random().toString(36).substr(2, 9)}`;
|
|
190
|
+
const { svg } = await mermaid.render(id, chart);
|
|
191
|
+
if (containerRef.current && !isCancelled) {
|
|
192
|
+
containerRef.current.innerHTML = DOMPurify.sanitize(svg, {
|
|
193
|
+
USE_PROFILES: { svg: true, svgFilters: true },
|
|
194
|
+
ADD_TAGS: ["foreignObject"],
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
} catch (error) {
|
|
198
|
+
if (containerRef.current && !isCancelled) {
|
|
199
|
+
const errorMessage: string = String(error);
|
|
200
|
+
const errorEl: HTMLPreElement = document.createElement("pre");
|
|
201
|
+
errorEl.className = "text-red-500";
|
|
202
|
+
errorEl.textContent = `Error rendering diagram: ${errorMessage}`;
|
|
203
|
+
containerRef.current.innerHTML = "";
|
|
204
|
+
containerRef.current.appendChild(errorEl);
|
|
160
205
|
}
|
|
161
206
|
}
|
|
162
207
|
};
|
|
@@ -30,6 +30,16 @@ const MasterPage: FunctionComponent<ComponentProps> = (
|
|
|
30
30
|
const topSectionRef: React.RefObject<HTMLDivElement> =
|
|
31
31
|
React.useRef<HTMLDivElement>(null);
|
|
32
32
|
|
|
33
|
+
/*
|
|
34
|
+
* The status page supplies neither header nor navbar — it renders its own
|
|
35
|
+
* inside children. Rendering TopSection anyway left an empty white bar with a
|
|
36
|
+
* drop shadow above the content, so only render it when it has something in
|
|
37
|
+
* it.
|
|
38
|
+
*/
|
|
39
|
+
const hasTopSection: boolean = Boolean(
|
|
40
|
+
(!props.hideHeader && props.header) || props.navBar,
|
|
41
|
+
);
|
|
42
|
+
|
|
33
43
|
/*
|
|
34
44
|
* Publish the sticky top section's height as --app-header-height so anything
|
|
35
45
|
* that sticks underneath it (the side menu, for example) can offset itself by
|
|
@@ -89,6 +99,7 @@ const MasterPage: FunctionComponent<ComponentProps> = (
|
|
|
89
99
|
props.isLoading,
|
|
90
100
|
props.error,
|
|
91
101
|
props.disableMainContentWrapper,
|
|
102
|
+
hasTopSection,
|
|
92
103
|
isOnline,
|
|
93
104
|
]);
|
|
94
105
|
|
|
@@ -125,17 +136,19 @@ const MasterPage: FunctionComponent<ComponentProps> = (
|
|
|
125
136
|
Skip to main content
|
|
126
137
|
</a>
|
|
127
138
|
)}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
+
{hasTopSection && (
|
|
140
|
+
<div
|
|
141
|
+
ref={topSectionRef}
|
|
142
|
+
className={props.makeTopSectionUnstick ? "" : "sticky top-0 z-10"}
|
|
143
|
+
>
|
|
144
|
+
<TopSection
|
|
145
|
+
hideHeader={props.hideHeader}
|
|
146
|
+
className={props.topSectionClassName}
|
|
147
|
+
header={props.header}
|
|
148
|
+
navbar={props.navBar}
|
|
149
|
+
/>
|
|
150
|
+
</div>
|
|
151
|
+
)}
|
|
139
152
|
|
|
140
153
|
{props.disableMainContentWrapper ? (
|
|
141
154
|
props.children
|
|
@@ -413,7 +413,7 @@ const Modal: FunctionComponent<ComponentProps> = (
|
|
|
413
413
|
return (
|
|
414
414
|
<div className="relative z-50">
|
|
415
415
|
<div
|
|
416
|
-
className={`fixed inset-0 bg-gray-950/45 backdrop-blur-[2px] transition-opacity duration-
|
|
416
|
+
className={`fixed inset-0 bg-gray-950/45 backdrop-blur-[2px] transition-opacity duration-150 ease-out motion-reduce:transition-none ${
|
|
417
417
|
hasEntered ? "opacity-100" : "opacity-0"
|
|
418
418
|
}`}
|
|
419
419
|
data-testid="modal-backdrop"
|
|
@@ -429,7 +429,7 @@ const Modal: FunctionComponent<ComponentProps> = (
|
|
|
429
429
|
<div className="flex min-h-full items-end justify-center p-0 text-center sm:items-center sm:p-6">
|
|
430
430
|
<div
|
|
431
431
|
ref={modalRef}
|
|
432
|
-
className={`relative flex max-h-[calc(100dvh-1rem)] w-full flex-col rounded-t-2xl border border-gray-200/80 bg-white text-left shadow-2xl ring-1 ring-black/5 transition duration-
|
|
432
|
+
className={`relative flex max-h-[calc(100dvh-1rem)] w-full flex-col rounded-t-2xl border border-gray-200/80 bg-white text-left shadow-2xl ring-1 ring-black/5 transition duration-150 ease-out focus:outline-none motion-reduce:transition-none sm:my-8 sm:max-h-[calc(100dvh-4rem)] sm:rounded-xl ${modalWidthClassName} ${panelTransitionClassName}`}
|
|
433
433
|
data-testid="modal"
|
|
434
434
|
aria-labelledby={titleId}
|
|
435
435
|
aria-describedby={translatedDescription ? descriptionId : undefined}
|
|
@@ -47,7 +47,7 @@ import List from "../List/List";
|
|
|
47
47
|
import { ListDetailProps } from "../List/ListRow";
|
|
48
48
|
import ConfirmModal from "../Modal/ConfirmModal";
|
|
49
49
|
import Modal, { ModalWidth } from "../Modal/Modal";
|
|
50
|
-
import MarkdownViewer from "../Markdown.tsx/
|
|
50
|
+
import MarkdownViewer from "../Markdown.tsx/LazyMarkdownViewer";
|
|
51
51
|
import Icon from "../Icon/Icon";
|
|
52
52
|
import Filter from "../ModelFilter/Filter";
|
|
53
53
|
import { DropdownOption, DropdownOptionLabel } from "../Dropdown/Dropdown";
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
getCustomFieldColumns,
|
|
5
5
|
getCustomFieldDefinitions,
|
|
6
6
|
} from "./CustomFieldColumns";
|
|
7
|
-
import
|
|
7
|
+
import ModelListCache from "../../Utils/ModelListCache";
|
|
8
8
|
import ProjectUtil from "../../Utils/Project";
|
|
9
9
|
import { Logger } from "../../Utils/Logger";
|
|
10
10
|
import AnalyticsBaseModel from "../../../Models/AnalyticsModels/AnalyticsBaseModel/AnalyticsBaseModel";
|
|
@@ -96,8 +96,14 @@ const useCustomFieldColumns: UseCustomFieldColumnsFunction = <
|
|
|
96
96
|
setError("");
|
|
97
97
|
|
|
98
98
|
try {
|
|
99
|
-
|
|
100
|
-
|
|
99
|
+
/*
|
|
100
|
+
* Through ModelListCache rather than ModelAPI: a table mounts two
|
|
101
|
+
* instances of this hook (the facet bar and the column set), and both
|
|
102
|
+
* want the same definition list - the cache turns that into one
|
|
103
|
+
* request, shared for the next minute.
|
|
104
|
+
*/
|
|
105
|
+
const result: ListResult<BaseModel> =
|
|
106
|
+
await ModelListCache.getList<BaseModel>({
|
|
101
107
|
modelType: customFieldsModelType,
|
|
102
108
|
query: {
|
|
103
109
|
projectId: projectId,
|
|
@@ -113,8 +119,8 @@ const useCustomFieldColumns: UseCustomFieldColumnsFunction = <
|
|
|
113
119
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
114
120
|
} as any,
|
|
115
121
|
sort: {},
|
|
116
|
-
|
|
117
|
-
|
|
122
|
+
projectId: projectId,
|
|
123
|
+
});
|
|
118
124
|
|
|
119
125
|
if (isCancelled) {
|
|
120
126
|
return;
|
|
@@ -114,6 +114,13 @@ const MoreMenu: React.ForwardRefExoticComponent<
|
|
|
114
114
|
|
|
115
115
|
const [isDropdownVisible, setDropdownVisible] = useState<boolean>(false);
|
|
116
116
|
|
|
117
|
+
/*
|
|
118
|
+
* The menu is mounted in its closed state (faded, slightly shrunk towards
|
|
119
|
+
* origin-top-right) and flipped open one frame later so the browser has
|
|
120
|
+
* something to transition from — the same pattern Modal uses.
|
|
121
|
+
*/
|
|
122
|
+
const [hasMenuEntered, setHasMenuEntered] = useState<boolean>(false);
|
|
123
|
+
|
|
117
124
|
useEffect(() => {
|
|
118
125
|
setDropdownVisible(isComponentVisible);
|
|
119
126
|
if (isComponentVisible) {
|
|
@@ -123,6 +130,30 @@ const MoreMenu: React.ForwardRefExoticComponent<
|
|
|
123
130
|
}
|
|
124
131
|
}, [isComponentVisible]);
|
|
125
132
|
|
|
133
|
+
useEffect(() => {
|
|
134
|
+
if (!isComponentVisible) {
|
|
135
|
+
setHasMenuEntered(false);
|
|
136
|
+
return undefined;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
const open: () => void = (): void => {
|
|
140
|
+
setHasMenuEntered(true);
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
const frame: number = requestAnimationFrame(open);
|
|
144
|
+
|
|
145
|
+
/*
|
|
146
|
+
* A hidden or throttled tab never runs an animation frame; the timer
|
|
147
|
+
* skips the transition rather than leaving the menu at zero opacity.
|
|
148
|
+
*/
|
|
149
|
+
const fallbackTimer: ReturnType<typeof setTimeout> = setTimeout(open, 80);
|
|
150
|
+
|
|
151
|
+
return () => {
|
|
152
|
+
cancelAnimationFrame(frame);
|
|
153
|
+
clearTimeout(fallbackTimer);
|
|
154
|
+
};
|
|
155
|
+
}, [isComponentVisible]);
|
|
156
|
+
|
|
126
157
|
useEffect(() => {
|
|
127
158
|
if (props.isDisabled && isComponentVisible) {
|
|
128
159
|
setIsComponentVisible(false);
|
|
@@ -427,7 +458,14 @@ const MoreMenu: React.ForwardRefExoticComponent<
|
|
|
427
458
|
<div
|
|
428
459
|
ref={ref}
|
|
429
460
|
id={menuId}
|
|
430
|
-
|
|
461
|
+
/*
|
|
462
|
+
* Once settled the menu carries no transform class at all: a
|
|
463
|
+
* lingering scale would make it the containing block for any
|
|
464
|
+
* position:fixed descendant (the Modal invariant).
|
|
465
|
+
*/
|
|
466
|
+
className={`absolute right-0 z-50 mt-2 w-56 origin-top-right rounded-lg bg-white shadow-xl ring-1 ring-gray-200 focus:outline-none py-1 transition duration-150 ease-out motion-reduce:transition-none ${
|
|
467
|
+
hasMenuEntered ? "opacity-100" : "opacity-0 scale-95"
|
|
468
|
+
}`}
|
|
431
469
|
role="menu"
|
|
432
470
|
aria-orientation="vertical"
|
|
433
471
|
aria-labelledby={buttonId}
|