@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.
Files changed (664) hide show
  1. package/Models/AnalyticsModels/SecurityEvent.ts +48 -16
  2. package/Models/AnalyticsModels/ThreatIntelIndicator.ts +10 -5
  3. package/Models/DatabaseModels/AlertSeverity.ts +44 -0
  4. package/Models/DatabaseModels/DetectionRule.ts +16 -5
  5. package/Models/DatabaseModels/GoogleSecOpsConnection.ts +14 -5
  6. package/Models/DatabaseModels/IncidentSeverity.ts +44 -0
  7. package/Models/DatabaseModels/Index.ts +13 -0
  8. package/Models/DatabaseModels/NetworkDevice.ts +113 -3
  9. package/Models/DatabaseModels/NetworkDeviceAutoImportRule.ts +88 -0
  10. package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +22 -0
  11. package/Models/DatabaseModels/NetworkDeviceOidTemplate.ts +499 -0
  12. package/Models/DatabaseModels/OnCallDutyPolicySchedule.ts +43 -0
  13. package/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.ts +662 -0
  14. package/Models/DatabaseModels/ProjectOnCallCalendarFeed.ts +584 -0
  15. package/Models/DatabaseModels/ThreatIntelFeed.ts +16 -5
  16. package/Models/DatabaseModels/UserOnCallCalendarFeed.ts +546 -0
  17. package/Models/DatabaseModels/UserOnCallShiftReminder.ts +231 -0
  18. package/Models/DatabaseModels/UserOnCallShiftReminderLog.ts +331 -0
  19. package/Server/API/GlobalConfigAPI.ts +362 -183
  20. package/Server/API/OnCallCalendarAPI.ts +2194 -0
  21. package/Server/API/TelemetryAPI.ts +42 -4
  22. package/Server/EnvironmentConfig.ts +250 -0
  23. package/Server/Infrastructure/OnCallCalendarFeedCache.ts +1050 -0
  24. package/Server/Infrastructure/Postgres/SchemaMigrations/1790400000000-AddOnCallCalendarFeeds.ts +253 -0
  25. package/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.ts +59 -0
  26. package/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.ts +25 -0
  27. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
  28. package/Server/Middleware/MultipartFormData.ts +118 -32
  29. package/Server/Middleware/OnCallCalendarFeedRateLimit.ts +487 -0
  30. package/Server/Services/AlertEpisodeLabelRuleEngineService.ts +9 -1
  31. package/Server/Services/AlertEpisodeOnCallRuleEngineService.ts +9 -1
  32. package/Server/Services/AlertEpisodeOwnerRuleEngineService.ts +9 -1
  33. package/Server/Services/AlertEpisodePrivacyRuleEngineService.ts +9 -1
  34. package/Server/Services/AlertGroupingEngineService.ts +9 -1
  35. package/Server/Services/AlertLabelRuleEngineService.ts +9 -1
  36. package/Server/Services/AlertOnCallRuleEngineService.ts +9 -1
  37. package/Server/Services/AlertOwnerRuleEngineService.ts +9 -1
  38. package/Server/Services/AlertPrivacyRuleEngineService.ts +9 -1
  39. package/Server/Services/AlertReminderRuleService.ts +9 -1
  40. package/Server/Services/AutoRemediationRuleEngineService.ts +9 -1
  41. package/Server/Services/CephClusterLabelRuleEngineService.ts +9 -1
  42. package/Server/Services/CephClusterOwnerRuleEngineService.ts +9 -1
  43. package/Server/Services/CloudResourceLabelRuleEngineService.ts +9 -1
  44. package/Server/Services/CloudResourceOwnerRuleEngineService.ts +9 -1
  45. package/Server/Services/DashboardLabelRuleEngineService.ts +9 -1
  46. package/Server/Services/DashboardOwnerRuleEngineService.ts +9 -1
  47. package/Server/Services/DockerHostLabelRuleEngineService.ts +9 -1
  48. package/Server/Services/DockerHostOwnerRuleEngineService.ts +9 -1
  49. package/Server/Services/DockerSwarmClusterLabelRuleEngineService.ts +9 -1
  50. package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +9 -1
  51. package/Server/Services/HostLabelRuleEngineService.ts +9 -1
  52. package/Server/Services/HostOwnerRuleEngineService.ts +9 -1
  53. package/Server/Services/IncidentEpisodeLabelRuleEngineService.ts +9 -1
  54. package/Server/Services/IncidentEpisodeOnCallRuleEngineService.ts +9 -1
  55. package/Server/Services/IncidentEpisodeOwnerRuleEngineService.ts +9 -1
  56. package/Server/Services/IncidentEpisodePrivacyRuleEngineService.ts +9 -1
  57. package/Server/Services/IncidentGroupingEngineService.ts +9 -1
  58. package/Server/Services/IncidentLabelRuleEngineService.ts +9 -1
  59. package/Server/Services/IncidentOnCallRuleEngineService.ts +9 -1
  60. package/Server/Services/IncidentOwnerRuleEngineService.ts +9 -1
  61. package/Server/Services/IncidentPrivacyRuleEngineService.ts +9 -1
  62. package/Server/Services/IncidentReminderRuleService.ts +9 -1
  63. package/Server/Services/IncidentSlaRuleService.ts +9 -1
  64. package/Server/Services/IncomingCallPolicyLabelRuleEngineService.ts +9 -1
  65. package/Server/Services/IncomingCallPolicyOwnerRuleEngineService.ts +9 -1
  66. package/Server/Services/Index.ts +14 -0
  67. package/Server/Services/IoTFleetLabelRuleEngineService.ts +9 -1
  68. package/Server/Services/IoTFleetOwnerRuleEngineService.ts +9 -1
  69. package/Server/Services/KubernetesClusterLabelRuleEngineService.ts +9 -1
  70. package/Server/Services/KubernetesClusterOwnerRuleEngineService.ts +9 -1
  71. package/Server/Services/KubernetesResourceService.ts +5 -1
  72. package/Server/Services/MonitorLabelRuleEngineService.ts +9 -1
  73. package/Server/Services/MonitorOwnerRuleEngineService.ts +9 -1
  74. package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +35 -0
  75. package/Server/Services/NetworkDeviceAutoImportRuleService.ts +96 -0
  76. package/Server/Services/NetworkDeviceLabelRuleEngineService.ts +9 -1
  77. package/Server/Services/NetworkDeviceOidTemplateService.ts +201 -0
  78. package/Server/Services/NetworkDeviceOwnerRuleEngineService.ts +9 -1
  79. package/Server/Services/NetworkDeviceService.ts +209 -1
  80. package/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.ts +32 -0
  81. package/Server/Services/OnCallDutyPolicyLabelRuleEngineService.ts +9 -1
  82. package/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.ts +9 -1
  83. package/Server/Services/OnCallDutyPolicyScheduleCalendarFeedService.ts +260 -0
  84. package/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.ts +9 -1
  85. package/Server/Services/OnCallDutyPolicyScheduleLayerService.ts +70 -3
  86. package/Server/Services/OnCallDutyPolicyScheduleLayerUserService.ts +138 -3
  87. package/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.ts +9 -1
  88. package/Server/Services/OnCallDutyPolicyScheduleService.ts +1465 -134
  89. package/Server/Services/OnCallDutyPolicyUserOverrideService.ts +167 -31
  90. package/Server/Services/PodmanHostLabelRuleEngineService.ts +9 -1
  91. package/Server/Services/PodmanHostOwnerRuleEngineService.ts +9 -1
  92. package/Server/Services/ProjectOnCallCalendarFeedService.ts +192 -0
  93. package/Server/Services/ProxmoxClusterLabelRuleEngineService.ts +9 -1
  94. package/Server/Services/ProxmoxClusterOwnerRuleEngineService.ts +9 -1
  95. package/Server/Services/RumApplicationLabelRuleEngineService.ts +9 -1
  96. package/Server/Services/RumApplicationOwnerRuleEngineService.ts +9 -1
  97. package/Server/Services/RunbookLabelRuleEngineService.ts +9 -1
  98. package/Server/Services/RunbookOwnerRuleEngineService.ts +9 -1
  99. package/Server/Services/RunbookRuleEngineService.ts +9 -1
  100. package/Server/Services/ScheduledMaintenanceLabelRuleEngineService.ts +9 -1
  101. package/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.ts +9 -1
  102. package/Server/Services/ScheduledMaintenanceReminderRuleService.ts +9 -1
  103. package/Server/Services/ServerlessFunctionLabelRuleEngineService.ts +9 -1
  104. package/Server/Services/ServerlessFunctionOwnerRuleEngineService.ts +9 -1
  105. package/Server/Services/ServiceLabelRuleEngineService.ts +9 -1
  106. package/Server/Services/ServiceOwnerRuleEngineService.ts +9 -1
  107. package/Server/Services/StatusPageLabelRuleEngineService.ts +9 -1
  108. package/Server/Services/StatusPageMonitorRuleEngineService.ts +7 -0
  109. package/Server/Services/StatusPageOwnerRuleEngineService.ts +9 -1
  110. package/Server/Services/TeamMemberService.ts +489 -1
  111. package/Server/Services/TeamService.ts +50 -0
  112. package/Server/Services/TelemetrySourceMapService.ts +266 -23
  113. package/Server/Services/UserNotificationSettingService.ts +44 -1
  114. package/Server/Services/UserOnCallCalendarFeedService.ts +159 -0
  115. package/Server/Services/UserOnCallShiftReminderLogService.ts +151 -0
  116. package/Server/Services/UserOnCallShiftReminderService.ts +112 -0
  117. package/Server/Services/UserService.ts +27 -0
  118. package/Server/Services/WorkflowLabelRuleEngineService.ts +9 -1
  119. package/Server/Services/WorkflowOwnerRuleEngineService.ts +9 -1
  120. package/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.ts +186 -0
  121. package/Server/Utils/Monitor/CapturedMetricAttributeUtil.ts +245 -0
  122. package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +21 -2
  123. package/Server/Utils/Monitor/MonitorMetricUtil.ts +55 -21
  124. package/Server/Utils/Monitor/MonitorTemplateUtil.ts +32 -0
  125. package/Server/Utils/Monitor/NetworkDeviceMetricUtil.ts +15 -2
  126. package/Server/Utils/Monitor/NetworkDeviceWalkUtil.ts +18 -1
  127. package/Server/Utils/Monitor/NetworkInventoryUtil.ts +10 -0
  128. package/Server/Utils/Monitor/SeriesResourceLabels.ts +34 -0
  129. package/Server/Utils/OnCall/CalendarFeedToken.ts +241 -0
  130. package/Server/Utils/OnCall/OnCallCalendarFeedRenderer.ts +1488 -0
  131. package/Server/Utils/OnCall/OnCallCalendarFeedUrls.ts +230 -0
  132. package/Server/Utils/OnCall/OnCallShiftChangeListeners.ts +227 -0
  133. package/Server/Utils/OnCall/OnCallShiftMaterializer.ts +1127 -0
  134. package/Server/Utils/OnCall/OnCallShiftReminderListener.ts +174 -0
  135. package/Server/Utils/OnCall/OnCallShiftReminderRunner.ts +2584 -0
  136. package/Server/Utils/Response.ts +134 -0
  137. package/Server/Utils/Rules/RuleEngineRuleRead.ts +48 -0
  138. package/Server/Utils/StartServer.ts +10 -0
  139. package/Server/Utils/Telemetry/AppMetrics.ts +51 -0
  140. package/Server/Utils/Telemetry/ExceptionSanitizer.ts +14 -1
  141. package/Server/Utils/Telemetry/LogExceptionExtractor.ts +14 -2
  142. package/Server/Utils/Telemetry/SourceMapResolver.ts +16 -5
  143. package/Server/Utils/Telemetry/StackTraceParser.ts +399 -0
  144. package/Tests/App/Dashboard/EventOverlayHook.test.tsx +125 -0
  145. package/Tests/App/Dashboard/HeaderImageAssets.test.tsx +93 -0
  146. package/Tests/App/Dashboard/OnCallCalendarFeedLinks.test.tsx +229 -0
  147. package/Tests/App/Dashboard/OnCallCalendarFeedPlanGate.test.tsx +489 -0
  148. package/Tests/App/Dashboard/OnCallCalendarFeedSideMenus.test.tsx +149 -0
  149. package/Tests/App/Dashboard/OnCallCalendarFeedUtil.test.ts +855 -0
  150. package/Tests/App/Dashboard/OnCallPersonalCalendarFeed.test.tsx +1209 -0
  151. package/Tests/App/Dashboard/OnCallReadinessSurfaces.test.tsx +3 -3
  152. package/Tests/App/Dashboard/OnCallSharedCalendarFeedCard.test.tsx +1019 -0
  153. package/Tests/App/Dashboard/OnCallShiftRemindersAndUpcomingShifts.test.tsx +655 -0
  154. package/Tests/App/Dashboard/UserElementEmail.test.tsx +12 -4
  155. package/Tests/App/Dashboard/UserEmailCallSites.test.tsx +1 -1
  156. package/Tests/App/Dashboard/UserSettingsSetupChecklistModel.test.ts +73 -0
  157. package/Tests/Models/DatabaseModels/DomainRoleTierCoverage.test.ts +14 -0
  158. package/Tests/Models/DatabaseModels/ModelRegistryInvariants.test.ts +469 -0
  159. package/Tests/Models/OnCallCalendarFeedModels.test.ts +642 -0
  160. package/Tests/Models/OnCallDutyPolicyScheduleCalendarFeed.test.ts +288 -0
  161. package/Tests/Models/OnCallDutyPolicyScheduleShiftConfigVersion.test.ts +88 -0
  162. package/Tests/Models/SecurityDomainAccessControl.test.ts +429 -0
  163. package/Tests/Models/UserOnCallShiftReminderModels.test.ts +368 -0
  164. package/Tests/Server/API/GlobalConfigLicense.test.ts +657 -0
  165. package/Tests/Server/API/Helpers.ts +8 -0
  166. package/Tests/Server/API/OnCallCalendarAPI.test.ts +4461 -0
  167. package/Tests/Server/API/SecurityEventAttributesAPI.test.ts +84 -6
  168. package/Tests/Server/API/TelemetryResolveStackTraceAPI.test.ts +805 -0
  169. package/Tests/Server/EnvironmentConfigOnCallCalendarFeed.test.ts +357 -0
  170. package/Tests/Server/Infrastructure/OnCallCalendarFeedCache.test.ts +1589 -0
  171. package/Tests/Server/Infrastructure/Postgres/AddOnCallCalendarFeedsMigration.test.ts +394 -0
  172. package/Tests/Server/Middleware/IdentityRateLimit.test.ts +1144 -0
  173. package/Tests/Server/Middleware/MultipartFormData.test.ts +618 -3
  174. package/Tests/Server/Middleware/OnCallCalendarFeedRateLimit.test.ts +1365 -0
  175. package/Tests/Server/Services/FeedRetentionConsistency.test.ts +70 -0
  176. package/Tests/Server/Services/MonitorLabelRuleEngineScale.test.ts +520 -0
  177. package/Tests/Server/Services/NetworkDeviceOidTemplateService.test.ts +332 -0
  178. package/Tests/Server/Services/NetworkDeviceOidTemplateWriteGuards.test.ts +409 -0
  179. package/Tests/Server/Services/OnCallCalendarFeedServices.test.ts +1103 -0
  180. package/Tests/Server/Services/OnCallDutyPolicyScheduleResolver.test.ts +1037 -0
  181. package/Tests/Server/Services/OnCallShiftConfigPropagation.test.ts +1270 -0
  182. package/Tests/Server/Services/RuleEngineRuleFetchLimit.test.ts +239 -0
  183. package/Tests/Server/Services/TeamDeleteMemberCleanup.test.ts +156 -0
  184. package/Tests/Server/Services/TeamMemberOnCallCleanup.test.ts +755 -0
  185. package/Tests/Server/Services/TelemetrySourceMapService.test.ts +1210 -2
  186. package/Tests/Server/Services/UserNotificationSettingShiftReminderDefaults.test.ts +267 -0
  187. package/Tests/Server/Services/UserOnCallShiftReminderServices.test.ts +583 -0
  188. package/Tests/Server/Services/UserServiceSeatLimit.test.ts +182 -0
  189. package/Tests/Server/Types/AnalyticsDatabase/SecurityEventModelPermission.test.ts +255 -0
  190. package/Tests/Server/Types/Database/Permissions/OnCallCalendarFeedPermissions.test.ts +254 -0
  191. package/Tests/Server/Types/Database/Permissions/ReadBlockPermission.test.ts +212 -0
  192. package/Tests/Server/Types/Database/Permissions/SecurityRoleAccess.test.ts +413 -0
  193. package/Tests/Server/Utils/CodeRepository.test.ts +689 -0
  194. package/Tests/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.test.ts +495 -0
  195. package/Tests/Server/Utils/ExceptionSanitizer.test.ts +77 -0
  196. package/Tests/Server/Utils/Monitor/CapturedMetricAttributeUtil.test.ts +284 -0
  197. package/Tests/Server/Utils/Monitor/MonitorCustomMetricAttributes.test.ts +503 -0
  198. package/Tests/Server/Utils/Monitor/MonitorTemplatePrototypePollution.test.ts +106 -0
  199. package/Tests/Server/Utils/Monitor/NetworkDeviceWalkLogWritePath.test.ts +33 -4
  200. package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +14 -4
  201. package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +44 -0
  202. package/Tests/Server/Utils/OnCall/CalendarFeedToken.test.ts +467 -0
  203. package/Tests/Server/Utils/OnCall/OnCallCalendarFeedRenderer.test.ts +2142 -0
  204. package/Tests/Server/Utils/OnCall/OnCallCalendarFeedUrls.test.ts +278 -0
  205. package/Tests/Server/Utils/OnCall/OnCallResolverTestHarness.ts +440 -0
  206. package/Tests/Server/Utils/OnCall/OnCallShiftChangeListeners.test.ts +314 -0
  207. package/Tests/Server/Utils/OnCall/OnCallShiftMaterializer.test.ts +1502 -0
  208. package/Tests/Server/Utils/OnCall/OnCallShiftReminderListener.test.ts +491 -0
  209. package/Tests/Server/Utils/OnCall/OnCallShiftReminderRunner.test.ts +3088 -0
  210. package/Tests/Server/Utils/OnCall/OnCallShiftReminderTestHarness.ts +910 -0
  211. package/Tests/Server/Utils/OpenAPISpec.test.ts +536 -0
  212. package/Tests/Server/Utils/ResponseSendCalendarResponse.test.ts +561 -0
  213. package/Tests/Server/Utils/Rules/RuleEngineRuleRead.test.ts +115 -0
  214. package/Tests/Server/Utils/StackTraceParser.test.ts +610 -0
  215. package/Tests/Server/Utils/StartServerEncryptionSecretWarning.test.ts +64 -0
  216. package/Tests/Server/Utils/Telemetry/AppMetrics.test.ts +29 -0
  217. package/Tests/Server/Utils/Telemetry/LogExceptionExtractor.test.ts +0 -0
  218. package/Tests/Server/Utils/Telemetry/SourceMapLimits.test.ts +656 -0
  219. package/Tests/Server/Utils/Telemetry/SourceMapResolver.test.ts +100 -0
  220. package/Tests/Types/Calendar/ICalendar.test.ts +488 -0
  221. package/Tests/Types/Monitor/SnmpMonitor/SnmpOidListUtil.test.ts +454 -0
  222. package/Tests/Types/NotificationSetting/NotificationSettingEventType.test.ts +53 -0
  223. package/Tests/Types/OnCallDutyPolicy/CalendarFeedTestFixtures.ts +310 -0
  224. package/Tests/Types/OnCallDutyPolicy/CalendarFeedWindow.test.ts +205 -0
  225. package/Tests/Types/OnCallDutyPolicy/LayerUtilLayerMetaAndIterationCap.test.ts +458 -0
  226. package/Tests/Types/OnCallDutyPolicy/MaterializedShift.test.ts +197 -0
  227. package/Tests/Types/OnCallDutyPolicy/OnCallCalendarFeedUtil.test.ts +1986 -0
  228. package/Tests/Types/OnCallDutyPolicy/ScheduleShiftUtilGroupKey.test.ts +678 -0
  229. package/Tests/Types/OnCallDutyPolicy/ShiftSeamUtil.test.ts +417 -0
  230. package/Tests/Types/SecurityRolePermissions.test.ts +193 -0
  231. package/Tests/UI/Components/Charts/AnnotationLayout.test.ts +773 -0
  232. package/Tests/UI/Components/Charts/ChartAnnotationRail.test.tsx +789 -0
  233. package/Tests/UI/Components/Charts/ChartBucketIdentity.test.ts +254 -0
  234. package/Tests/UI/Components/Charts/TimeAnnotation.test.ts +471 -0
  235. package/Tests/UI/Components/EditionLabelLicenseRefresh.test.tsx +405 -0
  236. package/Tests/UI/Components/ErrorMessageRefreshControl.test.tsx +83 -0
  237. package/Tests/UI/Components/MarkdownConverters.test.ts +686 -0
  238. package/Tests/UI/Components/ModelTable/BaseModelTableDeleteAndEmptyStates.test.tsx +341 -0
  239. package/Tests/UI/Components/OrderedStatesList.test.tsx +5 -5
  240. package/Tests/UI/Components/PendingProjectInvitations.test.tsx +1 -1
  241. package/Tests/UI/Components/TableSortAndMobileColumns.test.tsx +195 -0
  242. package/Tests/UI/Components/XAxis.test.ts +270 -5
  243. package/Tests/UI/Components/XAxisDaylightSaving.test.ts +113 -0
  244. package/Tests/UI/Styles/ChartFocusRing.test.ts +153 -0
  245. package/Tests/UI/Styles/ChartFocusRingCoverage.test.tsx +377 -0
  246. package/Tests/UI/Styles/ThemeStylesheet.ts +162 -0
  247. package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +10 -0
  248. package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +2 -0
  249. package/Tests/Utils/EnterpriseLicenseSeats.test.ts +507 -0
  250. package/Tests/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.test.ts +951 -1
  251. package/Tests/Utils/NetworkDiscovery/DiscoveredHostUtil.test.ts +238 -0
  252. package/Tests/Utils/NetworkDiscovery/DiscoveryReverseDnsChain.test.ts +1056 -0
  253. package/Tests/Utils/NetworkDiscovery/ReverseDnsNameUtil.test.ts +882 -0
  254. package/Types/Calendar/ICalendar.ts +442 -0
  255. package/Types/Date.ts +39 -0
  256. package/Types/Email/EmailTemplateType.ts +2 -0
  257. package/Types/Monitor/SnmpMonitor/SnmpOidListUtil.ts +333 -0
  258. package/Types/NotificationSetting/NotificationSettingEventType.ts +4 -0
  259. package/Types/OnCallDutyPolicy/CalendarFeedWindow.ts +140 -0
  260. package/Types/OnCallDutyPolicy/Layer.ts +190 -35
  261. package/Types/OnCallDutyPolicy/MaterializedShift.ts +274 -0
  262. package/Types/OnCallDutyPolicy/OnCallCalendarFeedUtil.ts +1415 -0
  263. package/Types/OnCallDutyPolicy/ScheduleShiftUtil.ts +159 -4
  264. package/Types/OnCallDutyPolicy/ShiftSeamUtil.ts +106 -0
  265. package/Types/Permission.ts +96 -0
  266. package/Types/Rum/SessionReplay.ts +21 -0
  267. package/Types/Telemetry/SourceMap.ts +8 -0
  268. package/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.tsx +176 -0
  269. package/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.ts +745 -0
  270. package/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.tsx +576 -0
  271. package/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.tsx +204 -0
  272. package/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.tsx +491 -544
  273. package/UI/Components/Charts/ChartLibrary/BarChart/BarChart.tsx +324 -372
  274. package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +487 -540
  275. package/UI/Components/Charts/ChartLibrary/Types/FormattedReferenceRegion.ts +7 -3
  276. package/UI/Components/Charts/ChartLibrary/Types/FormattedTimeReferenceLine.ts +14 -3
  277. package/UI/Components/Charts/Types/ChartEventKind.ts +13 -0
  278. package/UI/Components/Charts/Types/ReferenceRegionProps.ts +6 -0
  279. package/UI/Components/Charts/Types/TimeReferenceLineProps.ts +20 -3
  280. package/UI/Components/Charts/Utils/TimeAnnotation.ts +69 -35
  281. package/UI/Components/Charts/Utils/XAxis.ts +125 -18
  282. package/UI/Components/EditionLabel/EditionLabel.tsx +280 -26
  283. package/UI/Components/ErrorMessage/ErrorMessage.tsx +21 -10
  284. package/UI/Components/Feed/FeedItem.tsx +4 -5
  285. package/UI/Components/Header/HeaderIconDropdownButton.tsx +1 -2
  286. package/UI/Components/Header/UserProfile/UserProfile.tsx +1 -2
  287. package/UI/Components/Image/Image.tsx +20 -3
  288. package/UI/Components/Markdown.tsx/MarkdownConverters.ts +0 -0
  289. package/UI/Components/MemberRoleAssignment/MemberRoleAssignment.tsx +1 -2
  290. package/UI/Components/ModelTable/BaseModelTable.tsx +150 -24
  291. package/UI/Components/Table/TableHeader.tsx +64 -48
  292. package/UI/Components/Table/TableRow.tsx +13 -3
  293. package/UI/Styles/Theme.css +38 -0
  294. package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +271 -0
  295. package/Utils/NetworkDiscovery/AutoImportRuleMatcher.ts +6 -0
  296. package/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.ts +141 -10
  297. package/Utils/NetworkDiscovery/DiscoveredHostUtil.ts +55 -3
  298. package/Utils/NetworkDiscovery/ReverseDnsNameUtil.ts +151 -0
  299. package/Utils/Rules/RuleEngineLimits.ts +32 -0
  300. package/build/dist/Models/AnalyticsModels/SecurityEvent.js +48 -16
  301. package/build/dist/Models/AnalyticsModels/SecurityEvent.js.map +1 -1
  302. package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js +10 -5
  303. package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js.map +1 -1
  304. package/build/dist/Models/DatabaseModels/AlertSeverity.js +46 -1
  305. package/build/dist/Models/DatabaseModels/AlertSeverity.js.map +1 -1
  306. package/build/dist/Models/DatabaseModels/DetectionRule.js +16 -5
  307. package/build/dist/Models/DatabaseModels/DetectionRule.js.map +1 -1
  308. package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js +14 -5
  309. package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js.map +1 -1
  310. package/build/dist/Models/DatabaseModels/IncidentSeverity.js +46 -1
  311. package/build/dist/Models/DatabaseModels/IncidentSeverity.js.map +1 -1
  312. package/build/dist/Models/DatabaseModels/Index.js +13 -0
  313. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  314. package/build/dist/Models/DatabaseModels/NetworkDevice.js +115 -3
  315. package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
  316. package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js +88 -0
  317. package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js.map +1 -1
  318. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
  319. package/build/dist/Models/DatabaseModels/NetworkDeviceOidTemplate.js +519 -0
  320. package/build/dist/Models/DatabaseModels/NetworkDeviceOidTemplate.js.map +1 -0
  321. package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js +44 -0
  322. package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js.map +1 -1
  323. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.js +699 -0
  324. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.js.map +1 -0
  325. package/build/dist/Models/DatabaseModels/ProjectOnCallCalendarFeed.js +620 -0
  326. package/build/dist/Models/DatabaseModels/ProjectOnCallCalendarFeed.js.map +1 -0
  327. package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js +16 -5
  328. package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js.map +1 -1
  329. package/build/dist/Models/DatabaseModels/UserOnCallCalendarFeed.js +585 -0
  330. package/build/dist/Models/DatabaseModels/UserOnCallCalendarFeed.js.map +1 -0
  331. package/build/dist/Models/DatabaseModels/UserOnCallShiftReminder.js +247 -0
  332. package/build/dist/Models/DatabaseModels/UserOnCallShiftReminder.js.map +1 -0
  333. package/build/dist/Models/DatabaseModels/UserOnCallShiftReminderLog.js +355 -0
  334. package/build/dist/Models/DatabaseModels/UserOnCallShiftReminderLog.js.map +1 -0
  335. package/build/dist/Server/API/GlobalConfigAPI.js +293 -176
  336. package/build/dist/Server/API/GlobalConfigAPI.js.map +1 -1
  337. package/build/dist/Server/API/OnCallCalendarAPI.js +1371 -0
  338. package/build/dist/Server/API/OnCallCalendarAPI.js.map +1 -0
  339. package/build/dist/Server/API/TelemetryAPI.js +31 -3
  340. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  341. package/build/dist/Server/EnvironmentConfig.js +185 -0
  342. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  343. package/build/dist/Server/Infrastructure/OnCallCalendarFeedCache.js +663 -0
  344. package/build/dist/Server/Infrastructure/OnCallCalendarFeedCache.js.map +1 -0
  345. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790400000000-AddOnCallCalendarFeeds.js +103 -0
  346. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790400000000-AddOnCallCalendarFeeds.js.map +1 -0
  347. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.js +26 -0
  348. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.js.map +1 -0
  349. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.js +14 -0
  350. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.js.map +1 -0
  351. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -0
  352. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  353. package/build/dist/Server/Middleware/MultipartFormData.js +93 -28
  354. package/build/dist/Server/Middleware/MultipartFormData.js.map +1 -1
  355. package/build/dist/Server/Middleware/OnCallCalendarFeedRateLimit.js +342 -0
  356. package/build/dist/Server/Middleware/OnCallCalendarFeedRateLimit.js.map +1 -0
  357. package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js +8 -1
  358. package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js.map +1 -1
  359. package/build/dist/Server/Services/AlertEpisodeOnCallRuleEngineService.js +8 -1
  360. package/build/dist/Server/Services/AlertEpisodeOnCallRuleEngineService.js.map +1 -1
  361. package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js +8 -1
  362. package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js.map +1 -1
  363. package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js +8 -1
  364. package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js.map +1 -1
  365. package/build/dist/Server/Services/AlertGroupingEngineService.js +8 -1
  366. package/build/dist/Server/Services/AlertGroupingEngineService.js.map +1 -1
  367. package/build/dist/Server/Services/AlertLabelRuleEngineService.js +8 -1
  368. package/build/dist/Server/Services/AlertLabelRuleEngineService.js.map +1 -1
  369. package/build/dist/Server/Services/AlertOnCallRuleEngineService.js +8 -1
  370. package/build/dist/Server/Services/AlertOnCallRuleEngineService.js.map +1 -1
  371. package/build/dist/Server/Services/AlertOwnerRuleEngineService.js +8 -1
  372. package/build/dist/Server/Services/AlertOwnerRuleEngineService.js.map +1 -1
  373. package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js +8 -1
  374. package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js.map +1 -1
  375. package/build/dist/Server/Services/AlertReminderRuleService.js +8 -1
  376. package/build/dist/Server/Services/AlertReminderRuleService.js.map +1 -1
  377. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js +8 -1
  378. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js.map +1 -1
  379. package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js +8 -1
  380. package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js.map +1 -1
  381. package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js +8 -1
  382. package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js.map +1 -1
  383. package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js +8 -1
  384. package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js.map +1 -1
  385. package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js +8 -1
  386. package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js.map +1 -1
  387. package/build/dist/Server/Services/DashboardLabelRuleEngineService.js +8 -1
  388. package/build/dist/Server/Services/DashboardLabelRuleEngineService.js.map +1 -1
  389. package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js +8 -1
  390. package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js.map +1 -1
  391. package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js +8 -1
  392. package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js.map +1 -1
  393. package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js +8 -1
  394. package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js.map +1 -1
  395. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js +8 -1
  396. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js.map +1 -1
  397. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js +8 -1
  398. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js.map +1 -1
  399. package/build/dist/Server/Services/HostLabelRuleEngineService.js +8 -1
  400. package/build/dist/Server/Services/HostLabelRuleEngineService.js.map +1 -1
  401. package/build/dist/Server/Services/HostOwnerRuleEngineService.js +8 -1
  402. package/build/dist/Server/Services/HostOwnerRuleEngineService.js.map +1 -1
  403. package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js +8 -1
  404. package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js.map +1 -1
  405. package/build/dist/Server/Services/IncidentEpisodeOnCallRuleEngineService.js +8 -1
  406. package/build/dist/Server/Services/IncidentEpisodeOnCallRuleEngineService.js.map +1 -1
  407. package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js +8 -1
  408. package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js.map +1 -1
  409. package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js +8 -1
  410. package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js.map +1 -1
  411. package/build/dist/Server/Services/IncidentGroupingEngineService.js +8 -1
  412. package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -1
  413. package/build/dist/Server/Services/IncidentLabelRuleEngineService.js +8 -1
  414. package/build/dist/Server/Services/IncidentLabelRuleEngineService.js.map +1 -1
  415. package/build/dist/Server/Services/IncidentOnCallRuleEngineService.js +8 -1
  416. package/build/dist/Server/Services/IncidentOnCallRuleEngineService.js.map +1 -1
  417. package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js +8 -1
  418. package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js.map +1 -1
  419. package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js +8 -1
  420. package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js.map +1 -1
  421. package/build/dist/Server/Services/IncidentReminderRuleService.js +8 -1
  422. package/build/dist/Server/Services/IncidentReminderRuleService.js.map +1 -1
  423. package/build/dist/Server/Services/IncidentSlaRuleService.js +8 -1
  424. package/build/dist/Server/Services/IncidentSlaRuleService.js.map +1 -1
  425. package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js +8 -1
  426. package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js.map +1 -1
  427. package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js +8 -1
  428. package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js.map +1 -1
  429. package/build/dist/Server/Services/Index.js +14 -0
  430. package/build/dist/Server/Services/Index.js.map +1 -1
  431. package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js +8 -1
  432. package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js.map +1 -1
  433. package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js +8 -1
  434. package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js.map +1 -1
  435. package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js +8 -1
  436. package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js.map +1 -1
  437. package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js +8 -1
  438. package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js.map +1 -1
  439. package/build/dist/Server/Services/KubernetesResourceService.js +5 -1
  440. package/build/dist/Server/Services/KubernetesResourceService.js.map +1 -1
  441. package/build/dist/Server/Services/MonitorLabelRuleEngineService.js +8 -1
  442. package/build/dist/Server/Services/MonitorLabelRuleEngineService.js.map +1 -1
  443. package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js +8 -1
  444. package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js.map +1 -1
  445. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +30 -21
  446. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
  447. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +64 -0
  448. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -1
  449. package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js +8 -1
  450. package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js.map +1 -1
  451. package/build/dist/Server/Services/NetworkDeviceOidTemplateService.js +180 -0
  452. package/build/dist/Server/Services/NetworkDeviceOidTemplateService.js.map +1 -0
  453. package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js +8 -1
  454. package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js.map +1 -1
  455. package/build/dist/Server/Services/NetworkDeviceService.js +154 -1
  456. package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
  457. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js +20 -0
  458. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js.map +1 -1
  459. package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js +8 -1
  460. package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js.map +1 -1
  461. package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js +8 -1
  462. package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js.map +1 -1
  463. package/build/dist/Server/Services/OnCallDutyPolicyScheduleCalendarFeedService.js +219 -0
  464. package/build/dist/Server/Services/OnCallDutyPolicyScheduleCalendarFeedService.js.map +1 -0
  465. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js +8 -1
  466. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js.map +1 -1
  467. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerService.js +47 -3
  468. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerService.js.map +1 -1
  469. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerUserService.js +112 -3
  470. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerUserService.js.map +1 -1
  471. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js +8 -1
  472. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js.map +1 -1
  473. package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js +955 -9
  474. package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js.map +1 -1
  475. package/build/dist/Server/Services/OnCallDutyPolicyUserOverrideService.js +93 -6
  476. package/build/dist/Server/Services/OnCallDutyPolicyUserOverrideService.js.map +1 -1
  477. package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js +8 -1
  478. package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js.map +1 -1
  479. package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js +8 -1
  480. package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js.map +1 -1
  481. package/build/dist/Server/Services/ProjectOnCallCalendarFeedService.js +157 -0
  482. package/build/dist/Server/Services/ProjectOnCallCalendarFeedService.js.map +1 -0
  483. package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js +8 -1
  484. package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js.map +1 -1
  485. package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js +8 -1
  486. package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js.map +1 -1
  487. package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js +8 -1
  488. package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js.map +1 -1
  489. package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js +8 -1
  490. package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js.map +1 -1
  491. package/build/dist/Server/Services/RunbookLabelRuleEngineService.js +8 -1
  492. package/build/dist/Server/Services/RunbookLabelRuleEngineService.js.map +1 -1
  493. package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js +8 -1
  494. package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js.map +1 -1
  495. package/build/dist/Server/Services/RunbookRuleEngineService.js +8 -1
  496. package/build/dist/Server/Services/RunbookRuleEngineService.js.map +1 -1
  497. package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js +8 -1
  498. package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js.map +1 -1
  499. package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js +8 -1
  500. package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js.map +1 -1
  501. package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js +8 -1
  502. package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js.map +1 -1
  503. package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js +8 -1
  504. package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js.map +1 -1
  505. package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js +8 -1
  506. package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js.map +1 -1
  507. package/build/dist/Server/Services/ServiceLabelRuleEngineService.js +8 -1
  508. package/build/dist/Server/Services/ServiceLabelRuleEngineService.js.map +1 -1
  509. package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js +8 -1
  510. package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js.map +1 -1
  511. package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js +8 -1
  512. package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js.map +1 -1
  513. package/build/dist/Server/Services/StatusPageMonitorRuleEngineService.js +6 -0
  514. package/build/dist/Server/Services/StatusPageMonitorRuleEngineService.js.map +1 -1
  515. package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js +8 -1
  516. package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js.map +1 -1
  517. package/build/dist/Server/Services/TeamMemberService.js +396 -1
  518. package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
  519. package/build/dist/Server/Services/TeamService.js +43 -0
  520. package/build/dist/Server/Services/TeamService.js.map +1 -1
  521. package/build/dist/Server/Services/TelemetrySourceMapService.js +213 -19
  522. package/build/dist/Server/Services/TelemetrySourceMapService.js.map +1 -1
  523. package/build/dist/Server/Services/UserNotificationSettingService.js +26 -1
  524. package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
  525. package/build/dist/Server/Services/UserOnCallCalendarFeedService.js +140 -0
  526. package/build/dist/Server/Services/UserOnCallCalendarFeedService.js.map +1 -0
  527. package/build/dist/Server/Services/UserOnCallShiftReminderLogService.js +116 -0
  528. package/build/dist/Server/Services/UserOnCallShiftReminderLogService.js.map +1 -0
  529. package/build/dist/Server/Services/UserOnCallShiftReminderService.js +92 -0
  530. package/build/dist/Server/Services/UserOnCallShiftReminderService.js.map +1 -0
  531. package/build/dist/Server/Services/UserService.js +25 -0
  532. package/build/dist/Server/Services/UserService.js.map +1 -1
  533. package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js +8 -1
  534. package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js.map +1 -1
  535. package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js +8 -1
  536. package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js.map +1 -1
  537. package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js +145 -0
  538. package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js.map +1 -0
  539. package/build/dist/Server/Utils/Monitor/CapturedMetricAttributeUtil.js +201 -0
  540. package/build/dist/Server/Utils/Monitor/CapturedMetricAttributeUtil.js.map +1 -0
  541. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +19 -2
  542. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
  543. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +42 -23
  544. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
  545. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +29 -0
  546. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
  547. package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js +11 -2
  548. package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js.map +1 -1
  549. package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js +16 -1
  550. package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js.map +1 -1
  551. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +10 -0
  552. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
  553. package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +33 -0
  554. package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js.map +1 -1
  555. package/build/dist/Server/Utils/OnCall/CalendarFeedToken.js +161 -0
  556. package/build/dist/Server/Utils/OnCall/CalendarFeedToken.js.map +1 -0
  557. package/build/dist/Server/Utils/OnCall/OnCallCalendarFeedRenderer.js +983 -0
  558. package/build/dist/Server/Utils/OnCall/OnCallCalendarFeedRenderer.js.map +1 -0
  559. package/build/dist/Server/Utils/OnCall/OnCallCalendarFeedUrls.js +155 -0
  560. package/build/dist/Server/Utils/OnCall/OnCallCalendarFeedUrls.js.map +1 -0
  561. package/build/dist/Server/Utils/OnCall/OnCallShiftChangeListeners.js +145 -0
  562. package/build/dist/Server/Utils/OnCall/OnCallShiftChangeListeners.js.map +1 -0
  563. package/build/dist/Server/Utils/OnCall/OnCallShiftMaterializer.js +752 -0
  564. package/build/dist/Server/Utils/OnCall/OnCallShiftMaterializer.js.map +1 -0
  565. package/build/dist/Server/Utils/OnCall/OnCallShiftReminderListener.js +92 -0
  566. package/build/dist/Server/Utils/OnCall/OnCallShiftReminderListener.js.map +1 -0
  567. package/build/dist/Server/Utils/OnCall/OnCallShiftReminderRunner.js +1786 -0
  568. package/build/dist/Server/Utils/OnCall/OnCallShiftReminderRunner.js.map +1 -0
  569. package/build/dist/Server/Utils/Response.js +97 -0
  570. package/build/dist/Server/Utils/Response.js.map +1 -1
  571. package/build/dist/Server/Utils/Rules/RuleEngineRuleRead.js +37 -0
  572. package/build/dist/Server/Utils/Rules/RuleEngineRuleRead.js.map +1 -0
  573. package/build/dist/Server/Utils/StartServer.js +9 -1
  574. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  575. package/build/dist/Server/Utils/Telemetry/AppMetrics.js +41 -0
  576. package/build/dist/Server/Utils/Telemetry/AppMetrics.js.map +1 -1
  577. package/build/dist/Server/Utils/Telemetry/ExceptionSanitizer.js +12 -1
  578. package/build/dist/Server/Utils/Telemetry/ExceptionSanitizer.js.map +1 -1
  579. package/build/dist/Server/Utils/Telemetry/LogExceptionExtractor.js +14 -2
  580. package/build/dist/Server/Utils/Telemetry/LogExceptionExtractor.js.map +1 -1
  581. package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js +15 -5
  582. package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js.map +1 -1
  583. package/build/dist/Server/Utils/Telemetry/StackTraceParser.js +307 -0
  584. package/build/dist/Server/Utils/Telemetry/StackTraceParser.js.map +1 -1
  585. package/build/dist/Types/Calendar/ICalendar.js +290 -0
  586. package/build/dist/Types/Calendar/ICalendar.js.map +1 -0
  587. package/build/dist/Types/Date.js +27 -0
  588. package/build/dist/Types/Date.js.map +1 -1
  589. package/build/dist/Types/Email/EmailTemplateType.js +2 -0
  590. package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
  591. package/build/dist/Types/Monitor/SnmpMonitor/SnmpOidListUtil.js +253 -0
  592. package/build/dist/Types/Monitor/SnmpMonitor/SnmpOidListUtil.js.map +1 -0
  593. package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js +3 -0
  594. package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js.map +1 -1
  595. package/build/dist/Types/OnCallDutyPolicy/CalendarFeedWindow.js +97 -0
  596. package/build/dist/Types/OnCallDutyPolicy/CalendarFeedWindow.js.map +1 -0
  597. package/build/dist/Types/OnCallDutyPolicy/Layer.js +113 -19
  598. package/build/dist/Types/OnCallDutyPolicy/Layer.js.map +1 -1
  599. package/build/dist/Types/OnCallDutyPolicy/MaterializedShift.js +134 -0
  600. package/build/dist/Types/OnCallDutyPolicy/MaterializedShift.js.map +1 -0
  601. package/build/dist/Types/OnCallDutyPolicy/OnCallCalendarFeedUtil.js +800 -0
  602. package/build/dist/Types/OnCallDutyPolicy/OnCallCalendarFeedUtil.js.map +1 -0
  603. package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js +97 -3
  604. package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js.map +1 -1
  605. package/build/dist/Types/OnCallDutyPolicy/ShiftSeamUtil.js +77 -0
  606. package/build/dist/Types/OnCallDutyPolicy/ShiftSeamUtil.js.map +1 -0
  607. package/build/dist/Types/Permission.js +86 -0
  608. package/build/dist/Types/Permission.js.map +1 -1
  609. package/build/dist/Types/Rum/SessionReplay.js +19 -0
  610. package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
  611. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.js +83 -0
  612. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.js.map +1 -0
  613. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.js +531 -0
  614. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.js.map +1 -0
  615. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.js +264 -0
  616. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.js.map +1 -0
  617. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.js +122 -0
  618. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.js.map +1 -0
  619. package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js +213 -233
  620. package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js.map +1 -1
  621. package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js +139 -152
  622. package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js.map +1 -1
  623. package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +212 -232
  624. package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js.map +1 -1
  625. package/build/dist/UI/Components/Charts/Types/ChartEventKind.js +14 -0
  626. package/build/dist/UI/Components/Charts/Types/ChartEventKind.js.map +1 -0
  627. package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js +57 -28
  628. package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js.map +1 -1
  629. package/build/dist/UI/Components/Charts/Utils/XAxis.js +103 -17
  630. package/build/dist/UI/Components/Charts/Utils/XAxis.js.map +1 -1
  631. package/build/dist/UI/Components/EditionLabel/EditionLabel.js +198 -23
  632. package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
  633. package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js +15 -5
  634. package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js.map +1 -1
  635. package/build/dist/UI/Components/Feed/FeedItem.js +4 -5
  636. package/build/dist/UI/Components/Feed/FeedItem.js.map +1 -1
  637. package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js +1 -2
  638. package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js.map +1 -1
  639. package/build/dist/UI/Components/Header/UserProfile/UserProfile.js.map +1 -1
  640. package/build/dist/UI/Components/Image/Image.js +6 -1
  641. package/build/dist/UI/Components/Image/Image.js.map +1 -1
  642. package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js +0 -0
  643. package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js.map +1 -1
  644. package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js +1 -2
  645. package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js.map +1 -1
  646. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +104 -23
  647. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  648. package/build/dist/UI/Components/Table/TableHeader.js +20 -22
  649. package/build/dist/UI/Components/Table/TableHeader.js.map +1 -1
  650. package/build/dist/UI/Components/Table/TableRow.js +13 -4
  651. package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
  652. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js +153 -0
  653. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js.map +1 -0
  654. package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js.map +1 -1
  655. package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js +127 -7
  656. package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js.map +1 -1
  657. package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js +50 -3
  658. package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js.map +1 -1
  659. package/build/dist/Utils/NetworkDiscovery/ReverseDnsNameUtil.js +132 -0
  660. package/build/dist/Utils/NetworkDiscovery/ReverseDnsNameUtil.js.map +1 -0
  661. package/build/dist/Utils/Rules/RuleEngineLimits.js +31 -0
  662. package/build/dist/Utils/Rules/RuleEngineLimits.js.map +1 -0
  663. package/jest.config.json +1 -0
  664. package/package.json +2 -2
