@oneuptime/common 12.0.29 → 12.0.31
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/AnalyticsModels/SecurityEvent.ts +48 -16
- package/Models/AnalyticsModels/ThreatIntelIndicator.ts +10 -5
- package/Models/DatabaseModels/AlertSeverity.ts +44 -0
- package/Models/DatabaseModels/DetectionRule.ts +16 -5
- package/Models/DatabaseModels/GoogleSecOpsConnection.ts +14 -5
- package/Models/DatabaseModels/IncidentSeverity.ts +44 -0
- package/Models/DatabaseModels/Index.ts +13 -0
- package/Models/DatabaseModels/NetworkDevice.ts +113 -3
- package/Models/DatabaseModels/NetworkDeviceAutoImportRule.ts +88 -0
- package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +22 -0
- package/Models/DatabaseModels/NetworkDeviceOidTemplate.ts +499 -0
- package/Models/DatabaseModels/OnCallDutyPolicySchedule.ts +43 -0
- package/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.ts +662 -0
- package/Models/DatabaseModels/ProjectOnCallCalendarFeed.ts +584 -0
- package/Models/DatabaseModels/ThreatIntelFeed.ts +16 -5
- package/Models/DatabaseModels/UserOnCallCalendarFeed.ts +546 -0
- package/Models/DatabaseModels/UserOnCallShiftReminder.ts +231 -0
- package/Models/DatabaseModels/UserOnCallShiftReminderLog.ts +331 -0
- package/Server/API/GlobalConfigAPI.ts +362 -183
- package/Server/API/OnCallCalendarAPI.ts +2194 -0
- package/Server/API/TelemetryAPI.ts +42 -4
- package/Server/EnvironmentConfig.ts +250 -0
- package/Server/Infrastructure/OnCallCalendarFeedCache.ts +1050 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790400000000-AddOnCallCalendarFeeds.ts +253 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.ts +59 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.ts +25 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
- package/Server/Middleware/MultipartFormData.ts +118 -32
- package/Server/Middleware/OnCallCalendarFeedRateLimit.ts +487 -0
- package/Server/Services/AlertEpisodeLabelRuleEngineService.ts +9 -1
- package/Server/Services/AlertEpisodeOnCallRuleEngineService.ts +9 -1
- package/Server/Services/AlertEpisodeOwnerRuleEngineService.ts +9 -1
- package/Server/Services/AlertEpisodePrivacyRuleEngineService.ts +9 -1
- package/Server/Services/AlertGroupingEngineService.ts +9 -1
- package/Server/Services/AlertLabelRuleEngineService.ts +9 -1
- package/Server/Services/AlertOnCallRuleEngineService.ts +9 -1
- package/Server/Services/AlertOwnerRuleEngineService.ts +9 -1
- package/Server/Services/AlertPrivacyRuleEngineService.ts +9 -1
- package/Server/Services/AlertReminderRuleService.ts +9 -1
- package/Server/Services/AutoRemediationRuleEngineService.ts +9 -1
- package/Server/Services/CephClusterLabelRuleEngineService.ts +9 -1
- package/Server/Services/CephClusterOwnerRuleEngineService.ts +9 -1
- package/Server/Services/CloudResourceLabelRuleEngineService.ts +9 -1
- package/Server/Services/CloudResourceOwnerRuleEngineService.ts +9 -1
- package/Server/Services/DashboardLabelRuleEngineService.ts +9 -1
- package/Server/Services/DashboardOwnerRuleEngineService.ts +9 -1
- package/Server/Services/DockerHostLabelRuleEngineService.ts +9 -1
- package/Server/Services/DockerHostOwnerRuleEngineService.ts +9 -1
- package/Server/Services/DockerSwarmClusterLabelRuleEngineService.ts +9 -1
- package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +9 -1
- package/Server/Services/HostLabelRuleEngineService.ts +9 -1
- package/Server/Services/HostOwnerRuleEngineService.ts +9 -1
- package/Server/Services/IncidentEpisodeLabelRuleEngineService.ts +9 -1
- package/Server/Services/IncidentEpisodeOnCallRuleEngineService.ts +9 -1
- package/Server/Services/IncidentEpisodeOwnerRuleEngineService.ts +9 -1
- package/Server/Services/IncidentEpisodePrivacyRuleEngineService.ts +9 -1
- package/Server/Services/IncidentGroupingEngineService.ts +9 -1
- package/Server/Services/IncidentLabelRuleEngineService.ts +9 -1
- package/Server/Services/IncidentOnCallRuleEngineService.ts +9 -1
- package/Server/Services/IncidentOwnerRuleEngineService.ts +9 -1
- package/Server/Services/IncidentPrivacyRuleEngineService.ts +9 -1
- package/Server/Services/IncidentReminderRuleService.ts +9 -1
- package/Server/Services/IncidentSlaRuleService.ts +9 -1
- package/Server/Services/IncomingCallPolicyLabelRuleEngineService.ts +9 -1
- package/Server/Services/IncomingCallPolicyOwnerRuleEngineService.ts +9 -1
- package/Server/Services/Index.ts +14 -0
- package/Server/Services/IoTFleetLabelRuleEngineService.ts +9 -1
- package/Server/Services/IoTFleetOwnerRuleEngineService.ts +9 -1
- package/Server/Services/KubernetesClusterLabelRuleEngineService.ts +9 -1
- package/Server/Services/KubernetesClusterOwnerRuleEngineService.ts +9 -1
- package/Server/Services/KubernetesResourceService.ts +5 -1
- package/Server/Services/MonitorLabelRuleEngineService.ts +9 -1
- package/Server/Services/MonitorOwnerRuleEngineService.ts +9 -1
- package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +35 -0
- package/Server/Services/NetworkDeviceAutoImportRuleService.ts +96 -0
- package/Server/Services/NetworkDeviceLabelRuleEngineService.ts +9 -1
- package/Server/Services/NetworkDeviceOidTemplateService.ts +201 -0
- package/Server/Services/NetworkDeviceOwnerRuleEngineService.ts +9 -1
- package/Server/Services/NetworkDeviceService.ts +209 -1
- package/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.ts +32 -0
- package/Server/Services/OnCallDutyPolicyLabelRuleEngineService.ts +9 -1
- package/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.ts +9 -1
- package/Server/Services/OnCallDutyPolicyScheduleCalendarFeedService.ts +260 -0
- package/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.ts +9 -1
- package/Server/Services/OnCallDutyPolicyScheduleLayerService.ts +70 -3
- package/Server/Services/OnCallDutyPolicyScheduleLayerUserService.ts +138 -3
- package/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.ts +9 -1
- package/Server/Services/OnCallDutyPolicyScheduleService.ts +1465 -134
- package/Server/Services/OnCallDutyPolicyUserOverrideService.ts +167 -31
- package/Server/Services/PodmanHostLabelRuleEngineService.ts +9 -1
- package/Server/Services/PodmanHostOwnerRuleEngineService.ts +9 -1
- package/Server/Services/ProjectOnCallCalendarFeedService.ts +192 -0
- package/Server/Services/ProxmoxClusterLabelRuleEngineService.ts +9 -1
- package/Server/Services/ProxmoxClusterOwnerRuleEngineService.ts +9 -1
- package/Server/Services/RumApplicationLabelRuleEngineService.ts +9 -1
- package/Server/Services/RumApplicationOwnerRuleEngineService.ts +9 -1
- package/Server/Services/RunbookLabelRuleEngineService.ts +9 -1
- package/Server/Services/RunbookOwnerRuleEngineService.ts +9 -1
- package/Server/Services/RunbookRuleEngineService.ts +9 -1
- package/Server/Services/ScheduledMaintenanceLabelRuleEngineService.ts +9 -1
- package/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.ts +9 -1
- package/Server/Services/ScheduledMaintenanceReminderRuleService.ts +9 -1
- package/Server/Services/ServerlessFunctionLabelRuleEngineService.ts +9 -1
- package/Server/Services/ServerlessFunctionOwnerRuleEngineService.ts +9 -1
- package/Server/Services/ServiceLabelRuleEngineService.ts +9 -1
- package/Server/Services/ServiceOwnerRuleEngineService.ts +9 -1
- package/Server/Services/StatusPageLabelRuleEngineService.ts +9 -1
- package/Server/Services/StatusPageMonitorRuleEngineService.ts +7 -0
- package/Server/Services/StatusPageOwnerRuleEngineService.ts +9 -1
- package/Server/Services/TeamMemberService.ts +489 -1
- package/Server/Services/TeamService.ts +50 -0
- package/Server/Services/TelemetrySourceMapService.ts +266 -23
- package/Server/Services/UserNotificationSettingService.ts +44 -1
- package/Server/Services/UserOnCallCalendarFeedService.ts +159 -0
- package/Server/Services/UserOnCallShiftReminderLogService.ts +151 -0
- package/Server/Services/UserOnCallShiftReminderService.ts +112 -0
- package/Server/Services/UserService.ts +27 -0
- package/Server/Services/WorkflowLabelRuleEngineService.ts +9 -1
- package/Server/Services/WorkflowOwnerRuleEngineService.ts +9 -1
- package/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.ts +186 -0
- package/Server/Utils/Monitor/CapturedMetricAttributeUtil.ts +245 -0
- package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +21 -2
- package/Server/Utils/Monitor/MonitorMetricUtil.ts +55 -21
- package/Server/Utils/Monitor/MonitorTemplateUtil.ts +32 -0
- package/Server/Utils/Monitor/NetworkDeviceMetricUtil.ts +15 -2
- package/Server/Utils/Monitor/NetworkDeviceWalkUtil.ts +18 -1
- package/Server/Utils/Monitor/NetworkInventoryUtil.ts +10 -0
- package/Server/Utils/Monitor/SeriesResourceLabels.ts +34 -0
- package/Server/Utils/OnCall/CalendarFeedToken.ts +241 -0
- package/Server/Utils/OnCall/OnCallCalendarFeedRenderer.ts +1488 -0
- package/Server/Utils/OnCall/OnCallCalendarFeedUrls.ts +230 -0
- package/Server/Utils/OnCall/OnCallShiftChangeListeners.ts +227 -0
- package/Server/Utils/OnCall/OnCallShiftMaterializer.ts +1127 -0
- package/Server/Utils/OnCall/OnCallShiftReminderListener.ts +174 -0
- package/Server/Utils/OnCall/OnCallShiftReminderRunner.ts +2584 -0
- package/Server/Utils/Response.ts +134 -0
- package/Server/Utils/Rules/RuleEngineRuleRead.ts +48 -0
- package/Server/Utils/StartServer.ts +10 -0
- package/Server/Utils/Telemetry/AppMetrics.ts +51 -0
- package/Server/Utils/Telemetry/ExceptionSanitizer.ts +14 -1
- package/Server/Utils/Telemetry/LogExceptionExtractor.ts +14 -2
- package/Server/Utils/Telemetry/SourceMapResolver.ts +16 -5
- package/Server/Utils/Telemetry/StackTraceParser.ts +399 -0
- package/Tests/App/Dashboard/EventOverlayHook.test.tsx +125 -0
- package/Tests/App/Dashboard/HeaderImageAssets.test.tsx +93 -0
- package/Tests/App/Dashboard/OnCallCalendarFeedLinks.test.tsx +229 -0
- package/Tests/App/Dashboard/OnCallCalendarFeedPlanGate.test.tsx +489 -0
- package/Tests/App/Dashboard/OnCallCalendarFeedSideMenus.test.tsx +149 -0
- package/Tests/App/Dashboard/OnCallCalendarFeedUtil.test.ts +855 -0
- package/Tests/App/Dashboard/OnCallPersonalCalendarFeed.test.tsx +1209 -0
- package/Tests/App/Dashboard/OnCallReadinessSurfaces.test.tsx +3 -3
- package/Tests/App/Dashboard/OnCallSharedCalendarFeedCard.test.tsx +1019 -0
- package/Tests/App/Dashboard/OnCallShiftRemindersAndUpcomingShifts.test.tsx +655 -0
- package/Tests/App/Dashboard/UserElementEmail.test.tsx +12 -4
- package/Tests/App/Dashboard/UserEmailCallSites.test.tsx +1 -1
- package/Tests/App/Dashboard/UserSettingsSetupChecklistModel.test.ts +73 -0
- package/Tests/Models/DatabaseModels/DomainRoleTierCoverage.test.ts +14 -0
- package/Tests/Models/DatabaseModels/ModelRegistryInvariants.test.ts +469 -0
- package/Tests/Models/OnCallCalendarFeedModels.test.ts +642 -0
- package/Tests/Models/OnCallDutyPolicyScheduleCalendarFeed.test.ts +288 -0
- package/Tests/Models/OnCallDutyPolicyScheduleShiftConfigVersion.test.ts +88 -0
- package/Tests/Models/SecurityDomainAccessControl.test.ts +429 -0
- package/Tests/Models/UserOnCallShiftReminderModels.test.ts +368 -0
- package/Tests/Server/API/GlobalConfigLicense.test.ts +657 -0
- package/Tests/Server/API/Helpers.ts +8 -0
- package/Tests/Server/API/OnCallCalendarAPI.test.ts +4461 -0
- package/Tests/Server/API/SecurityEventAttributesAPI.test.ts +84 -6
- package/Tests/Server/API/TelemetryResolveStackTraceAPI.test.ts +805 -0
- package/Tests/Server/EnvironmentConfigOnCallCalendarFeed.test.ts +357 -0
- package/Tests/Server/Infrastructure/OnCallCalendarFeedCache.test.ts +1589 -0
- package/Tests/Server/Infrastructure/Postgres/AddOnCallCalendarFeedsMigration.test.ts +394 -0
- package/Tests/Server/Middleware/IdentityRateLimit.test.ts +1144 -0
- package/Tests/Server/Middleware/MultipartFormData.test.ts +618 -3
- package/Tests/Server/Middleware/OnCallCalendarFeedRateLimit.test.ts +1365 -0
- package/Tests/Server/Services/FeedRetentionConsistency.test.ts +70 -0
- package/Tests/Server/Services/MonitorLabelRuleEngineScale.test.ts +520 -0
- package/Tests/Server/Services/NetworkDeviceOidTemplateService.test.ts +332 -0
- package/Tests/Server/Services/NetworkDeviceOidTemplateWriteGuards.test.ts +409 -0
- package/Tests/Server/Services/OnCallCalendarFeedServices.test.ts +1103 -0
- package/Tests/Server/Services/OnCallDutyPolicyScheduleResolver.test.ts +1037 -0
- package/Tests/Server/Services/OnCallShiftConfigPropagation.test.ts +1270 -0
- package/Tests/Server/Services/RuleEngineRuleFetchLimit.test.ts +239 -0
- package/Tests/Server/Services/TeamDeleteMemberCleanup.test.ts +156 -0
- package/Tests/Server/Services/TeamMemberOnCallCleanup.test.ts +755 -0
- package/Tests/Server/Services/TelemetrySourceMapService.test.ts +1210 -2
- package/Tests/Server/Services/UserNotificationSettingShiftReminderDefaults.test.ts +267 -0
- package/Tests/Server/Services/UserOnCallShiftReminderServices.test.ts +583 -0
- package/Tests/Server/Services/UserServiceSeatLimit.test.ts +182 -0
- package/Tests/Server/Types/AnalyticsDatabase/SecurityEventModelPermission.test.ts +255 -0
- package/Tests/Server/Types/Database/Permissions/OnCallCalendarFeedPermissions.test.ts +254 -0
- package/Tests/Server/Types/Database/Permissions/ReadBlockPermission.test.ts +212 -0
- package/Tests/Server/Types/Database/Permissions/SecurityRoleAccess.test.ts +413 -0
- package/Tests/Server/Utils/CodeRepository.test.ts +689 -0
- package/Tests/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.test.ts +495 -0
- package/Tests/Server/Utils/ExceptionSanitizer.test.ts +77 -0
- package/Tests/Server/Utils/Monitor/CapturedMetricAttributeUtil.test.ts +284 -0
- package/Tests/Server/Utils/Monitor/MonitorCustomMetricAttributes.test.ts +503 -0
- package/Tests/Server/Utils/Monitor/MonitorTemplatePrototypePollution.test.ts +106 -0
- package/Tests/Server/Utils/Monitor/NetworkDeviceWalkLogWritePath.test.ts +33 -4
- package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +14 -4
- package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +44 -0
- package/Tests/Server/Utils/OnCall/CalendarFeedToken.test.ts +467 -0
- package/Tests/Server/Utils/OnCall/OnCallCalendarFeedRenderer.test.ts +2142 -0
- package/Tests/Server/Utils/OnCall/OnCallCalendarFeedUrls.test.ts +278 -0
- package/Tests/Server/Utils/OnCall/OnCallResolverTestHarness.ts +440 -0
- package/Tests/Server/Utils/OnCall/OnCallShiftChangeListeners.test.ts +314 -0
- package/Tests/Server/Utils/OnCall/OnCallShiftMaterializer.test.ts +1502 -0
- package/Tests/Server/Utils/OnCall/OnCallShiftReminderListener.test.ts +491 -0
- package/Tests/Server/Utils/OnCall/OnCallShiftReminderRunner.test.ts +3088 -0
- package/Tests/Server/Utils/OnCall/OnCallShiftReminderTestHarness.ts +910 -0
- package/Tests/Server/Utils/OpenAPISpec.test.ts +536 -0
- package/Tests/Server/Utils/ResponseSendCalendarResponse.test.ts +561 -0
- package/Tests/Server/Utils/Rules/RuleEngineRuleRead.test.ts +115 -0
- package/Tests/Server/Utils/StackTraceParser.test.ts +610 -0
- package/Tests/Server/Utils/StartServerEncryptionSecretWarning.test.ts +64 -0
- package/Tests/Server/Utils/Telemetry/AppMetrics.test.ts +29 -0
- package/Tests/Server/Utils/Telemetry/LogExceptionExtractor.test.ts +0 -0
- package/Tests/Server/Utils/Telemetry/SourceMapLimits.test.ts +656 -0
- package/Tests/Server/Utils/Telemetry/SourceMapResolver.test.ts +100 -0
- package/Tests/Types/Calendar/ICalendar.test.ts +488 -0
- package/Tests/Types/Monitor/SnmpMonitor/SnmpOidListUtil.test.ts +454 -0
- package/Tests/Types/NotificationSetting/NotificationSettingEventType.test.ts +53 -0
- package/Tests/Types/OnCallDutyPolicy/CalendarFeedTestFixtures.ts +310 -0
- package/Tests/Types/OnCallDutyPolicy/CalendarFeedWindow.test.ts +205 -0
- package/Tests/Types/OnCallDutyPolicy/LayerUtilLayerMetaAndIterationCap.test.ts +458 -0
- package/Tests/Types/OnCallDutyPolicy/MaterializedShift.test.ts +197 -0
- package/Tests/Types/OnCallDutyPolicy/OnCallCalendarFeedUtil.test.ts +1986 -0
- package/Tests/Types/OnCallDutyPolicy/ScheduleShiftUtilGroupKey.test.ts +678 -0
- package/Tests/Types/OnCallDutyPolicy/ShiftSeamUtil.test.ts +417 -0
- package/Tests/Types/SecurityRolePermissions.test.ts +193 -0
- package/Tests/UI/Components/Charts/AnnotationLayout.test.ts +773 -0
- package/Tests/UI/Components/Charts/ChartAnnotationRail.test.tsx +789 -0
- package/Tests/UI/Components/Charts/ChartBucketIdentity.test.ts +254 -0
- package/Tests/UI/Components/Charts/TimeAnnotation.test.ts +471 -0
- package/Tests/UI/Components/EditionLabelLicenseRefresh.test.tsx +405 -0
- package/Tests/UI/Components/ErrorMessageRefreshControl.test.tsx +83 -0
- package/Tests/UI/Components/MarkdownConverters.test.ts +686 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableDeleteAndEmptyStates.test.tsx +341 -0
- package/Tests/UI/Components/OrderedStatesList.test.tsx +5 -5
- package/Tests/UI/Components/PendingProjectInvitations.test.tsx +1 -1
- package/Tests/UI/Components/TableSortAndMobileColumns.test.tsx +195 -0
- package/Tests/UI/Components/XAxis.test.ts +270 -5
- package/Tests/UI/Components/XAxisDaylightSaving.test.ts +113 -0
- package/Tests/UI/Styles/ChartFocusRing.test.ts +153 -0
- package/Tests/UI/Styles/ChartFocusRingCoverage.test.tsx +377 -0
- package/Tests/UI/Styles/ThemeStylesheet.ts +162 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +10 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +2 -0
- package/Tests/Utils/EnterpriseLicenseSeats.test.ts +507 -0
- package/Tests/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.test.ts +951 -1
- package/Tests/Utils/NetworkDiscovery/DiscoveredHostUtil.test.ts +238 -0
- package/Tests/Utils/NetworkDiscovery/DiscoveryReverseDnsChain.test.ts +1056 -0
- package/Tests/Utils/NetworkDiscovery/ReverseDnsNameUtil.test.ts +882 -0
- package/Types/Calendar/ICalendar.ts +442 -0
- package/Types/Date.ts +39 -0
- package/Types/Email/EmailTemplateType.ts +2 -0
- package/Types/Monitor/SnmpMonitor/SnmpOidListUtil.ts +333 -0
- package/Types/NotificationSetting/NotificationSettingEventType.ts +4 -0
- package/Types/OnCallDutyPolicy/CalendarFeedWindow.ts +140 -0
- package/Types/OnCallDutyPolicy/Layer.ts +190 -35
- package/Types/OnCallDutyPolicy/MaterializedShift.ts +274 -0
- package/Types/OnCallDutyPolicy/OnCallCalendarFeedUtil.ts +1415 -0
- package/Types/OnCallDutyPolicy/ScheduleShiftUtil.ts +159 -4
- package/Types/OnCallDutyPolicy/ShiftSeamUtil.ts +106 -0
- package/Types/Permission.ts +96 -0
- package/Types/Rum/SessionReplay.ts +21 -0
- package/Types/Telemetry/SourceMap.ts +8 -0
- package/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.tsx +176 -0
- package/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.ts +745 -0
- package/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.tsx +576 -0
- package/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.tsx +204 -0
- package/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.tsx +491 -544
- package/UI/Components/Charts/ChartLibrary/BarChart/BarChart.tsx +324 -372
- package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +487 -540
- package/UI/Components/Charts/ChartLibrary/Types/FormattedReferenceRegion.ts +7 -3
- package/UI/Components/Charts/ChartLibrary/Types/FormattedTimeReferenceLine.ts +14 -3
- package/UI/Components/Charts/Types/ChartEventKind.ts +13 -0
- package/UI/Components/Charts/Types/ReferenceRegionProps.ts +6 -0
- package/UI/Components/Charts/Types/TimeReferenceLineProps.ts +20 -3
- package/UI/Components/Charts/Utils/TimeAnnotation.ts +69 -35
- package/UI/Components/Charts/Utils/XAxis.ts +125 -18
- package/UI/Components/EditionLabel/EditionLabel.tsx +280 -26
- package/UI/Components/ErrorMessage/ErrorMessage.tsx +21 -10
- package/UI/Components/Feed/FeedItem.tsx +4 -5
- package/UI/Components/Header/HeaderIconDropdownButton.tsx +1 -2
- package/UI/Components/Header/UserProfile/UserProfile.tsx +1 -2
- package/UI/Components/Image/Image.tsx +20 -3
- package/UI/Components/Markdown.tsx/MarkdownConverters.ts +0 -0
- package/UI/Components/MemberRoleAssignment/MemberRoleAssignment.tsx +1 -2
- package/UI/Components/ModelTable/BaseModelTable.tsx +150 -24
- package/UI/Components/Table/TableHeader.tsx +64 -48
- package/UI/Components/Table/TableRow.tsx +13 -3
- package/UI/Styles/Theme.css +38 -0
- package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +271 -0
- package/Utils/NetworkDiscovery/AutoImportRuleMatcher.ts +6 -0
- package/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.ts +141 -10
- package/Utils/NetworkDiscovery/DiscoveredHostUtil.ts +55 -3
- package/Utils/NetworkDiscovery/ReverseDnsNameUtil.ts +151 -0
- package/Utils/Rules/RuleEngineLimits.ts +32 -0
- package/build/dist/Models/AnalyticsModels/SecurityEvent.js +48 -16
- package/build/dist/Models/AnalyticsModels/SecurityEvent.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js +10 -5
- package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertSeverity.js +46 -1
- package/build/dist/Models/DatabaseModels/AlertSeverity.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DetectionRule.js +16 -5
- package/build/dist/Models/DatabaseModels/DetectionRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js +14 -5
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentSeverity.js +46 -1
- package/build/dist/Models/DatabaseModels/IncidentSeverity.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +13 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +115 -3
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js +88 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceOidTemplate.js +519 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceOidTemplate.js.map +1 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js +44 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.js +699 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ProjectOnCallCalendarFeed.js +620 -0
- package/build/dist/Models/DatabaseModels/ProjectOnCallCalendarFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js +16 -5
- package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserOnCallCalendarFeed.js +585 -0
- package/build/dist/Models/DatabaseModels/UserOnCallCalendarFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/UserOnCallShiftReminder.js +247 -0
- package/build/dist/Models/DatabaseModels/UserOnCallShiftReminder.js.map +1 -0
- package/build/dist/Models/DatabaseModels/UserOnCallShiftReminderLog.js +355 -0
- package/build/dist/Models/DatabaseModels/UserOnCallShiftReminderLog.js.map +1 -0
- package/build/dist/Server/API/GlobalConfigAPI.js +293 -176
- package/build/dist/Server/API/GlobalConfigAPI.js.map +1 -1
- package/build/dist/Server/API/OnCallCalendarAPI.js +1371 -0
- package/build/dist/Server/API/OnCallCalendarAPI.js.map +1 -0
- package/build/dist/Server/API/TelemetryAPI.js +31 -3
- package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +185 -0
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/OnCallCalendarFeedCache.js +663 -0
- package/build/dist/Server/Infrastructure/OnCallCalendarFeedCache.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790400000000-AddOnCallCalendarFeeds.js +103 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790400000000-AddOnCallCalendarFeeds.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.js +26 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/MultipartFormData.js +93 -28
- package/build/dist/Server/Middleware/MultipartFormData.js.map +1 -1
- package/build/dist/Server/Middleware/OnCallCalendarFeedRateLimit.js +342 -0
- package/build/dist/Server/Middleware/OnCallCalendarFeedRateLimit.js.map +1 -0
- package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeOnCallRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertEpisodeOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertGroupingEngineService.js +8 -1
- package/build/dist/Server/Services/AlertGroupingEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertOnCallRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertReminderRuleService.js +8 -1
- package/build/dist/Server/Services/AlertReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/AutoRemediationRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AutoRemediationRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DashboardLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DashboardLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/HostLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/HostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/HostOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/HostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeOnCallRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentEpisodeOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentGroupingEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentOnCallRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentReminderRuleService.js +8 -1
- package/build/dist/Server/Services/IncidentReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/IncidentSlaRuleService.js +8 -1
- package/build/dist/Server/Services/IncidentSlaRuleService.js.map +1 -1
- package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +14 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesResourceService.js +5 -1
- package/build/dist/Server/Services/KubernetesResourceService.js.map +1 -1
- package/build/dist/Server/Services/MonitorLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/MonitorLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +30 -21
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +64 -0
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceOidTemplateService.js +180 -0
- package/build/dist/Server/Services/NetworkDeviceOidTemplateService.js.map +1 -0
- package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceService.js +154 -1
- package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js +20 -0
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleCalendarFeedService.js +219 -0
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleCalendarFeedService.js.map +1 -0
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerService.js +47 -3
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerUserService.js +112 -3
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerUserService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js +955 -9
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyUserOverrideService.js +93 -6
- package/build/dist/Server/Services/OnCallDutyPolicyUserOverrideService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ProjectOnCallCalendarFeedService.js +157 -0
- package/build/dist/Server/Services/ProjectOnCallCalendarFeedService.js.map +1 -0
- package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RunbookLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/RunbookLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RunbookRuleEngineService.js +8 -1
- package/build/dist/Server/Services/RunbookRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js +8 -1
- package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ServiceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageMonitorRuleEngineService.js +6 -0
- package/build/dist/Server/Services/StatusPageMonitorRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/TeamMemberService.js +396 -1
- package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
- package/build/dist/Server/Services/TeamService.js +43 -0
- package/build/dist/Server/Services/TeamService.js.map +1 -1
- package/build/dist/Server/Services/TelemetrySourceMapService.js +213 -19
- package/build/dist/Server/Services/TelemetrySourceMapService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationSettingService.js +26 -1
- package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
- package/build/dist/Server/Services/UserOnCallCalendarFeedService.js +140 -0
- package/build/dist/Server/Services/UserOnCallCalendarFeedService.js.map +1 -0
- package/build/dist/Server/Services/UserOnCallShiftReminderLogService.js +116 -0
- package/build/dist/Server/Services/UserOnCallShiftReminderLogService.js.map +1 -0
- package/build/dist/Server/Services/UserOnCallShiftReminderService.js +92 -0
- package/build/dist/Server/Services/UserOnCallShiftReminderService.js.map +1 -0
- package/build/dist/Server/Services/UserService.js +25 -0
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js +145 -0
- package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/CapturedMetricAttributeUtil.js +201 -0
- package/build/dist/Server/Utils/Monitor/CapturedMetricAttributeUtil.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +19 -2
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +42 -23
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +29 -0
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js +11 -2
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js +16 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +10 -0
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +33 -0
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js.map +1 -1
- package/build/dist/Server/Utils/OnCall/CalendarFeedToken.js +161 -0
- package/build/dist/Server/Utils/OnCall/CalendarFeedToken.js.map +1 -0
- package/build/dist/Server/Utils/OnCall/OnCallCalendarFeedRenderer.js +983 -0
- package/build/dist/Server/Utils/OnCall/OnCallCalendarFeedRenderer.js.map +1 -0
- package/build/dist/Server/Utils/OnCall/OnCallCalendarFeedUrls.js +155 -0
- package/build/dist/Server/Utils/OnCall/OnCallCalendarFeedUrls.js.map +1 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftChangeListeners.js +145 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftChangeListeners.js.map +1 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftMaterializer.js +752 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftMaterializer.js.map +1 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftReminderListener.js +92 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftReminderListener.js.map +1 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftReminderRunner.js +1786 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftReminderRunner.js.map +1 -0
- package/build/dist/Server/Utils/Response.js +97 -0
- package/build/dist/Server/Utils/Response.js.map +1 -1
- package/build/dist/Server/Utils/Rules/RuleEngineRuleRead.js +37 -0
- package/build/dist/Server/Utils/Rules/RuleEngineRuleRead.js.map +1 -0
- package/build/dist/Server/Utils/StartServer.js +9 -1
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/AppMetrics.js +41 -0
- package/build/dist/Server/Utils/Telemetry/AppMetrics.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/ExceptionSanitizer.js +12 -1
- package/build/dist/Server/Utils/Telemetry/ExceptionSanitizer.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/LogExceptionExtractor.js +14 -2
- package/build/dist/Server/Utils/Telemetry/LogExceptionExtractor.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js +15 -5
- package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/StackTraceParser.js +307 -0
- package/build/dist/Server/Utils/Telemetry/StackTraceParser.js.map +1 -1
- package/build/dist/Types/Calendar/ICalendar.js +290 -0
- package/build/dist/Types/Calendar/ICalendar.js.map +1 -0
- package/build/dist/Types/Date.js +27 -0
- package/build/dist/Types/Date.js.map +1 -1
- package/build/dist/Types/Email/EmailTemplateType.js +2 -0
- package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpOidListUtil.js +253 -0
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpOidListUtil.js.map +1 -0
- package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js +3 -0
- package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js.map +1 -1
- package/build/dist/Types/OnCallDutyPolicy/CalendarFeedWindow.js +97 -0
- package/build/dist/Types/OnCallDutyPolicy/CalendarFeedWindow.js.map +1 -0
- package/build/dist/Types/OnCallDutyPolicy/Layer.js +113 -19
- package/build/dist/Types/OnCallDutyPolicy/Layer.js.map +1 -1
- package/build/dist/Types/OnCallDutyPolicy/MaterializedShift.js +134 -0
- package/build/dist/Types/OnCallDutyPolicy/MaterializedShift.js.map +1 -0
- package/build/dist/Types/OnCallDutyPolicy/OnCallCalendarFeedUtil.js +800 -0
- package/build/dist/Types/OnCallDutyPolicy/OnCallCalendarFeedUtil.js.map +1 -0
- package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js +97 -3
- package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js.map +1 -1
- package/build/dist/Types/OnCallDutyPolicy/ShiftSeamUtil.js +77 -0
- package/build/dist/Types/OnCallDutyPolicy/ShiftSeamUtil.js.map +1 -0
- package/build/dist/Types/Permission.js +86 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Rum/SessionReplay.js +19 -0
- package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.js +83 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.js +531 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.js +264 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.js +122 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js +213 -233
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js +139 -152
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +212 -232
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Types/ChartEventKind.js +14 -0
- package/build/dist/UI/Components/Charts/Types/ChartEventKind.js.map +1 -0
- package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js +57 -28
- package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js.map +1 -1
- package/build/dist/UI/Components/Charts/Utils/XAxis.js +103 -17
- package/build/dist/UI/Components/Charts/Utils/XAxis.js.map +1 -1
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js +198 -23
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
- package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js +15 -5
- package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js.map +1 -1
- package/build/dist/UI/Components/Feed/FeedItem.js +4 -5
- package/build/dist/UI/Components/Feed/FeedItem.js.map +1 -1
- package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js +1 -2
- package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js.map +1 -1
- package/build/dist/UI/Components/Header/UserProfile/UserProfile.js.map +1 -1
- package/build/dist/UI/Components/Image/Image.js +6 -1
- package/build/dist/UI/Components/Image/Image.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js +0 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js.map +1 -1
- package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js +1 -2
- package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +104 -23
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/Table/TableHeader.js +20 -22
- package/build/dist/UI/Components/Table/TableHeader.js.map +1 -1
- package/build/dist/UI/Components/Table/TableRow.js +13 -4
- package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js +153 -0
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js +127 -7
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js +50 -3
- package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/ReverseDnsNameUtil.js +132 -0
- package/build/dist/Utils/NetworkDiscovery/ReverseDnsNameUtil.js.map +1 -0
- package/build/dist/Utils/Rules/RuleEngineLimits.js +31 -0
- package/build/dist/Utils/Rules/RuleEngineLimits.js.map +1 -0
- package/jest.config.json +1 -0
- package/package.json +2 -2
|
@@ -139,6 +139,20 @@ const CATALOG: Array<Instrument> = [
|
|
|
139
139
|
name: "oneuptime.telemetry.ingest.dropped.count",
|
|
140
140
|
unit: "1",
|
|
141
141
|
},
|
|
142
|
+
{
|
|
143
|
+
getter: "getOnCallCalendarRenderDuration",
|
|
144
|
+
factory: "getHistogram",
|
|
145
|
+
kind: "histogram",
|
|
146
|
+
name: "oncall_calendar_render_duration_ms",
|
|
147
|
+
unit: "ms",
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
getter: "getOnCallCalendarRenderEvents",
|
|
151
|
+
factory: "getHistogram",
|
|
152
|
+
kind: "histogram",
|
|
153
|
+
name: "oncall_calendar_render_events",
|
|
154
|
+
unit: "1",
|
|
155
|
+
},
|
|
142
156
|
];
|
|
143
157
|
|
|
144
158
|
interface LoadedModules {
|
|
@@ -266,6 +280,21 @@ describe("AppMetrics catalog", () => {
|
|
|
266
280
|
);
|
|
267
281
|
});
|
|
268
282
|
|
|
283
|
+
test("the on-call calendar feed attribute key is bounded and named", async () => {
|
|
284
|
+
/*
|
|
285
|
+
* The two feed histograms are labelled by feed kind and nothing else --
|
|
286
|
+
* never a token, user or project id. The attribute key is exported so the
|
|
287
|
+
* renderer and any dashboard agree on it.
|
|
288
|
+
*/
|
|
289
|
+
const { AppMetrics } = await loadFresh();
|
|
290
|
+
|
|
291
|
+
const attribute: unknown = (
|
|
292
|
+
AppMetrics as unknown as Record<string, unknown>
|
|
293
|
+
)["ON_CALL_CALENDAR_FEED_KIND_ATTRIBUTE"];
|
|
294
|
+
|
|
295
|
+
expect(attribute).toBe("oneuptime.oncall_calendar.feed_kind");
|
|
296
|
+
});
|
|
297
|
+
|
|
269
298
|
test("every metric name in the catalog is unique", () => {
|
|
270
299
|
const names: Array<string> = CATALOG.map((e: Instrument) => {
|
|
271
300
|
return e.name;
|
|
Binary file
|
|
@@ -0,0 +1,656 @@
|
|
|
1
|
+
import LIMIT_MAX from "../../../../Types/Database/LimitMax";
|
|
2
|
+
import { afterEach, describe, expect, it, jest } from "@jest/globals";
|
|
3
|
+
|
|
4
|
+
/*
|
|
5
|
+
* The five operator knobs that size source map ingestion and resolution.
|
|
6
|
+
*
|
|
7
|
+
* These used to be one hardcoded 100 that did two unrelated jobs: it gated
|
|
8
|
+
* uploads AND bounded what the resolver would read. Raising it was therefore
|
|
9
|
+
* unsafe (more maps stored than the reader would ever look at), and leaving it
|
|
10
|
+
* meant route-split builds — a Vite/Next app emitting hundreds of chunk maps
|
|
11
|
+
* per release — silently lost the maps that did not fit. The count is now a
|
|
12
|
+
* pure WRITE gate with a much higher default, and a byte budget bounds the
|
|
13
|
+
* READ path instead.
|
|
14
|
+
*
|
|
15
|
+
* EnvironmentConfig reads process.env once at module load, so every case here
|
|
16
|
+
* sets the environment, resets the module registry, and imports afresh.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
interface SourceMapConfigShape {
|
|
20
|
+
SourceMapMaxMapsPerRelease: number;
|
|
21
|
+
SourceMapRetentionInDays: number;
|
|
22
|
+
SourceMapMaxFileSizeInBytes: number;
|
|
23
|
+
SourceMapMaxFilesPerRequest: number;
|
|
24
|
+
SourceMapMaxBytesPerResolve: number;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
interface SourceMapResolverShape {
|
|
28
|
+
MAX_SOURCE_MAP_SIZE_IN_BYTES: number;
|
|
29
|
+
MAX_FRAMES_TO_RESOLVE: number;
|
|
30
|
+
MAX_FRAMES_PER_RESOLVE_REQUEST: number;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
interface MultipartLimitsShape {
|
|
34
|
+
MAX_MULTIPART_FILE_BYTES: number;
|
|
35
|
+
MAX_MULTIPART_FILES: number;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const MEGABYTE: number = 1024 * 1024;
|
|
39
|
+
|
|
40
|
+
/* The ceilings EnvironmentConfig hardcodes, named once. */
|
|
41
|
+
const FIFTY_MEGABYTES: number = 50 * MEGABYTE;
|
|
42
|
+
const FIFTY_FILES: number = 50;
|
|
43
|
+
|
|
44
|
+
/* Defaults, named so a change to one is a deliberate edit here too. */
|
|
45
|
+
const DEFAULT_MAPS_PER_RELEASE: number = 1000;
|
|
46
|
+
const DEFAULT_RETENTION_DAYS: number = 90;
|
|
47
|
+
const DEFAULT_BYTES_PER_RESOLVE: number = 512 * MEGABYTE;
|
|
48
|
+
|
|
49
|
+
const MANAGED_KEYS: Array<string> = [
|
|
50
|
+
"SOURCE_MAP_MAX_MAPS_PER_RELEASE",
|
|
51
|
+
"SOURCE_MAP_RETENTION_DAYS",
|
|
52
|
+
"SOURCE_MAP_MAX_FILE_SIZE_BYTES",
|
|
53
|
+
"SOURCE_MAP_MAX_FILES_PER_REQUEST",
|
|
54
|
+
"SOURCE_MAP_MAX_BYTES_PER_RESOLVE",
|
|
55
|
+
];
|
|
56
|
+
|
|
57
|
+
/*
|
|
58
|
+
* Every shape of value an operator can get wrong. "" and " " are what
|
|
59
|
+
* Docker Compose's ${VAR:-} and a Helm value left blank actually pass
|
|
60
|
+
* through, so they must read as unset rather than as zero.
|
|
61
|
+
*/
|
|
62
|
+
const INVALID_VALUES: Array<string> = [
|
|
63
|
+
"",
|
|
64
|
+
" ",
|
|
65
|
+
"0",
|
|
66
|
+
"-5",
|
|
67
|
+
"1.5",
|
|
68
|
+
"abc",
|
|
69
|
+
"NaN",
|
|
70
|
+
"Infinity",
|
|
71
|
+
];
|
|
72
|
+
|
|
73
|
+
const originalEnv: NodeJS.ProcessEnv = { ...process.env };
|
|
74
|
+
|
|
75
|
+
/*
|
|
76
|
+
* Clears every knob first, so a value that happens to be set in the shell
|
|
77
|
+
* running the suite cannot make a "default" case pass for the wrong reason.
|
|
78
|
+
*/
|
|
79
|
+
async function loadConfig(
|
|
80
|
+
overrides: Record<string, string | undefined>,
|
|
81
|
+
): Promise<SourceMapConfigShape> {
|
|
82
|
+
for (const key of MANAGED_KEYS) {
|
|
83
|
+
delete process.env[key];
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
for (const [key, value] of Object.entries(overrides)) {
|
|
87
|
+
if (value === undefined) {
|
|
88
|
+
delete process.env[key];
|
|
89
|
+
} else {
|
|
90
|
+
process.env[key] = value;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
jest.resetModules();
|
|
95
|
+
|
|
96
|
+
return (await import(
|
|
97
|
+
"../../../../Server/EnvironmentConfig"
|
|
98
|
+
)) as unknown as SourceMapConfigShape;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/*
|
|
102
|
+
* Loads the resolver against the same freshly-read config, so the two are
|
|
103
|
+
* observed from one module registry rather than from separate loads that
|
|
104
|
+
* could disagree.
|
|
105
|
+
*/
|
|
106
|
+
async function loadConfigAndResolver(
|
|
107
|
+
overrides: Record<string, string | undefined>,
|
|
108
|
+
): Promise<{
|
|
109
|
+
config: SourceMapConfigShape;
|
|
110
|
+
resolver: SourceMapResolverShape;
|
|
111
|
+
}> {
|
|
112
|
+
const config: SourceMapConfigShape = await loadConfig(overrides);
|
|
113
|
+
|
|
114
|
+
const resolver: SourceMapResolverShape = (await import(
|
|
115
|
+
"../../../../Server/Utils/Telemetry/SourceMapResolver"
|
|
116
|
+
)) as unknown as SourceMapResolverShape;
|
|
117
|
+
|
|
118
|
+
return { config, resolver };
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
afterEach(() => {
|
|
122
|
+
process.env = { ...originalEnv };
|
|
123
|
+
jest.resetModules();
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
describe("SOURCE_MAP_MAX_MAPS_PER_RELEASE", () => {
|
|
127
|
+
it("defaults to 1000 distinct bundles per release", async () => {
|
|
128
|
+
/*
|
|
129
|
+
* The old value was 100. A route-split build blows past that on its own,
|
|
130
|
+
* which is the whole reason this knob exists.
|
|
131
|
+
*/
|
|
132
|
+
const config: SourceMapConfigShape = await loadConfig({});
|
|
133
|
+
|
|
134
|
+
expect(config.SourceMapMaxMapsPerRelease).toBe(DEFAULT_MAPS_PER_RELEASE);
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
it("honours an operator's raised value", async () => {
|
|
138
|
+
const config: SourceMapConfigShape = await loadConfig({
|
|
139
|
+
SOURCE_MAP_MAX_MAPS_PER_RELEASE: "4000",
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
expect(config.SourceMapMaxMapsPerRelease).toBe(4000);
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
it("can be lowered below the default", async () => {
|
|
146
|
+
/*
|
|
147
|
+
* The gate is also a cost control: an operator who wants a tighter cap
|
|
148
|
+
* than the default must be able to set one.
|
|
149
|
+
*/
|
|
150
|
+
const config: SourceMapConfigShape = await loadConfig({
|
|
151
|
+
SOURCE_MAP_MAX_MAPS_PER_RELEASE: "25",
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
expect(config.SourceMapMaxMapsPerRelease).toBe(25);
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
it("accepts exactly LIMIT_MAX, the highest value it can enforce", async () => {
|
|
158
|
+
const config: SourceMapConfigShape = await loadConfig({
|
|
159
|
+
SOURCE_MAP_MAX_MAPS_PER_RELEASE: String(LIMIT_MAX),
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
expect(config.SourceMapMaxMapsPerRelease).toBe(LIMIT_MAX);
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
it("clamps one over LIMIT_MAX back down to LIMIT_MAX", async () => {
|
|
166
|
+
/*
|
|
167
|
+
* The write gate counts a release's existing maps with limit LIMIT_MAX.
|
|
168
|
+
* A configured cap above that could never be reached by the count, so it
|
|
169
|
+
* would be a limit the app silently failed to enforce. Clamping makes the
|
|
170
|
+
* effective value honest.
|
|
171
|
+
*/
|
|
172
|
+
const config: SourceMapConfigShape = await loadConfig({
|
|
173
|
+
SOURCE_MAP_MAX_MAPS_PER_RELEASE: String(LIMIT_MAX + 1),
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
expect(config.SourceMapMaxMapsPerRelease).toBe(LIMIT_MAX);
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
it("clamps an absurd value rather than trusting it", async () => {
|
|
180
|
+
const config: SourceMapConfigShape = await loadConfig({
|
|
181
|
+
SOURCE_MAP_MAX_MAPS_PER_RELEASE: "999999999",
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
expect(config.SourceMapMaxMapsPerRelease).toBe(LIMIT_MAX);
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
it("falls back to the default for anything that is not a positive whole number", async () => {
|
|
188
|
+
for (const value of INVALID_VALUES) {
|
|
189
|
+
const config: SourceMapConfigShape = await loadConfig({
|
|
190
|
+
SOURCE_MAP_MAX_MAPS_PER_RELEASE: value,
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
expect({ value, resolved: config.SourceMapMaxMapsPerRelease }).toEqual({
|
|
194
|
+
value,
|
|
195
|
+
resolved: DEFAULT_MAPS_PER_RELEASE,
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
it("tolerates surrounding whitespace on an otherwise valid value", async () => {
|
|
201
|
+
const config: SourceMapConfigShape = await loadConfig({
|
|
202
|
+
SOURCE_MAP_MAX_MAPS_PER_RELEASE: " 2500 ",
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
expect(config.SourceMapMaxMapsPerRelease).toBe(2500);
|
|
206
|
+
});
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
describe("SOURCE_MAP_RETENTION_DAYS", () => {
|
|
210
|
+
it("defaults to 90 days", async () => {
|
|
211
|
+
const config: SourceMapConfigShape = await loadConfig({});
|
|
212
|
+
|
|
213
|
+
expect(config.SourceMapRetentionInDays).toBe(DEFAULT_RETENTION_DAYS);
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
it("honours an operator's value in both directions", async () => {
|
|
217
|
+
const shortened: SourceMapConfigShape = await loadConfig({
|
|
218
|
+
SOURCE_MAP_RETENTION_DAYS: "7",
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
expect(shortened.SourceMapRetentionInDays).toBe(7);
|
|
222
|
+
|
|
223
|
+
const lengthened: SourceMapConfigShape = await loadConfig({
|
|
224
|
+
SOURCE_MAP_RETENTION_DAYS: "365",
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
expect(lengthened.SourceMapRetentionInDays).toBe(365);
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
it("is not clamped, so a long-retention install can keep maps for years", async () => {
|
|
231
|
+
/*
|
|
232
|
+
* Retention has no in-code ceiling to honour — nothing reads a bounded
|
|
233
|
+
* page of days — so unlike the count and size knobs it passes any
|
|
234
|
+
* positive integer straight through.
|
|
235
|
+
*/
|
|
236
|
+
const config: SourceMapConfigShape = await loadConfig({
|
|
237
|
+
SOURCE_MAP_RETENTION_DAYS: "36500",
|
|
238
|
+
});
|
|
239
|
+
|
|
240
|
+
expect(config.SourceMapRetentionInDays).toBe(36500);
|
|
241
|
+
});
|
|
242
|
+
|
|
243
|
+
it("falls back to 90 days for anything that is not a positive whole number", async () => {
|
|
244
|
+
for (const value of INVALID_VALUES) {
|
|
245
|
+
const config: SourceMapConfigShape = await loadConfig({
|
|
246
|
+
SOURCE_MAP_RETENTION_DAYS: value,
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
expect({ value, resolved: config.SourceMapRetentionInDays }).toEqual({
|
|
250
|
+
value,
|
|
251
|
+
resolved: DEFAULT_RETENTION_DAYS,
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
});
|
|
256
|
+
|
|
257
|
+
describe("SOURCE_MAP_MAX_FILE_SIZE_BYTES", () => {
|
|
258
|
+
it("defaults to 50 MiB for a single map", async () => {
|
|
259
|
+
const config: SourceMapConfigShape = await loadConfig({});
|
|
260
|
+
|
|
261
|
+
expect(config.SourceMapMaxFileSizeInBytes).toBe(FIFTY_MEGABYTES);
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
it("can be lowered to a tighter per-file ceiling", async () => {
|
|
265
|
+
const config: SourceMapConfigShape = await loadConfig({
|
|
266
|
+
SOURCE_MAP_MAX_FILE_SIZE_BYTES: String(5 * MEGABYTE),
|
|
267
|
+
});
|
|
268
|
+
|
|
269
|
+
expect(config.SourceMapMaxFileSizeInBytes).toBe(5 * MEGABYTE);
|
|
270
|
+
});
|
|
271
|
+
|
|
272
|
+
it("accepts exactly 50 MiB, the multipart per-file ceiling", async () => {
|
|
273
|
+
const config: SourceMapConfigShape = await loadConfig({
|
|
274
|
+
SOURCE_MAP_MAX_FILE_SIZE_BYTES: String(FIFTY_MEGABYTES),
|
|
275
|
+
});
|
|
276
|
+
|
|
277
|
+
expect(config.SourceMapMaxFileSizeInBytes).toBe(FIFTY_MEGABYTES);
|
|
278
|
+
});
|
|
279
|
+
|
|
280
|
+
it("clamps one byte over 50 MiB back down to 50 MiB", async () => {
|
|
281
|
+
/*
|
|
282
|
+
* Raising this past what multer accepts would not raise anything: multer
|
|
283
|
+
* aborts the request first, so the clear 400 this ceiling is meant to
|
|
284
|
+
* produce becomes a confusing 413. The knob can only ever be lowered.
|
|
285
|
+
*/
|
|
286
|
+
const config: SourceMapConfigShape = await loadConfig({
|
|
287
|
+
SOURCE_MAP_MAX_FILE_SIZE_BYTES: String(FIFTY_MEGABYTES + 1),
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
expect(config.SourceMapMaxFileSizeInBytes).toBe(FIFTY_MEGABYTES);
|
|
291
|
+
});
|
|
292
|
+
|
|
293
|
+
it("clamps an operator who asks for gigabyte maps", async () => {
|
|
294
|
+
const config: SourceMapConfigShape = await loadConfig({
|
|
295
|
+
SOURCE_MAP_MAX_FILE_SIZE_BYTES: String(2 * 1024 * MEGABYTE),
|
|
296
|
+
});
|
|
297
|
+
|
|
298
|
+
expect(config.SourceMapMaxFileSizeInBytes).toBe(FIFTY_MEGABYTES);
|
|
299
|
+
});
|
|
300
|
+
|
|
301
|
+
it("falls back to 50 MiB for anything that is not a positive whole number", async () => {
|
|
302
|
+
for (const value of INVALID_VALUES) {
|
|
303
|
+
const config: SourceMapConfigShape = await loadConfig({
|
|
304
|
+
SOURCE_MAP_MAX_FILE_SIZE_BYTES: value,
|
|
305
|
+
});
|
|
306
|
+
|
|
307
|
+
expect({ value, resolved: config.SourceMapMaxFileSizeInBytes }).toEqual({
|
|
308
|
+
value,
|
|
309
|
+
resolved: FIFTY_MEGABYTES,
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
});
|
|
313
|
+
});
|
|
314
|
+
|
|
315
|
+
describe("SOURCE_MAP_MAX_FILES_PER_REQUEST", () => {
|
|
316
|
+
it("defaults to 50 files in one upload request", async () => {
|
|
317
|
+
const config: SourceMapConfigShape = await loadConfig({});
|
|
318
|
+
|
|
319
|
+
expect(config.SourceMapMaxFilesPerRequest).toBe(FIFTY_FILES);
|
|
320
|
+
});
|
|
321
|
+
|
|
322
|
+
it("can be lowered so CI splits the upload into smaller batches", async () => {
|
|
323
|
+
/*
|
|
324
|
+
* This is deliberately separate from the per-release cap: a release may
|
|
325
|
+
* hold 1000 maps while no single request may carry more than a handful.
|
|
326
|
+
*/
|
|
327
|
+
const config: SourceMapConfigShape = await loadConfig({
|
|
328
|
+
SOURCE_MAP_MAX_FILES_PER_REQUEST: "10",
|
|
329
|
+
});
|
|
330
|
+
|
|
331
|
+
expect(config.SourceMapMaxFilesPerRequest).toBe(10);
|
|
332
|
+
});
|
|
333
|
+
|
|
334
|
+
it("accepts exactly 50, the shared multipart file ceiling", async () => {
|
|
335
|
+
const config: SourceMapConfigShape = await loadConfig({
|
|
336
|
+
SOURCE_MAP_MAX_FILES_PER_REQUEST: String(FIFTY_FILES),
|
|
337
|
+
});
|
|
338
|
+
|
|
339
|
+
expect(config.SourceMapMaxFilesPerRequest).toBe(FIFTY_FILES);
|
|
340
|
+
});
|
|
341
|
+
|
|
342
|
+
it("clamps 51 back down to 50", async () => {
|
|
343
|
+
/*
|
|
344
|
+
* The multipart middleware runs BEFORE authentication on every route that
|
|
345
|
+
* mounts it. Letting this knob widen it would widen the pre-auth surface
|
|
346
|
+
* that Pyroscope and inbound email also sit behind, so it narrows only.
|
|
347
|
+
*/
|
|
348
|
+
const config: SourceMapConfigShape = await loadConfig({
|
|
349
|
+
SOURCE_MAP_MAX_FILES_PER_REQUEST: String(FIFTY_FILES + 1),
|
|
350
|
+
});
|
|
351
|
+
|
|
352
|
+
expect(config.SourceMapMaxFilesPerRequest).toBe(FIFTY_FILES);
|
|
353
|
+
});
|
|
354
|
+
|
|
355
|
+
it("clamps a large value rather than widening the pre-auth upload surface", async () => {
|
|
356
|
+
const config: SourceMapConfigShape = await loadConfig({
|
|
357
|
+
SOURCE_MAP_MAX_FILES_PER_REQUEST: "5000",
|
|
358
|
+
});
|
|
359
|
+
|
|
360
|
+
expect(config.SourceMapMaxFilesPerRequest).toBe(FIFTY_FILES);
|
|
361
|
+
});
|
|
362
|
+
|
|
363
|
+
it("falls back to 50 for anything that is not a positive whole number", async () => {
|
|
364
|
+
for (const value of INVALID_VALUES) {
|
|
365
|
+
const config: SourceMapConfigShape = await loadConfig({
|
|
366
|
+
SOURCE_MAP_MAX_FILES_PER_REQUEST: value,
|
|
367
|
+
});
|
|
368
|
+
|
|
369
|
+
expect({ value, resolved: config.SourceMapMaxFilesPerRequest }).toEqual({
|
|
370
|
+
value,
|
|
371
|
+
resolved: FIFTY_FILES,
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
});
|
|
375
|
+
});
|
|
376
|
+
|
|
377
|
+
describe("SOURCE_MAP_MAX_BYTES_PER_RESOLVE", () => {
|
|
378
|
+
it("defaults to 512 MiB of map bytes per resolve request", async () => {
|
|
379
|
+
/*
|
|
380
|
+
* Roughly ten maps at the per-file ceiling, or every map of a
|
|
381
|
+
* realistically sized release many times over.
|
|
382
|
+
*/
|
|
383
|
+
const config: SourceMapConfigShape = await loadConfig({});
|
|
384
|
+
|
|
385
|
+
expect(config.SourceMapMaxBytesPerResolve).toBe(DEFAULT_BYTES_PER_RESOLVE);
|
|
386
|
+
});
|
|
387
|
+
|
|
388
|
+
it("honours an operator's value in both directions", async () => {
|
|
389
|
+
const tightened: SourceMapConfigShape = await loadConfig({
|
|
390
|
+
SOURCE_MAP_MAX_BYTES_PER_RESOLVE: String(64 * MEGABYTE),
|
|
391
|
+
});
|
|
392
|
+
|
|
393
|
+
expect(tightened.SourceMapMaxBytesPerResolve).toBe(64 * MEGABYTE);
|
|
394
|
+
|
|
395
|
+
const loosened: SourceMapConfigShape = await loadConfig({
|
|
396
|
+
SOURCE_MAP_MAX_BYTES_PER_RESOLVE: String(2048 * MEGABYTE),
|
|
397
|
+
});
|
|
398
|
+
|
|
399
|
+
expect(loosened.SourceMapMaxBytesPerResolve).toBe(2048 * MEGABYTE);
|
|
400
|
+
});
|
|
401
|
+
|
|
402
|
+
it("is not clamped, because it is the knob that replaced the row count", async () => {
|
|
403
|
+
/*
|
|
404
|
+
* This is the bound that actually protects the process now, and it is the
|
|
405
|
+
* one an operator with lots of memory has a legitimate reason to raise a
|
|
406
|
+
* long way. Clamping it to any of the other ceilings would recreate the
|
|
407
|
+
* exact coupling this change removed.
|
|
408
|
+
*/
|
|
409
|
+
const config: SourceMapConfigShape = await loadConfig({
|
|
410
|
+
SOURCE_MAP_MAX_BYTES_PER_RESOLVE: String(1024 * 1024 * MEGABYTE),
|
|
411
|
+
});
|
|
412
|
+
|
|
413
|
+
expect(config.SourceMapMaxBytesPerResolve).toBe(1024 * 1024 * MEGABYTE);
|
|
414
|
+
});
|
|
415
|
+
|
|
416
|
+
it("falls back to 512 MiB for anything that is not a positive whole number", async () => {
|
|
417
|
+
for (const value of INVALID_VALUES) {
|
|
418
|
+
const config: SourceMapConfigShape = await loadConfig({
|
|
419
|
+
SOURCE_MAP_MAX_BYTES_PER_RESOLVE: value,
|
|
420
|
+
});
|
|
421
|
+
|
|
422
|
+
expect({ value, resolved: config.SourceMapMaxBytesPerResolve }).toEqual({
|
|
423
|
+
value,
|
|
424
|
+
resolved: DEFAULT_BYTES_PER_RESOLVE,
|
|
425
|
+
});
|
|
426
|
+
}
|
|
427
|
+
});
|
|
428
|
+
});
|
|
429
|
+
|
|
430
|
+
describe("the five knobs together", () => {
|
|
431
|
+
it("reads each variable independently", async () => {
|
|
432
|
+
/*
|
|
433
|
+
* They are five separate settings that happen to share a prefix; setting
|
|
434
|
+
* one must not move another.
|
|
435
|
+
*/
|
|
436
|
+
const config: SourceMapConfigShape = await loadConfig({
|
|
437
|
+
SOURCE_MAP_MAX_MAPS_PER_RELEASE: "2000",
|
|
438
|
+
SOURCE_MAP_RETENTION_DAYS: "30",
|
|
439
|
+
SOURCE_MAP_MAX_FILE_SIZE_BYTES: String(8 * MEGABYTE),
|
|
440
|
+
SOURCE_MAP_MAX_FILES_PER_REQUEST: "12",
|
|
441
|
+
SOURCE_MAP_MAX_BYTES_PER_RESOLVE: String(256 * MEGABYTE),
|
|
442
|
+
});
|
|
443
|
+
|
|
444
|
+
expect({
|
|
445
|
+
maps: config.SourceMapMaxMapsPerRelease,
|
|
446
|
+
days: config.SourceMapRetentionInDays,
|
|
447
|
+
size: config.SourceMapMaxFileSizeInBytes,
|
|
448
|
+
files: config.SourceMapMaxFilesPerRequest,
|
|
449
|
+
bytes: config.SourceMapMaxBytesPerResolve,
|
|
450
|
+
}).toEqual({
|
|
451
|
+
maps: 2000,
|
|
452
|
+
days: 30,
|
|
453
|
+
size: 8 * MEGABYTE,
|
|
454
|
+
files: 12,
|
|
455
|
+
bytes: 256 * MEGABYTE,
|
|
456
|
+
});
|
|
457
|
+
});
|
|
458
|
+
|
|
459
|
+
it("does not let one misconfigured variable disturb the others", async () => {
|
|
460
|
+
const config: SourceMapConfigShape = await loadConfig({
|
|
461
|
+
SOURCE_MAP_MAX_MAPS_PER_RELEASE: "not-a-number",
|
|
462
|
+
SOURCE_MAP_RETENTION_DAYS: "45",
|
|
463
|
+
SOURCE_MAP_MAX_FILES_PER_REQUEST: "20",
|
|
464
|
+
});
|
|
465
|
+
|
|
466
|
+
expect({
|
|
467
|
+
maps: config.SourceMapMaxMapsPerRelease,
|
|
468
|
+
days: config.SourceMapRetentionInDays,
|
|
469
|
+
files: config.SourceMapMaxFilesPerRequest,
|
|
470
|
+
}).toEqual({
|
|
471
|
+
maps: DEFAULT_MAPS_PER_RELEASE,
|
|
472
|
+
days: 45,
|
|
473
|
+
files: 20,
|
|
474
|
+
});
|
|
475
|
+
});
|
|
476
|
+
|
|
477
|
+
it("gives every knob a positive whole number, whatever the environment says", async () => {
|
|
478
|
+
/*
|
|
479
|
+
* Each of these feeds a database limit, a multer limit or a byte budget.
|
|
480
|
+
* A fractional, zero or negative value reaching any of them would be a
|
|
481
|
+
* different class of failure than a rejected upload, so the invariant is
|
|
482
|
+
* asserted across the whole set rather than per-variable.
|
|
483
|
+
*/
|
|
484
|
+
for (const value of INVALID_VALUES) {
|
|
485
|
+
const config: SourceMapConfigShape = await loadConfig({
|
|
486
|
+
SOURCE_MAP_MAX_MAPS_PER_RELEASE: value,
|
|
487
|
+
SOURCE_MAP_RETENTION_DAYS: value,
|
|
488
|
+
SOURCE_MAP_MAX_FILE_SIZE_BYTES: value,
|
|
489
|
+
SOURCE_MAP_MAX_FILES_PER_REQUEST: value,
|
|
490
|
+
SOURCE_MAP_MAX_BYTES_PER_RESOLVE: value,
|
|
491
|
+
});
|
|
492
|
+
|
|
493
|
+
const resolved: Array<number> = [
|
|
494
|
+
config.SourceMapMaxMapsPerRelease,
|
|
495
|
+
config.SourceMapRetentionInDays,
|
|
496
|
+
config.SourceMapMaxFileSizeInBytes,
|
|
497
|
+
config.SourceMapMaxFilesPerRequest,
|
|
498
|
+
config.SourceMapMaxBytesPerResolve,
|
|
499
|
+
];
|
|
500
|
+
|
|
501
|
+
for (const number of resolved) {
|
|
502
|
+
expect({ value, number, integer: Number.isInteger(number) }).toEqual({
|
|
503
|
+
value,
|
|
504
|
+
number,
|
|
505
|
+
integer: true,
|
|
506
|
+
});
|
|
507
|
+
expect(number).toBeGreaterThan(0);
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
});
|
|
511
|
+
|
|
512
|
+
it("keeps the per-request file cap at or below the per-release cap's default", async () => {
|
|
513
|
+
/*
|
|
514
|
+
* Sanity on the division of labour: one request may never carry more maps
|
|
515
|
+
* than a release is allowed to hold, or the upload path could accept a
|
|
516
|
+
* batch the write gate must then reject wholesale.
|
|
517
|
+
*/
|
|
518
|
+
const config: SourceMapConfigShape = await loadConfig({});
|
|
519
|
+
|
|
520
|
+
expect(config.SourceMapMaxFilesPerRequest).toBeLessThanOrEqual(
|
|
521
|
+
config.SourceMapMaxMapsPerRelease,
|
|
522
|
+
);
|
|
523
|
+
});
|
|
524
|
+
});
|
|
525
|
+
|
|
526
|
+
describe("MAX_SOURCE_MAP_SIZE_IN_BYTES in SourceMapResolver", () => {
|
|
527
|
+
it("equals the configured per-file ceiling by default", async () => {
|
|
528
|
+
const { config, resolver } = await loadConfigAndResolver({});
|
|
529
|
+
|
|
530
|
+
expect(resolver.MAX_SOURCE_MAP_SIZE_IN_BYTES).toBe(
|
|
531
|
+
config.SourceMapMaxFileSizeInBytes,
|
|
532
|
+
);
|
|
533
|
+
expect(resolver.MAX_SOURCE_MAP_SIZE_IN_BYTES).toBe(FIFTY_MEGABYTES);
|
|
534
|
+
});
|
|
535
|
+
|
|
536
|
+
it("tracks a lowered SOURCE_MAP_MAX_FILE_SIZE_BYTES", async () => {
|
|
537
|
+
/*
|
|
538
|
+
* The resolver's own ceiling used to be an independent literal. If it
|
|
539
|
+
* stops tracking the config, an operator who lowers the knob gets maps
|
|
540
|
+
* rejected on upload but still decoded at read time — the two halves of
|
|
541
|
+
* one limit disagreeing.
|
|
542
|
+
*/
|
|
543
|
+
const { config, resolver } = await loadConfigAndResolver({
|
|
544
|
+
SOURCE_MAP_MAX_FILE_SIZE_BYTES: String(3 * MEGABYTE),
|
|
545
|
+
});
|
|
546
|
+
|
|
547
|
+
expect(resolver.MAX_SOURCE_MAP_SIZE_IN_BYTES).toBe(3 * MEGABYTE);
|
|
548
|
+
expect(resolver.MAX_SOURCE_MAP_SIZE_IN_BYTES).toBe(
|
|
549
|
+
config.SourceMapMaxFileSizeInBytes,
|
|
550
|
+
);
|
|
551
|
+
});
|
|
552
|
+
|
|
553
|
+
it("tracks the clamp too, so it never exceeds what multer accepts", async () => {
|
|
554
|
+
const { resolver } = await loadConfigAndResolver({
|
|
555
|
+
SOURCE_MAP_MAX_FILE_SIZE_BYTES: String(FIFTY_MEGABYTES * 4),
|
|
556
|
+
});
|
|
557
|
+
|
|
558
|
+
expect(resolver.MAX_SOURCE_MAP_SIZE_IN_BYTES).toBe(FIFTY_MEGABYTES);
|
|
559
|
+
});
|
|
560
|
+
|
|
561
|
+
it("exposes the frame ceilings the API layer needs to enforce", async () => {
|
|
562
|
+
/*
|
|
563
|
+
* MAX_FRAMES_TO_RESOLVE was module-private and is now exported, and
|
|
564
|
+
* MAX_FRAMES_PER_RESOLVE_REQUEST is new: TelemetryAPI rejects a frames
|
|
565
|
+
* array larger than the latter before sanitizing it. Both are fixed, not
|
|
566
|
+
* configurable — the frames array is caller-supplied, so its bounds are
|
|
567
|
+
* not an operator's to raise.
|
|
568
|
+
*/
|
|
569
|
+
const { resolver } = await loadConfigAndResolver({});
|
|
570
|
+
|
|
571
|
+
expect(resolver.MAX_FRAMES_TO_RESOLVE).toBe(500);
|
|
572
|
+
expect(resolver.MAX_FRAMES_PER_RESOLVE_REQUEST).toBe(10000);
|
|
573
|
+
expect(resolver.MAX_FRAMES_PER_RESOLVE_REQUEST).toBeGreaterThan(
|
|
574
|
+
resolver.MAX_FRAMES_TO_RESOLVE,
|
|
575
|
+
);
|
|
576
|
+
});
|
|
577
|
+
});
|
|
578
|
+
|
|
579
|
+
describe("the ceilings EnvironmentConfig duplicates as literals", () => {
|
|
580
|
+
/*
|
|
581
|
+
* EnvironmentConfig cannot import MultipartFormData — that module pulls in
|
|
582
|
+
* multer and express, and config has no business dragging those in — so it
|
|
583
|
+
* repeats MAX_MULTIPART_FILE_BYTES and MAX_MULTIPART_FILES as bare literals
|
|
584
|
+
* in its clamps.
|
|
585
|
+
*
|
|
586
|
+
* These two cases are the only thing keeping that duplication honest. If
|
|
587
|
+
* someone raises a multipart limit and does not touch EnvironmentConfig,
|
|
588
|
+
* the clamp silently becomes the tighter of the two and the knob stops
|
|
589
|
+
* reaching the value the middleware would now allow; if someone lowers one,
|
|
590
|
+
* the clamp lets through a value multer will reject with a 413. Either way
|
|
591
|
+
* these fail here rather than in production.
|
|
592
|
+
*/
|
|
593
|
+
|
|
594
|
+
it("pins the per-file byte clamp to MAX_MULTIPART_FILE_BYTES", async () => {
|
|
595
|
+
jest.resetModules();
|
|
596
|
+
|
|
597
|
+
const multipart: MultipartLimitsShape = (await import(
|
|
598
|
+
"../../../../Server/Middleware/MultipartFormData"
|
|
599
|
+
)) as unknown as MultipartLimitsShape;
|
|
600
|
+
|
|
601
|
+
expect(multipart.MAX_MULTIPART_FILE_BYTES).toBe(FIFTY_MEGABYTES);
|
|
602
|
+
});
|
|
603
|
+
|
|
604
|
+
it("pins the per-request file clamp to MAX_MULTIPART_FILES", async () => {
|
|
605
|
+
jest.resetModules();
|
|
606
|
+
|
|
607
|
+
const multipart: MultipartLimitsShape = (await import(
|
|
608
|
+
"../../../../Server/Middleware/MultipartFormData"
|
|
609
|
+
)) as unknown as MultipartLimitsShape;
|
|
610
|
+
|
|
611
|
+
expect(multipart.MAX_MULTIPART_FILES).toBe(FIFTY_FILES);
|
|
612
|
+
});
|
|
613
|
+
|
|
614
|
+
it("cannot be configured above either middleware limit", async () => {
|
|
615
|
+
/*
|
|
616
|
+
* Stated as the behaviour an operator sees, against the middleware's own
|
|
617
|
+
* exported values rather than against the literals repeated above.
|
|
618
|
+
*/
|
|
619
|
+
jest.resetModules();
|
|
620
|
+
|
|
621
|
+
const multipart: MultipartLimitsShape = (await import(
|
|
622
|
+
"../../../../Server/Middleware/MultipartFormData"
|
|
623
|
+
)) as unknown as MultipartLimitsShape;
|
|
624
|
+
|
|
625
|
+
const config: SourceMapConfigShape = await loadConfig({
|
|
626
|
+
SOURCE_MAP_MAX_FILE_SIZE_BYTES: String(
|
|
627
|
+
multipart.MAX_MULTIPART_FILE_BYTES * 10,
|
|
628
|
+
),
|
|
629
|
+
SOURCE_MAP_MAX_FILES_PER_REQUEST: String(
|
|
630
|
+
multipart.MAX_MULTIPART_FILES * 10,
|
|
631
|
+
),
|
|
632
|
+
});
|
|
633
|
+
|
|
634
|
+
expect(config.SourceMapMaxFileSizeInBytes).toBe(
|
|
635
|
+
multipart.MAX_MULTIPART_FILE_BYTES,
|
|
636
|
+
);
|
|
637
|
+
expect(config.SourceMapMaxFilesPerRequest).toBe(
|
|
638
|
+
multipart.MAX_MULTIPART_FILES,
|
|
639
|
+
);
|
|
640
|
+
});
|
|
641
|
+
|
|
642
|
+
it("pins the per-release count clamp to LIMIT_MAX", async () => {
|
|
643
|
+
/*
|
|
644
|
+
* Same duplication hazard, different ceiling: the write gate's countBy
|
|
645
|
+
* uses LIMIT_MAX, so a change to LIMIT_MAX must be a deliberate change
|
|
646
|
+
* to the reachable range of this knob.
|
|
647
|
+
*/
|
|
648
|
+
expect(LIMIT_MAX).toBe(10000);
|
|
649
|
+
|
|
650
|
+
const config: SourceMapConfigShape = await loadConfig({
|
|
651
|
+
SOURCE_MAP_MAX_MAPS_PER_RELEASE: String(LIMIT_MAX * 10),
|
|
652
|
+
});
|
|
653
|
+
|
|
654
|
+
expect(config.SourceMapMaxMapsPerRelease).toBe(LIMIT_MAX);
|
|
655
|
+
});
|
|
656
|
+
});
|