@oneuptime/common 12.0.13 → 12.0.15
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/GlobalOidc.ts +20 -0
- package/Models/DatabaseModels/GlobalSso.ts +20 -0
- package/Models/DatabaseModels/MarketingConversion.ts +19 -9
- package/Models/DatabaseModels/NetworkDeviceLinkRule.ts +46 -0
- package/Models/DatabaseModels/OnCallDutyPolicySchedule.ts +14 -0
- package/Models/DatabaseModels/StatusPage.ts +7 -4
- 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/Server/API/BaseAPI.ts +79 -14
- package/Server/API/StatusPageAPI.ts +29 -4
- 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/EnvironmentConfig.ts +7 -0
- 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/1787700000000-FixTotpOtpUrlAlgorithm.ts +45 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787800000000-AddScopeToNetworkDeviceLinkRule.ts +19 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787900000000-AddRestrictToAttachedProjectsToGlobalSso.ts +40 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +10 -0
- package/Server/Middleware/SlackAuthorization.ts +43 -6
- package/Server/Middleware/UserAuthorization.ts +236 -26
- package/Server/Middleware/VerificationCodeRateLimit.ts +586 -0
- package/Server/Middleware/WhatsAppAuthorization.ts +43 -3
- package/Server/Services/AnalyticsDatabaseService.ts +169 -0
- package/Server/Services/DatabaseService.ts +101 -0
- package/Server/Services/GlobalOidcProjectService.ts +126 -1
- package/Server/Services/GlobalOidcService.ts +132 -0
- package/Server/Services/GlobalSsoProjectService.ts +126 -1
- package/Server/Services/GlobalSsoService.ts +132 -0
- package/Server/Services/LogAggregationService.ts +5 -0
- package/Server/Services/PushNotificationService.ts +127 -12
- package/Server/Services/TeamMemberService.ts +53 -13
- 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/Types/Database/QueryHelper.ts +30 -0
- package/Server/Utils/AnalyticsDatabase/QuerySettingsHelper.ts +59 -0
- package/Server/Utils/ChannelVerification.ts +510 -0
- package/Server/Utils/CronTab.ts +73 -0
- package/Server/Utils/GlobalSsoAuthorization.ts +175 -0
- package/Server/Utils/Marketing/ConversionUploadProvider.ts +35 -5
- package/Server/Utils/Marketing/Providers/GoogleAds.ts +1 -1
- package/Server/Utils/Marketing/Providers/LinkedIn.ts +1 -1
- package/Server/Utils/Marketing/Providers/Meta.ts +1 -1
- package/Server/Utils/Marketing/Providers/MicrosoftAds.ts +1 -1
- package/Server/Utils/Marketing/Providers/Reddit.ts +1 -1
- package/Server/Utils/Monitor/Criteria/APIRequestCriteria.ts +48 -33
- package/Server/Utils/Monitor/Criteria/DnsMonitorCriteria.ts +35 -30
- package/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.ts +33 -28
- package/Server/Utils/Monitor/Criteria/EvaluateOverTime.ts +475 -47
- package/Server/Utils/Monitor/Criteria/ExternalStatusPageMonitorCriteria.ts +35 -30
- package/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.ts +47 -44
- package/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.ts +33 -28
- package/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.ts +69 -40
- package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +35 -29
- package/Server/Utils/Monitor/MonitorAlert.ts +24 -21
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +8 -0
- package/Server/Utils/Monitor/MonitorIncident.ts +21 -18
- package/Server/Utils/Monitor/MonitorResource.ts +161 -21
- package/Server/Utils/Monitor/MonitorResourceContext.ts +107 -0
- package/Server/Utils/Monitor/MonitorStepResourceIdentity.ts +442 -0
- package/Server/Utils/Monitor/SeriesResourceLabels.ts +3 -3
- package/Server/Utils/Monitor/SeriesResourceLinker.ts +96 -28
- package/Server/Utils/StatusPageContentSecurityPolicy.ts +56 -0
- package/Server/Utils/StatusPageCustomizationAccess.ts +117 -0
- package/Server/Utils/TotpAuth.ts +137 -9
- package/Server/Utils/UserRegistrationToken.ts +182 -0
- package/Server/Utils/VerificationCode.ts +134 -0
- 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 +28 -0
- package/Tests/Models/UserPushCriticalAlertColumn.test.ts +172 -0
- package/Tests/Server/API/BaseAPIGetListParallel.test.ts +519 -0
- package/Tests/Server/API/NotificationChannelVerificationAPI.test.ts +543 -0
- package/Tests/Server/API/StatusPageCustomizationOrigin.test.ts +348 -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/Postgres/FixTotpOtpUrlAlgorithmMigration.test.ts +265 -0
- package/Tests/Server/Infrastructure/Postgres/SchemaMigrationsOrdering.test.ts +227 -0
- package/Tests/Server/Middleware/SlackAuthorization.test.ts +149 -0
- package/Tests/Server/Middleware/UserAuthorization.test.ts +27 -13
- package/Tests/Server/Middleware/UserAuthorizationGlobalSsoGovernance.test.ts +1455 -0
- package/Tests/Server/Middleware/UserAuthorizationSSOProvider.test.ts +91 -2
- package/Tests/Server/Middleware/VerificationCodeRateLimit.test.ts +775 -0
- package/Tests/Server/Middleware/WhatsAppAuthorization.test.ts +233 -0
- package/Tests/Server/Services/AddNetworkDeviceReachabilityColumnsMigration.test.ts +10 -62
- package/Tests/Server/Services/AnalyticsDatabasePaginationStability.test.ts +33 -13
- package/Tests/Server/Services/AnalyticsDatabaseSortKeyBoundary.test.ts +658 -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/DeliverNotificationForRuleExtraction.test.ts +1 -0
- package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +21 -8
- package/Tests/Server/Services/GlobalSsoProviderAuthorization.test.ts +1242 -0
- package/Tests/Server/Services/LogAggregationScanMemory.test.ts +421 -0
- package/Tests/Server/Services/LogAggregationService.test.ts +2 -2
- package/Tests/Server/Services/MonitorResourceProbeAgreementHydration.test.ts +459 -0
- package/Tests/Server/Services/MonitorResourceProbeAgreementReuse.test.ts +10 -0
- 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/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/TestingUtils/AuthenticatorApp.ts +248 -0
- package/Tests/Server/Types/AnalyticsDatabase/AggregateUtilBucketTimestamp.test.ts +416 -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/Database/QueryHelperManyToManyAndEmptyValues.test.ts +551 -0
- package/Tests/Server/Types/Database/SelectUtil.test.ts +348 -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/Browser.test.ts +162 -0
- package/Tests/Server/Utils/ChannelVerification.test.ts +689 -0
- package/Tests/Server/Utils/CronTab.test.ts +116 -0
- package/Tests/Server/Utils/Express.test.ts +371 -0
- package/Tests/Server/Utils/GlobalSSOToken.test.ts +581 -0
- package/Tests/Server/Utils/GlobalSsoAuthorization.test.ts +1401 -0
- package/Tests/Server/Utils/Marketing/AdUploadableConversionTypes.test.ts +254 -0
- package/Tests/Server/Utils/Marketing/ConversionUploadProvider.test.ts +1 -1
- package/Tests/Server/Utils/Monitor/Criteria/APIRequestCriteriaEvaluateOverTime.test.ts +508 -0
- package/Tests/Server/Utils/Monitor/Criteria/APIRequestCriteriaPortTimings.test.ts +30 -9
- 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/EvaluateOverTime.test.ts +987 -0
- package/Tests/Server/Utils/Monitor/Criteria/ExternalStatusPageMonitorCriteria.test.ts +916 -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/ProfileMonitorCriteria.test.ts +382 -0
- package/Tests/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.test.ts +1219 -0
- 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 +86 -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/SeriesResourceLinker.test.ts +92 -18
- package/Tests/Server/Utils/PushNotificationUtilCreators.test.ts +267 -0
- package/Tests/Server/Utils/StatusPageContentSecurityPolicy.test.ts +136 -0
- package/Tests/Server/Utils/StatusPageCustomizationAccess.test.ts +223 -0
- package/Tests/Server/Utils/Telemetry/OneuptimeLabel.test.ts +439 -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/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/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/MonitorStepConfigHelpers.test.ts +165 -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/NetworkDevice/NetworkDeviceLinkRuleScope.test.ts +215 -0
- package/Tests/Types/Service/ServiceLanguage.test.ts +255 -0
- package/Tests/Types/TextRandomGeneration.test.ts +211 -0
- package/Tests/UI/Components/Button.test.tsx +175 -1
- 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/FormSubmitAnalytics.test.tsx +206 -0
- 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/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/AIChatExport/ConversationMarkdown.test.ts +774 -0
- package/Tests/UI/Utils/AIChatExport/MarkdownBlocks.test.ts +791 -0
- package/Tests/UI/Utils/AIChatExport/MarkdownSafety.test.ts +544 -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/Analytics.test.ts +187 -0
- 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 +80 -0
- package/Tests/Utils/Monitor/NetworkDeviceLinkRuleUtil.test.ts +1291 -0
- package/Tests/Utils/NetworkDiscovery/UnclaimedScanDiagnosis.test.ts +214 -0
- package/Tests/Utils/Rum/UrlScrubberSegments.test.ts +362 -0
- package/Types/Email/EmailTemplateType.ts +1 -0
- package/Types/Marketing/MarketingConversion.ts +12 -0
- package/Types/Monitor/CriteriaFilter.ts +9 -0
- package/Types/Monitor/MonitorCriteriaInstance.ts +41 -20
- package/Types/Monitor/Recommendation/MonitorRecommendationCatalog.ts +131 -8
- package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +48 -8
- package/Types/Monitor/ServiceAlertTemplates.ts +1352 -0
- package/Types/NetworkDevice/NetworkDeviceLinkRuleScope.ts +51 -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/Text.ts +111 -19
- package/UI/Components/Button/Button.tsx +27 -14
- 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/Feed/FeedItem.tsx +1 -1
- package/UI/Components/FormModal/BasicFormModal.tsx +12 -0
- package/UI/Components/Forms/BasicForm.tsx +13 -1
- package/UI/Components/Forms/BasicModelForm.tsx +2 -1
- package/UI/Components/Forms/ModelForm.tsx +10 -1
- package/UI/Components/Forms/Utils/FormAnalyticsName.ts +39 -0
- package/UI/Components/List/List.tsx +37 -5
- package/UI/Components/List/ListSkeleton.tsx +54 -0
- package/UI/Components/Markdown.tsx/LazyMarkdownViewer.tsx +6 -1
- package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +71 -26
- package/UI/Components/Modal/Modal.tsx +2 -2
- package/UI/Components/ModelFormModal/ModelFormModal.tsx +6 -1
- 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/Analytics.ts +55 -2
- package/Utils/Monitor/MonitorMetricType.ts +40 -0
- package/Utils/Monitor/NetworkDeviceLinkRuleUtil.ts +587 -37
- package/Utils/NetworkDiscovery/UnclaimedScanDiagnosis.ts +115 -0
- package/build/dist/Models/DatabaseModels/GlobalOidc.js +21 -0
- package/build/dist/Models/DatabaseModels/GlobalOidc.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalSso.js +21 -0
- package/build/dist/Models/DatabaseModels/GlobalSso.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MarketingConversion.js +20 -10
- package/build/dist/Models/DatabaseModels/MarketingConversion.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceLinkRule.js +47 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceLinkRule.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 +4 -4
- package/build/dist/Models/DatabaseModels/StatusPage.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/Server/API/BaseAPI.js +69 -13
- package/build/dist/Server/API/BaseAPI.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +25 -4
- package/build/dist/Server/API/StatusPageAPI.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/EnvironmentConfig.js +6 -0
- package/build/dist/Server/EnvironmentConfig.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/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/1787800000000-AddScopeToNetworkDeviceLinkRule.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787800000000-AddScopeToNetworkDeviceLinkRule.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787900000000-AddRestrictToAttachedProjectsToGlobalSso.js +29 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787900000000-AddRestrictToAttachedProjectsToGlobalSso.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/SlackAuthorization.js +28 -4
- package/build/dist/Server/Middleware/SlackAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/UserAuthorization.js +197 -22
- 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/Middleware/WhatsAppAuthorization.js +32 -2
- package/build/dist/Server/Middleware/WhatsAppAuthorization.js.map +1 -1
- package/build/dist/Server/Services/AnalyticsDatabaseService.js +136 -0
- package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +74 -0
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/GlobalOidcProjectService.js +105 -0
- package/build/dist/Server/Services/GlobalOidcProjectService.js.map +1 -1
- package/build/dist/Server/Services/GlobalOidcService.js +127 -0
- package/build/dist/Server/Services/GlobalOidcService.js.map +1 -1
- package/build/dist/Server/Services/GlobalSsoProjectService.js +105 -0
- package/build/dist/Server/Services/GlobalSsoProjectService.js.map +1 -1
- package/build/dist/Server/Services/GlobalSsoService.js +127 -0
- package/build/dist/Server/Services/GlobalSsoService.js.map +1 -1
- package/build/dist/Server/Services/LogAggregationService.js +5 -0
- package/build/dist/Server/Services/LogAggregationService.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/TeamMemberService.js +43 -7
- package/build/dist/Server/Services/TeamMemberService.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/Types/Database/QueryHelper.js +27 -0
- package/build/dist/Server/Types/Database/QueryHelper.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/ChannelVerification.js +348 -0
- package/build/dist/Server/Utils/ChannelVerification.js.map +1 -0
- package/build/dist/Server/Utils/CronTab.js +66 -0
- package/build/dist/Server/Utils/CronTab.js.map +1 -1
- package/build/dist/Server/Utils/GlobalSsoAuthorization.js +112 -0
- package/build/dist/Server/Utils/GlobalSsoAuthorization.js.map +1 -0
- package/build/dist/Server/Utils/Marketing/ConversionUploadProvider.js +17 -1
- package/build/dist/Server/Utils/Marketing/ConversionUploadProvider.js.map +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/GoogleAds.js +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/GoogleAds.js.map +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/LinkedIn.js +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/LinkedIn.js.map +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/Meta.js +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/Meta.js.map +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/MicrosoftAds.js +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/MicrosoftAds.js.map +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/Reddit.js +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/Reddit.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/APIRequestCriteria.js +37 -35
- package/build/dist/Server/Utils/Monitor/Criteria/APIRequestCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/DnsMonitorCriteria.js +21 -25
- package/build/dist/Server/Utils/Monitor/Criteria/DnsMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.js +20 -22
- package/build/dist/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js +370 -42
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/ExternalStatusPageMonitorCriteria.js +21 -25
- package/build/dist/Server/Utils/Monitor/Criteria/ExternalStatusPageMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js +34 -37
- package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.js +21 -25
- package/build/dist/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.js +64 -52
- package/build/dist/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +25 -29
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.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/MonitorCriteriaEvaluator.js +8 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.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 +123 -23
- 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/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/StatusPageContentSecurityPolicy.js +39 -0
- package/build/dist/Server/Utils/StatusPageContentSecurityPolicy.js.map +1 -0
- package/build/dist/Server/Utils/StatusPageCustomizationAccess.js +85 -0
- package/build/dist/Server/Utils/StatusPageCustomizationAccess.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/Types/Email/EmailTemplateType.js +1 -0
- package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
- package/build/dist/Types/Marketing/MarketingConversion.js +10 -0
- package/build/dist/Types/Marketing/MarketingConversion.js.map +1 -1
- package/build/dist/Types/Monitor/CriteriaFilter.js +1 -0
- package/build/dist/Types/Monitor/CriteriaFilter.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/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/NetworkDevice/NetworkDeviceLinkRuleScope.js +46 -0
- package/build/dist/Types/NetworkDevice/NetworkDeviceLinkRuleScope.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/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/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/Feed/FeedItem.js +1 -1
- package/build/dist/UI/Components/Feed/FeedItem.js.map +1 -1
- package/build/dist/UI/Components/FormModal/BasicFormModal.js +2 -1
- package/build/dist/UI/Components/FormModal/BasicFormModal.js.map +1 -1
- package/build/dist/UI/Components/Forms/BasicForm.js +10 -1
- package/build/dist/UI/Components/Forms/BasicForm.js.map +1 -1
- package/build/dist/UI/Components/Forms/BasicModelForm.js +2 -1
- package/build/dist/UI/Components/Forms/BasicModelForm.js.map +1 -1
- package/build/dist/UI/Components/Forms/ModelForm.js +4 -1
- package/build/dist/UI/Components/Forms/ModelForm.js.map +1 -1
- package/build/dist/UI/Components/Forms/Utils/FormAnalyticsName.js +33 -0
- package/build/dist/UI/Components/Forms/Utils/FormAnalyticsName.js.map +1 -0
- 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/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/Modal/Modal.js +2 -2
- package/build/dist/UI/Components/ModelFormModal/ModelFormModal.js +2 -1
- package/build/dist/UI/Components/ModelFormModal/ModelFormModal.js.map +1 -1
- 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/Analytics.js +50 -2
- package/build/dist/Utils/Analytics.js.map +1 -1
- package/build/dist/Utils/Monitor/MonitorMetricType.js +37 -0
- package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
- package/build/dist/Utils/Monitor/NetworkDeviceLinkRuleUtil.js +318 -37
- package/build/dist/Utils/Monitor/NetworkDeviceLinkRuleUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/UnclaimedScanDiagnosis.js +87 -0
- package/build/dist/Utils/NetworkDiscovery/UnclaimedScanDiagnosis.js.map +1 -0
- 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
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import ObjectID from "../../Types/ObjectID";
|
|
2
|
+
import InMemoryTTLCache from "../Infrastructure/InMemoryTTLCache";
|
|
3
|
+
|
|
4
|
+
/*
|
|
5
|
+
* The stateful half of Global SSO enforcement.
|
|
6
|
+
*
|
|
7
|
+
* A Global SSO/OIDC token is a 30-day, self-contained JWT with no project
|
|
8
|
+
* binding, so on its own it answers only "this person authenticated against
|
|
9
|
+
* SOME instance-wide identity provider at some point in the last month". Two
|
|
10
|
+
* questions it cannot answer:
|
|
11
|
+
*
|
|
12
|
+
* 1. IS THE PROVIDER STILL TRUSTED? Turning a provider off, or deleting it,
|
|
13
|
+
* has to actually cut off access. Without a check at request time the
|
|
14
|
+
* "Enabled" toggle does nothing to anyone already signed in, for up to
|
|
15
|
+
* thirty days. This check is UNCONDITIONAL - "disabled" has only one
|
|
16
|
+
* possible meaning.
|
|
17
|
+
*
|
|
18
|
+
* 2. DOES THE PROVIDER GOVERN THIS PROJECT? Deliberately OPT-IN, per
|
|
19
|
+
* provider, via `restrictToAttachedProjects`. The attachment rows
|
|
20
|
+
* (GlobalSsoProject / GlobalOidcProject) were introduced as the
|
|
21
|
+
* PROVISIONING allow-list - "a SAML assertion can only ever provision a
|
|
22
|
+
* user into projects that a master admin has explicitly attached here",
|
|
23
|
+
* per the model's own docstring - and the login routers gate a session on
|
|
24
|
+
* membership of ANY project, not of an attached one. Reading attachments
|
|
25
|
+
* as an access boundary by default would therefore lock existing users
|
|
26
|
+
* out of projects they legitimately reach today, immediately on upgrade,
|
|
27
|
+
* with no way to recover from inside the product. So it stays off unless
|
|
28
|
+
* an admin asks for it.
|
|
29
|
+
*
|
|
30
|
+
* Both answers come from Postgres and run on every authenticated request
|
|
31
|
+
* against an SSO-enforced project, so both are cached in-process for 60
|
|
32
|
+
* seconds, and concurrent misses share one query.
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
export const GLOBAL_SSO_AUTHORIZATION_CACHE_TTL_MS: number = 60_000;
|
|
36
|
+
|
|
37
|
+
/** What the enforcement path needs to know about a global provider. */
|
|
38
|
+
export interface GlobalProviderTrust {
|
|
39
|
+
// The provider row exists and its "Enabled" toggle is on.
|
|
40
|
+
isUsable: boolean;
|
|
41
|
+
// The admin opted this provider into attachment-scoped access.
|
|
42
|
+
restrictToAttachedProjects: boolean;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/*
|
|
46
|
+
* Absence of an entry means "not yet looked up", which is why these are read
|
|
47
|
+
* with an explicit `undefined` check rather than a truthiness test: a cached
|
|
48
|
+
* "this provider is disabled" must not be mistaken for a cache miss and
|
|
49
|
+
* re-queried on every single request.
|
|
50
|
+
*/
|
|
51
|
+
export const globalSsoProviderTrustCache: InMemoryTTLCache<GlobalProviderTrust> =
|
|
52
|
+
new InMemoryTTLCache(10_000);
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* A provider's attachment rows.
|
|
56
|
+
*
|
|
57
|
+
* `hasAnyAttachmentRows` distinguishes "this provider has no attachments at
|
|
58
|
+
* all" from "it has attachments but every one of them is disabled". Collapsing
|
|
59
|
+
* those two would mean an admin disabling the last attachment WIDENS the
|
|
60
|
+
* provider to every project - the exact opposite of the intent.
|
|
61
|
+
*/
|
|
62
|
+
export interface GlobalProviderAttachments {
|
|
63
|
+
hasAnyAttachmentRows: boolean;
|
|
64
|
+
enabledProjectIds: Array<string>;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export const globalSsoAttachmentsCache: InMemoryTTLCache<GlobalProviderAttachments> =
|
|
68
|
+
new InMemoryTTLCache(10_000);
|
|
69
|
+
|
|
70
|
+
export type GlobalProviderKind = "sso" | "oidc";
|
|
71
|
+
|
|
72
|
+
/*
|
|
73
|
+
* Namespaced by kind. A Global SSO provider and a Global OIDC provider are
|
|
74
|
+
* different rows in different tables and could in principle share an id;
|
|
75
|
+
* collapsing the keys would let one vouch for the other.
|
|
76
|
+
*/
|
|
77
|
+
export function globalProviderCacheKey(
|
|
78
|
+
providerKind: GlobalProviderKind,
|
|
79
|
+
providerId: ObjectID,
|
|
80
|
+
): string {
|
|
81
|
+
return `${providerKind}:${providerId.toString()}`;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Decides whether a provider's attachments cover `projectId`, for a provider
|
|
86
|
+
* that has opted into attachment-scoped access.
|
|
87
|
+
*
|
|
88
|
+
* A provider with no attachment rows at all is instance-wide, matching the
|
|
89
|
+
* "default-all" reading the login routers use. A provider that HAS attachment
|
|
90
|
+
* rows governs exactly the enabled ones - so disabling them all denies rather
|
|
91
|
+
* than widens.
|
|
92
|
+
*/
|
|
93
|
+
export function doAttachmentsGovernProject(
|
|
94
|
+
attachments: GlobalProviderAttachments,
|
|
95
|
+
projectId: ObjectID,
|
|
96
|
+
): boolean {
|
|
97
|
+
if (!attachments.hasAnyAttachmentRows) {
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return attachments.enabledProjectIds.includes(projectId.toString());
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/** Drops every cached answer. Used by the write hooks and by tests. */
|
|
105
|
+
export function clearGlobalSsoAuthorizationCaches(): void {
|
|
106
|
+
globalSsoProviderTrustCache.clear();
|
|
107
|
+
globalSsoAttachmentsCache.clear();
|
|
108
|
+
inFlightTrustLookups.clear();
|
|
109
|
+
inFlightAttachmentLookups.clear();
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/*
|
|
113
|
+
* In-flight de-duplication.
|
|
114
|
+
*
|
|
115
|
+
* The multi-tenant permission path fans out over every project the user
|
|
116
|
+
* belongs to CONCURRENTLY. Without this, a cold cache means N simultaneous
|
|
117
|
+
* copies of the same two queries - for a user in fifty projects, a hundred
|
|
118
|
+
* queries where two would do. Worse, failures are never cached, so a database
|
|
119
|
+
* that is already struggling gets the full fan-out again on every request.
|
|
120
|
+
*
|
|
121
|
+
* Sharing the promise collapses all of that to one query per provider, and a
|
|
122
|
+
* rejection is shared too rather than being retried N times in the same tick.
|
|
123
|
+
*/
|
|
124
|
+
const inFlightTrustLookups: Map<
|
|
125
|
+
string,
|
|
126
|
+
Promise<GlobalProviderTrust>
|
|
127
|
+
> = new Map();
|
|
128
|
+
const inFlightAttachmentLookups: Map<
|
|
129
|
+
string,
|
|
130
|
+
Promise<GlobalProviderAttachments>
|
|
131
|
+
> = new Map();
|
|
132
|
+
|
|
133
|
+
async function loadOnce<T>(
|
|
134
|
+
inFlight: Map<string, Promise<T>>,
|
|
135
|
+
key: string,
|
|
136
|
+
load: () => Promise<T>,
|
|
137
|
+
): Promise<T> {
|
|
138
|
+
const existing: Promise<T> | undefined = inFlight.get(key);
|
|
139
|
+
|
|
140
|
+
if (existing) {
|
|
141
|
+
return existing;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
const pending: Promise<T> = load().finally((): void => {
|
|
145
|
+
/*
|
|
146
|
+
* Only clear the slot if it is still OURS. A cache clear between the two
|
|
147
|
+
* (every write to a Global SSO/OIDC service does exactly that, twice) lets
|
|
148
|
+
* a NEWER lookup take the key while this one is still on the wire; a blind
|
|
149
|
+
* delete would evict that newer entry when this one settles, and the fan-
|
|
150
|
+
* out that follows would stop de-duplicating - the one situation this
|
|
151
|
+
* exists for.
|
|
152
|
+
*/
|
|
153
|
+
if (inFlight.get(key) === pending) {
|
|
154
|
+
inFlight.delete(key);
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
inFlight.set(key, pending);
|
|
159
|
+
|
|
160
|
+
return pending;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
export function loadTrustOnce(
|
|
164
|
+
key: string,
|
|
165
|
+
load: () => Promise<GlobalProviderTrust>,
|
|
166
|
+
): Promise<GlobalProviderTrust> {
|
|
167
|
+
return loadOnce(inFlightTrustLookups, key, load);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
export function loadAttachmentsOnce(
|
|
171
|
+
key: string,
|
|
172
|
+
load: () => Promise<GlobalProviderAttachments>,
|
|
173
|
+
): Promise<GlobalProviderAttachments> {
|
|
174
|
+
return loadOnce(inFlightAttachmentLookups, key, load);
|
|
175
|
+
}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { AxiosError } from "axios";
|
|
2
2
|
import { JSONObject } from "../../../Types/JSON";
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
AdUploadableMarketingConversionTypes,
|
|
5
|
+
MarketingConversionType,
|
|
6
|
+
} from "../../../Types/Marketing/MarketingConversion";
|
|
4
7
|
import MarketingConversion from "../../../Models/DatabaseModels/MarketingConversion";
|
|
5
8
|
|
|
6
9
|
/*
|
|
@@ -11,9 +14,12 @@ import MarketingConversion from "../../../Models/DatabaseModels/MarketingConvers
|
|
|
11
14
|
*
|
|
12
15
|
* Contract:
|
|
13
16
|
* - getSkipReason returns a human-readable reason when this conversion can
|
|
14
|
-
* never be uploaded to this platform (
|
|
15
|
-
* platform's upload window,
|
|
16
|
-
* type). Null means uploadable.
|
|
17
|
+
* never be uploaded to this platform (conversion type with no ad-platform
|
|
18
|
+
* mapping, wrong/missing click id, outside the platform's upload window,
|
|
19
|
+
* provider not configured for this conversion type). Null means uploadable.
|
|
20
|
+
* It is implemented here and must not be overridden — providers implement
|
|
21
|
+
* getProviderSkipReason instead, which only runs for conversion types that
|
|
22
|
+
* are ad-uploadable at all.
|
|
17
23
|
* - upload() sends one batch. Per-conversion PERMANENT rejections are
|
|
18
24
|
* returned in the result keyed by array index; they will not be retried.
|
|
19
25
|
* Transport/auth-level failures must THROW — the whole batch stays pending
|
|
@@ -52,7 +58,31 @@ export default abstract class ConversionUploadProvider {
|
|
|
52
58
|
|
|
53
59
|
public abstract isConfigured(): boolean;
|
|
54
60
|
|
|
55
|
-
|
|
61
|
+
/*
|
|
62
|
+
* Every provider maps a conversion onto a platform conversion action by
|
|
63
|
+
* branching on isSignUp() — so a conversion type the ad platforms have no
|
|
64
|
+
* mapping for (a booked meeting) would otherwise be silently uploaded as a
|
|
65
|
+
* purchase. Screen those out here, before any provider sees them, so no
|
|
66
|
+
* provider or call site can skip the check.
|
|
67
|
+
*/
|
|
68
|
+
public getSkipReason(conversion: MarketingConversion): ConversionSkip | null {
|
|
69
|
+
if (
|
|
70
|
+
!AdUploadableMarketingConversionTypes.includes(
|
|
71
|
+
conversion.conversionType as MarketingConversionType,
|
|
72
|
+
)
|
|
73
|
+
) {
|
|
74
|
+
return {
|
|
75
|
+
reason: `Conversion type ${
|
|
76
|
+
conversion.conversionType || "unknown"
|
|
77
|
+
} has no ad platform conversion mapping`,
|
|
78
|
+
isPermanent: true,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return this.getProviderSkipReason(conversion);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
protected abstract getProviderSkipReason(
|
|
56
86
|
conversion: MarketingConversion,
|
|
57
87
|
): ConversionSkip | null;
|
|
58
88
|
|
|
@@ -46,7 +46,7 @@ export default class GoogleAdsProvider extends ConversionUploadProvider {
|
|
|
46
46
|
);
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
protected override getProviderSkipReason(
|
|
50
50
|
conversion: MarketingConversion,
|
|
51
51
|
): ConversionSkip | null {
|
|
52
52
|
if (!this.getGoogleClickId(conversion)) {
|
|
@@ -41,7 +41,7 @@ export default class LinkedInProvider extends ConversionUploadProvider {
|
|
|
41
41
|
return Boolean(LinkedInConversionsAccessToken);
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
protected override getProviderSkipReason(
|
|
45
45
|
conversion: MarketingConversion,
|
|
46
46
|
): ConversionSkip | null {
|
|
47
47
|
if (!this.getClickId(conversion, "li_fat_id")) {
|
|
@@ -32,7 +32,7 @@ export default class MetaProvider extends ConversionUploadProvider {
|
|
|
32
32
|
return Boolean(MetaConversionsPixelId && MetaConversionsAccessToken);
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
protected override getProviderSkipReason(
|
|
36
36
|
conversion: MarketingConversion,
|
|
37
37
|
): ConversionSkip | null {
|
|
38
38
|
if (!this.getClickId(conversion, "fbclid")) {
|
|
@@ -45,7 +45,7 @@ export default class MicrosoftAdsProvider extends ConversionUploadProvider {
|
|
|
45
45
|
);
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
protected override getProviderSkipReason(
|
|
49
49
|
conversion: MarketingConversion,
|
|
50
50
|
): ConversionSkip | null {
|
|
51
51
|
if (!this.getClickId(conversion, "msclkid")) {
|
|
@@ -41,7 +41,7 @@ export default class RedditProvider extends ConversionUploadProvider {
|
|
|
41
41
|
);
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
protected override getProviderSkipReason(
|
|
45
45
|
conversion: MarketingConversion,
|
|
46
46
|
): ConversionSkip | null {
|
|
47
47
|
if (!this.getClickId(conversion, "rdt_cid")) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import DataToProcess from "../DataToProcess";
|
|
2
2
|
import CompareCriteria from "./CompareCriteria";
|
|
3
|
-
import EvaluateOverTime from "./EvaluateOverTime";
|
|
3
|
+
import EvaluateOverTime, { OverTimeCriteriaValue } from "./EvaluateOverTime";
|
|
4
4
|
import { JSONObject } from "../../../../Types/JSON";
|
|
5
5
|
import {
|
|
6
6
|
CheckOn,
|
|
@@ -10,50 +10,65 @@ import {
|
|
|
10
10
|
import ProbeMonitorResponse from "../../../../Types/Probe/ProbeMonitorResponse";
|
|
11
11
|
import Typeof from "../../../../Types/Typeof";
|
|
12
12
|
import CaptureSpan from "../../Telemetry/CaptureSpan";
|
|
13
|
-
import logger from "../../Logger";
|
|
14
13
|
|
|
15
14
|
export default class APIRequestCriteria {
|
|
16
15
|
@CaptureSpan()
|
|
17
16
|
public static async isMonitorInstanceCriteriaFilterMet(input: {
|
|
18
17
|
dataToProcess: DataToProcess;
|
|
19
18
|
criteriaFilter: CriteriaFilter;
|
|
19
|
+
/*
|
|
20
|
+
* The monitor's monitoringInterval cron. Over-time filters use it to
|
|
21
|
+
* work out how many samples a fully covered window should hold, so a
|
|
22
|
+
* monitor that has only just started is not mistaken for one whose
|
|
23
|
+
* whole window is breaching.
|
|
24
|
+
*/
|
|
25
|
+
monitoringInterval?: string | undefined;
|
|
20
26
|
}): Promise<string | null> {
|
|
21
27
|
// Server Monitoring Checks
|
|
22
28
|
|
|
23
29
|
let threshold: number | string | undefined | null =
|
|
24
30
|
input.criteriaFilter.value;
|
|
25
31
|
|
|
26
|
-
|
|
27
|
-
|
|
32
|
+
const overTime: OverTimeCriteriaValue =
|
|
33
|
+
await EvaluateOverTime.getOverTimeValueForCriteriaFilter({
|
|
34
|
+
projectId: (input.dataToProcess as ProbeMonitorResponse).projectId,
|
|
35
|
+
monitorId: input.dataToProcess.monitorId!,
|
|
36
|
+
criteriaFilter: input.criteriaFilter,
|
|
37
|
+
/*
|
|
38
|
+
* Only the disk-usage series carries a diskPath attribute, so
|
|
39
|
+
* scoping any other series by it would filter against an attribute
|
|
40
|
+
* no row has - and an empty window now means "cannot judge yet"
|
|
41
|
+
* rather than "compare the live value", which would silence the
|
|
42
|
+
* filter outright.
|
|
43
|
+
*/
|
|
44
|
+
miscData:
|
|
45
|
+
input.criteriaFilter.checkOn === CheckOn.DiskUsagePercent
|
|
46
|
+
? (input.criteriaFilter.serverMonitorOptions as JSONObject)
|
|
47
|
+
: undefined,
|
|
48
|
+
monitoringInterval: input.monitoringInterval,
|
|
49
|
+
});
|
|
28
50
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
miscData: input.criteriaFilter.serverMonitorOptions as JSONObject,
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
if (Array.isArray(overTimeValue) && overTimeValue.length === 0) {
|
|
43
|
-
overTimeValue = undefined;
|
|
44
|
-
}
|
|
45
|
-
} catch (err) {
|
|
46
|
-
logger.error(
|
|
47
|
-
`Error in getting over time value for ${input.criteriaFilter.checkOn}`,
|
|
48
|
-
);
|
|
49
|
-
logger.error(err);
|
|
50
|
-
overTimeValue = undefined;
|
|
51
|
-
}
|
|
51
|
+
/*
|
|
52
|
+
* The window could not back this over-time filter (nothing recorded yet,
|
|
53
|
+
* or the monitor has not been running long enough to cover it). Return
|
|
54
|
+
* the decision the no-data policy already made instead of falling
|
|
55
|
+
* through to the value that arrived with this one check - that fallback
|
|
56
|
+
* is what let "all values over the last N minutes" fire off a single
|
|
57
|
+
* bad reading.
|
|
58
|
+
*/
|
|
59
|
+
if (overTime.earlyReturn) {
|
|
60
|
+
return overTime.earlyReturn.result;
|
|
52
61
|
}
|
|
53
62
|
|
|
63
|
+
const overTimeValue:
|
|
64
|
+
| Array<number | boolean>
|
|
65
|
+
| number
|
|
66
|
+
| boolean
|
|
67
|
+
| undefined = overTime.value;
|
|
68
|
+
|
|
54
69
|
if (input.criteriaFilter.checkOn === CheckOn.IsOnline) {
|
|
55
70
|
const currentIsOnline: boolean | Array<boolean> =
|
|
56
|
-
(overTimeValue as Array<boolean>)
|
|
71
|
+
(overTimeValue as Array<boolean>) ??
|
|
57
72
|
(input.dataToProcess as ProbeMonitorResponse).isOnline;
|
|
58
73
|
|
|
59
74
|
return CompareCriteria.compareCriteriaBoolean({
|
|
@@ -64,7 +79,7 @@ export default class APIRequestCriteria {
|
|
|
64
79
|
|
|
65
80
|
if (input.criteriaFilter.checkOn === CheckOn.IsRequestTimeout) {
|
|
66
81
|
const currentIsTimeout: boolean | Array<boolean> =
|
|
67
|
-
(overTimeValue as Array<boolean>)
|
|
82
|
+
(overTimeValue as Array<boolean>) ??
|
|
68
83
|
(input.dataToProcess as ProbeMonitorResponse).isTimeout;
|
|
69
84
|
|
|
70
85
|
return CompareCriteria.compareCriteriaBoolean({
|
|
@@ -78,7 +93,7 @@ export default class APIRequestCriteria {
|
|
|
78
93
|
threshold = CompareCriteria.convertToNumber(threshold);
|
|
79
94
|
|
|
80
95
|
const value: Array<number> | number =
|
|
81
|
-
(overTimeValue as Array<number>)
|
|
96
|
+
(overTimeValue as Array<number>) ??
|
|
82
97
|
(input.dataToProcess as ProbeMonitorResponse).responseTimeInMs!;
|
|
83
98
|
|
|
84
99
|
return CompareCriteria.compareCriteriaNumbers({
|
|
@@ -124,7 +139,7 @@ export default class APIRequestCriteria {
|
|
|
124
139
|
).pingResponse?.packetLossPercent;
|
|
125
140
|
|
|
126
141
|
const value: Array<number> | number | undefined =
|
|
127
|
-
(overTimeValue as Array<number>)
|
|
142
|
+
(overTimeValue as Array<number>) ?? packetLossPercent;
|
|
128
143
|
|
|
129
144
|
if (value === undefined) {
|
|
130
145
|
return null;
|
|
@@ -146,7 +161,7 @@ export default class APIRequestCriteria {
|
|
|
146
161
|
).pingResponse?.jitterInMs;
|
|
147
162
|
|
|
148
163
|
const value: Array<number> | number | undefined =
|
|
149
|
-
(overTimeValue as Array<number>)
|
|
164
|
+
(overTimeValue as Array<number>) ?? jitterInMs;
|
|
150
165
|
|
|
151
166
|
if (value === undefined) {
|
|
152
167
|
return null;
|
|
@@ -169,7 +184,7 @@ export default class APIRequestCriteria {
|
|
|
169
184
|
threshold = CompareCriteria.convertToNumber(threshold);
|
|
170
185
|
|
|
171
186
|
const value: Array<number> | number =
|
|
172
|
-
(overTimeValue as Array<number>)
|
|
187
|
+
(overTimeValue as Array<number>) ??
|
|
173
188
|
(input.dataToProcess as ProbeMonitorResponse).responseCode!;
|
|
174
189
|
|
|
175
190
|
return CompareCriteria.compareCriteriaNumbers({
|
|
@@ -7,15 +7,21 @@ import {
|
|
|
7
7
|
} from "../../../../Types/Monitor/CriteriaFilter";
|
|
8
8
|
import DnsMonitorResponse from "../../../../Types/Monitor/DnsMonitor/DnsMonitorResponse";
|
|
9
9
|
import ProbeMonitorResponse from "../../../../Types/Probe/ProbeMonitorResponse";
|
|
10
|
-
import EvaluateOverTime from "./EvaluateOverTime";
|
|
10
|
+
import EvaluateOverTime, { OverTimeCriteriaValue } from "./EvaluateOverTime";
|
|
11
11
|
import CaptureSpan from "../../Telemetry/CaptureSpan";
|
|
12
|
-
import logger from "../../Logger";
|
|
13
12
|
|
|
14
13
|
export default class DnsMonitorCriteria {
|
|
15
14
|
@CaptureSpan()
|
|
16
15
|
public static async isMonitorInstanceCriteriaFilterMet(input: {
|
|
17
16
|
dataToProcess: DataToProcess;
|
|
18
17
|
criteriaFilter: CriteriaFilter;
|
|
18
|
+
/*
|
|
19
|
+
* The monitor's monitoringInterval cron. Over-time filters use it to
|
|
20
|
+
* work out how many samples a fully covered window should hold, so a
|
|
21
|
+
* monitor that has only just started is not mistaken for one whose
|
|
22
|
+
* whole window is breaching.
|
|
23
|
+
*/
|
|
24
|
+
monitoringInterval?: string | undefined;
|
|
19
25
|
}): Promise<string | null> {
|
|
20
26
|
let threshold: number | string | undefined | null =
|
|
21
27
|
input.criteriaFilter.value;
|
|
@@ -26,37 +32,36 @@ export default class DnsMonitorCriteria {
|
|
|
26
32
|
const dnsResponse: DnsMonitorResponse | undefined =
|
|
27
33
|
dataToProcess.dnsResponse;
|
|
28
34
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
try {
|
|
37
|
-
overTimeValue = await EvaluateOverTime.getValueOverTime({
|
|
38
|
-
projectId: (input.dataToProcess as ProbeMonitorResponse).projectId,
|
|
39
|
-
monitorId: input.dataToProcess.monitorId!,
|
|
40
|
-
evaluateOverTimeOptions: input.criteriaFilter.evaluateOverTimeOptions,
|
|
41
|
-
metricType: input.criteriaFilter.checkOn,
|
|
42
|
-
});
|
|
35
|
+
const overTime: OverTimeCriteriaValue =
|
|
36
|
+
await EvaluateOverTime.getOverTimeValueForCriteriaFilter({
|
|
37
|
+
projectId: (input.dataToProcess as ProbeMonitorResponse).projectId,
|
|
38
|
+
monitorId: input.dataToProcess.monitorId!,
|
|
39
|
+
criteriaFilter: input.criteriaFilter,
|
|
40
|
+
monitoringInterval: input.monitoringInterval,
|
|
41
|
+
});
|
|
43
42
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
43
|
+
/*
|
|
44
|
+
* The window could not back this over-time filter (nothing recorded yet,
|
|
45
|
+
* or the monitor has not been running long enough to cover it). Return
|
|
46
|
+
* the decision the no-data policy already made instead of falling
|
|
47
|
+
* through to the value that arrived with this one check - that fallback
|
|
48
|
+
* is what let "all values over the last N minutes" fire off a single
|
|
49
|
+
* bad reading.
|
|
50
|
+
*/
|
|
51
|
+
if (overTime.earlyReturn) {
|
|
52
|
+
return overTime.earlyReturn.result;
|
|
54
53
|
}
|
|
55
54
|
|
|
55
|
+
const overTimeValue:
|
|
56
|
+
| Array<number | boolean>
|
|
57
|
+
| number
|
|
58
|
+
| boolean
|
|
59
|
+
| undefined = overTime.value;
|
|
60
|
+
|
|
56
61
|
// Check if DNS is online
|
|
57
62
|
if (input.criteriaFilter.checkOn === CheckOn.DnsIsOnline) {
|
|
58
63
|
const currentIsOnline: boolean | Array<boolean> =
|
|
59
|
-
(overTimeValue as Array<boolean>)
|
|
64
|
+
(overTimeValue as Array<boolean>) ??
|
|
60
65
|
(input.dataToProcess as ProbeMonitorResponse).isOnline;
|
|
61
66
|
|
|
62
67
|
return CompareCriteria.compareCriteriaBoolean({
|
|
@@ -74,9 +79,9 @@ export default class DnsMonitorCriteria {
|
|
|
74
79
|
}
|
|
75
80
|
|
|
76
81
|
const currentResponseTime: number | Array<number> =
|
|
77
|
-
(overTimeValue as Array<number>)
|
|
78
|
-
dnsResponse?.responseTimeInMs ||
|
|
79
|
-
|
|
82
|
+
(overTimeValue as Array<number>) ??
|
|
83
|
+
(dnsResponse?.responseTimeInMs ||
|
|
84
|
+
(input.dataToProcess as ProbeMonitorResponse).responseTimeInMs);
|
|
80
85
|
|
|
81
86
|
if (currentResponseTime === null || currentResponseTime === undefined) {
|
|
82
87
|
return null;
|
|
@@ -8,14 +8,20 @@ import {
|
|
|
8
8
|
import DomainMonitorResponse from "../../../../Types/Monitor/DomainMonitor/DomainMonitorResponse";
|
|
9
9
|
import ProbeMonitorResponse from "../../../../Types/Probe/ProbeMonitorResponse";
|
|
10
10
|
import CaptureSpan from "../../Telemetry/CaptureSpan";
|
|
11
|
-
import EvaluateOverTime from "./EvaluateOverTime";
|
|
12
|
-
import logger from "../../Logger";
|
|
11
|
+
import EvaluateOverTime, { OverTimeCriteriaValue } from "./EvaluateOverTime";
|
|
13
12
|
|
|
14
13
|
export default class DomainMonitorCriteria {
|
|
15
14
|
@CaptureSpan()
|
|
16
15
|
public static async isMonitorInstanceCriteriaFilterMet(input: {
|
|
17
16
|
dataToProcess: DataToProcess;
|
|
18
17
|
criteriaFilter: CriteriaFilter;
|
|
18
|
+
/*
|
|
19
|
+
* The monitor's monitoringInterval cron. Over-time filters use it to
|
|
20
|
+
* work out how many samples a fully covered window should hold, so a
|
|
21
|
+
* monitor that has only just started is not mistaken for one whose
|
|
22
|
+
* whole window is breaching.
|
|
23
|
+
*/
|
|
24
|
+
monitoringInterval?: string | undefined;
|
|
19
25
|
}): Promise<string | null> {
|
|
20
26
|
let threshold: number | string | undefined | null =
|
|
21
27
|
input.criteriaFilter.value;
|
|
@@ -26,33 +32,32 @@ export default class DomainMonitorCriteria {
|
|
|
26
32
|
const domainResponse: DomainMonitorResponse | undefined =
|
|
27
33
|
dataToProcess.domainResponse;
|
|
28
34
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
try {
|
|
37
|
-
overTimeValue = await EvaluateOverTime.getValueOverTime({
|
|
38
|
-
projectId: dataToProcess.projectId,
|
|
39
|
-
monitorId: input.dataToProcess.monitorId!,
|
|
40
|
-
evaluateOverTimeOptions: input.criteriaFilter.evaluateOverTimeOptions,
|
|
41
|
-
metricType: input.criteriaFilter.checkOn,
|
|
42
|
-
});
|
|
35
|
+
const overTime: OverTimeCriteriaValue =
|
|
36
|
+
await EvaluateOverTime.getOverTimeValueForCriteriaFilter({
|
|
37
|
+
projectId: dataToProcess.projectId,
|
|
38
|
+
monitorId: input.dataToProcess.monitorId!,
|
|
39
|
+
criteriaFilter: input.criteriaFilter,
|
|
40
|
+
monitoringInterval: input.monitoringInterval,
|
|
41
|
+
});
|
|
43
42
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
43
|
+
/*
|
|
44
|
+
* The window could not back this over-time filter (nothing recorded yet,
|
|
45
|
+
* or the monitor has not been running long enough to cover it). Return
|
|
46
|
+
* the decision the no-data policy already made instead of falling
|
|
47
|
+
* through to the value that arrived with this one check - that fallback
|
|
48
|
+
* is what let "all values over the last N minutes" fire off a single
|
|
49
|
+
* bad reading.
|
|
50
|
+
*/
|
|
51
|
+
if (overTime.earlyReturn) {
|
|
52
|
+
return overTime.earlyReturn.result;
|
|
54
53
|
}
|
|
55
54
|
|
|
55
|
+
const overTimeValue:
|
|
56
|
+
| Array<number | boolean>
|
|
57
|
+
| number
|
|
58
|
+
| boolean
|
|
59
|
+
| undefined = overTime.value;
|
|
60
|
+
|
|
56
61
|
/*
|
|
57
62
|
* Whether the registration lookup itself succeeded. Without this, a
|
|
58
63
|
* domain whose TLD has no working WHOIS or RDAP service produces a
|
|
@@ -62,7 +67,7 @@ export default class DomainMonitorCriteria {
|
|
|
62
67
|
*/
|
|
63
68
|
if (input.criteriaFilter.checkOn === CheckOn.IsOnline) {
|
|
64
69
|
const currentIsOnline: boolean | Array<boolean> =
|
|
65
|
-
(overTimeValue as Array<boolean>)
|
|
70
|
+
(overTimeValue as Array<boolean>) ?? dataToProcess.isOnline;
|
|
66
71
|
|
|
67
72
|
return CompareCriteria.compareCriteriaBoolean({
|
|
68
73
|
value: currentIsOnline,
|
|
@@ -72,7 +77,7 @@ export default class DomainMonitorCriteria {
|
|
|
72
77
|
|
|
73
78
|
if (input.criteriaFilter.checkOn === CheckOn.IsRequestTimeout) {
|
|
74
79
|
const currentIsTimeout: boolean | Array<boolean> =
|
|
75
|
-
(overTimeValue as Array<boolean>)
|
|
80
|
+
(overTimeValue as Array<boolean>) ?? dataToProcess.isTimeout;
|
|
76
81
|
|
|
77
82
|
return CompareCriteria.compareCriteriaBoolean({
|
|
78
83
|
value: currentIsTimeout,
|