@oneuptime/common 12.0.28 → 12.0.30

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 (367) hide show
  1. package/Models/DatabaseModels/DashboardDomain.ts +43 -0
  2. package/Models/DatabaseModels/Index.ts +11 -0
  3. package/Models/DatabaseModels/MonitorTemplate.ts +15 -3
  4. package/Models/DatabaseModels/OnCallDutyPolicySchedule.ts +43 -0
  5. package/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.ts +662 -0
  6. package/Models/DatabaseModels/ProjectOnCallCalendarFeed.ts +584 -0
  7. package/Models/DatabaseModels/StatusPageDomain.ts +43 -0
  8. package/Models/DatabaseModels/UserOnCallCalendarFeed.ts +546 -0
  9. package/Models/DatabaseModels/UserOnCallShiftReminder.ts +231 -0
  10. package/Models/DatabaseModels/UserOnCallShiftReminderLog.ts +331 -0
  11. package/Server/API/DashboardDomainAPI.ts +74 -0
  12. package/Server/API/MicrosoftTeamsAPI.ts +81 -180
  13. package/Server/API/OnCallCalendarAPI.ts +2194 -0
  14. package/Server/API/StatusPageDomainAPI.ts +74 -0
  15. package/Server/EnvironmentConfig.ts +138 -0
  16. package/Server/Infrastructure/OnCallCalendarFeedCache.ts +1050 -0
  17. package/Server/Infrastructure/Postgres/SchemaMigrations/1790200000000-AllowNullMonitorNameOnMonitorTemplate.ts +43 -0
  18. package/Server/Infrastructure/Postgres/SchemaMigrations/1790300000000-AddCertificateReissueRequestedAtToDomains.ts +40 -0
  19. package/Server/Infrastructure/Postgres/SchemaMigrations/1790400000000-AddOnCallCalendarFeeds.ts +253 -0
  20. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
  21. package/Server/Middleware/OnCallCalendarFeedRateLimit.ts +487 -0
  22. package/Server/Middleware/ProjectAuthorization.ts +6 -1
  23. package/Server/Services/DashboardDomainService.ts +131 -0
  24. package/Server/Services/Index.ts +12 -0
  25. package/Server/Services/LogPipelineProcessorService.ts +88 -0
  26. package/Server/Services/MonitorTemplateService.ts +70 -11
  27. package/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.ts +32 -0
  28. package/Server/Services/OnCallDutyPolicyScheduleCalendarFeedService.ts +260 -0
  29. package/Server/Services/OnCallDutyPolicyScheduleLayerService.ts +70 -3
  30. package/Server/Services/OnCallDutyPolicyScheduleLayerUserService.ts +138 -3
  31. package/Server/Services/OnCallDutyPolicyScheduleService.ts +1465 -134
  32. package/Server/Services/OnCallDutyPolicyUserOverrideService.ts +167 -31
  33. package/Server/Services/ProjectOnCallCalendarFeedService.ts +192 -0
  34. package/Server/Services/StatusPageDomainService.ts +163 -3
  35. package/Server/Services/StatusPagePrivateUserSessionService.ts +197 -56
  36. package/Server/Services/TeamMemberService.ts +489 -1
  37. package/Server/Services/TeamService.ts +50 -0
  38. package/Server/Services/UserNotificationSettingService.ts +44 -1
  39. package/Server/Services/UserOnCallCalendarFeedService.ts +159 -0
  40. package/Server/Services/UserOnCallShiftReminderLogService.ts +151 -0
  41. package/Server/Services/UserOnCallShiftReminderService.ts +112 -0
  42. package/Server/Types/Domain.ts +17 -0
  43. package/Server/Utils/APIKey/AccessPermission.ts +24 -0
  44. package/Server/Utils/Greenlock/Greenlock.ts +156 -58
  45. package/Server/Utils/LogPipelineProcessorValidation.ts +112 -0
  46. package/Server/Utils/OnCall/CalendarFeedToken.ts +241 -0
  47. package/Server/Utils/OnCall/OnCallCalendarFeedRenderer.ts +1488 -0
  48. package/Server/Utils/OnCall/OnCallCalendarFeedUrls.ts +230 -0
  49. package/Server/Utils/OnCall/OnCallShiftChangeListeners.ts +227 -0
  50. package/Server/Utils/OnCall/OnCallShiftMaterializer.ts +1127 -0
  51. package/Server/Utils/OnCall/OnCallShiftReminderListener.ts +174 -0
  52. package/Server/Utils/OnCall/OnCallShiftReminderRunner.ts +2584 -0
  53. package/Server/Utils/Response.ts +134 -0
  54. package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.ts +1094 -45
  55. package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.ts +153 -17
  56. package/Server/Utils/StartServer.ts +10 -0
  57. package/Server/Utils/Telemetry/AppMetrics.ts +51 -0
  58. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.ts +23 -11
  59. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.ts +0 -170
  60. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Authorization.ts +158 -0
  61. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.ts +23 -11
  62. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +35 -13
  63. package/Tests/App/Dashboard/MonitorTemplateColumnAndFacet.test.tsx +505 -0
  64. package/Tests/App/Dashboard/OnCallCalendarFeedLinks.test.tsx +229 -0
  65. package/Tests/App/Dashboard/OnCallCalendarFeedPlanGate.test.tsx +489 -0
  66. package/Tests/App/Dashboard/OnCallCalendarFeedSideMenus.test.tsx +149 -0
  67. package/Tests/App/Dashboard/OnCallCalendarFeedUtil.test.ts +855 -0
  68. package/Tests/App/Dashboard/OnCallPersonalCalendarFeed.test.tsx +1209 -0
  69. package/Tests/App/Dashboard/OnCallSharedCalendarFeedCard.test.tsx +1019 -0
  70. package/Tests/App/Dashboard/OnCallShiftRemindersAndUpcomingShifts.test.tsx +655 -0
  71. package/Tests/App/Dashboard/UserSettingsSetupChecklistModel.test.ts +73 -0
  72. package/Tests/App/StatusPage/StatusPageLoginCodeBootstrap.test.ts +106 -0
  73. package/Tests/App/StatusPage/StatusPageLoginCodeUtil.test.ts +84 -0
  74. package/Tests/App/StatusPage/StatusPageRedirectSafety.test.ts +119 -0
  75. package/Tests/Models/MonitorTemplateMonitorNameColumn.test.ts +258 -0
  76. package/Tests/Models/OnCallCalendarFeedModels.test.ts +642 -0
  77. package/Tests/Models/OnCallDutyPolicyScheduleCalendarFeed.test.ts +288 -0
  78. package/Tests/Models/OnCallDutyPolicyScheduleShiftConfigVersion.test.ts +88 -0
  79. package/Tests/Models/UserOnCallShiftReminderModels.test.ts +368 -0
  80. package/Tests/Server/API/CustomDomainReissueSslAPI.test.ts +469 -0
  81. package/Tests/Server/API/Helpers.ts +8 -0
  82. package/Tests/Server/API/MicrosoftTeamsBotMessagesEndpoint.test.ts +729 -0
  83. package/Tests/Server/API/MicrosoftTeamsBotTestEndpoint.test.ts +26 -0
  84. package/Tests/Server/API/MicrosoftTeamsLegacyWebhookRemoval.test.ts +402 -0
  85. package/Tests/Server/API/OnCallCalendarAPI.test.ts +4461 -0
  86. package/Tests/Server/EnvironmentConfigOnCallCalendarFeed.test.ts +357 -0
  87. package/Tests/Server/Infrastructure/OnCallCalendarFeedCache.test.ts +1589 -0
  88. package/Tests/Server/Infrastructure/Postgres/AddOnCallCalendarFeedsMigration.test.ts +369 -0
  89. package/Tests/Server/Middleware/OnCallCalendarFeedRateLimit.test.ts +1365 -0
  90. package/Tests/Server/Middleware/ProjectAuthorizationApiKeyMiddleware.test.ts +4 -0
  91. package/Tests/Server/Services/AddCertificateReissueRequestedAtToDomainsMigration.test.ts +287 -0
  92. package/Tests/Server/Services/CustomDomainCertificateReissue.test.ts +477 -0
  93. package/Tests/Server/Services/FeedRetentionConsistency.test.ts +70 -0
  94. package/Tests/Server/Services/LogPipelineProcessorSaveValidation.test.ts +249 -0
  95. package/Tests/Server/Services/MonitorTemplateServiceBulkSync.test.ts +549 -0
  96. package/Tests/Server/Services/MonitorTemplateServiceNetworkDeviceSync.test.ts +16 -3
  97. package/Tests/Server/Services/NetworkDeviceAutoImportRuleEngineService.test.ts +57 -0
  98. package/Tests/Server/Services/OnCallCalendarFeedServices.test.ts +1103 -0
  99. package/Tests/Server/Services/OnCallDutyPolicyScheduleResolver.test.ts +1037 -0
  100. package/Tests/Server/Services/OnCallShiftConfigPropagation.test.ts +1270 -0
  101. package/Tests/Server/Services/SecurityEventLastErrorColumnWidth.test.ts +151 -15
  102. package/Tests/Server/Services/StatusPagePrivateUserSessionService.test.ts +587 -0
  103. package/Tests/Server/Services/TeamDeleteMemberCleanup.test.ts +156 -0
  104. package/Tests/Server/Services/TeamMemberOnCallCleanup.test.ts +755 -0
  105. package/Tests/Server/Services/UserNotificationSettingShiftReminderDefaults.test.ts +267 -0
  106. package/Tests/Server/Services/UserOnCallShiftReminderServices.test.ts +583 -0
  107. package/Tests/Server/Types/Database/Permissions/ApiKeyFileAccess.test.ts +286 -0
  108. package/Tests/Server/Types/Database/Permissions/MonitorTemplateColumnAccess.test.ts +328 -0
  109. package/Tests/Server/Types/Database/Permissions/OnCallCalendarFeedPermissions.test.ts +254 -0
  110. package/Tests/Server/Types/Database/QueryHelperFindWithSameTextAndIsNull.test.ts +83 -0
  111. package/Tests/Server/Utils/AI/SRE/ConfidenceSignal.test.ts +377 -0
  112. package/Tests/Server/Utils/APIKey/AccessPermission.test.ts +16 -1
  113. package/Tests/Server/Utils/Greenlock/CertificateRenewalSchedule.test.ts +250 -0
  114. package/Tests/Server/Utils/LogPipelineProcessorValidation.test.ts +198 -0
  115. package/Tests/Server/Utils/OnCall/CalendarFeedToken.test.ts +467 -0
  116. package/Tests/Server/Utils/OnCall/OnCallCalendarFeedRenderer.test.ts +2142 -0
  117. package/Tests/Server/Utils/OnCall/OnCallCalendarFeedUrls.test.ts +278 -0
  118. package/Tests/Server/Utils/OnCall/OnCallResolverTestHarness.ts +440 -0
  119. package/Tests/Server/Utils/OnCall/OnCallShiftChangeListeners.test.ts +314 -0
  120. package/Tests/Server/Utils/OnCall/OnCallShiftMaterializer.test.ts +1502 -0
  121. package/Tests/Server/Utils/OnCall/OnCallShiftReminderListener.test.ts +491 -0
  122. package/Tests/Server/Utils/OnCall/OnCallShiftReminderRunner.test.ts +3088 -0
  123. package/Tests/Server/Utils/OnCall/OnCallShiftReminderTestHarness.ts +910 -0
  124. package/Tests/Server/Utils/ResponseSendCalendarResponse.test.ts +561 -0
  125. package/Tests/Server/Utils/SecurityEvent/ConnectorErrorMessage.test.ts +48 -9
  126. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsAuth.test.ts +726 -0
  127. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsClient.test.ts +74 -11
  128. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsErrorHandling.test.ts +1107 -0
  129. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPoller.test.ts +20 -3
  130. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerFailureTaxonomy.test.ts +51 -11
  131. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerHardening.test.ts +1246 -0
  132. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsRequestContract.test.ts +961 -0
  133. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsResponseParsing.test.ts +653 -0
  134. package/Tests/Server/Utils/StartServerEncryptionSecretWarning.test.ts +64 -0
  135. package/Tests/Server/Utils/Telemetry/AppMetrics.test.ts +29 -0
  136. package/Tests/Server/Utils/Workspace/MicrosoftTeamsActionAuthorization.test.ts +880 -0
  137. package/Tests/Types/API/HTTPResponse.test.ts +175 -0
  138. package/Tests/Types/API/Route.test.ts +36 -4
  139. package/Tests/Types/Calendar/ICalendar.test.ts +488 -0
  140. package/Tests/Types/Database/DatabaseProperty.test.ts +171 -0
  141. package/Tests/Types/DateLocalShortDateTimeString.test.ts +518 -0
  142. package/Tests/Types/DateLocalTimeString.test.ts +259 -0
  143. package/Tests/Types/DateUserPrefers12HourFormat.test.ts +316 -0
  144. package/Tests/Types/NotificationSetting/NotificationSettingEventType.test.ts +53 -0
  145. package/Tests/Types/OnCallDutyPolicy/CalendarFeedTestFixtures.ts +310 -0
  146. package/Tests/Types/OnCallDutyPolicy/CalendarFeedWindow.test.ts +205 -0
  147. package/Tests/Types/OnCallDutyPolicy/LayerUtilLayerMetaAndIterationCap.test.ts +458 -0
  148. package/Tests/Types/OnCallDutyPolicy/MaterializedShift.test.ts +197 -0
  149. package/Tests/Types/OnCallDutyPolicy/OnCallCalendarFeedUtil.test.ts +1986 -0
  150. package/Tests/Types/OnCallDutyPolicy/ScheduleShiftUtilGroupKey.test.ts +678 -0
  151. package/Tests/Types/OnCallDutyPolicy/ShiftSeamUtil.test.ts +417 -0
  152. package/Tests/UI/Components/LogsHistogram.test.tsx +41 -2
  153. package/Tests/UI/Components/LogsViewerEmptyStateTimeRange.test.tsx +212 -0
  154. package/Tests/UI/Components/TelemetryChartClockFormat.test.tsx +359 -0
  155. package/Tests/UI/Components/TimeRangePickerClockFormat.test.tsx +422 -0
  156. package/Tests/UI/Components/TimeRangePickerDropdown.test.tsx +146 -8
  157. package/Tests/UI/MicrosoftTeams/MicrosoftTeamsMessagingEndpointGuidance.test.tsx +520 -0
  158. package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +10 -0
  159. package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +2 -0
  160. package/Tests/UI/Utils/Navigation.test.ts +82 -0
  161. package/Tests/Utils/Array.test.ts +100 -0
  162. package/Tests/Utils/CertificateReissue.test.ts +225 -0
  163. package/Tests/Utils/Grok/Grok.test.ts +492 -0
  164. package/Tests/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.test.ts +181 -13
  165. package/Types/API/Route.ts +20 -5
  166. package/Types/Calendar/ICalendar.ts +442 -0
  167. package/Types/Date.ts +143 -13
  168. package/Types/Email/EmailTemplateType.ts +2 -0
  169. package/Types/NotificationSetting/NotificationSettingEventType.ts +4 -0
  170. package/Types/OnCallDutyPolicy/CalendarFeedWindow.ts +140 -0
  171. package/Types/OnCallDutyPolicy/Layer.ts +190 -35
  172. package/Types/OnCallDutyPolicy/MaterializedShift.ts +274 -0
  173. package/Types/OnCallDutyPolicy/OnCallCalendarFeedUtil.ts +1415 -0
  174. package/Types/OnCallDutyPolicy/ScheduleShiftUtil.ts +159 -4
  175. package/Types/OnCallDutyPolicy/ShiftSeamUtil.ts +106 -0
  176. package/Types/Rum/SessionReplay.ts +62 -1
  177. package/UI/Components/Date/TimeRangePickerDropdown.tsx +9 -5
  178. package/UI/Components/LogsViewer/LogsViewer.tsx +12 -7
  179. package/UI/Components/LogsViewer/components/HistogramTooltip.tsx +18 -17
  180. package/UI/Components/LogsViewer/components/LogsAnalyticsView.tsx +21 -28
  181. package/UI/Components/LogsViewer/components/LogsHistogram.tsx +2 -4
  182. package/UI/Components/TelemetryViewer/components/TelemetryHistogram.tsx +2 -4
  183. package/UI/Components/TelemetryViewer/components/TelemetryHistogramTooltip.tsx +17 -16
  184. package/UI/Utils/Navigation.ts +42 -0
  185. package/Utils/Array.ts +37 -0
  186. package/Utils/CertificateReissue.ts +128 -0
  187. package/Utils/Grok/Grok.ts +461 -0
  188. package/Utils/Grok/GrokPatterns.ts +118 -0
  189. package/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.ts +58 -6
  190. package/build/dist/Models/DatabaseModels/DashboardDomain.js +44 -0
  191. package/build/dist/Models/DatabaseModels/DashboardDomain.js.map +1 -1
  192. package/build/dist/Models/DatabaseModels/Index.js +11 -0
  193. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  194. package/build/dist/Models/DatabaseModels/MonitorTemplate.js +17 -4
  195. package/build/dist/Models/DatabaseModels/MonitorTemplate.js.map +1 -1
  196. package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js +44 -0
  197. package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js.map +1 -1
  198. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.js +699 -0
  199. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.js.map +1 -0
  200. package/build/dist/Models/DatabaseModels/ProjectOnCallCalendarFeed.js +620 -0
  201. package/build/dist/Models/DatabaseModels/ProjectOnCallCalendarFeed.js.map +1 -0
  202. package/build/dist/Models/DatabaseModels/StatusPageDomain.js +44 -0
  203. package/build/dist/Models/DatabaseModels/StatusPageDomain.js.map +1 -1
  204. package/build/dist/Models/DatabaseModels/UserOnCallCalendarFeed.js +585 -0
  205. package/build/dist/Models/DatabaseModels/UserOnCallCalendarFeed.js.map +1 -0
  206. package/build/dist/Models/DatabaseModels/UserOnCallShiftReminder.js +247 -0
  207. package/build/dist/Models/DatabaseModels/UserOnCallShiftReminder.js.map +1 -0
  208. package/build/dist/Models/DatabaseModels/UserOnCallShiftReminderLog.js +355 -0
  209. package/build/dist/Models/DatabaseModels/UserOnCallShiftReminderLog.js.map +1 -0
  210. package/build/dist/Server/API/DashboardDomainAPI.js +43 -1
  211. package/build/dist/Server/API/DashboardDomainAPI.js.map +1 -1
  212. package/build/dist/Server/API/MicrosoftTeamsAPI.js +74 -118
  213. package/build/dist/Server/API/MicrosoftTeamsAPI.js.map +1 -1
  214. package/build/dist/Server/API/OnCallCalendarAPI.js +1371 -0
  215. package/build/dist/Server/API/OnCallCalendarAPI.js.map +1 -0
  216. package/build/dist/Server/API/StatusPageDomainAPI.js +43 -1
  217. package/build/dist/Server/API/StatusPageDomainAPI.js.map +1 -1
  218. package/build/dist/Server/EnvironmentConfig.js +102 -0
  219. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  220. package/build/dist/Server/Infrastructure/OnCallCalendarFeedCache.js +663 -0
  221. package/build/dist/Server/Infrastructure/OnCallCalendarFeedCache.js.map +1 -0
  222. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790200000000-AllowNullMonitorNameOnMonitorTemplate.js +34 -0
  223. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790200000000-AllowNullMonitorNameOnMonitorTemplate.js.map +1 -0
  224. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790300000000-AddCertificateReissueRequestedAtToDomains.js +28 -0
  225. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790300000000-AddCertificateReissueRequestedAtToDomains.js.map +1 -0
  226. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790400000000-AddOnCallCalendarFeeds.js +103 -0
  227. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790400000000-AddOnCallCalendarFeeds.js.map +1 -0
  228. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -0
  229. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  230. package/build/dist/Server/Middleware/OnCallCalendarFeedRateLimit.js +342 -0
  231. package/build/dist/Server/Middleware/OnCallCalendarFeedRateLimit.js.map +1 -0
  232. package/build/dist/Server/Middleware/ProjectAuthorization.js +6 -1
  233. package/build/dist/Server/Middleware/ProjectAuthorization.js.map +1 -1
  234. package/build/dist/Server/Services/DashboardDomainService.js +104 -0
  235. package/build/dist/Server/Services/DashboardDomainService.js.map +1 -1
  236. package/build/dist/Server/Services/Index.js +12 -0
  237. package/build/dist/Server/Services/Index.js.map +1 -1
  238. package/build/dist/Server/Services/LogPipelineProcessorService.js +65 -0
  239. package/build/dist/Server/Services/LogPipelineProcessorService.js.map +1 -1
  240. package/build/dist/Server/Services/MonitorTemplateService.js +57 -11
  241. package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
  242. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js +20 -0
  243. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js.map +1 -1
  244. package/build/dist/Server/Services/OnCallDutyPolicyScheduleCalendarFeedService.js +219 -0
  245. package/build/dist/Server/Services/OnCallDutyPolicyScheduleCalendarFeedService.js.map +1 -0
  246. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerService.js +47 -3
  247. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerService.js.map +1 -1
  248. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerUserService.js +112 -3
  249. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerUserService.js.map +1 -1
  250. package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js +955 -9
  251. package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js.map +1 -1
  252. package/build/dist/Server/Services/OnCallDutyPolicyUserOverrideService.js +93 -6
  253. package/build/dist/Server/Services/OnCallDutyPolicyUserOverrideService.js.map +1 -1
  254. package/build/dist/Server/Services/ProjectOnCallCalendarFeedService.js +157 -0
  255. package/build/dist/Server/Services/ProjectOnCallCalendarFeedService.js.map +1 -0
  256. package/build/dist/Server/Services/StatusPageDomainService.js +132 -3
  257. package/build/dist/Server/Services/StatusPageDomainService.js.map +1 -1
  258. package/build/dist/Server/Services/StatusPagePrivateUserSessionService.js +112 -32
  259. package/build/dist/Server/Services/StatusPagePrivateUserSessionService.js.map +1 -1
  260. package/build/dist/Server/Services/TeamMemberService.js +396 -1
  261. package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
  262. package/build/dist/Server/Services/TeamService.js +43 -0
  263. package/build/dist/Server/Services/TeamService.js.map +1 -1
  264. package/build/dist/Server/Services/UserNotificationSettingService.js +26 -1
  265. package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
  266. package/build/dist/Server/Services/UserOnCallCalendarFeedService.js +140 -0
  267. package/build/dist/Server/Services/UserOnCallCalendarFeedService.js.map +1 -0
  268. package/build/dist/Server/Services/UserOnCallShiftReminderLogService.js +116 -0
  269. package/build/dist/Server/Services/UserOnCallShiftReminderLogService.js.map +1 -0
  270. package/build/dist/Server/Services/UserOnCallShiftReminderService.js +92 -0
  271. package/build/dist/Server/Services/UserOnCallShiftReminderService.js.map +1 -0
  272. package/build/dist/Server/Types/Domain.js +16 -0
  273. package/build/dist/Server/Types/Domain.js.map +1 -1
  274. package/build/dist/Server/Utils/APIKey/AccessPermission.js +24 -0
  275. package/build/dist/Server/Utils/APIKey/AccessPermission.js.map +1 -1
  276. package/build/dist/Server/Utils/Greenlock/Greenlock.js +110 -35
  277. package/build/dist/Server/Utils/Greenlock/Greenlock.js.map +1 -1
  278. package/build/dist/Server/Utils/LogPipelineProcessorValidation.js +77 -0
  279. package/build/dist/Server/Utils/LogPipelineProcessorValidation.js.map +1 -0
  280. package/build/dist/Server/Utils/OnCall/CalendarFeedToken.js +161 -0
  281. package/build/dist/Server/Utils/OnCall/CalendarFeedToken.js.map +1 -0
  282. package/build/dist/Server/Utils/OnCall/OnCallCalendarFeedRenderer.js +983 -0
  283. package/build/dist/Server/Utils/OnCall/OnCallCalendarFeedRenderer.js.map +1 -0
  284. package/build/dist/Server/Utils/OnCall/OnCallCalendarFeedUrls.js +155 -0
  285. package/build/dist/Server/Utils/OnCall/OnCallCalendarFeedUrls.js.map +1 -0
  286. package/build/dist/Server/Utils/OnCall/OnCallShiftChangeListeners.js +145 -0
  287. package/build/dist/Server/Utils/OnCall/OnCallShiftChangeListeners.js.map +1 -0
  288. package/build/dist/Server/Utils/OnCall/OnCallShiftMaterializer.js +752 -0
  289. package/build/dist/Server/Utils/OnCall/OnCallShiftMaterializer.js.map +1 -0
  290. package/build/dist/Server/Utils/OnCall/OnCallShiftReminderListener.js +92 -0
  291. package/build/dist/Server/Utils/OnCall/OnCallShiftReminderListener.js.map +1 -0
  292. package/build/dist/Server/Utils/OnCall/OnCallShiftReminderRunner.js +1786 -0
  293. package/build/dist/Server/Utils/OnCall/OnCallShiftReminderRunner.js.map +1 -0
  294. package/build/dist/Server/Utils/Response.js +97 -0
  295. package/build/dist/Server/Utils/Response.js.map +1 -1
  296. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.js +777 -36
  297. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.js.map +1 -1
  298. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js +108 -17
  299. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js.map +1 -1
  300. package/build/dist/Server/Utils/StartServer.js +9 -1
  301. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  302. package/build/dist/Server/Utils/Telemetry/AppMetrics.js +41 -0
  303. package/build/dist/Server/Utils/Telemetry/AppMetrics.js.map +1 -1
  304. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js +17 -6
  305. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js.map +1 -1
  306. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.js +0 -159
  307. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.js.map +1 -1
  308. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Authorization.js +128 -0
  309. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Authorization.js.map +1 -0
  310. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js +17 -6
  311. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js.map +1 -1
  312. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +25 -13
  313. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
  314. package/build/dist/Types/API/Route.js +16 -5
  315. package/build/dist/Types/API/Route.js.map +1 -1
  316. package/build/dist/Types/Calendar/ICalendar.js +290 -0
  317. package/build/dist/Types/Calendar/ICalendar.js.map +1 -0
  318. package/build/dist/Types/Date.js +115 -13
  319. package/build/dist/Types/Date.js.map +1 -1
  320. package/build/dist/Types/Email/EmailTemplateType.js +2 -0
  321. package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
  322. package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js +3 -0
  323. package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js.map +1 -1
  324. package/build/dist/Types/OnCallDutyPolicy/CalendarFeedWindow.js +97 -0
  325. package/build/dist/Types/OnCallDutyPolicy/CalendarFeedWindow.js.map +1 -0
  326. package/build/dist/Types/OnCallDutyPolicy/Layer.js +113 -19
  327. package/build/dist/Types/OnCallDutyPolicy/Layer.js.map +1 -1
  328. package/build/dist/Types/OnCallDutyPolicy/MaterializedShift.js +134 -0
  329. package/build/dist/Types/OnCallDutyPolicy/MaterializedShift.js.map +1 -0
  330. package/build/dist/Types/OnCallDutyPolicy/OnCallCalendarFeedUtil.js +800 -0
  331. package/build/dist/Types/OnCallDutyPolicy/OnCallCalendarFeedUtil.js.map +1 -0
  332. package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js +97 -3
  333. package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js.map +1 -1
  334. package/build/dist/Types/OnCallDutyPolicy/ShiftSeamUtil.js +77 -0
  335. package/build/dist/Types/OnCallDutyPolicy/ShiftSeamUtil.js.map +1 -0
  336. package/build/dist/Types/Rum/SessionReplay.js +38 -0
  337. package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
  338. package/build/dist/UI/Components/Date/TimeRangePickerDropdown.js +9 -5
  339. package/build/dist/UI/Components/Date/TimeRangePickerDropdown.js.map +1 -1
  340. package/build/dist/UI/Components/LogsViewer/LogsViewer.js +12 -7
  341. package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
  342. package/build/dist/UI/Components/LogsViewer/components/HistogramTooltip.js +15 -14
  343. package/build/dist/UI/Components/LogsViewer/components/HistogramTooltip.js.map +1 -1
  344. package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js +17 -22
  345. package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js.map +1 -1
  346. package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js +2 -4
  347. package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js.map +1 -1
  348. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js +2 -4
  349. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js.map +1 -1
  350. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogramTooltip.js +15 -14
  351. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogramTooltip.js.map +1 -1
  352. package/build/dist/UI/Utils/Navigation.js +30 -0
  353. package/build/dist/UI/Utils/Navigation.js.map +1 -1
  354. package/build/dist/Utils/Array.js +25 -0
  355. package/build/dist/Utils/Array.js.map +1 -1
  356. package/build/dist/Utils/CertificateReissue.js +97 -0
  357. package/build/dist/Utils/CertificateReissue.js.map +1 -0
  358. package/build/dist/Utils/Grok/Grok.js +324 -0
  359. package/build/dist/Utils/Grok/Grok.js.map +1 -0
  360. package/build/dist/Utils/Grok/GrokPatterns.js +112 -0
  361. package/build/dist/Utils/Grok/GrokPatterns.js.map +1 -0
  362. package/build/dist/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.js +63 -3
  363. package/build/dist/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.js.map +1 -1
  364. package/package.json +1 -1
  365. package/UI/Utils/JsonWebToken.ts +0 -14
  366. package/build/dist/UI/Utils/JsonWebToken.js +0 -10
  367. package/build/dist/UI/Utils/JsonWebToken.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"AccessPermission.js","sourceRoot":"","sources":["../../../../../Server/Utils/APIKey/AccessPermission.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAC/C,OAAO,UAIN,MAAM,2BAA2B,CAAC;AACnC,OAAO,uBAEN,MAAM,wCAAwC,CAAC;AAChD,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,kBAAkB,MAAM,kCAAkC,CAAC;AAElE,MAAM,CAAC,OAAO,OAAO,sBAAsB;IAErB,AAAb,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAC/C,SAAmB;QAEnB,OAAO;YACL,UAAU,EAAE,CAAC,SAAS,CAAC;YACvB,iBAAiB,EAAE;gBACjB,UAAU,CAAC,MAAM;gBACjB,UAAU,CAAC,IAAI;gBACf,UAAU,CAAC,WAAW;aACvB;YACD,KAAK,EAAE,4BAA4B;SACpC,CAAC;IACJ,CAAC;IAGmB,AAAb,MAAM,CAAC,KAAK,CAAC,+BAA+B,CACjD,SAAmB;QAEnB,OAAO;YACL,UAAU,EAAE,CAAC,SAAS,CAAC;YACvB,iBAAiB,EAAE;gBACjB,UAAU,CAAC,MAAM;gBACjB,UAAU,CAAC,IAAI;gBACf,UAAU,CAAC,WAAW;gBACtB,UAAU,CAAC,YAAY;aACxB;YACD,KAAK,EAAE,4BAA4B;SACpC,CAAC;IACJ,CAAC;IAGmB,AAAb,MAAM,CAAC,KAAK,CAAC,kCAAkC,CACpD,SAAmB;QAEnB,MAAM,eAAe,GAA0B,EAAE,CAAC;QAElD,eAAe,CAAC,IAAI,CAAC;YACnB,UAAU,EAAE,UAAU,CAAC,YAAY;YACnC,QAAQ,EAAE,EAAE;YACZ,KAAK,EAAE,gBAAgB;SACxB,CAAC,CAAC;QAEH,MAAM,UAAU,GACd,kBAAkB,CAAC,oCAAoC,CAAC,SAAS,CAAC,CAAC;QAErE,UAAU,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAExE,OAAO,UAAU,CAAC;IACpB,CAAC;IAGmB,AAAb,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAC9C,SAAmB,EACnB,QAAkB;QAElB,+DAA+D;QAC/D,MAAM,oBAAoB,GACxB,MAAM,uBAAuB,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;QAEpE,MAAM,eAAe,GAA0B,oBAAoB,CAAC,GAAG,CACrE,CAAC,GAAwB,EAAkB,EAAE;YAC3C,OAAO;gBACL,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;gBACxC,KAAK,EAAE,gBAAgB;aACxB,CAAC;QACJ,CAAC,CACF,CAAC;QAEF,MAAM,UAAU,GACd,kBAAkB,CAAC,oCAAoC,CAAC,SAAS,CAAC,CAAC;QAErE,UAAU,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAExE,OAAO,UAAU,CAAC;IACpB,CAAC;CACF;AA7EqB;IADnB,WAAW,EAAE;;qCAED,QAAQ;;iEAWpB;AAGmB;IADnB,WAAW,EAAE;;qCAED,QAAQ;;mEAYpB;AAGmB;IADnB,WAAW,EAAE;;qCAED,QAAQ;;sEAgBpB;AAGmB;IADnB,WAAW,EAAE;;qCAED,QAAQ;QACT,QAAQ;;gEAuBnB"}