@@ -0,0 +1,253 @@
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+
3
+ /*
4
+ * On-call calendar feeds and shift reminders.
5
+ *
6
+ * Five new tables: the per-(project, user) personal feed
7
+ * (UserOnCallCalendarFeed), the project-owned shared feed of one schedule
8
+ * (OnCallDutyPolicyScheduleCalendarFeed), the project-wide shared feed
9
+ * (ProjectOnCallCalendarFeed), the user's reminder lead times
10
+ * (UserOnCallShiftReminder) and the reminder worker's send-once ledger
11
+ * (UserOnCallShiftReminderLog). Plus OnCallDutyPolicySchedule.shiftConfigVersion,
12
+ * the monotone counter that becomes every VEVENT's SEQUENCE.
13
+ *
14
+ * Generated with `typeorm migration:generate` against a fully migrated
15
+ * throwaway database; only the file/class name and this comment are
16
+ * hand-written.
17
+ */
18
+
19
+ export class AddOnCallCalendarFeeds1790400000000 implements MigrationInterface {
20
+ public name: string = "AddOnCallCalendarFeeds1790400000000";
21
+
22
+ public async up(queryRunner: QueryRunner): Promise<void> {
23
+ await queryRunner.query(
24
+ `CREATE TABLE "UserOnCallCalendarFeed" ("_id" uuid NOT NULL DEFAULT uuid_generate_v4(), "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "deletedAt" TIMESTAMP WITH TIME ZONE, "version" integer NOT NULL, "projectId" uuid NOT NULL, "userId" uuid NOT NULL, "tokenHash" character varying(100) NOT NULL, "token" text, "previousTokenHash" character varying(100), "previousTokenExpiresAt" TIMESTAMP WITH TIME ZONE, "tokenHint" character varying(100), "isEnabled" boolean NOT NULL DEFAULT true, "includeCoveringShifts" boolean NOT NULL DEFAULT true, "pastDays" integer NOT NULL DEFAULT '2', "futureDays" integer NOT NULL DEFAULT '90', "rotatedAt" TIMESTAMP WITH TIME ZONE, "lastFetchedAt" TIMESTAMP WITH TIME ZONE, "lastFetchedClient" character varying(100), "fetchCount" integer NOT NULL DEFAULT '0', "lastRenderTruncated" boolean NOT NULL DEFAULT false, "deletedByUserId" uuid, CONSTRAINT "UQ_16c445ee083e70ec64797ef2f0a" UNIQUE ("tokenHash"), CONSTRAINT "PK_a8b529d537040bc3a50ff70722d" PRIMARY KEY ("_id"))`,
25
+ );
26
+ await queryRunner.query(
27
+ `CREATE INDEX "IDX_939eb20c04210645d0efe1201e" ON "UserOnCallCalendarFeed" ("projectId") `,
28
+ );
29
+ await queryRunner.query(
30
+ `CREATE INDEX "IDX_15ba76443fb33f1a8c65ffd330" ON "UserOnCallCalendarFeed" ("userId") `,
31
+ );
32
+ await queryRunner.query(
33
+ `CREATE INDEX "IDX_f3b8a2c138c2b39130faead186" ON "UserOnCallCalendarFeed" ("previousTokenHash") `,
34
+ );
35
+ await queryRunner.query(
36
+ `CREATE UNIQUE INDEX "IDX_8245f3713e73a2bc30854fe73e" ON "UserOnCallCalendarFeed" ("projectId", "userId") `,
37
+ );
38
+ await queryRunner.query(
39
+ `CREATE TABLE "OnCallDutyPolicyScheduleCalendarFeed" ("_id" uuid NOT NULL DEFAULT uuid_generate_v4(), "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "deletedAt" TIMESTAMP WITH TIME ZONE, "version" integer NOT NULL, "projectId" uuid NOT NULL, "onCallDutyPolicyScheduleId" uuid NOT NULL, "tokenHash" character varying(100) NOT NULL, "token" text, "previousTokenHash" character varying(100), "previousTokenExpiresAt" TIMESTAMP WITH TIME ZONE, "tokenHint" character varying(100), "isEnabled" boolean NOT NULL DEFAULT true, "includeCoverageGaps" boolean NOT NULL DEFAULT false, "minimumGapMinutes" integer NOT NULL DEFAULT '60', "pastDays" integer NOT NULL DEFAULT '2', "futureDays" integer NOT NULL DEFAULT '90', "rotateWhenMemberLeaves" boolean NOT NULL DEFAULT false, "rotatedAt" TIMESTAMP WITH TIME ZONE, "lastFetchedAt" TIMESTAMP WITH TIME ZONE, "lastFetchedClient" character varying(100), "fetchCount" integer NOT NULL DEFAULT '0', "lastRenderTruncated" boolean NOT NULL DEFAULT false, "createdByUserId" uuid, "deletedByUserId" uuid, CONSTRAINT "UQ_e681d4bd248f23ab3ff5b5df761" UNIQUE ("tokenHash"), CONSTRAINT "PK_64e88a4bd7d68f79438e6ff3f23" PRIMARY KEY ("_id"))`,
40
+ );
41
+ await queryRunner.query(
42
+ `CREATE INDEX "IDX_f95fd30f3ae55408f9c10c80f3" ON "OnCallDutyPolicyScheduleCalendarFeed" ("projectId") `,
43
+ );
44
+ await queryRunner.query(
45
+ `CREATE INDEX "IDX_69d7cebef3fe577f9a90f91dd6" ON "OnCallDutyPolicyScheduleCalendarFeed" ("previousTokenHash") `,
46
+ );
47
+ await queryRunner.query(
48
+ `CREATE UNIQUE INDEX "IDX_a65bc8d41edf8c5d3fff7974ab" ON "OnCallDutyPolicyScheduleCalendarFeed" ("onCallDutyPolicyScheduleId") `,
49
+ );
50
+ await queryRunner.query(
51
+ `CREATE TABLE "ProjectOnCallCalendarFeed" ("_id" uuid NOT NULL DEFAULT uuid_generate_v4(), "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "deletedAt" TIMESTAMP WITH TIME ZONE, "version" integer NOT NULL, "projectId" uuid NOT NULL, "tokenHash" character varying(100) NOT NULL, "token" text, "previousTokenHash" character varying(100), "previousTokenExpiresAt" TIMESTAMP WITH TIME ZONE, "tokenHint" character varying(100), "isEnabled" boolean NOT NULL DEFAULT true, "includeCoverageGaps" boolean NOT NULL DEFAULT false, "minimumGapMinutes" integer NOT NULL DEFAULT '60', "pastDays" integer NOT NULL DEFAULT '2', "futureDays" integer NOT NULL DEFAULT '90', "rotateWhenMemberLeaves" boolean NOT NULL DEFAULT false, "rotatedAt" TIMESTAMP WITH TIME ZONE, "lastFetchedAt" TIMESTAMP WITH TIME ZONE, "lastFetchedClient" character varying(100), "fetchCount" integer NOT NULL DEFAULT '0', "lastRenderTruncated" boolean NOT NULL DEFAULT false, "createdByUserId" uuid, "deletedByUserId" uuid, CONSTRAINT "UQ_e0b42a0e413f341a898ecd25bf6" UNIQUE ("tokenHash"), CONSTRAINT "PK_8b353a212b2cee1c6716b0ca937" PRIMARY KEY ("_id"))`,
52
+ );
53
+ await queryRunner.query(
54
+ `CREATE INDEX "IDX_7e087b8cdd09846619e3794353" ON "ProjectOnCallCalendarFeed" ("previousTokenHash") `,
55
+ );
56
+ await queryRunner.query(
57
+ `CREATE UNIQUE INDEX "IDX_bfe63e832a43d0b8f77fd888de" ON "ProjectOnCallCalendarFeed" ("projectId") `,
58
+ );
59
+ await queryRunner.query(
60
+ `CREATE TABLE "UserOnCallShiftReminder" ("_id" uuid NOT NULL DEFAULT uuid_generate_v4(), "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "deletedAt" TIMESTAMP WITH TIME ZONE, "version" integer NOT NULL, "projectId" uuid NOT NULL, "userId" uuid NOT NULL, "minutesBeforeShift" integer NOT NULL, "deletedByUserId" uuid, CONSTRAINT "PK_b0334a8ddcc1336ea024ff1765b" PRIMARY KEY ("_id"))`,
61
+ );
62
+ await queryRunner.query(
63
+ `CREATE INDEX "IDX_3c718041c4ce139655e1247255" ON "UserOnCallShiftReminder" ("projectId") `,
64
+ );
65
+ await queryRunner.query(
66
+ `CREATE INDEX "IDX_d25b5c70fb5655334bc19d5a77" ON "UserOnCallShiftReminder" ("userId") `,
67
+ );
68
+ await queryRunner.query(
69
+ `CREATE UNIQUE INDEX "IDX_1fdf15a348943840be5be63d2a" ON "UserOnCallShiftReminder" ("projectId", "userId", "minutesBeforeShift") `,
70
+ );
71
+ await queryRunner.query(
72
+ `CREATE TABLE "UserOnCallShiftReminderLog" ("_id" uuid NOT NULL DEFAULT uuid_generate_v4(), "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "deletedAt" TIMESTAMP WITH TIME ZONE, "version" integer NOT NULL, "projectId" uuid NOT NULL, "userId" uuid NOT NULL, "onCallDutyPolicyScheduleId" uuid NOT NULL, "shiftStartsAt" TIMESTAMP WITH TIME ZONE NOT NULL, "minutesBeforeShift" integer NOT NULL DEFAULT '0', "kind" character varying(100) NOT NULL, "claimedAt" TIMESTAMP WITH TIME ZONE NOT NULL, "sentAt" TIMESTAMP WITH TIME ZONE, CONSTRAINT "PK_78ab60521e153e901016dc06806" PRIMARY KEY ("_id"))`,
73
+ );
74
+ await queryRunner.query(
75
+ `CREATE INDEX "IDX_5edd7a35eda0fc7a336cbbc6a4" ON "UserOnCallShiftReminderLog" ("projectId") `,
76
+ );
77
+ await queryRunner.query(
78
+ `CREATE INDEX "IDX_2cd0448bd761614d9fa16bc672" ON "UserOnCallShiftReminderLog" ("userId") `,
79
+ );
80
+ await queryRunner.query(
81
+ `CREATE INDEX "IDX_08e28521376926a2d73d896b94" ON "UserOnCallShiftReminderLog" ("onCallDutyPolicyScheduleId") `,
82
+ );
83
+ await queryRunner.query(
84
+ `CREATE INDEX "IDX_da7b9a10e948a8b2f490867896" ON "UserOnCallShiftReminderLog" ("claimedAt") `,
85
+ );
86
+ await queryRunner.query(
87
+ `CREATE UNIQUE INDEX "IDX_25a67c0a636e2a714bb364e68b" ON "UserOnCallShiftReminderLog" ("userId", "onCallDutyPolicyScheduleId", "shiftStartsAt", "minutesBeforeShift", "kind") `,
88
+ );
89
+ await queryRunner.query(
90
+ `ALTER TABLE "OnCallDutyPolicySchedule" ADD "shiftConfigVersion" integer NOT NULL DEFAULT '0'`,
91
+ );
92
+ await queryRunner.query(
93
+ `ALTER TABLE "UserOnCallCalendarFeed" ADD CONSTRAINT "FK_939eb20c04210645d0efe1201e5" FOREIGN KEY ("projectId") REFERENCES "Project"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
94
+ );
95
+ await queryRunner.query(
96
+ `ALTER TABLE "UserOnCallCalendarFeed" ADD CONSTRAINT "FK_15ba76443fb33f1a8c65ffd3309" FOREIGN KEY ("userId") REFERENCES "User"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
97
+ );
98
+ await queryRunner.query(
99
+ `ALTER TABLE "UserOnCallCalendarFeed" ADD CONSTRAINT "FK_c86499821f995e2848d50587734" FOREIGN KEY ("deletedByUserId") REFERENCES "User"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
100
+ );
101
+ await queryRunner.query(
102
+ `ALTER TABLE "OnCallDutyPolicyScheduleCalendarFeed" ADD CONSTRAINT "FK_f95fd30f3ae55408f9c10c80f3b" FOREIGN KEY ("projectId") REFERENCES "Project"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
103
+ );
104
+ await queryRunner.query(
105
+ `ALTER TABLE "OnCallDutyPolicyScheduleCalendarFeed" ADD CONSTRAINT "FK_a65bc8d41edf8c5d3fff7974ab6" FOREIGN KEY ("onCallDutyPolicyScheduleId") REFERENCES "OnCallDutyPolicySchedule"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
106
+ );
107
+ await queryRunner.query(
108
+ `ALTER TABLE "OnCallDutyPolicyScheduleCalendarFeed" ADD CONSTRAINT "FK_134727b2768b63de3c85408399c" FOREIGN KEY ("createdByUserId") REFERENCES "User"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
109
+ );
110
+ await queryRunner.query(
111
+ `ALTER TABLE "OnCallDutyPolicyScheduleCalendarFeed" ADD CONSTRAINT "FK_98e071d8d4878b32cd13785541e" FOREIGN KEY ("deletedByUserId") REFERENCES "User"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
112
+ );
113
+ await queryRunner.query(
114
+ `ALTER TABLE "ProjectOnCallCalendarFeed" ADD CONSTRAINT "FK_bfe63e832a43d0b8f77fd888de3" FOREIGN KEY ("projectId") REFERENCES "Project"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
115
+ );
116
+ await queryRunner.query(
117
+ `ALTER TABLE "ProjectOnCallCalendarFeed" ADD CONSTRAINT "FK_2ac5d726e5e78bd43628d3bcb32" FOREIGN KEY ("createdByUserId") REFERENCES "User"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
118
+ );
119
+ await queryRunner.query(
120
+ `ALTER TABLE "ProjectOnCallCalendarFeed" ADD CONSTRAINT "FK_c116c4230da31bc39fb26ae9ba1" FOREIGN KEY ("deletedByUserId") REFERENCES "User"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
121
+ );
122
+ await queryRunner.query(
123
+ `ALTER TABLE "UserOnCallShiftReminder" ADD CONSTRAINT "FK_3c718041c4ce139655e12472550" FOREIGN KEY ("projectId") REFERENCES "Project"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
124
+ );
125
+ await queryRunner.query(
126
+ `ALTER TABLE "UserOnCallShiftReminder" ADD CONSTRAINT "FK_d25b5c70fb5655334bc19d5a777" FOREIGN KEY ("userId") REFERENCES "User"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
127
+ );
128
+ await queryRunner.query(
129
+ `ALTER TABLE "UserOnCallShiftReminder" ADD CONSTRAINT "FK_02694a9354a70b887beccabec7f" FOREIGN KEY ("deletedByUserId") REFERENCES "User"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
130
+ );
131
+ await queryRunner.query(
132
+ `ALTER TABLE "UserOnCallShiftReminderLog" ADD CONSTRAINT "FK_5edd7a35eda0fc7a336cbbc6a46" FOREIGN KEY ("projectId") REFERENCES "Project"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
133
+ );
134
+ await queryRunner.query(
135
+ `ALTER TABLE "UserOnCallShiftReminderLog" ADD CONSTRAINT "FK_2cd0448bd761614d9fa16bc672d" FOREIGN KEY ("userId") REFERENCES "User"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
136
+ );
137
+ await queryRunner.query(
138
+ `ALTER TABLE "UserOnCallShiftReminderLog" ADD CONSTRAINT "FK_08e28521376926a2d73d896b940" FOREIGN KEY ("onCallDutyPolicyScheduleId") REFERENCES "OnCallDutyPolicySchedule"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
139
+ );
140
+ }
141
+
142
+ public async down(queryRunner: QueryRunner): Promise<void> {
143
+ await queryRunner.query(
144
+ `ALTER TABLE "UserOnCallShiftReminderLog" DROP CONSTRAINT "FK_08e28521376926a2d73d896b940"`,
145
+ );
146
+ await queryRunner.query(
147
+ `ALTER TABLE "UserOnCallShiftReminderLog" DROP CONSTRAINT "FK_2cd0448bd761614d9fa16bc672d"`,
148
+ );
149
+ await queryRunner.query(
150
+ `ALTER TABLE "UserOnCallShiftReminderLog" DROP CONSTRAINT "FK_5edd7a35eda0fc7a336cbbc6a46"`,
151
+ );
152
+ await queryRunner.query(
153
+ `ALTER TABLE "UserOnCallShiftReminder" DROP CONSTRAINT "FK_02694a9354a70b887beccabec7f"`,
154
+ );
155
+ await queryRunner.query(
156
+ `ALTER TABLE "UserOnCallShiftReminder" DROP CONSTRAINT "FK_d25b5c70fb5655334bc19d5a777"`,
157
+ );
158
+ await queryRunner.query(
159
+ `ALTER TABLE "UserOnCallShiftReminder" DROP CONSTRAINT "FK_3c718041c4ce139655e12472550"`,
160
+ );
161
+ await queryRunner.query(
162
+ `ALTER TABLE "ProjectOnCallCalendarFeed" DROP CONSTRAINT "FK_c116c4230da31bc39fb26ae9ba1"`,
163
+ );
164
+ await queryRunner.query(
165
+ `ALTER TABLE "ProjectOnCallCalendarFeed" DROP CONSTRAINT "FK_2ac5d726e5e78bd43628d3bcb32"`,
166
+ );
167
+ await queryRunner.query(
168
+ `ALTER TABLE "ProjectOnCallCalendarFeed" DROP CONSTRAINT "FK_bfe63e832a43d0b8f77fd888de3"`,
169
+ );
170
+ await queryRunner.query(
171
+ `ALTER TABLE "OnCallDutyPolicyScheduleCalendarFeed" DROP CONSTRAINT "FK_98e071d8d4878b32cd13785541e"`,
172
+ );
173
+ await queryRunner.query(
174
+ `ALTER TABLE "OnCallDutyPolicyScheduleCalendarFeed" DROP CONSTRAINT "FK_134727b2768b63de3c85408399c"`,
175
+ );
176
+ await queryRunner.query(
177
+ `ALTER TABLE "OnCallDutyPolicyScheduleCalendarFeed" DROP CONSTRAINT "FK_a65bc8d41edf8c5d3fff7974ab6"`,
178
+ );
179
+ await queryRunner.query(
180
+ `ALTER TABLE "OnCallDutyPolicyScheduleCalendarFeed" DROP CONSTRAINT "FK_f95fd30f3ae55408f9c10c80f3b"`,
181
+ );
182
+ await queryRunner.query(
183
+ `ALTER TABLE "UserOnCallCalendarFeed" DROP CONSTRAINT "FK_c86499821f995e2848d50587734"`,
184
+ );
185
+ await queryRunner.query(
186
+ `ALTER TABLE "UserOnCallCalendarFeed" DROP CONSTRAINT "FK_15ba76443fb33f1a8c65ffd3309"`,
187
+ );
188
+ await queryRunner.query(
189
+ `ALTER TABLE "UserOnCallCalendarFeed" DROP CONSTRAINT "FK_939eb20c04210645d0efe1201e5"`,
190
+ );
191
+ await queryRunner.query(
192
+ `ALTER TABLE "OnCallDutyPolicySchedule" DROP COLUMN "shiftConfigVersion"`,
193
+ );
194
+ await queryRunner.query(
195
+ `DROP INDEX "public"."IDX_25a67c0a636e2a714bb364e68b"`,
196
+ );
197
+ await queryRunner.query(
198
+ `DROP INDEX "public"."IDX_da7b9a10e948a8b2f490867896"`,
199
+ );
200
+ await queryRunner.query(
201
+ `DROP INDEX "public"."IDX_08e28521376926a2d73d896b94"`,
202
+ );
203
+ await queryRunner.query(
204
+ `DROP INDEX "public"."IDX_2cd0448bd761614d9fa16bc672"`,
205
+ );
206
+ await queryRunner.query(
207
+ `DROP INDEX "public"."IDX_5edd7a35eda0fc7a336cbbc6a4"`,
208
+ );
209
+ await queryRunner.query(`DROP TABLE "UserOnCallShiftReminderLog"`);
210
+ await queryRunner.query(
211
+ `DROP INDEX "public"."IDX_1fdf15a348943840be5be63d2a"`,
212
+ );
213
+ await queryRunner.query(
214
+ `DROP INDEX "public"."IDX_d25b5c70fb5655334bc19d5a77"`,
215
+ );
216
+ await queryRunner.query(
217
+ `DROP INDEX "public"."IDX_3c718041c4ce139655e1247255"`,
218
+ );
219
+ await queryRunner.query(`DROP TABLE "UserOnCallShiftReminder"`);
220
+ await queryRunner.query(
221
+ `DROP INDEX "public"."IDX_bfe63e832a43d0b8f77fd888de"`,
222
+ );
223
+ await queryRunner.query(
224
+ `DROP INDEX "public"."IDX_7e087b8cdd09846619e3794353"`,
225
+ );
226
+ await queryRunner.query(`DROP TABLE "ProjectOnCallCalendarFeed"`);
227
+ await queryRunner.query(
228
+ `DROP INDEX "public"."IDX_a65bc8d41edf8c5d3fff7974ab"`,
229
+ );
230
+ await queryRunner.query(
231
+ `DROP INDEX "public"."IDX_69d7cebef3fe577f9a90f91dd6"`,
232
+ );
233
+ await queryRunner.query(
234
+ `DROP INDEX "public"."IDX_f95fd30f3ae55408f9c10c80f3"`,
235
+ );
236
+ await queryRunner.query(
237
+ `DROP TABLE "OnCallDutyPolicyScheduleCalendarFeed"`,
238
+ );
239
+ await queryRunner.query(
240
+ `DROP INDEX "public"."IDX_8245f3713e73a2bc30854fe73e"`,
241
+ );
242
+ await queryRunner.query(
243
+ `DROP INDEX "public"."IDX_f3b8a2c138c2b39130faead186"`,
244
+ );
245
+ await queryRunner.query(
246
+ `DROP INDEX "public"."IDX_15ba76443fb33f1a8c65ffd330"`,
247
+ );
248
+ await queryRunner.query(
249
+ `DROP INDEX "public"."IDX_939eb20c04210645d0efe1201e"`,
250
+ );
251
+ await queryRunner.query(`DROP TABLE "UserOnCallCalendarFeed"`);
252
+ }
253
+ }
@@ -0,0 +1,59 @@
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+
3
+ export class AddNetworkDeviceOidTemplate1790500000000
4
+ implements MigrationInterface
5
+ {
6
+ public name: string = "AddNetworkDeviceOidTemplate1790500000000";
7
+
8
+ public async up(queryRunner: QueryRunner): Promise<void> {
9
+ await queryRunner.query(
10
+ `CREATE TABLE "NetworkDeviceOidTemplate" ("_id" uuid NOT NULL DEFAULT uuid_generate_v4(), "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "deletedAt" TIMESTAMP WITH TIME ZONE, "version" integer NOT NULL, "projectId" uuid NOT NULL, "name" character varying(100) NOT NULL, "slug" character varying(100) NOT NULL, "description" character varying(500), "oids" jsonb, "createdByUserId" uuid, "deletedByUserId" uuid, CONSTRAINT "PK_ec94e3734230b1ed5d6ae2a125d" PRIMARY KEY ("_id"))`,
11
+ );
12
+ await queryRunner.query(
13
+ `CREATE INDEX "IDX_6bd61393f6b4438538eedbfad9" ON "NetworkDeviceOidTemplate" ("projectId") `,
14
+ );
15
+ await queryRunner.query(
16
+ `ALTER TABLE "NetworkDevice" ADD "oidTemplateId" uuid`,
17
+ );
18
+ await queryRunner.query(
19
+ `CREATE INDEX "IDX_3e408227ae81663555e1583ac8" ON "NetworkDevice" ("projectId", "oidTemplateId") `,
20
+ );
21
+ await queryRunner.query(
22
+ `ALTER TABLE "NetworkDeviceOidTemplate" ADD CONSTRAINT "FK_6bd61393f6b4438538eedbfad9c" FOREIGN KEY ("projectId") REFERENCES "Project"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
23
+ );
24
+ await queryRunner.query(
25
+ `ALTER TABLE "NetworkDeviceOidTemplate" ADD CONSTRAINT "FK_9d0cb53f1ee2e900434772c19a8" FOREIGN KEY ("createdByUserId") REFERENCES "User"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
26
+ );
27
+ await queryRunner.query(
28
+ `ALTER TABLE "NetworkDeviceOidTemplate" ADD CONSTRAINT "FK_f74ffbb8d3cb49a27055c53697e" FOREIGN KEY ("deletedByUserId") REFERENCES "User"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
29
+ );
30
+ await queryRunner.query(
31
+ `ALTER TABLE "NetworkDevice" ADD CONSTRAINT "FK_c7891e3a7597717e1b7ed86581e" FOREIGN KEY ("oidTemplateId") REFERENCES "NetworkDeviceOidTemplate"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
32
+ );
33
+ }
34
+
35
+ public async down(queryRunner: QueryRunner): Promise<void> {
36
+ await queryRunner.query(
37
+ `ALTER TABLE "NetworkDevice" DROP CONSTRAINT "FK_c7891e3a7597717e1b7ed86581e"`,
38
+ );
39
+ await queryRunner.query(
40
+ `ALTER TABLE "NetworkDeviceOidTemplate" DROP CONSTRAINT "FK_f74ffbb8d3cb49a27055c53697e"`,
41
+ );
42
+ await queryRunner.query(
43
+ `ALTER TABLE "NetworkDeviceOidTemplate" DROP CONSTRAINT "FK_9d0cb53f1ee2e900434772c19a8"`,
44
+ );
45
+ await queryRunner.query(
46
+ `ALTER TABLE "NetworkDeviceOidTemplate" DROP CONSTRAINT "FK_6bd61393f6b4438538eedbfad9c"`,
47
+ );
48
+ await queryRunner.query(
49
+ `DROP INDEX "public"."IDX_3e408227ae81663555e1583ac8"`,
50
+ );
51
+ await queryRunner.query(
52
+ `ALTER TABLE "NetworkDevice" DROP COLUMN "oidTemplateId"`,
53
+ );
54
+ await queryRunner.query(
55
+ `DROP INDEX "public"."IDX_6bd61393f6b4438538eedbfad9"`,
56
+ );
57
+ await queryRunner.query(`DROP TABLE "NetworkDeviceOidTemplate"`);
58
+ }
59
+ }
@@ -0,0 +1,25 @@
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+
3
+ export class AddAutoImportRuleOidTemplate1790600000000
4
+ implements MigrationInterface
5
+ {
6
+ public name: string = "AddAutoImportRuleOidTemplate1790600000000";
7
+
8
+ public async up(queryRunner: QueryRunner): Promise<void> {
9
+ await queryRunner.query(
10
+ `ALTER TABLE "NetworkDeviceAutoImportRule" ADD "oidTemplateId" uuid`,
11
+ );
12
+ await queryRunner.query(
13
+ `ALTER TABLE "NetworkDeviceAutoImportRule" ADD CONSTRAINT "FK_022aca601b5a2ce29cf82f9ba25" FOREIGN KEY ("oidTemplateId") REFERENCES "NetworkDeviceOidTemplate"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
14
+ );
15
+ }
16
+
17
+ public async down(queryRunner: QueryRunner): Promise<void> {
18
+ await queryRunner.query(
19
+ `ALTER TABLE "NetworkDeviceAutoImportRule" DROP CONSTRAINT "FK_022aca601b5a2ce29cf82f9ba25"`,
20
+ );
21
+ await queryRunner.query(
22
+ `ALTER TABLE "NetworkDeviceAutoImportRule" DROP COLUMN "oidTemplateId"`,
23
+ );
24
+ }
25
+ }
@@ -563,6 +563,9 @@ import { AddSnmpEnabledToNetworkDeviceDiscoveryScan1790003445000 } from "./17900
563
563
  import { AddResourceActivityFeeds1790100000000 } from "./1790100000000-AddResourceActivityFeeds";
564
564
  import { AllowNullMonitorNameOnMonitorTemplate1790200000000 } from "./1790200000000-AllowNullMonitorNameOnMonitorTemplate";
565
565
  import { AddCertificateReissueRequestedAtToDomains1790300000000 } from "./1790300000000-AddCertificateReissueRequestedAtToDomains";
566
+ import { AddOnCallCalendarFeeds1790400000000 } from "./1790400000000-AddOnCallCalendarFeeds";
567
+ import { AddNetworkDeviceOidTemplate1790500000000 } from "./1790500000000-AddNetworkDeviceOidTemplate";
568
+ import { AddAutoImportRuleOidTemplate1790600000000 } from "./1790600000000-AddAutoImportRuleOidTemplate";
566
569
 
567
570
  export default [
568
571
  InitialMigration,
@@ -1130,4 +1133,7 @@ export default [
1130
1133
  AddResourceActivityFeeds1790100000000,
1131
1134
  AllowNullMonitorNameOnMonitorTemplate1790200000000,
1132
1135
  AddCertificateReissueRequestedAtToDomains1790300000000,
1136
+ AddOnCallCalendarFeeds1790400000000,
1137
+ AddNetworkDeviceOidTemplate1790500000000,
1138
+ AddAutoImportRuleOidTemplate1790600000000,
1133
1139
  ];
@@ -31,26 +31,55 @@ export const MAX_MULTIPART_FIELD_BYTES: number = 25 * 1024 * 1024;
31
31
  export const MAX_MULTIPART_FILES: number = 50;
32
32
  export const MAX_MULTIPART_FIELDS: number = 200;
33
33
 
34
+ /*
35
+ * busboy's SIZE limits and its `parts` counter are EXCLUSIVE: each fires
36
+ * the moment the counter REACHES the limit, so handing it N admits only
37
+ * N-1. Its `files` and `fields` counters are INCLUSIVE -- N admits N.
38
+ *
39
+ * That asymmetry is undocumented and easy to lose, so the constants above
40
+ * stay the INCLUSIVE maxima this app documents and that callers
41
+ * range-check against (`file.buffer.length > MAX_SOURCE_MAP_SIZE_IN_BYTES`
42
+ * and friends), and only the three exclusive limits are converted here.
43
+ *
44
+ * Both halves of this were live bugs. A file of exactly 50 MiB -- a size
45
+ * the source map endpoint means to accept, and whose 400 message says it
46
+ * accepts -- was truncated by the parser into a 413 the endpoint never
47
+ * saw. And `parts`, whose whole job is to allow the file and field
48
+ * allowances in full, rejected a body carrying exactly both with
49
+ * LIMIT_PART_COUNT.
50
+ */
51
+ const exclusive: (inclusiveMax: number) => number = (
52
+ inclusiveMax: number,
53
+ ): number => {
54
+ return inclusiveMax + 1;
55
+ };
56
+
34
57
  /*
35
58
  * Configure multer for handling multipart/form-data
36
59
  * Uses memory storage to store files in memory as Buffer objects
37
60
  */
38
- const upload: multer.Multer = multer({
39
- storage: multer.memoryStorage(),
40
- limits: {
41
- fileSize: MAX_MULTIPART_FILE_BYTES,
42
- fieldSize: MAX_MULTIPART_FIELD_BYTES,
43
- files: MAX_MULTIPART_FILES,
44
- fields: MAX_MULTIPART_FIELDS,
45
- /*
46
- * Parts are files + fields, so this has to allow both in full or it
47
- * would be the effective limit and the two above would never fire.
48
- */
49
- parts: MAX_MULTIPART_FILES + MAX_MULTIPART_FIELDS,
50
- },
51
- });
52
-
53
- const uploadAny: RequestHandler = upload.any() as unknown as RequestHandler;
61
+ const buildUploadAny: (maxFiles: number) => RequestHandler = (
62
+ maxFiles: number,
63
+ ): RequestHandler => {
64
+ const upload: multer.Multer = multer({
65
+ storage: multer.memoryStorage(),
66
+ limits: {
67
+ fileSize: exclusive(MAX_MULTIPART_FILE_BYTES),
68
+ fieldSize: exclusive(MAX_MULTIPART_FIELD_BYTES),
69
+ files: maxFiles,
70
+ fields: MAX_MULTIPART_FIELDS,
71
+ /*
72
+ * Parts are files + fields, so this has to allow both in full or it
73
+ * would be the effective limit and the two above would never fire.
74
+ */
75
+ parts: exclusive(maxFiles + MAX_MULTIPART_FIELDS),
76
+ },
77
+ });
78
+
79
+ return upload.any() as unknown as RequestHandler;
80
+ };
81
+
82
+ const uploadAny: RequestHandler = buildUploadAny(MAX_MULTIPART_FILES);
54
83
 
55
84
  /*
56
85
  * The LIMIT_* codes that mean "you sent too much". LIMIT_UNEXPECTED_FILE
@@ -68,15 +97,33 @@ const TOO_LARGE_CODES: Set<string> = new Set<string>([
68
97
  "LIMIT_FIELD_COUNT",
69
98
  ]);
70
99
 
100
+ /*
101
+ * A limit breach must answer 413 rather than 500. multer signals every limit
102
+ * with a MulterError whose `code` is one of the LIMIT_* values, and nothing
103
+ * downstream knows what those mean - the generic error handler would turn a
104
+ * caller's oversized upload into a server error and page whoever is on call
105
+ * for it. Shared by every middleware this module builds.
106
+ */
107
+ const handleMulterError: (err: unknown, next: NextFunction) => void = (
108
+ err: unknown,
109
+ next: NextFunction,
110
+ ): void => {
111
+ if (err instanceof multer.MulterError) {
112
+ const message: string = `Multipart request rejected: ${err.code}.`;
113
+
114
+ return next(
115
+ TOO_LARGE_CODES.has(err.code)
116
+ ? new PayloadTooLargeException(message)
117
+ : new BadRequestException(message),
118
+ );
119
+ }
120
+
121
+ return next(err);
122
+ };
123
+
71
124
  /*
72
125
  * Middleware for handling any file uploads (multipart/form-data)
73
126
  * This is useful for webhooks that send data as multipart/form-data (e.g., SendGrid inbound email)
74
- *
75
- * Wrapped so a limit breach answers 413 rather than 500. multer signals
76
- * every limit with a MulterError whose `code` is one of the LIMIT_*
77
- * values, and nothing downstream knows what those mean - the generic
78
- * error handler would turn a caller's oversized upload into a server
79
- * error and page whoever is on call for it.
80
127
  */
81
128
  const MultipartFormDataMiddleware: RequestHandler = (
82
129
  req: ExpressRequest,
@@ -84,18 +131,57 @@ const MultipartFormDataMiddleware: RequestHandler = (
84
131
  next: NextFunction,
85
132
  ): void => {
86
133
  uploadAny(req, res, (err: unknown): void => {
87
- if (err instanceof multer.MulterError) {
88
- const message: string = `Multipart request rejected: ${err.code}.`;
134
+ return handleMulterError(err, next);
135
+ });
136
+ };
89
137
 
90
- return next(
91
- TOO_LARGE_CODES.has(err.code)
92
- ? new PayloadTooLargeException(message)
93
- : new BadRequestException(message),
94
- );
95
- }
138
+ /**
139
+ * A multipart middleware for a route that wants a LOWER file count than the
140
+ * shared default.
141
+ *
142
+ * Only downward: maxFiles is clamped to MAX_MULTIPART_FILES. Every route that
143
+ * mounts this middleware parses the body before its own auth check runs, so
144
+ * the shared ceiling is the limit an unauthenticated caller is held to across
145
+ * all of them. A per-route knob that could raise it would widen the pre-auth
146
+ * memory surface of every OTHER route's neighbours by proxy of a config
147
+ * change made for one — so it cannot.
148
+ *
149
+ * Routes that are happy with the default should keep using the default
150
+ * export; this builds a second multer instance, so call it once at module
151
+ * scope and never per request.
152
+ */
153
+ export const getMultipartFormDataMiddleware: (options: {
154
+ maxFiles: number;
155
+ }) => RequestHandler = (options: { maxFiles: number }): RequestHandler => {
156
+ /*
157
+ * Clamp the DOMAIN as well as the range. busboy compares `files === limit`,
158
+ * which never matches a fractional or NaN limit — so a non-integer would
159
+ * not narrow anything, it would remove the file bound entirely and leave
160
+ * the pre-auth parse unbounded. That is the exact widening this function
161
+ * exists to prevent, so anything not a finite number falls back to the
162
+ * shared ceiling rather than being passed through.
163
+ */
164
+ const requestedMaxFiles: number = options.maxFiles;
96
165
 
97
- return next(err);
98
- });
166
+ const maxFiles: number = Number.isFinite(requestedMaxFiles)
167
+ ? Math.max(1, Math.min(Math.floor(requestedMaxFiles), MAX_MULTIPART_FILES))
168
+ : MAX_MULTIPART_FILES;
169
+
170
+ if (maxFiles === MAX_MULTIPART_FILES) {
171
+ return MultipartFormDataMiddleware;
172
+ }
173
+
174
+ const scopedUploadAny: RequestHandler = buildUploadAny(maxFiles);
175
+
176
+ return (
177
+ req: ExpressRequest,
178
+ res: ExpressResponse,
179
+ next: NextFunction,
180
+ ): void => {
181
+ scopedUploadAny(req, res, (err: unknown): void => {
182
+ return handleMulterError(err, next);
183
+ });
184
+ };
99
185
  };
100
186
 
101
187
  export default MultipartFormDataMiddleware;