@oneuptime/common 13.0.7 → 13.0.8
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/OnCallDutyPolicyScheduleCalendarFeed.ts +1 -1
- package/Models/DatabaseModels/ProjectOnCallCalendarFeed.ts +1 -1
- package/Models/DatabaseModels/UserOnCallCalendarFeed.ts +1 -1
- package/Server/API/AIBillingAPI.ts +1 -0
- package/Server/API/AIInsightAPI.ts +1 -4
- package/Server/API/AIInvestigationAPI.ts +1 -4
- package/Server/API/AIReadinessAPI.ts +4 -5
- package/Server/API/AlertAPI.ts +1 -0
- package/Server/API/AutoRemediationAPI.ts +1 -4
- package/Server/API/BaseAPI.ts +13 -0
- package/Server/API/BaseAnalyticsAPI.ts +80 -9
- package/Server/API/BillingAPI.ts +2 -0
- package/Server/API/BillingInvoiceAPI.ts +1 -0
- package/Server/API/BillingPaymentMethodAPI.ts +2 -0
- package/Server/API/CodeFixRunAPI.ts +1 -3
- package/Server/API/CommonAPI.ts +68 -4
- package/Server/API/DashboardAPI.ts +12 -12
- package/Server/API/GlobalConfigAPI.ts +17 -0
- package/Server/API/IncidentAPI.ts +2 -0
- package/Server/API/IncidentEpisodeAPI.ts +1 -0
- package/Server/API/NotificationAPI.ts +1 -0
- package/Server/API/OnCallCalendarAPI.ts +4 -5
- package/Server/API/OnCallDutyPolicyAPI.ts +7 -0
- package/Server/API/OnCallReadinessAPI.ts +4 -1
- package/Server/API/OnCallScheduleTimelineAPI.ts +731 -0
- package/Server/API/ProjectAPI.ts +1 -0
- package/Server/API/ScheduledMaintenanceAPI.ts +1 -0
- package/Server/API/StatusPageAPI.ts +161 -32
- package/Server/API/TeamMemberAPI.ts +3 -0
- package/Server/API/UserCallAPI.ts +2 -0
- package/Server/API/UserEmailAPI.ts +2 -0
- package/Server/API/UserIncomingCallNumberAPI.ts +2 -0
- package/Server/API/UserMicrosoftTeamsAPI.ts +1 -0
- package/Server/API/UserSlackAPI.ts +1 -0
- package/Server/API/UserSmsAPI.ts +2 -0
- package/Server/API/UserTotpAuthAPI.ts +1 -0
- package/Server/API/UserWebAuthnAPI.ts +2 -0
- package/Server/API/UserWebhookAPI.ts +1 -0
- package/Server/API/UserWhatsAppAPI.ts +2 -0
- package/Server/Middleware/MasterAdminAuthorization.ts +13 -2
- package/Server/Middleware/UserAuthorization.ts +79 -5
- package/Server/Services/ApiKeyPermissionService.ts +101 -4
- package/Server/Services/DatabaseService.ts +245 -0
- package/Server/Services/DetectionRuleService.ts +5 -4
- package/Server/Services/OnCallDutyPolicyChildService.ts +261 -0
- package/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.ts +2 -2
- package/Server/Services/OnCallDutyPolicyEscalationRuleService.ts +2 -2
- package/Server/Services/OnCallDutyPolicyEscalationRuleTeamService.ts +2 -2
- package/Server/Services/OnCallDutyPolicyEscalationRuleUserService.ts +2 -2
- package/Server/Services/PayAsYouGoBillingService.ts +23 -28
- package/Server/Services/ProjectService.ts +18 -0
- package/Server/Services/RumSessionPinService.ts +274 -22
- package/Server/Services/TeamPermissionService.ts +120 -26
- package/Server/Services/ThreatIntelFeedService.ts +6 -3
- package/Server/Types/Database/Permissions/BasePermission.ts +9 -7
- package/Server/Types/Database/Permissions/Index.ts +75 -11
- package/Server/Types/Database/Permissions/TablePermission.ts +24 -28
- package/Server/Utils/AI/AIChatPrivacyFilter.ts +8 -0
- package/Server/Utils/AI/AIRunPrivacyFilter.ts +8 -0
- package/Server/Utils/MasterAdminPageAccess.ts +61 -0
- package/Server/Utils/Monitor/MonitorAlert.ts +3 -1
- package/Server/Utils/Monitor/MonitorIncident.ts +3 -1
- package/Server/Utils/OnCall/OnCallCalendarFeedRenderer.ts +1 -1
- package/Server/Utils/Realtime.ts +163 -45
- package/Server/Utils/SecurityEvent/DetectionRuleEvaluator.ts +11 -28
- package/Server/Utils/SecurityEvent/GoogleSecOpsSeverityRepair.ts +170 -0
- package/Server/Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler.ts +1 -1
- package/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.ts +6 -2
- package/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelMatcher.ts +10 -9
- package/Tests/App/Dashboard/AffectedResourcesPicker.test.tsx +1059 -0
- package/Tests/App/Dashboard/AffectedResourcesPickerEditForm.test.tsx +376 -0
- package/Tests/App/Dashboard/AffectedResourcesPickerHiddenTypes.test.tsx +757 -0
- package/Tests/App/Dashboard/AffectedResourcesSummaryStep.test.tsx +307 -0
- package/Tests/App/Dashboard/ArgumentsFormGroupByUnlistedAttributes.test.tsx +131 -0
- package/Tests/App/Dashboard/DashboardHeaderRequests.test.tsx +1 -1
- package/Tests/App/Dashboard/DashboardMonitorLabelVariable.test.tsx +9 -1
- package/Tests/App/Dashboard/DashboardVariableAllContract.test.tsx +24 -0
- package/Tests/App/Dashboard/DashboardVariableSelector.test.tsx +162 -8
- package/Tests/App/Dashboard/EntityFilterDropdownArchivedSlos.test.tsx +105 -6
- package/Tests/App/Dashboard/EntityFilterDropdownUnlistedSelection.test.tsx +434 -0
- package/Tests/App/Dashboard/EscalationRuleReadiness.test.tsx +276 -1
- package/Tests/App/Dashboard/OnCallCalendarFeedSideMenus.test.tsx +9 -1
- package/Tests/App/Dashboard/PayAsYouGoConsentGate.test.tsx +58 -42
- package/Tests/App/Dashboard/PayAsYouGoNotices.test.tsx +42 -5
- package/Tests/App/Dashboard/ResourceAuditLogsSideMenus.test.tsx +34 -23
- package/Tests/App/Dashboard/ScheduleTimeline.test.tsx +1580 -0
- package/Tests/App/Dashboard/ScheduleTimelineAPI.test.ts +280 -0
- package/Tests/App/Dashboard/ScheduleTimelineModel.test.ts +673 -0
- package/Tests/App/Dashboard/SecurityEventConnectionDiagnostics.test.tsx +95 -68
- package/Tests/App/Dashboard/SecurityEventsDetectionRulesPage.test.tsx +86 -3
- package/Tests/App/Dashboard/SecurityEventsEmptyState.test.tsx +28 -3
- package/Tests/App/Dashboard/SecurityEventsExplorer.test.tsx +761 -0
- package/Tests/App/Dashboard/SecurityEventsGuideContent.test.ts +1313 -0
- package/Tests/App/Dashboard/SecurityEventsHowItWorksCard.test.tsx +536 -0
- package/Tests/App/Dashboard/SecurityEventsNoResults.test.tsx +222 -0
- package/Tests/App/Dashboard/SecurityEventsThreatIntelPage.test.tsx +199 -0
- package/Tests/App/Dashboard/SecurityEventsVolumeChart.test.tsx +321 -0
- package/Tests/App/Dashboard/SloOverviewHero.test.tsx +171 -36
- package/Tests/App/Dashboard/SloViewSideMenu.test.tsx +215 -0
- package/Tests/App/Dashboard/SloViewSideMenuCounts.test.tsx +40 -3
- package/Tests/App/PublicDashboard/DashboardVariableSelector.test.tsx +12 -4
- package/Tests/App/PublicDashboard/PublicDashboardWidgetListAuth.test.tsx +623 -0
- package/Tests/Models/OnCallCalendarFeedModels.test.ts +23 -1
- package/Tests/Server/API/AIChatRouteAuthorization.test.ts +138 -5
- package/Tests/Server/API/AIGenerationProjectAIToggle.test.ts +187 -0
- package/Tests/Server/API/AIInvestigationAvailabilityAuthorization.test.ts +51 -3
- package/Tests/Server/API/AIInvestigationEvidenceAPI.test.ts +55 -2
- package/Tests/Server/API/BaseAnalyticsAPIAggregateCache.test.ts +729 -0
- package/Tests/Server/API/BillingPayAsYouGoStatus.test.ts +93 -7
- package/Tests/Server/API/BillingPaymentMethodAPI.test.ts +36 -3
- package/Tests/Server/API/CommonAPIAuthGuard.test.ts +1003 -24
- package/Tests/Server/API/DashboardPublicRateLimit.test.ts +6 -3
- package/Tests/Server/API/ExpiredSessionAIRoutes.test.ts +708 -0
- package/Tests/Server/API/ExpiredSessionCustomRoutes.test.ts +928 -0
- package/Tests/Server/API/ExpiredSessionMonitorTemplate.test.ts +319 -0
- package/Tests/Server/API/ExpiredSessionOnCallDutyPolicy.test.ts +336 -0
- package/Tests/Server/API/ExpiredSessionRouteGuards.test.ts +820 -0
- package/Tests/Server/API/GlobalConfigLicense.test.ts +140 -0
- package/Tests/Server/API/NotificationChannelVerificationAPI.test.ts +115 -12
- package/Tests/Server/API/OnCallCalendarAPI.test.ts +375 -8
- package/Tests/Server/API/OnCallReadinessAPI.test.ts +175 -17
- package/Tests/Server/API/OnCallScheduleTimelineAPI.test.ts +1513 -0
- package/Tests/Server/API/OnCallSetupReminderAPI.test.ts +119 -7
- package/Tests/Server/API/ProjectScopedCustomRouteAuth.test.ts +111 -4
- package/Tests/Server/API/PublicRouteInvalidAccessToken.test.ts +615 -0
- package/Tests/Server/API/SecurityEventAttributesAPI.test.ts +89 -2
- package/Tests/Server/API/SessionReplayAPI.test.ts +121 -0
- package/Tests/Server/API/StatusPageMasterPasswordRateLimit.test.ts +4 -2
- package/Tests/Server/API/StatusPagePostmortemVisibility.test.ts +441 -0
- package/Tests/Server/API/StatusPageTestEmailReportAuth.test.ts +664 -0
- package/Tests/Server/API/TeamMemberRemoveUserFromProjectAPI.test.ts +7 -0
- package/Tests/Server/API/UserIncomingCallNumberApi.test.ts +6 -0
- package/Tests/Server/API/UserNotificationSettingAPI.test.ts +65 -4
- package/Tests/Server/API/UserProjectsAPI.test.ts +63 -3
- package/Tests/Server/API/UserTotpAuthAPI.test.ts +48 -2
- package/Tests/Server/API/UserWebAuthnAuthenticationOptionsRoute.test.ts +11 -2
- package/Tests/Server/API/UserWebAuthnBackupCodeMinting.test.ts +46 -3
- package/Tests/Server/API/UserWebAuthnPasskeyAPI.test.ts +18 -2
- package/Tests/Server/API/ZZVerifyChatsAuth.test.ts +24 -7
- package/Tests/Server/Middleware/ExpiredSessionUserMiddleware.test.ts +563 -0
- package/Tests/Server/Middleware/MasterAdminAuthorization.test.ts +299 -19
- package/Tests/Server/Middleware/PublicRouteUserMiddleware.test.ts +453 -0
- package/Tests/Server/Services/AIChatPrivacyPin.test.ts +24 -0
- package/Tests/Server/Services/ApiKeyPermissionSecurity.test.ts +2 -0
- package/Tests/Server/Services/ApiKeyPermissionService.test.ts +3 -3
- package/Tests/Server/Services/DatabaseServiceCreateSuppliedId.test.ts +147 -0
- package/Tests/Server/Services/DatabaseServiceLoginBeforeHooks.test.ts +1078 -0
- package/Tests/Server/Services/DatabaseServiceTenantRelationGuard.test.ts +259 -0
- package/Tests/Server/Services/DatabaseServiceWriteOperatorValues.test.ts +147 -0
- package/Tests/Server/Services/MonitorPayAsYouGoBilling.test.ts +115 -1
- package/Tests/Server/Services/OnCallChildCreateAuthorizationPostgres.test.ts +711 -0
- package/Tests/Server/Services/OnCallDutyPolicyChildService.test.ts +733 -0
- package/Tests/Server/Services/PayAsYouGoBillingService.test.ts +190 -140
- package/Tests/Server/Services/PayAsYouGoStripeRateLimitBudget.test.ts +4 -9
- package/Tests/Server/Services/PermissionBlockDeletion.test.ts +780 -0
- package/Tests/Server/Services/PermissionBlockDeletionPostgres.test.ts +628 -0
- package/Tests/Server/Services/ProjectServiceCreateSubscriptionStarted.test.ts +77 -1
- package/Tests/Server/Services/RumSessionPinCreatePermission.test.ts +715 -0
- package/Tests/Server/Services/TeamMemberMultiTenantReadPostgres.test.ts +394 -0
- package/Tests/Server/Services/TeamPrivilegeEscalation.test.ts +6 -0
- package/Tests/Server/Services/TelemetryPayAsYouGoBilling.test.ts +131 -0
- package/Tests/Server/Services/UserNotificationRuleAdminGuards.test.ts +13 -2
- package/Tests/Server/Types/Database/Permissions/ModelPermissionAnonymousRefusal.test.ts +518 -0
- package/Tests/Server/Types/Database/Permissions/MultiTenantPermissions.test.ts +350 -0
- package/Tests/Server/Types/Database/Permissions/OnCallCalendarFeedPermissions.test.ts +282 -25
- package/Tests/Server/Types/Database/Permissions/TableLevelBlockPermission.test.ts +459 -0
- package/Tests/Server/Utils/AI/AIRunPrivacyFilter.test.ts +101 -9
- package/Tests/Server/Utils/AI/ChatAgentHelpers.test.ts +88 -4
- package/Tests/Server/Utils/AI/Toolbox/ExceptionTools.test.ts +459 -0
- package/Tests/Server/Utils/AI/Toolbox/LogTools.test.ts +794 -0
- package/Tests/Server/Utils/AI/Toolbox/RecentChangesTools.test.ts +574 -0
- package/Tests/Server/Utils/AI/Toolbox/SecurityEventTools.test.ts +596 -0
- package/Tests/Server/Utils/CaptchaRequestAndLogging.test.ts +395 -0
- package/Tests/Server/Utils/MasterAdminPageAccess.test.ts +251 -0
- package/Tests/Server/Utils/Monitor/MonitorActionTimestamps.test.ts +616 -0
- package/Tests/Server/Utils/Realtime.test.ts +502 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsConnectorSeverity.test.ts +216 -0
- package/Tests/Server/Utils/SecurityEvent/DetectionRuleEvaluator.test.ts +142 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsSeverityRepair.test.ts +140 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsSeverityRepairClickhouseIntegration.test.ts +542 -0
- package/Tests/Server/Utils/Telemetry/ChangeEventRow.test.ts +743 -0
- package/Tests/Server/Utils/Telemetry/RuntimeMetrics.test.ts +465 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/Messages/Alert.test.ts +202 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/Messages/Incident.test.ts +194 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/Messages/ScheduledMaintenance.test.ts +231 -0
- package/Tests/Server/Utils/Workspace/Slack/Messages/Alert.test.ts +194 -0
- package/Tests/Server/Utils/Workspace/Slack/Messages/AlertEpisode.test.ts +194 -0
- package/Tests/Server/Utils/Workspace/Slack/Messages/Incident.test.ts +194 -0
- package/Tests/Server/Utils/Workspace/Slack/Messages/IncidentEpisode.test.ts +194 -0
- package/Tests/Server/Utils/Workspace/Slack/Messages/ScheduledMaintenance.test.ts +247 -0
- package/Tests/Types/AI/AIInsightEvidence.test.ts +206 -0
- package/Tests/Types/BaseDatabase/DatabaseCommonInteractionPropsUtilAnonymous.test.ts +144 -0
- package/Tests/Types/Call/CallProvider.test.ts +528 -0
- package/Tests/Types/Kubernetes/KubernetesCostIngest.test.ts +236 -0
- package/Tests/Types/OnCallDutyPolicy/ScheduleTimeline.test.ts +736 -0
- package/Tests/Types/OnCallDutyPolicy/ScheduleTimelineLayout.test.ts +996 -0
- package/Tests/Types/SecurityEvent/SigmaRule.test.ts +142 -0
- package/Tests/Types/Workflow/Components/JSON.test.ts +182 -0
- package/Tests/UI/Components/BasicFormDropdownNormalization.test.tsx +116 -1
- package/Tests/UI/Components/Dropdown/DropdownAsyncOptions.test.tsx +81 -0
- package/Tests/UI/Components/EditionLabelLicenseRefresh.test.tsx +89 -1
- package/Tests/UI/Components/EventAttachmentList.test.tsx +174 -0
- package/Tests/UI/Components/Forms/BasicFormBurnRateTemplateDefaults.test.tsx +395 -0
- package/Tests/UI/Components/Forms/BasicFormCollapsibleSections.test.tsx +286 -0
- package/Tests/UI/Components/Forms/FormSummary.test.tsx +128 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableQueryChange.test.tsx +365 -0
- package/Tests/UI/Components/OpenAuthenticatedUrl.test.ts +358 -0
- package/Tests/UI/Components/SessionAwareImage.test.tsx +496 -0
- package/Tests/UI/Components/TelemetryHistogramZeroBuckets.test.tsx +190 -0
- package/Tests/UI/Components/TooltipInteractive.test.tsx +97 -0
- package/Tests/UI/MicrosoftTeams/MicrosoftTeamsChatsCardInstallGuidance.test.tsx +1 -1
- package/Tests/UI/Monitor/EvaluationLogListTimestamps.test.tsx +367 -0
- package/Tests/UI/Utils/API/BaseAPIRefreshSession.test.ts +1087 -0
- package/Tests/UI/Utils/API/DashboardHost.ts +12 -0
- package/Tests/UI/Utils/API/FakeAxiosServer.ts +183 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +10 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +2 -0
- package/Tests/UI/Utils/Cookie.test.ts +440 -0
- package/Tests/UI/Utils/ModelAPIRequestClient.test.ts +278 -0
- package/Tests/UI/Utils/Navigation.test.ts +33 -0
- package/Tests/UI/Utils/PricingPlan.test.ts +295 -0
- package/Tests/UI/Utils/Realtime.test.ts +759 -0
- package/Tests/UI/Utils/Telemetry/Telemetry.test.ts +500 -0
- package/Tests/Utils/APIInstanceDispatch.test.ts +311 -0
- package/Tests/Utils/SecurityEvent/GoogleSecOpsAlertNormalizerSeverity.test.ts +565 -0
- package/Types/BaseDatabase/DatabaseCommonInteractionPropsUtil.ts +40 -0
- package/Types/Monitor/MonitorEvaluationSummary.ts +3 -0
- package/Types/OnCallDutyPolicy/ScheduleTimeline.ts +507 -0
- package/Types/OnCallDutyPolicy/ScheduleTimelineLayout.ts +589 -0
- package/Types/Realtime/EventName.ts +11 -0
- package/Types/SecurityEvent/DetectionFindingConstants.ts +14 -0
- package/Types/SecurityEvent/OcsfSeverity.ts +31 -26
- package/Types/SecurityEvent/SigmaRule.ts +51 -0
- package/Types/SecurityEvent/ThreatIntelConstants.ts +18 -0
- package/UI/Components/AttachmentList/EventAttachmentList.tsx +30 -2
- package/UI/Components/Dashboard/DashboardVariableControl.tsx +12 -2
- package/UI/Components/Dropdown/Dropdown.tsx +6 -1
- package/UI/Components/EditionLabel/EditionLabel.tsx +12 -0
- package/UI/Components/EventItem/EventItem.tsx +12 -1
- package/UI/Components/Forms/BasicForm.tsx +151 -126
- package/UI/Components/Forms/CollapsibleFormSection.tsx +63 -0
- package/UI/Components/Forms/Fields/FormField.tsx +10 -4
- package/UI/Components/Forms/FormSummary.tsx +7 -0
- package/UI/Components/Forms/Types/Field.ts +10 -0
- package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +2 -1
- package/UI/Components/Markdown.tsx/SessionAwareImage.tsx +122 -0
- package/UI/Components/ModelTable/BaseModelTable.tsx +34 -5
- package/UI/Components/ModelTable/TableView.tsx +1 -1
- package/UI/Components/TelemetryViewer/components/TelemetryHistogram.tsx +8 -1
- package/UI/Components/Tooltip/Tooltip.tsx +8 -1
- package/UI/Utils/API/API.ts +173 -12
- package/UI/Utils/API/RequestOptions.ts +11 -0
- package/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.ts +31 -7
- package/UI/Utils/ModelAPI/ModelAPI.ts +30 -9
- package/UI/Utils/Navigation.ts +9 -0
- package/UI/Utils/OpenAuthenticatedUrl.ts +154 -0
- package/UI/Utils/Realtime.ts +176 -30
- package/Utils/API.ts +14 -5
- package/Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.ts +157 -7
- package/Utils/SecurityEvent/Sigma/SigmaRuleParser.ts +9 -17
- package/Utils/Slo/SloBurnRateTemplate.ts +2 -2
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.js +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProjectOnCallCalendarFeed.js +1 -1
- package/build/dist/Models/DatabaseModels/ProjectOnCallCalendarFeed.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserOnCallCalendarFeed.js +1 -1
- package/build/dist/Models/DatabaseModels/UserOnCallCalendarFeed.js.map +1 -1
- package/build/dist/Server/API/AIBillingAPI.js +1 -1
- package/build/dist/Server/API/AIBillingAPI.js.map +1 -1
- package/build/dist/Server/API/AIInsightAPI.js +1 -4
- package/build/dist/Server/API/AIInsightAPI.js.map +1 -1
- package/build/dist/Server/API/AIInvestigationAPI.js +1 -4
- package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
- package/build/dist/Server/API/AIReadinessAPI.js +1 -3
- package/build/dist/Server/API/AIReadinessAPI.js.map +1 -1
- package/build/dist/Server/API/AlertAPI.js +1 -1
- package/build/dist/Server/API/AlertAPI.js.map +1 -1
- package/build/dist/Server/API/AutoRemediationAPI.js +1 -4
- package/build/dist/Server/API/AutoRemediationAPI.js.map +1 -1
- package/build/dist/Server/API/BaseAPI.js +12 -0
- package/build/dist/Server/API/BaseAPI.js.map +1 -1
- package/build/dist/Server/API/BaseAnalyticsAPI.js +55 -10
- package/build/dist/Server/API/BaseAnalyticsAPI.js.map +1 -1
- package/build/dist/Server/API/BillingAPI.js +2 -2
- package/build/dist/Server/API/BillingAPI.js.map +1 -1
- package/build/dist/Server/API/BillingInvoiceAPI.js +1 -1
- package/build/dist/Server/API/BillingInvoiceAPI.js.map +1 -1
- package/build/dist/Server/API/BillingPaymentMethodAPI.js +2 -2
- package/build/dist/Server/API/BillingPaymentMethodAPI.js.map +1 -1
- package/build/dist/Server/API/CodeFixRunAPI.js +1 -3
- package/build/dist/Server/API/CodeFixRunAPI.js.map +1 -1
- package/build/dist/Server/API/CommonAPI.js +50 -5
- package/build/dist/Server/API/CommonAPI.js.map +1 -1
- package/build/dist/Server/API/DashboardAPI.js +12 -12
- package/build/dist/Server/API/DashboardAPI.js.map +1 -1
- package/build/dist/Server/API/GlobalConfigAPI.js +12 -0
- package/build/dist/Server/API/GlobalConfigAPI.js.map +1 -1
- package/build/dist/Server/API/IncidentAPI.js +2 -2
- package/build/dist/Server/API/IncidentAPI.js.map +1 -1
- package/build/dist/Server/API/IncidentEpisodeAPI.js +1 -1
- package/build/dist/Server/API/IncidentEpisodeAPI.js.map +1 -1
- package/build/dist/Server/API/NotificationAPI.js +1 -1
- package/build/dist/Server/API/NotificationAPI.js.map +1 -1
- package/build/dist/Server/API/OnCallCalendarAPI.js +1 -4
- package/build/dist/Server/API/OnCallCalendarAPI.js.map +1 -1
- package/build/dist/Server/API/OnCallDutyPolicyAPI.js +6 -0
- package/build/dist/Server/API/OnCallDutyPolicyAPI.js.map +1 -1
- package/build/dist/Server/API/OnCallReadinessAPI.js +4 -1
- package/build/dist/Server/API/OnCallReadinessAPI.js.map +1 -1
- package/build/dist/Server/API/OnCallScheduleTimelineAPI.js +494 -0
- package/build/dist/Server/API/OnCallScheduleTimelineAPI.js.map +1 -0
- package/build/dist/Server/API/ProjectAPI.js +1 -1
- package/build/dist/Server/API/ProjectAPI.js.map +1 -1
- package/build/dist/Server/API/ScheduledMaintenanceAPI.js +1 -1
- package/build/dist/Server/API/ScheduledMaintenanceAPI.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +125 -33
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/API/TeamMemberAPI.js +3 -3
- package/build/dist/Server/API/TeamMemberAPI.js.map +1 -1
- package/build/dist/Server/API/UserCallAPI.js +2 -2
- package/build/dist/Server/API/UserCallAPI.js.map +1 -1
- package/build/dist/Server/API/UserEmailAPI.js +2 -2
- package/build/dist/Server/API/UserEmailAPI.js.map +1 -1
- package/build/dist/Server/API/UserIncomingCallNumberAPI.js +2 -2
- package/build/dist/Server/API/UserIncomingCallNumberAPI.js.map +1 -1
- package/build/dist/Server/API/UserMicrosoftTeamsAPI.js +1 -1
- package/build/dist/Server/API/UserMicrosoftTeamsAPI.js.map +1 -1
- package/build/dist/Server/API/UserSlackAPI.js +1 -1
- package/build/dist/Server/API/UserSlackAPI.js.map +1 -1
- package/build/dist/Server/API/UserSmsAPI.js +2 -2
- package/build/dist/Server/API/UserSmsAPI.js.map +1 -1
- package/build/dist/Server/API/UserTotpAuthAPI.js +1 -1
- package/build/dist/Server/API/UserTotpAuthAPI.js.map +1 -1
- package/build/dist/Server/API/UserWebAuthnAPI.js +2 -2
- package/build/dist/Server/API/UserWebAuthnAPI.js.map +1 -1
- package/build/dist/Server/API/UserWebhookAPI.js +1 -1
- package/build/dist/Server/API/UserWebhookAPI.js.map +1 -1
- package/build/dist/Server/API/UserWhatsAppAPI.js +2 -2
- package/build/dist/Server/API/UserWhatsAppAPI.js.map +1 -1
- package/build/dist/Server/Middleware/MasterAdminAuthorization.js +11 -2
- package/build/dist/Server/Middleware/MasterAdminAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/UserAuthorization.js +64 -4
- package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
- package/build/dist/Server/Services/ApiKeyPermissionService.js +80 -4
- package/build/dist/Server/Services/ApiKeyPermissionService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +171 -0
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/DetectionRuleService.js +4 -4
- package/build/dist/Server/Services/DetectionRuleService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyChildService.js +170 -0
- package/build/dist/Server/Services/OnCallDutyPolicyChildService.js.map +1 -0
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js +2 -2
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js +2 -2
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleTeamService.js +2 -2
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleTeamService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleUserService.js +2 -2
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleUserService.js.map +1 -1
- package/build/dist/Server/Services/PayAsYouGoBillingService.js +20 -27
- package/build/dist/Server/Services/PayAsYouGoBillingService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +17 -0
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/RumSessionPinService.js +180 -16
- package/build/dist/Server/Services/RumSessionPinService.js.map +1 -1
- package/build/dist/Server/Services/TeamPermissionService.js +89 -27
- package/build/dist/Server/Services/TeamPermissionService.js.map +1 -1
- package/build/dist/Server/Services/ThreatIntelFeedService.js +5 -4
- package/build/dist/Server/Services/ThreatIntelFeedService.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/BasePermission.js +9 -6
- package/build/dist/Server/Types/Database/Permissions/BasePermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/Index.js +60 -6
- package/build/dist/Server/Types/Database/Permissions/Index.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/TablePermission.js +14 -13
- package/build/dist/Server/Types/Database/Permissions/TablePermission.js.map +1 -1
- package/build/dist/Server/Utils/AI/AIChatPrivacyFilter.js +7 -0
- package/build/dist/Server/Utils/AI/AIChatPrivacyFilter.js.map +1 -1
- package/build/dist/Server/Utils/AI/AIRunPrivacyFilter.js +7 -0
- package/build/dist/Server/Utils/AI/AIRunPrivacyFilter.js.map +1 -1
- package/build/dist/Server/Utils/MasterAdminPageAccess.js +39 -0
- package/build/dist/Server/Utils/MasterAdminPageAccess.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js +3 -1
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js +3 -1
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
- package/build/dist/Server/Utils/Realtime.js +126 -37
- package/build/dist/Server/Utils/Realtime.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js +7 -25
- package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOpsSeverityRepair.js +127 -0
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOpsSeverityRepair.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler.js +1 -1
- package/build/dist/Server/Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.js +3 -2
- package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelMatcher.js +4 -8
- package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelMatcher.js.map +1 -1
- package/build/dist/Types/BaseDatabase/DatabaseCommonInteractionPropsUtil.js +31 -1
- package/build/dist/Types/BaseDatabase/DatabaseCommonInteractionPropsUtil.js.map +1 -1
- package/build/dist/Types/OnCallDutyPolicy/ScheduleTimeline.js +321 -0
- package/build/dist/Types/OnCallDutyPolicy/ScheduleTimeline.js.map +1 -0
- package/build/dist/Types/OnCallDutyPolicy/ScheduleTimelineLayout.js +372 -0
- package/build/dist/Types/OnCallDutyPolicy/ScheduleTimelineLayout.js.map +1 -0
- package/build/dist/Types/Realtime/EventName.js +10 -0
- package/build/dist/Types/Realtime/EventName.js.map +1 -1
- package/build/dist/Types/SecurityEvent/DetectionFindingConstants.js +11 -0
- package/build/dist/Types/SecurityEvent/DetectionFindingConstants.js.map +1 -1
- package/build/dist/Types/SecurityEvent/OcsfSeverity.js +30 -25
- package/build/dist/Types/SecurityEvent/OcsfSeverity.js.map +1 -1
- package/build/dist/Types/SecurityEvent/SigmaRule.js +47 -0
- package/build/dist/Types/SecurityEvent/SigmaRule.js.map +1 -1
- package/build/dist/Types/SecurityEvent/ThreatIntelConstants.js +14 -0
- package/build/dist/Types/SecurityEvent/ThreatIntelConstants.js.map +1 -1
- package/build/dist/UI/Components/AttachmentList/EventAttachmentList.js +9 -4
- package/build/dist/UI/Components/AttachmentList/EventAttachmentList.js.map +1 -1
- package/build/dist/UI/Components/Dashboard/DashboardVariableControl.js +10 -2
- package/build/dist/UI/Components/Dashboard/DashboardVariableControl.js.map +1 -1
- package/build/dist/UI/Components/Dropdown/Dropdown.js +5 -1
- package/build/dist/UI/Components/Dropdown/Dropdown.js.map +1 -1
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js +11 -0
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
- package/build/dist/UI/Components/EventItem/EventItem.js +2 -2
- package/build/dist/UI/Components/EventItem/EventItem.js.map +1 -1
- package/build/dist/UI/Components/Forms/BasicForm.js +70 -64
- package/build/dist/UI/Components/Forms/BasicForm.js.map +1 -1
- package/build/dist/UI/Components/Forms/CollapsibleFormSection.js +27 -0
- package/build/dist/UI/Components/Forms/CollapsibleFormSection.js.map +1 -0
- package/build/dist/UI/Components/Forms/Fields/FormField.js +10 -7
- package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
- package/build/dist/UI/Components/Forms/FormSummary.js +7 -0
- package/build/dist/UI/Components/Forms/FormSummary.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +2 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/SessionAwareImage.js +84 -0
- package/build/dist/UI/Components/Markdown.tsx/SessionAwareImage.js.map +1 -0
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +14 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/TableView.js +1 -1
- package/build/dist/UI/Components/ModelTable/TableView.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js +8 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js.map +1 -1
- package/build/dist/UI/Components/Tooltip/Tooltip.js +2 -1
- package/build/dist/UI/Components/Tooltip/Tooltip.js.map +1 -1
- package/build/dist/UI/Utils/API/API.js +143 -19
- package/build/dist/UI/Utils/API/API.js.map +1 -1
- package/build/dist/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.js +21 -7
- package/build/dist/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.js.map +1 -1
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js +26 -9
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js.map +1 -1
- package/build/dist/UI/Utils/Navigation.js +8 -0
- package/build/dist/UI/Utils/Navigation.js.map +1 -1
- package/build/dist/UI/Utils/OpenAuthenticatedUrl.js +92 -0
- package/build/dist/UI/Utils/OpenAuthenticatedUrl.js.map +1 -0
- package/build/dist/UI/Utils/Realtime.js +120 -15
- package/build/dist/UI/Utils/Realtime.js.map +1 -1
- package/build/dist/Utils/API.js +13 -5
- package/build/dist/Utils/API.js.map +1 -1
- package/build/dist/Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.js +123 -6
- package/build/dist/Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.js.map +1 -1
- package/build/dist/Utils/SecurityEvent/Sigma/SigmaRuleParser.js +4 -18
- package/build/dist/Utils/SecurityEvent/Sigma/SigmaRuleParser.js.map +1 -1
- package/build/dist/Utils/Slo/SloBurnRateTemplate.js +2 -2
- package/package.json +1 -1
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
import BaseModel from "../../Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel";
|
|
2
|
+
import OnCallDutyPolicy from "../../Models/DatabaseModels/OnCallDutyPolicy";
|
|
3
|
+
import OnCallDutyPolicyEscalationRule from "../../Models/DatabaseModels/OnCallDutyPolicyEscalationRule";
|
|
4
|
+
import DatabaseCommonInteractionProps from "../../Types/BaseDatabase/DatabaseCommonInteractionProps";
|
|
5
|
+
import DatabaseCommonInteractionPropsUtil, {
|
|
6
|
+
PermissionType,
|
|
7
|
+
} from "../../Types/BaseDatabase/DatabaseCommonInteractionPropsUtil";
|
|
8
|
+
import PermissionScope from "../../Types/Database/AccessControl/PermissionScope";
|
|
9
|
+
import BadDataException from "../../Types/Exception/BadDataException";
|
|
10
|
+
import NotAuthorizedException from "../../Types/Exception/NotAuthorizedException";
|
|
11
|
+
import ObjectID from "../../Types/ObjectID";
|
|
12
|
+
import Permission, {
|
|
13
|
+
PermissionHelper,
|
|
14
|
+
UserPermission,
|
|
15
|
+
} from "../../Types/Permission";
|
|
16
|
+
import DatabaseRequestType from "../Types/BaseDatabase/DatabaseRequestType";
|
|
17
|
+
import CreateBy from "../Types/Database/CreateBy";
|
|
18
|
+
import CreatePermission from "../Types/Database/Permissions/CreatePermission";
|
|
19
|
+
import TablePermission from "../Types/Database/Permissions/TablePermission";
|
|
20
|
+
import Query from "../Types/Database/Query";
|
|
21
|
+
import RelationValueUtil from "../Utils/Database/RelationValueUtil";
|
|
22
|
+
import DatabaseService from "./DatabaseService";
|
|
23
|
+
|
|
24
|
+
/** Authorize escalation configuration before any create hook can change it. */
|
|
25
|
+
export default class OnCallDutyPolicyChildService<
|
|
26
|
+
TBaseModel extends BaseModel,
|
|
27
|
+
> extends DatabaseService<TBaseModel> {
|
|
28
|
+
public override async create(
|
|
29
|
+
createBy: CreateBy<TBaseModel>,
|
|
30
|
+
): Promise<TBaseModel> {
|
|
31
|
+
const { data, props }: CreateBy<TBaseModel> = createBy;
|
|
32
|
+
|
|
33
|
+
if (props.isRoot || props.isMasterAdmin) {
|
|
34
|
+
return super.create(createBy);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/*
|
|
38
|
+
* Check the original columns before normalizing relations. In particular,
|
|
39
|
+
* a read-only caller must not reach the rule-ordering create hook.
|
|
40
|
+
*/
|
|
41
|
+
CreatePermission.checkCreatePermissions(this.modelType, data, props);
|
|
42
|
+
|
|
43
|
+
if (!props.tenantId || props.isMultiTenantRequest) {
|
|
44
|
+
throw new NotAuthorizedException(
|
|
45
|
+
"A project is required to create on-call configuration.",
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/*
|
|
50
|
+
* DatabaseService uses save(), which can update when an ID is supplied.
|
|
51
|
+
* A create grant must never replace an existing (possibly hidden) child.
|
|
52
|
+
*/
|
|
53
|
+
if (data._id !== undefined && data._id !== null) {
|
|
54
|
+
throw new BadDataException(
|
|
55
|
+
"An ID cannot be supplied when creating on-call configuration.",
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const projectId: ObjectID = props.tenantId;
|
|
60
|
+
const suppliedProjectId: ObjectID | null = this.normalizeReference(
|
|
61
|
+
data,
|
|
62
|
+
"project",
|
|
63
|
+
);
|
|
64
|
+
if (
|
|
65
|
+
suppliedProjectId &&
|
|
66
|
+
suppliedProjectId.toString() !== projectId.toString().toLowerCase()
|
|
67
|
+
) {
|
|
68
|
+
throw new NotAuthorizedException(
|
|
69
|
+
"The on-call configuration must belong to the current project.",
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
data.setColumnValue("projectId", projectId);
|
|
73
|
+
|
|
74
|
+
const policyId: ObjectID | null = this.normalizeReference(
|
|
75
|
+
data,
|
|
76
|
+
"onCallDutyPolicy",
|
|
77
|
+
);
|
|
78
|
+
if (!policyId) {
|
|
79
|
+
throw new BadDataException("An on-call policy is required.");
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const policyQuery: Query<OnCallDutyPolicy> = {
|
|
83
|
+
_id: policyId.toString(),
|
|
84
|
+
projectId,
|
|
85
|
+
};
|
|
86
|
+
const policyService: DatabaseService<OnCallDutyPolicy> =
|
|
87
|
+
new DatabaseService(OnCallDutyPolicy);
|
|
88
|
+
const policy: OnCallDutyPolicy | null = await policyService.findOneBy({
|
|
89
|
+
query: policyQuery,
|
|
90
|
+
select: { _id: true },
|
|
91
|
+
props,
|
|
92
|
+
});
|
|
93
|
+
if (!policy) {
|
|
94
|
+
throw new NotAuthorizedException(
|
|
95
|
+
"You do not have permission to create configuration for this on-call policy.",
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/*
|
|
100
|
+
* Read access alone is insufficient: a broad viewer grant must not widen
|
|
101
|
+
* a Labels/Owned create grant or bypass a label-scoped create block. Apply
|
|
102
|
+
* the create grants to the already verified parent using the normal read
|
|
103
|
+
* scope machinery, which handles labels, ownership, and deny precedence.
|
|
104
|
+
*/
|
|
105
|
+
const creatablePolicy: OnCallDutyPolicy | null =
|
|
106
|
+
await policyService.findOneBy({
|
|
107
|
+
query: policyQuery,
|
|
108
|
+
select: { _id: true },
|
|
109
|
+
props: this.getCreateScopeProps(props),
|
|
110
|
+
});
|
|
111
|
+
if (!creatablePolicy) {
|
|
112
|
+
throw new NotAuthorizedException(
|
|
113
|
+
"You do not have permission to create configuration for this on-call policy.",
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
if (data.hasColumn("onCallDutyPolicyEscalationRuleId")) {
|
|
118
|
+
const ruleId: ObjectID | null = this.normalizeReference(
|
|
119
|
+
data,
|
|
120
|
+
"onCallDutyPolicyEscalationRule",
|
|
121
|
+
);
|
|
122
|
+
if (!ruleId) {
|
|
123
|
+
throw new BadDataException("An on-call escalation rule is required.");
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/*
|
|
127
|
+
* Escalation selects recipients by rule ID. Checking only policyId would
|
|
128
|
+
* let a caller pair an allowed policy with another policy's rule. This
|
|
129
|
+
* is an integrity lookup after authorizing the policy, not a new grant.
|
|
130
|
+
*/
|
|
131
|
+
const rule: OnCallDutyPolicyEscalationRule | null =
|
|
132
|
+
await new DatabaseService(OnCallDutyPolicyEscalationRule).findOneBy({
|
|
133
|
+
query: {
|
|
134
|
+
_id: ruleId.toString(),
|
|
135
|
+
projectId,
|
|
136
|
+
onCallDutyPolicyId: policyId,
|
|
137
|
+
},
|
|
138
|
+
select: { _id: true },
|
|
139
|
+
props: { isRoot: true },
|
|
140
|
+
});
|
|
141
|
+
if (!rule) {
|
|
142
|
+
throw new NotAuthorizedException(
|
|
143
|
+
"The escalation rule is not available in this on-call policy.",
|
|
144
|
+
);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
return super.create(createBy);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
private getCreateScopeProps(
|
|
152
|
+
props: DatabaseCommonInteractionProps,
|
|
153
|
+
): DatabaseCommonInteractionProps {
|
|
154
|
+
const createPermissions: Array<Permission> =
|
|
155
|
+
TablePermission.getTablePermission(
|
|
156
|
+
this.modelType,
|
|
157
|
+
DatabaseRequestType.Create,
|
|
158
|
+
);
|
|
159
|
+
const permissions: Array<UserPermission> = [
|
|
160
|
+
...DatabaseCommonInteractionPropsUtil.getUserPermissions(
|
|
161
|
+
props,
|
|
162
|
+
PermissionType.Allow,
|
|
163
|
+
),
|
|
164
|
+
...DatabaseCommonInteractionPropsUtil.getUserPermissions(
|
|
165
|
+
props,
|
|
166
|
+
PermissionType.Block,
|
|
167
|
+
),
|
|
168
|
+
]
|
|
169
|
+
.filter((row: UserPermission): boolean => {
|
|
170
|
+
return createPermissions.includes(row.permission);
|
|
171
|
+
})
|
|
172
|
+
.map((row: UserPermission): UserPermission => {
|
|
173
|
+
return {
|
|
174
|
+
...row,
|
|
175
|
+
permission: Permission.OnCallMember,
|
|
176
|
+
scope: PermissionHelper.isScopeApplicable(row.permission)
|
|
177
|
+
? row.scope
|
|
178
|
+
: PermissionScope.All,
|
|
179
|
+
};
|
|
180
|
+
});
|
|
181
|
+
const projectId: ObjectID = props.tenantId!;
|
|
182
|
+
return {
|
|
183
|
+
...props,
|
|
184
|
+
userGlobalAccessPermission: {
|
|
185
|
+
_type: "UserGlobalAccessPermission",
|
|
186
|
+
globalPermissions: [],
|
|
187
|
+
projectIds: [projectId],
|
|
188
|
+
},
|
|
189
|
+
userTenantAccessPermission: {
|
|
190
|
+
[projectId.toString()]: {
|
|
191
|
+
_type: "UserTenantAccessPermission",
|
|
192
|
+
projectId,
|
|
193
|
+
permissions,
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
private normalizeReference(
|
|
200
|
+
data: TBaseModel,
|
|
201
|
+
relation: string,
|
|
202
|
+
): ObjectID | null {
|
|
203
|
+
const column: string = `${relation}Id`;
|
|
204
|
+
const values: Record<string, unknown> = data as Record<string, unknown>;
|
|
205
|
+
const scalarValue: unknown = values[column];
|
|
206
|
+
const relationValue: unknown = values[relation];
|
|
207
|
+
const scalarId: string | null = this.referenceId(scalarValue);
|
|
208
|
+
const relationId: string | null = this.referenceId(relationValue);
|
|
209
|
+
|
|
210
|
+
if (scalarId && relationId && scalarId !== relationId) {
|
|
211
|
+
throw new BadDataException(
|
|
212
|
+
`${column} and ${relation} must refer to the same record.`,
|
|
213
|
+
);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
const id: string | null = scalarId || relationId;
|
|
217
|
+
// A null relation must not override a tenant ID supplied by the request.
|
|
218
|
+
data.setColumnValue(relation, undefined);
|
|
219
|
+
if (!id) {
|
|
220
|
+
return null;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
const objectId: ObjectID = new ObjectID(id);
|
|
224
|
+
data.setColumnValue(column, objectId);
|
|
225
|
+
// Leave one authoritative value for TypeORM and for downstream hooks.
|
|
226
|
+
return objectId;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
private referenceId(value: unknown): string | null {
|
|
230
|
+
if (value === undefined || value === null) {
|
|
231
|
+
return null;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
const id: string | null = RelationValueUtil.getRelationId(value);
|
|
235
|
+
if (!id) {
|
|
236
|
+
throw new BadDataException("A valid related record ID is required.");
|
|
237
|
+
}
|
|
238
|
+
ObjectID.validateUUID(id);
|
|
239
|
+
|
|
240
|
+
if (typeof value === "object" && !(value instanceof ObjectID)) {
|
|
241
|
+
const reference: Record<string, unknown> = value as Record<
|
|
242
|
+
string,
|
|
243
|
+
unknown
|
|
244
|
+
>;
|
|
245
|
+
if (
|
|
246
|
+
reference["_id"] !== undefined &&
|
|
247
|
+
reference["_id"] !== null &&
|
|
248
|
+
reference["id"] !== undefined &&
|
|
249
|
+
reference["id"] !== null &&
|
|
250
|
+
String(reference["_id"]).toLowerCase() !==
|
|
251
|
+
String(reference["id"]).toLowerCase()
|
|
252
|
+
) {
|
|
253
|
+
throw new BadDataException(
|
|
254
|
+
"Conflicting related record IDs are not allowed.",
|
|
255
|
+
);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
return id.toLowerCase();
|
|
260
|
+
}
|
|
261
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import BadDataException from "../../Types/Exception/BadDataException";
|
|
2
2
|
import ObjectID from "../../Types/ObjectID";
|
|
3
3
|
import { OnCreate, OnDelete } from "../Types/Database/Hooks";
|
|
4
|
-
import
|
|
4
|
+
import OnCallDutyPolicyChildService from "./OnCallDutyPolicyChildService";
|
|
5
5
|
import Model from "../../Models/DatabaseModels/OnCallDutyPolicyEscalationRuleSchedule";
|
|
6
6
|
import Dictionary from "../../Types/Dictionary";
|
|
7
7
|
import OnCallDutyPolicyService from "./OnCallDutyPolicyService";
|
|
@@ -27,7 +27,7 @@ import OneUptimeDate from "../../Types/Date";
|
|
|
27
27
|
import logger, { LogAttributes } from "../Utils/Logger";
|
|
28
28
|
import { OnCallShiftChangeReason } from "../Utils/OnCall/OnCallShiftChangeListeners";
|
|
29
29
|
|
|
30
|
-
export class Service extends
|
|
30
|
+
export class Service extends OnCallDutyPolicyChildService<Model> {
|
|
31
31
|
public constructor() {
|
|
32
32
|
super(Model);
|
|
33
33
|
}
|
|
@@ -5,7 +5,7 @@ import { OnCreate, OnDelete, OnUpdate } from "../Types/Database/Hooks";
|
|
|
5
5
|
import Query from "../Types/Database/Query";
|
|
6
6
|
import QueryHelper from "../Types/Database/QueryHelper";
|
|
7
7
|
import UpdateBy from "../Types/Database/UpdateBy";
|
|
8
|
-
import
|
|
8
|
+
import OnCallDutyPolicyChildService from "./OnCallDutyPolicyChildService";
|
|
9
9
|
import OnCallDutyPolicyEscalationRuleScheduleService from "./OnCallDutyPolicyEscalationRuleScheduleService";
|
|
10
10
|
import OnCallDutyPolicyEscalationRuleTeamService from "./OnCallDutyPolicyEscalationRuleTeamService";
|
|
11
11
|
import OnCallDutyPolicyEscalationRuleUserService from "./OnCallDutyPolicyEscalationRuleUserService";
|
|
@@ -36,7 +36,7 @@ import OnCallDutyPolicyUserOverride from "../../Models/DatabaseModels/OnCallDuty
|
|
|
36
36
|
import OnCallDutyPolicyUserOverrideService from "./OnCallDutyPolicyUserOverrideService";
|
|
37
37
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
38
38
|
|
|
39
|
-
export class Service extends
|
|
39
|
+
export class Service extends OnCallDutyPolicyChildService<Model> {
|
|
40
40
|
@CaptureSpan()
|
|
41
41
|
public async getRouteAlertToUserId(data: {
|
|
42
42
|
userId: ObjectID;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import BadDataException from "../../Types/Exception/BadDataException";
|
|
2
2
|
import ObjectID from "../../Types/ObjectID";
|
|
3
3
|
import { OnCreate, OnDelete } from "../Types/Database/Hooks";
|
|
4
|
-
import
|
|
4
|
+
import OnCallDutyPolicyChildService from "./OnCallDutyPolicyChildService";
|
|
5
5
|
import Model from "../../Models/DatabaseModels/OnCallDutyPolicyEscalationRuleTeam";
|
|
6
6
|
import Dictionary from "../../Types/Dictionary";
|
|
7
7
|
import OnCallDutyPolicyService from "./OnCallDutyPolicyService";
|
|
@@ -26,7 +26,7 @@ import Team from "../../Models/DatabaseModels/Team";
|
|
|
26
26
|
import OnCallDutyPolicyTimeLogService from "./OnCallDutyPolicyTimeLogService";
|
|
27
27
|
import OneUptimeDate from "../../Types/Date";
|
|
28
28
|
|
|
29
|
-
export class Service extends
|
|
29
|
+
export class Service extends OnCallDutyPolicyChildService<Model> {
|
|
30
30
|
public constructor() {
|
|
31
31
|
super(Model);
|
|
32
32
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import BadDataException from "../../Types/Exception/BadDataException";
|
|
2
2
|
import ObjectID from "../../Types/ObjectID";
|
|
3
3
|
import { OnCreate, OnDelete } from "../Types/Database/Hooks";
|
|
4
|
-
import
|
|
4
|
+
import OnCallDutyPolicyChildService from "./OnCallDutyPolicyChildService";
|
|
5
5
|
import Model from "../../Models/DatabaseModels/OnCallDutyPolicyEscalationRuleUser";
|
|
6
6
|
import Dictionary from "../../Types/Dictionary";
|
|
7
7
|
import OnCallDutyPolicyService from "./OnCallDutyPolicyService";
|
|
@@ -26,7 +26,7 @@ import { createWhatsAppMessageFromTemplate } from "../Utils/WhatsAppTemplateUtil
|
|
|
26
26
|
import logger, { LogAttributes } from "../Utils/Logger";
|
|
27
27
|
import { WhatsAppMessagePayload } from "../../Types/WhatsApp/WhatsAppMessage";
|
|
28
28
|
|
|
29
|
-
export class Service extends
|
|
29
|
+
export class Service extends OnCallDutyPolicyChildService<Model> {
|
|
30
30
|
public constructor() {
|
|
31
31
|
super(Model);
|
|
32
32
|
}
|
|
@@ -15,7 +15,7 @@ import Stripe from "stripe";
|
|
|
15
15
|
export const PAY_AS_YOU_GO_PAYMENT_REQUIRED_MESSAGE: string =
|
|
16
16
|
"Add a payment method in Project Settings > Billing before using paid monitoring or telemetry. These features have usage charges even on the Free plan. Manual monitors remain free.";
|
|
17
17
|
|
|
18
|
-
type PaymentAuthorization = "payment-method" | "
|
|
18
|
+
type PaymentAuthorization = "payment-method" | "paid-plan" | "reseller";
|
|
19
19
|
|
|
20
20
|
type NotAuthorized = "none";
|
|
21
21
|
const NOT_AUTHORIZED: NotAuthorized = "none";
|
|
@@ -24,9 +24,8 @@ const NOT_AUTHORIZED: NotAuthorized = "none";
|
|
|
24
24
|
* A denial is the expensive answer. An authorized project answers from the
|
|
25
25
|
* positive cache and costs one provider read a minute; an unauthorized one
|
|
26
26
|
* re-ran the full check every time, and that check costs a payment-method
|
|
27
|
-
* read per supported type
|
|
28
|
-
*
|
|
29
|
-
* runs for every ingested batch over OTLP, gRPC, MQTT and session replay, and
|
|
27
|
+
* read per supported type on the Free plan. On the telemetry admission path -
|
|
28
|
+
* which runs for every ingested batch over OTLP, gRPC, MQTT and session replay, and
|
|
30
29
|
* which deliberately re-checks even on a key-cache hit - that is a provider
|
|
31
30
|
* read storm proportional to ingest traffic, for exactly the projects that
|
|
32
31
|
* are not paying. It is enough on its own to hold a Stripe account at its
|
|
@@ -78,16 +77,15 @@ export class Service {
|
|
|
78
77
|
/*
|
|
79
78
|
* Whether a project bills under an agreement that already covers its earlier
|
|
80
79
|
* telemetry, and so takes no cutoff. Kept apart from authorizedProjects,
|
|
81
|
-
* which records
|
|
82
|
-
* customer who also keeps a card on file, that is the card.
|
|
80
|
+
* which records plan eligibility separately from payment and invoice terms.
|
|
83
81
|
*/
|
|
84
82
|
private noCutoffAgreements: InMemoryTTLCache<boolean> = new InMemoryTTLCache(
|
|
85
83
|
10_000,
|
|
86
84
|
);
|
|
87
85
|
|
|
88
86
|
/**
|
|
89
|
-
*
|
|
90
|
-
*
|
|
87
|
+
* Free projects need a payment method before incurring usage charges.
|
|
88
|
+
* Paid plans and verified reseller agreements already authorize usage.
|
|
91
89
|
* Short positive caching keeps the telemetry admission path affordable.
|
|
92
90
|
*
|
|
93
91
|
* `allowStaleDenial` additionally lets a recent denial answer without going
|
|
@@ -207,16 +205,14 @@ export class Service {
|
|
|
207
205
|
|
|
208
206
|
const authorization: PaymentAuthorization | NotAuthorized | undefined =
|
|
209
207
|
this.authorizedProjects.get(projectId.toString());
|
|
210
|
-
if (authorization === "
|
|
208
|
+
if (authorization === "reseller") {
|
|
211
209
|
return undefined;
|
|
212
210
|
}
|
|
213
211
|
|
|
214
212
|
/*
|
|
215
|
-
*
|
|
216
|
-
*
|
|
217
|
-
*
|
|
218
|
-
* telemetry their contract already bills. Ask about the agreement itself
|
|
219
|
-
* before any marker is written.
|
|
213
|
+
* Plan eligibility does not determine billing history. A cutoff stamped
|
|
214
|
+
* for an invoice customer would waive telemetry their contract already
|
|
215
|
+
* bills, so verify the agreement before writing a marker.
|
|
220
216
|
*/
|
|
221
217
|
if (await this.hasNoCutoffAgreement(projectId)) {
|
|
222
218
|
return undefined;
|
|
@@ -300,7 +296,7 @@ export class Service {
|
|
|
300
296
|
return "reseller";
|
|
301
297
|
}
|
|
302
298
|
|
|
303
|
-
if (!project.paymentProviderPlanId
|
|
299
|
+
if (!project.paymentProviderPlanId) {
|
|
304
300
|
return null;
|
|
305
301
|
}
|
|
306
302
|
|
|
@@ -314,23 +310,22 @@ export class Service {
|
|
|
314
310
|
return null;
|
|
315
311
|
}
|
|
316
312
|
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
*/
|
|
313
|
+
// The payment-method requirement applies only to the Free plan.
|
|
314
|
+
if (plan.getName() !== PlanType.Free) {
|
|
315
|
+
return "paid-plan";
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
if (!project.paymentProviderCustomerId) {
|
|
319
|
+
return null;
|
|
320
|
+
}
|
|
321
|
+
|
|
327
322
|
if (
|
|
328
323
|
await BillingService.hasPaymentMethods(project.paymentProviderCustomerId)
|
|
329
324
|
) {
|
|
330
325
|
return "payment-method";
|
|
331
326
|
}
|
|
332
327
|
|
|
333
|
-
return
|
|
328
|
+
return null;
|
|
334
329
|
}
|
|
335
330
|
|
|
336
331
|
/*
|
|
@@ -404,8 +399,8 @@ export class Service {
|
|
|
404
399
|
|
|
405
400
|
/*
|
|
406
401
|
* A paid plan whose own subscription, billed to this project's own customer,
|
|
407
|
-
* is active and collected by invoice.
|
|
408
|
-
*
|
|
402
|
+
* is active and collected by invoice. This determines the telemetry cutoff
|
|
403
|
+
* exemption independently of the project's eligibility to use paid features.
|
|
409
404
|
*/
|
|
410
405
|
private async hasInvoiceAgreement(project: Project): Promise<boolean> {
|
|
411
406
|
if (
|
|
@@ -1458,6 +1458,24 @@ These are no longer recorded against the project and have to be cancelled by han
|
|
|
1458
1458
|
id: createdItem.id!,
|
|
1459
1459
|
});
|
|
1460
1460
|
|
|
1461
|
+
/*
|
|
1462
|
+
* Written down before subscribing. subscribeToPlan reports metered
|
|
1463
|
+
* usage for this project while it runs, and that path looks the
|
|
1464
|
+
* project's billing customer up from this row: a paid-plan project with
|
|
1465
|
+
* no customer on record is refused with 402, which failed every
|
|
1466
|
+
* paid-plan signup. It also keeps the Stripe customer findable if the
|
|
1467
|
+
* subscription step fails.
|
|
1468
|
+
*/
|
|
1469
|
+
await this.updateOneById({
|
|
1470
|
+
id: createdItem.id!,
|
|
1471
|
+
data: {
|
|
1472
|
+
paymentProviderCustomerId: customerId,
|
|
1473
|
+
},
|
|
1474
|
+
props: {
|
|
1475
|
+
isRoot: true,
|
|
1476
|
+
},
|
|
1477
|
+
});
|
|
1478
|
+
|
|
1461
1479
|
const plan: SubscriptionPlan | undefined =
|
|
1462
1480
|
SubscriptionPlan.getSubscriptionPlanById(
|
|
1463
1481
|
createdItem.paymentProviderPlanId!,
|