1
+ {"version":3,"file":"AccessPermission.js","sourceRoot":"","sources":["../../../../../Server/Utils/APIKey/AccessPermission.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAC/C,OAAO,UAIN,MAAM,2BAA2B,CAAC;AACnC,OAAO,uBAEN,MAAM,wCAAwC,CAAC;AAChD,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,kBAAkB,MAAM,kCAAkC,CAAC;AAElE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,OAAO,OAAO,sBAAsB;IAErB,AAAb,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAC/C,SAAmB;QAEnB,OAAO;YACL,UAAU,EAAE,CAAC,SAAS,CAAC;YACvB,iBAAiB,EAAE;gBACjB,UAAU,CAAC,MAAM;gBACjB,UAAU,CAAC,IAAI;gBACf,UAAU,CAAC,WAAW;gBACtB,UAAU,CAAC,oBAAoB;aAChC;YACD,KAAK,EAAE,4BAA4B;SACpC,CAAC;IACJ,CAAC;IAGmB,AAAb,MAAM,CAAC,KAAK,CAAC,+BAA+B,CACjD,SAAmB;QAEnB,OAAO;YACL,UAAU,EAAE,CAAC,SAAS,CAAC;YACvB,iBAAiB,EAAE;gBACjB,UAAU,CAAC,MAAM;gBACjB,UAAU,CAAC,IAAI;gBACf,UAAU,CAAC,WAAW;gBACtB,UAAU,CAAC,oBAAoB;gBAC/B,UAAU,CAAC,YAAY;aACxB;YACD,KAAK,EAAE,4BAA4B;SACpC,CAAC;IACJ,CAAC;IAGmB,AAAb,MAAM,CAAC,KAAK,CAAC,kCAAkC,CACpD,SAAmB;QAEnB,MAAM,eAAe,GAA0B,EAAE,CAAC;QAElD,eAAe,CAAC,IAAI,CAAC;YACnB,UAAU,EAAE,UAAU,CAAC,YAAY;YACnC,QAAQ,EAAE,EAAE;YACZ,KAAK,EAAE,gBAAgB;SACxB,CAAC,CAAC;QAEH,MAAM,UAAU,GACd,kBAAkB,CAAC,oCAAoC,CAAC,SAAS,CAAC,CAAC;QAErE,UAAU,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAExE,OAAO,UAAU,CAAC;IACpB,CAAC;IAGmB,AAAb,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAC9C,SAAmB,EACnB,QAAkB;QAElB,+DAA+D;QAC/D,MAAM,oBAAoB,GACxB,MAAM,uBAAuB,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;QAEpE,MAAM,eAAe,GAA0B,oBAAoB,CAAC,GAAG,CACrE,CAAC,GAAwB,EAAkB,EAAE;YAC3C,OAAO;gBACL,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;gBACxC,KAAK,EAAE,gBAAgB;aACxB,CAAC;QACJ,CAAC,CACF,CAAC;QAEF,MAAM,UAAU,GACd,kBAAkB,CAAC,oCAAoC,CAAC,SAAS,CAAC,CAAC;QAErE,UAAU,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAExE,OAAO,UAAU,CAAC;IACpB,CAAC;CACF;AA/EqB;IADnB,WAAW,EAAE;;qCAED,QAAQ;;iEAYpB;AAGmB;IADnB,WAAW,EAAE;;qCAED,QAAQ;;mEAapB;AAGmB;IADnB,WAAW,EAAE;;qCAED,QAAQ;;sEAgBpB;AAGmB;IADnB,WAAW,EAAE;;qCAED,QAAQ;QACT,QAAQ;;gEAuBnB"}
@@ -21,21 +21,39 @@ import ServerException from "../../../Types/Exception/ServerException";
21
21
  import Text from "../../../Types/Text";
22
22
  import AcmeCertificate from "../../../Models/DatabaseModels/AcmeCertificate";
23
23
  import AcmeChallenge from "../../../Models/DatabaseModels/AcmeChallenge";
24
+ import ArrayUtil from "../../../Utils/Array";
24
25
  import acme from "acme-client";
25
26
  import CaptureSpan from "../Telemetry/CaptureSpan";
26
- export default class GreenlockUtil {
27
+ class GreenlockUtil {
28
+ /*
29
+ * Stable per-domain lead time, somewhere in the range above. Same domain,
30
+ * same answer, on every run and every replica.
31
+ */
32
+ static getRenewalLeadTimeInDays(domain) {
33
+ const spanInDays = GreenlockUtil.RENEW_LEAD_TIME_MAX_IN_DAYS -
34
+ GreenlockUtil.RENEW_LEAD_TIME_MIN_IN_DAYS;
35
+ let hash = 0;
36
+ for (let i = 0; i < domain.length; i++) {
37
+ hash = (hash * 31 + domain.charCodeAt(i)) % 1000003;
38
+ }
39
+ return (GreenlockUtil.RENEW_LEAD_TIME_MIN_IN_DAYS + (hash % (spanInDays + 1)));
40
+ }
27
41
  static async renewAllCertsWhichAreExpiringSoon(data) {
28
42
  try {
29
43
  logger.debug("Renewing all certificates");
30
- // get all certificates which are expiring soon
44
+ /*
45
+ * Read the widest window any domain's lead time can make it due in, then
46
+ * keep only the domains whose own lead time has actually been reached.
47
+ */
31
48
  const certificates = await AcmeCertificateService.findBy({
32
49
  query: {
33
- expiresAt: QueryHelper.lessThanEqualTo(OneUptimeDate.addRemoveDays(OneUptimeDate.getCurrentDate(), 40)),
50
+ expiresAt: QueryHelper.lessThanEqualTo(OneUptimeDate.addRemoveDays(OneUptimeDate.getCurrentDate(), GreenlockUtil.RENEW_LEAD_TIME_MAX_IN_DAYS)),
34
51
  },
35
52
  limit: LIMIT_MAX,
36
53
  skip: 0,
37
54
  select: {
38
55
  domain: true,
56
+ expiresAt: true,
39
57
  },
40
58
  sort: {
41
59
  expiresAt: SortOrder.Ascending,
@@ -44,40 +62,31 @@ export default class GreenlockUtil {
44
62
  isRoot: true,
45
63
  },
46
64
  });
47
- logger.debug(`Found ${certificates.length} certificates which are expiring soon`, { certificateCount: certificates.length });
48
- // order certificate for each domain
49
- for (const certificate of certificates) {
50
- if (!certificate.domain) {
51
- continue;
65
+ const now = OneUptimeDate.getCurrentDate();
66
+ const dueCertificates = certificates.filter((certificate) => {
67
+ if (!certificate.domain || !certificate.expiresAt) {
68
+ return false;
52
69
  }
53
- const certLogAttributes = {
70
+ const renewAt = OneUptimeDate.addRemoveDays(certificate.expiresAt, -GreenlockUtil.getRenewalLeadTimeInDays(certificate.domain));
71
+ return !OneUptimeDate.isAfter(renewAt, now);
72
+ });
73
+ /*
74
+ * Still sorted by expiry, so a run that cannot take the whole backlog
75
+ * spends itself on the domains closest to expiring and leaves the rest -
76
+ * which by construction still have weeks of lead time - to the next run.
77
+ */
78
+ const batch = dueCertificates.slice(0, GreenlockUtil.RENEW_MAX_PER_RUN);
79
+ logger.debug(`Found ${dueCertificates.length} certificates due for renewal, renewing ${batch.length} in this run`, {
80
+ dueCount: dueCertificates.length,
81
+ batchCount: batch.length,
82
+ });
83
+ await ArrayUtil.forEachWithConcurrency(batch, GreenlockUtil.RENEW_CONCURRENCY, async (certificate) => {
84
+ await GreenlockUtil.renewCertForDomain({
54
85
  domain: certificate.domain,
55
- };
56
- logger.debug(`Renewing certificate for domain: ${certificate.domain}`, certLogAttributes);
57
- try {
58
- //validate cname
59
- const isValidCname = await data.validateCname(certificate.domain);
60
- if (!isValidCname) {
61
- logger.debug(`CNAME is not valid for domain: ${certificate.domain}`, certLogAttributes);
62
- // if cname is not valid then remove the domain
63
- await GreenlockUtil.removeDomain(certificate.domain);
64
- await data.notifyDomainRemoved(certificate.domain);
65
- logger.error(`Cname is not valid for domain: ${certificate.domain}`, certLogAttributes);
66
- }
67
- else {
68
- logger.debug(`CNAME is valid for domain: ${certificate.domain}`, certLogAttributes);
69
- await GreenlockUtil.orderCert({
70
- domain: certificate.domain,
71
- validateCname: data.validateCname,
72
- });
73
- logger.debug(`Certificate renewed for domain: ${certificate.domain}`, certLogAttributes);
74
- }
75
- }
76
- catch (e) {
77
- logger.error(`Error renewing certificate for domain: ${certificate.domain}`, certLogAttributes);
78
- logger.error(e, certLogAttributes);
79
- }
80
- }
86
+ validateCname: data.validateCname,
87
+ notifyDomainRemoved: data.notifyDomainRemoved,
88
+ });
89
+ });
81
90
  }
82
91
  catch (e) {
83
92
  logger.error("Error renewing all certificates");
@@ -85,6 +94,41 @@ export default class GreenlockUtil {
85
94
  throw e;
86
95
  }
87
96
  }
97
+ /*
98
+ * Renew one domain. Never throws: one domain that cannot be renewed - a CNAME
99
+ * that no longer points here, a challenge the CA would not accept - must not
100
+ * take down the rest of the run with it.
101
+ */
102
+ static async renewCertForDomain(data) {
103
+ const { domain } = data;
104
+ const certLogAttributes = {
105
+ domain: domain,
106
+ };
107
+ logger.debug(`Renewing certificate for domain: ${domain}`, certLogAttributes);
108
+ try {
109
+ //validate cname
110
+ const isValidCname = await data.validateCname(domain);
111
+ if (!isValidCname) {
112
+ logger.debug(`CNAME is not valid for domain: ${domain}`, certLogAttributes);
113
+ // if cname is not valid then remove the domain
114
+ await GreenlockUtil.removeDomain(domain);
115
+ await data.notifyDomainRemoved(domain);
116
+ logger.error(`Cname is not valid for domain: ${domain}`, certLogAttributes);
117
+ }
118
+ else {
119
+ logger.debug(`CNAME is valid for domain: ${domain}`, certLogAttributes);
120
+ await GreenlockUtil.orderCert({
121
+ domain: domain,
122
+ validateCname: data.validateCname,
123
+ });
124
+ logger.debug(`Certificate renewed for domain: ${domain}`, certLogAttributes);
125
+ }
126
+ }
127
+ catch (e) {
128
+ logger.error(`Error renewing certificate for domain: ${domain}`, certLogAttributes);
129
+ logger.error(e, certLogAttributes);
130
+ }
131
+ }
88
132
  static async removeDomain(domain) {
89
133
  try {
90
134
  // remove certificate for this domain.
@@ -252,6 +296,37 @@ export default class GreenlockUtil {
252
296
  }
253
297
  }
254
298
  }
299
+ /*
300
+ * How early a certificate is renewed, as a range rather than a single value.
301
+ *
302
+ * Let's Encrypt issues for 90 days, so every domain ordered on the same day
303
+ * expires on the same day. Renewing them all at one fixed lead time keeps
304
+ * that batch together for every cycle that follows, and a single bad day -
305
+ * an upstream outage, a rate limit, a run that does not finish - then expires
306
+ * the whole batch at once instead of one domain.
307
+ *
308
+ * Spreading the lead time across a range pulls the batch apart: domains that
309
+ * expire on the same day come due days apart, and having been renewed days
310
+ * apart they expire days apart next cycle too. The offset is derived from the
311
+ * domain name so it is stable - a domain must not drift in and out of
312
+ * eligibility between two runs, which would leave it renewed by neither.
313
+ */
314
+ GreenlockUtil.RENEW_LEAD_TIME_MAX_IN_DAYS = 40;
315
+ GreenlockUtil.RENEW_LEAD_TIME_MIN_IN_DAYS = 25;
316
+ /*
317
+ * A run renews at most this many domains, at most this many at a time.
318
+ *
319
+ * Both bound how much of a backlog is dispatched at once. Let's Encrypt
320
+ * allows 300 new orders per account per three hours, and the reactive
321
+ * provisioning sweep spends from the same allowance, so a run that tried to
322
+ * clear a large backlog in one pass would spend the account's budget and get
323
+ * the renewals behind it refused. At the schedule this job runs on the cap
324
+ * still clears far more per day than one sequential daily pass ever did,
325
+ * while leaving room under the limit.
326
+ */
327
+ GreenlockUtil.RENEW_MAX_PER_RUN = 10;
328
+ GreenlockUtil.RENEW_CONCURRENCY = 5;
329
+ export default GreenlockUtil;
255
330
  __decorate([
256
331
  CaptureSpan(),
257
332
  __metadata("design:type", Function),
@@ -1 +1 @@
1
- {"version":3,"file":"Greenlock.js","sourceRoot":"","sources":["../../../../../Server/Utils/Greenlock/Greenlock.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Greenlock.js","sourceRoot":"","sources":["../../../../../Server/Utils/Greenlock/Greenlock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ import BadDataException from "../../Types/Exception/BadDataException";
2
+ import LogPipelineProcessorType from "../../Types/Log/LogPipelineProcessorType";
3
+ import { compileGrokPattern } from "../../Utils/Grok/Grok";
4
+ /*
5
+ * Save-time validation for log pipeline processors.
6
+ *
7
+ * A processor that cannot do anything is worse than a rejected one: it
8
+ * sits in the pipeline list looking configured while every log flows
9
+ * past it untouched, and nothing surfaces the fact. That is exactly how
10
+ * GrokParser behaved before it was implemented
11
+ * (OneUptime/oneuptime#2515).
12
+ *
13
+ * The grok pattern is the one field where a typo is both easy and
14
+ * invisible - `%{IPV4:client ip}` or a stray bracket compiles to
15
+ * nothing. Compiling it here is cheap, happens once per human edit, and
16
+ * puts the error in front of the only person who can fix it. The ingest
17
+ * path stays defensive anyway: rows saved before this validation
18
+ * existed still fail closed to "leave the log alone".
19
+ */
20
+ /*
21
+ * Prefixes become the leading part of an attribute key, so hold them to
22
+ * what an attribute key can sensibly be.
23
+ */
24
+ const TARGET_PREFIX_REGEX = /^[A-Za-z_][A-Za-z0-9_.@:-]*$/;
25
+ /*
26
+ * `configuration` is a jsonb column, but the dashboard's JSON form field
27
+ * has historically persisted it as a JSON string literal - so both
28
+ * shapes reach here (see LogPipelineService.normalizeProcessorConfig).
29
+ */
30
+ function readConfiguration(configuration) {
31
+ if (configuration && typeof configuration === "object") {
32
+ return configuration;
33
+ }
34
+ if (typeof configuration === "string") {
35
+ try {
36
+ const parsed = JSON.parse(configuration);
37
+ if (parsed && typeof parsed === "object") {
38
+ return parsed;
39
+ }
40
+ }
41
+ catch (_a) {
42
+ throw new BadDataException("Processor configuration is not valid JSON.");
43
+ }
44
+ }
45
+ return null;
46
+ }
47
+ export function validateLogPipelineProcessor(candidate) {
48
+ if (candidate.processorType !== LogPipelineProcessorType.GrokParser) {
49
+ return;
50
+ }
51
+ const configuration = readConfiguration(candidate.configuration);
52
+ if (!configuration) {
53
+ throw new BadDataException("A Grok Parser processor needs a configuration with a grok pattern.");
54
+ }
55
+ const config = configuration;
56
+ const pattern = typeof config.pattern === "string" ? config.pattern.trim() : "";
57
+ if (!pattern) {
58
+ throw new BadDataException("A Grok Parser processor needs a grok pattern, for example: %{IPV4:client_ip} %{WORD:verb}");
59
+ }
60
+ // Throws BadDataException with a message written for the person editing.
61
+ compileGrokPattern(pattern);
62
+ if (config.targetPrefix !== undefined && config.targetPrefix !== null) {
63
+ if (typeof config.targetPrefix !== "string") {
64
+ throw new BadDataException("Target prefix must be text.");
65
+ }
66
+ const targetPrefix = config.targetPrefix.trim();
67
+ if (targetPrefix && !TARGET_PREFIX_REGEX.test(targetPrefix)) {
68
+ throw new BadDataException(`"${config.targetPrefix}" is not a valid target prefix. Use letters, digits, and . _ - : @ (starting with a letter or underscore).`);
69
+ }
70
+ }
71
+ if (config.source !== undefined && config.source !== null) {
72
+ if (typeof config.source !== "string") {
73
+ throw new BadDataException("Source field must be text.");
74
+ }
75
+ }
76
+ }
77
+ //# sourceMappingURL=LogPipelineProcessorValidation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LogPipelineProcessorValidation.js","sourceRoot":"","sources":["../../../../Server/Utils/LogPipelineProcessorValidation.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,MAAM,wCAAwC,CAAC;AAEtE,OAAO,wBAEN,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D;;;;;;;;;;;;;;;GAeG;AAEH;;;GAGG;AACH,MAAM,mBAAmB,GAAW,8BAA8B,CAAC;AAOnE;;;;GAIG;AACH,SAAS,iBAAiB,CACxB,aAAqD;IAErD,IAAI,aAAa,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;QACvD,OAAO,aAA2B,CAAC;IACrC,CAAC;IAED,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAElD,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACzC,OAAO,MAAoB,CAAC;YAC9B,CAAC;QACH,CAAC;QAAC,WAAM,CAAC;YACP,MAAM,IAAI,gBAAgB,CAAC,4CAA4C,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,SAAwC;IAExC,IAAI,SAAS,CAAC,aAAa,KAAK,wBAAwB,CAAC,UAAU,EAAE,CAAC;QACpE,OAAO;IACT,CAAC;IAED,MAAM,aAAa,GAAsB,iBAAiB,CACxD,SAAS,CAAC,aAAa,CACxB,CAAC;IAEF,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,gBAAgB,CACxB,oEAAoE,CACrE,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAqB,aAA4C,CAAC;IAC9E,MAAM,OAAO,GACX,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAElE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,gBAAgB,CACxB,2FAA2F,CAC5F,CAAC;IACJ,CAAC;IAED,yEAAyE;IACzE,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAE5B,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,IAAI,MAAM,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;QACtE,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;YAC5C,MAAM,IAAI,gBAAgB,CAAC,6BAA6B,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,YAAY,GAAW,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QAExD,IAAI,YAAY,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5D,MAAM,IAAI,gBAAgB,CACxB,IAAI,MAAM,CAAC,YAAY,4GAA4G,CACpI,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QAC1D,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACtC,MAAM,IAAI,gBAAgB,CAAC,4BAA4B,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,161 @@
1
+ import crypto from "crypto";
2
+ import OneUptimeDate from "../../../Types/Date";
3
+ import { PREVIOUS_TOKEN_GRACE_DAYS } from "../../../Types/OnCallDutyPolicy/CalendarFeedWindow";
4
+ /*
5
+ * The capability token that addresses an on-call calendar feed.
6
+ *
7
+ * A calendar client keeps the feed URL forever and re-fetches it unattended,
8
+ * so the token has to be both unguessable and cheap to look up: 256 bits from
9
+ * the CSPRNG, carried in the URL as base64url (43 characters, no padding), and
10
+ * stored ONLY as its unkeyed SHA-256 hex digest. The digest is what the public
11
+ * route queries by, which keeps the plaintext out of the indexed column; a
12
+ * database dump therefore yields hashes, not working feed URLs.
13
+ *
14
+ * Unkeyed on purpose: a keyed hash (HMAC over EncryptionSecret, the backup-code
15
+ * recipe) would tie every feed to the instance secret, and rotating that secret
16
+ * would silently break every subscribed calendar in the world with no way to
17
+ * tell the user. The token already carries 256 bits of entropy, so a rainbow
18
+ * table buys nothing and the key adds no strength worth that failure mode.
19
+ *
20
+ * The hint is the last four characters - enough for the settings page to say
21
+ * "link ending in …k3Qx" so a user can tell two links apart, far too little to
22
+ * recover anything.
23
+ */
24
+ // crypto.randomBytes(32) -> 32 bytes -> ceil(32 * 8 / 6) = 43 base64url chars.
25
+ const TOKEN_BYTE_LENGTH = 32;
26
+ export const CALENDAR_FEED_TOKEN_LENGTH = 43;
27
+ export const CALENDAR_FEED_TOKEN_HINT_LENGTH = 4;
28
+ /*
29
+ * Shape guard for the public route. Anything that does not match is answered
30
+ * 404 before any database work, so a scanner probing the path costs one regex.
31
+ */
32
+ export const CALENDAR_FEED_TOKEN_REGEX = /^[A-Za-z0-9_-]{43}$/;
33
+ export default class CalendarFeedToken {
34
+ /**
35
+ * A fresh 43-character base64url token from 32 CSPRNG bytes.
36
+ */
37
+ static mint() {
38
+ return crypto.randomBytes(TOKEN_BYTE_LENGTH).toString("base64url");
39
+ }
40
+ /**
41
+ * Unkeyed SHA-256 of the token, lowercase hex (64 characters). This is the
42
+ * value stored in `tokenHash` / `previousTokenHash` and the value the public
43
+ * route looks up by. Deterministic: the same token always hashes the same.
44
+ */
45
+ static hash(token) {
46
+ return crypto.createHash("sha256").update(token, "utf8").digest("hex");
47
+ }
48
+ /**
49
+ * The display hint - the last four characters of the token. Never enough to
50
+ * reconstruct the token; enough to tell "…k3Qx" from "…Q9zA" in the UI.
51
+ */
52
+ static hint(token) {
53
+ return token.slice(-CALENDAR_FEED_TOKEN_HINT_LENGTH);
54
+ }
55
+ /**
56
+ * True when the string has exactly the shape a minted token has. Used as
57
+ * the shape guard on the public route so a malformed path never reaches the
58
+ * database.
59
+ */
60
+ static isValidShape(token) {
61
+ return typeof token === "string" && CALENDAR_FEED_TOKEN_REGEX.test(token);
62
+ }
63
+ /**
64
+ * Everything a feed row needs when a token is minted or rotated.
65
+ */
66
+ static mintSet() {
67
+ const token = CalendarFeedToken.mint();
68
+ return {
69
+ token: token,
70
+ tokenHash: CalendarFeedToken.hash(token),
71
+ tokenHint: CalendarFeedToken.hint(token),
72
+ };
73
+ }
74
+ /**
75
+ * The token columns a feed row should hold after minting or rotating.
76
+ *
77
+ * The hash the row held before (if any) moves to `previousTokenHash` and
78
+ * keeps serving an EMPTY calendar until `previousTokenExpiresAt`
79
+ * (PREVIOUS_TOKEN_GRACE_DAYS from now), so a still-subscribed client clears
80
+ * its copy instead of showing "could not fetch" until the user notices.
81
+ */
82
+ static buildRotation(data) {
83
+ const now = data.now || OneUptimeDate.getCurrentDate();
84
+ const minted = CalendarFeedToken.mintSet();
85
+ const previousTokenHash = data.currentTokenHash || null;
86
+ return Object.assign(Object.assign({}, minted), { rotatedAt: now, previousTokenHash: previousTokenHash, previousTokenExpiresAt: previousTokenHash
87
+ ? OneUptimeDate.addRemoveDays(now, PREVIOUS_TOKEN_GRACE_DAYS)
88
+ : null });
89
+ }
90
+ /**
91
+ * Populate the token columns of a row about to be INSERTED.
92
+ *
93
+ * With `trustSuppliedToken`, a well-formed plaintext token already on the
94
+ * row (the calendar API mints one up front so it can build the URL in the
95
+ * same response) is kept and the hash and hint are DERIVED from it. Without
96
+ * it - every non-root create - whatever the request carried is discarded
97
+ * and a fresh token is minted. Either way a malformed token or a
98
+ * caller-chosen hash is replaced: there is no path to a row whose hash
99
+ * disagrees with its token, and no path for a request body to choose the
100
+ * secret. A brand-new row never carries a grace-period hash.
101
+ */
102
+ static applyTokenColumnsOnCreate(data, options) {
103
+ let minted;
104
+ if (options.trustSuppliedToken &&
105
+ CalendarFeedToken.isValidShape(data.token)) {
106
+ minted = {
107
+ token: data.token,
108
+ tokenHash: CalendarFeedToken.hash(data.token),
109
+ tokenHint: CalendarFeedToken.hint(data.token),
110
+ };
111
+ }
112
+ else {
113
+ minted = CalendarFeedToken.mintSet();
114
+ }
115
+ data.token = minted.token;
116
+ data.tokenHash = minted.tokenHash;
117
+ data.tokenHint = minted.tokenHint;
118
+ data.rotatedAt = OneUptimeDate.getCurrentDate();
119
+ data.previousTokenHash = undefined;
120
+ data.previousTokenExpiresAt = undefined;
121
+ return minted;
122
+ }
123
+ /**
124
+ * The partial row a rotation writes. `previousTokenHash` /
125
+ * `previousTokenExpiresAt` are null on a first mint, which the update path
126
+ * has to be able to write; the model types them as optional strings/dates,
127
+ * hence the cast at this one boundary.
128
+ */
129
+ static toRotationUpdateData(rotation) {
130
+ return {
131
+ token: rotation.token,
132
+ tokenHash: rotation.tokenHash,
133
+ tokenHint: rotation.tokenHint,
134
+ rotatedAt: rotation.rotatedAt,
135
+ previousTokenHash: rotation.previousTokenHash,
136
+ previousTokenExpiresAt: rotation.previousTokenExpiresAt,
137
+ };
138
+ }
139
+ /**
140
+ * Constant-time comparison of two hashes, for callers that compare a
141
+ * freshly computed digest against a stored one in memory rather than in a
142
+ * WHERE clause. Length mismatch is answered false without leaking timing on
143
+ * the content.
144
+ */
145
+ static isHashEqual(a, b) {
146
+ /*
147
+ * Plain Uint8Arrays rather than Buffers: the two are interchangeable at
148
+ * runtime, but the App build's @types/node rejects Buffer where an
149
+ * ArrayBufferView is expected (the same mismatch PasswordHash and
150
+ * TwoFactorBackupCode trip over), and TextEncoder is global on every
151
+ * supported Node.
152
+ */
153
+ const bytesA = new TextEncoder().encode(a);
154
+ const bytesB = new TextEncoder().encode(b);
155
+ if (bytesA.length !== bytesB.length) {
156
+ return false;
157
+ }
158
+ return crypto.timingSafeEqual(bytesA, bytesB);
159
+ }
160
+ }
161
+ //# sourceMappingURL=CalendarFeedToken.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CalendarFeedToken.js","sourceRoot":"","sources":["../../../../../Server/Utils/OnCall/CalendarFeedToken.ts"],"names":[],"mappings":"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"}