@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
@@ -0,0 +1,662 @@
1
+ import OnCallDutyPolicySchedule from "./OnCallDutyPolicySchedule";
2
+ import Project from "./Project";
3
+ import User from "./User";
4
+ import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel";
5
+ import Route from "../../Types/API/Route";
6
+ import { PlanType } from "../../Types/Billing/SubscriptionPlan";
7
+ import AllowAccessIfSubscriptionIsUnpaid from "../../Types/Database/AccessControl/AllowAccessIfSubscriptionIsUnpaid";
8
+ import ColumnAccessControl from "../../Types/Database/AccessControl/ColumnAccessControl";
9
+ import TableAccessControl from "../../Types/Database/AccessControl/TableAccessControl";
10
+ import TableBillingAccessControl from "../../Types/Database/AccessControl/TableBillingAccessControl";
11
+ import CanAccessIfCanReadOn from "../../Types/Database/CanAccessIfCanReadOn";
12
+ import ColumnLength from "../../Types/Database/ColumnLength";
13
+ import ColumnType from "../../Types/Database/ColumnType";
14
+ import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
15
+ import TableColumn from "../../Types/Database/TableColumn";
16
+ import TableColumnType from "../../Types/Database/TableColumnType";
17
+ import TableMetadata from "../../Types/Database/TableMetadata";
18
+ import TenantColumn from "../../Types/Database/TenantColumn";
19
+ import IconProp from "../../Types/Icon/IconProp";
20
+ import ObjectID from "../../Types/ObjectID";
21
+ import Permission from "../../Types/Permission";
22
+ import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
23
+
24
+ /*
25
+ * The project-owned, shared calendar feed of ONE on-call schedule: the
26
+ * capability token behind `GET /on-call-calendar/schedule/:token/schedule.ics`,
27
+ * which renders everybody's shifts on that schedule (plus opt-in coverage-gap
28
+ * events).
29
+ *
30
+ * WHO MAY DO WHAT
31
+ *
32
+ * The four table access lists are copied verbatim from OnCallDutyPolicySchedule
33
+ * (Common/Tests/Models/OnCallDutyPolicyScheduleCalendarFeed.test.ts holds them
34
+ * equal): whoever may edit a schedule may publish, rotate or disable its
35
+ * shared link, and whoever may read a schedule may copy the link. The link
36
+ * belongs to the project, not to whoever copied it. @CanAccessIfCanReadOn
37
+ * scopes it by the schedule's labels too, so a label-restricted reader never
38
+ * sees the feed of a schedule they cannot see.
39
+ *
40
+ * ONE ROW PER SCHEDULE - onCallDutyPolicyScheduleId is UNIQUE, and the row
41
+ * cascades away with the schedule.
42
+ *
43
+ * THE TOKEN IS NEVER CHOSEN BY A CALLER
44
+ *
45
+ * Every token-bearing column is `computed` with empty create/update lists.
46
+ * The service mints the token in onBeforeCreate, regardless of what the
47
+ * request carried, and rotation is a root write. A CRUD read returns the
48
+ * settings and the four-character hint, never the token.
49
+ */
50
+ const createPermissions: Array<Permission> = [
51
+ Permission.ProjectOwner,
52
+ Permission.ProjectAdmin,
53
+ Permission.ProjectMember,
54
+ Permission.OnCallAdmin,
55
+ Permission.OnCallMember,
56
+ Permission.CreateProjectOnCallDutyPolicySchedule,
57
+ ];
58
+
59
+ const readPermissions: Array<Permission> = [
60
+ Permission.ProjectOwner,
61
+ Permission.ProjectAdmin,
62
+ Permission.ProjectMember,
63
+ Permission.Viewer,
64
+ Permission.OnCallAdmin,
65
+ Permission.OnCallMember,
66
+ Permission.OnCallViewer,
67
+ Permission.ReadProjectOnCallDutyPolicySchedule,
68
+ ];
69
+
70
+ const updatePermissions: Array<Permission> = [
71
+ Permission.ProjectOwner,
72
+ Permission.ProjectAdmin,
73
+ Permission.ProjectMember,
74
+ Permission.OnCallAdmin,
75
+ Permission.OnCallMember,
76
+ Permission.EditProjectOnCallDutyPolicySchedule,
77
+ ];
78
+
79
+ @TableBillingAccessControl({
80
+ create: PlanType.Growth,
81
+ read: PlanType.Growth,
82
+ update: PlanType.Growth,
83
+ delete: PlanType.Growth,
84
+ })
85
+ @TenantColumn("projectId")
86
+ @AllowAccessIfSubscriptionIsUnpaid()
87
+ @TableAccessControl({
88
+ create: [
89
+ Permission.ProjectOwner,
90
+ Permission.ProjectAdmin,
91
+ Permission.ProjectMember,
92
+ Permission.OnCallAdmin,
93
+ Permission.OnCallMember,
94
+ Permission.CreateProjectOnCallDutyPolicySchedule,
95
+ ],
96
+ read: [
97
+ Permission.ProjectOwner,
98
+ Permission.ProjectAdmin,
99
+ Permission.ProjectMember,
100
+ Permission.Viewer,
101
+ Permission.OnCallAdmin,
102
+ Permission.OnCallMember,
103
+ Permission.OnCallViewer,
104
+ Permission.ReadProjectOnCallDutyPolicySchedule,
105
+ ],
106
+ delete: [
107
+ Permission.ProjectOwner,
108
+ Permission.ProjectAdmin,
109
+ Permission.ProjectMember,
110
+ Permission.OnCallAdmin,
111
+ Permission.OnCallMember,
112
+ Permission.DeleteProjectOnCallDutyPolicySchedule,
113
+ ],
114
+ update: [
115
+ Permission.ProjectOwner,
116
+ Permission.ProjectAdmin,
117
+ Permission.ProjectMember,
118
+ Permission.OnCallAdmin,
119
+ Permission.OnCallMember,
120
+ Permission.EditProjectOnCallDutyPolicySchedule,
121
+ ],
122
+ })
123
+ @CanAccessIfCanReadOn("onCallDutyPolicySchedule")
124
+ @CrudApiEndpoint(new Route("/on-call-duty-policy-schedule-calendar-feed"))
125
+ @Entity({
126
+ name: "OnCallDutyPolicyScheduleCalendarFeed",
127
+ })
128
+ @TableMetadata({
129
+ tableName: "OnCallDutyPolicyScheduleCalendarFeed",
130
+ singularName: "On-Call Schedule Calendar Feed",
131
+ pluralName: "On-Call Schedule Calendar Feeds",
132
+ icon: IconProp.Calendar,
133
+ tableDescription:
134
+ "A shared calendar-subscription link that renders everybody's shifts on one on-call schedule.",
135
+ })
136
+ @Index(["onCallDutyPolicyScheduleId"], { unique: true })
137
+ export default class OnCallDutyPolicyScheduleCalendarFeed extends BaseModel {
138
+ @ColumnAccessControl({
139
+ create: createPermissions,
140
+ read: readPermissions,
141
+ update: [],
142
+ })
143
+ @TableColumn({
144
+ manyToOneRelationColumn: "projectId",
145
+ type: TableColumnType.Entity,
146
+ modelType: Project,
147
+ title: "Project",
148
+ description: "Relation to Project Resource in which this object belongs",
149
+ example: "5f8b9c0d-e1a2-4b3c-8d5e-6f7a8b9c0d1e",
150
+ })
151
+ @ManyToOne(
152
+ () => {
153
+ return Project;
154
+ },
155
+ {
156
+ eager: false,
157
+ nullable: true,
158
+ onDelete: "CASCADE",
159
+ orphanedRowAction: "nullify",
160
+ },
161
+ )
162
+ @JoinColumn({ name: "projectId" })
163
+ public project?: Project = undefined;
164
+
165
+ @ColumnAccessControl({
166
+ create: createPermissions,
167
+ read: readPermissions,
168
+ update: [],
169
+ })
170
+ @Index()
171
+ @TableColumn({
172
+ type: TableColumnType.ObjectID,
173
+ required: true,
174
+ canReadOnRelationQuery: true,
175
+ title: "Project ID",
176
+ description: "ID of your OneUptime Project in which this object belongs",
177
+ example: "5f8b9c0d-e1a2-4b3c-8d5e-6f7a8b9c0d1e",
178
+ })
179
+ @Column({
180
+ type: ColumnType.ObjectID,
181
+ nullable: false,
182
+ transformer: ObjectID.getDatabaseTransformer(),
183
+ })
184
+ public projectId?: ObjectID = undefined;
185
+
186
+ @ColumnAccessControl({
187
+ create: createPermissions,
188
+ read: readPermissions,
189
+ update: [],
190
+ })
191
+ @TableColumn({
192
+ manyToOneRelationColumn: "onCallDutyPolicyScheduleId",
193
+ type: TableColumnType.Entity,
194
+ modelType: OnCallDutyPolicySchedule,
195
+ title: "On-Call Policy Schedule",
196
+ description: "Relation to the On-Call Policy Schedule this feed renders.",
197
+ })
198
+ @ManyToOne(
199
+ () => {
200
+ return OnCallDutyPolicySchedule;
201
+ },
202
+ {
203
+ eager: false,
204
+ nullable: true,
205
+ onDelete: "CASCADE",
206
+ orphanedRowAction: "nullify",
207
+ },
208
+ )
209
+ @JoinColumn({ name: "onCallDutyPolicyScheduleId" })
210
+ public onCallDutyPolicySchedule?: OnCallDutyPolicySchedule = undefined;
211
+
212
+ @ColumnAccessControl({
213
+ create: createPermissions,
214
+ read: readPermissions,
215
+ update: [],
216
+ })
217
+ @TableColumn({
218
+ type: TableColumnType.ObjectID,
219
+ required: true,
220
+ canReadOnRelationQuery: true,
221
+ title: "On-Call Policy Schedule ID",
222
+ description: "ID of the On-Call Policy Schedule this feed renders.",
223
+ example: "5f8b9c0d-e1a2-4b3c-8d5e-6f7a8b9c0d1e",
224
+ })
225
+ @Column({
226
+ type: ColumnType.ObjectID,
227
+ nullable: false,
228
+ transformer: ObjectID.getDatabaseTransformer(),
229
+ })
230
+ public onCallDutyPolicyScheduleId?: ObjectID = undefined;
231
+
232
+ /*
233
+ * Unkeyed SHA-256 hex of the token: the only column the public route looks
234
+ * up by. Read is denied to everyone - see UserOnCallCalendarFeed for why.
235
+ */
236
+ @ColumnAccessControl({
237
+ create: [],
238
+ read: [],
239
+ update: [],
240
+ })
241
+ @TableColumn({
242
+ type: TableColumnType.ShortText,
243
+ required: true,
244
+ computed: true,
245
+ canReadOnRelationQuery: false,
246
+ title: "Token Hash",
247
+ description: "SHA-256 digest of the feed token; the lookup key",
248
+ hideColumnInDocumentation: true,
249
+ })
250
+ @Column({
251
+ type: ColumnType.ShortText,
252
+ length: ColumnLength.ShortText,
253
+ nullable: false,
254
+ unique: true,
255
+ })
256
+ public tokenHash?: string = undefined;
257
+
258
+ @ColumnAccessControl({
259
+ create: [],
260
+ read: [],
261
+ update: [],
262
+ })
263
+ @TableColumn({
264
+ type: TableColumnType.VeryLongText,
265
+ computed: true,
266
+ encrypted: true,
267
+ canReadOnRelationQuery: false,
268
+ title: "Token",
269
+ description: "Encrypted feed token, re-displayed only to schedule readers",
270
+ hideColumnInDocumentation: true,
271
+ })
272
+ @Column({
273
+ type: ColumnType.VeryLongText,
274
+ nullable: true,
275
+ })
276
+ public token?: string = undefined;
277
+
278
+ @ColumnAccessControl({
279
+ create: [],
280
+ read: [],
281
+ update: [],
282
+ })
283
+ @Index()
284
+ @TableColumn({
285
+ type: TableColumnType.ShortText,
286
+ computed: true,
287
+ canReadOnRelationQuery: false,
288
+ title: "Previous Token Hash",
289
+ description: "Digest of the rotated-out token, honoured with an empty feed",
290
+ hideColumnInDocumentation: true,
291
+ })
292
+ @Column({
293
+ type: ColumnType.ShortText,
294
+ length: ColumnLength.ShortText,
295
+ nullable: true,
296
+ })
297
+ public previousTokenHash?: string = undefined;
298
+
299
+ @ColumnAccessControl({
300
+ create: [],
301
+ read: [],
302
+ update: [],
303
+ })
304
+ @TableColumn({
305
+ type: TableColumnType.Date,
306
+ computed: true,
307
+ canReadOnRelationQuery: false,
308
+ title: "Previous Token Expires At",
309
+ description: "When the rotated-out token stops being honoured",
310
+ hideColumnInDocumentation: true,
311
+ })
312
+ @Column({
313
+ type: ColumnType.Date,
314
+ nullable: true,
315
+ })
316
+ public previousTokenExpiresAt?: Date = undefined;
317
+
318
+ @ColumnAccessControl({
319
+ create: [],
320
+ read: readPermissions,
321
+ update: [],
322
+ })
323
+ @TableColumn({
324
+ type: TableColumnType.ShortText,
325
+ computed: true,
326
+ canReadOnRelationQuery: false,
327
+ title: "Token Hint",
328
+ description: "Last four characters of the feed token, for display",
329
+ example: "k3Qx",
330
+ })
331
+ @Column({
332
+ type: ColumnType.ShortText,
333
+ length: ColumnLength.ShortText,
334
+ nullable: true,
335
+ })
336
+ public tokenHint?: string = undefined;
337
+
338
+ @ColumnAccessControl({
339
+ create: createPermissions,
340
+ read: readPermissions,
341
+ update: updatePermissions,
342
+ })
343
+ @TableColumn({
344
+ isDefaultValueColumn: true,
345
+ type: TableColumnType.Boolean,
346
+ defaultValue: true,
347
+ title: "Enabled",
348
+ description:
349
+ "When off, the link keeps working but serves an empty calendar so subscribed apps clear their copy.",
350
+ example: true,
351
+ })
352
+ @Column({
353
+ type: ColumnType.Boolean,
354
+ default: true,
355
+ nullable: false,
356
+ })
357
+ public isEnabled?: boolean = undefined;
358
+
359
+ /*
360
+ * Off by default: a "No coverage" event is only emitted where a layer
361
+ * intended coverage (its restriction envelope), never for the off-hours of
362
+ * a business-hours schedule.
363
+ */
364
+ @ColumnAccessControl({
365
+ create: createPermissions,
366
+ read: readPermissions,
367
+ update: updatePermissions,
368
+ })
369
+ @TableColumn({
370
+ isDefaultValueColumn: true,
371
+ type: TableColumnType.Boolean,
372
+ defaultValue: false,
373
+ title: "Include Coverage Gaps",
374
+ description:
375
+ "Emit a 'No coverage' event where the schedule's layers intended coverage but nobody is on call.",
376
+ example: false,
377
+ })
378
+ @Column({
379
+ type: ColumnType.Boolean,
380
+ default: false,
381
+ nullable: false,
382
+ })
383
+ public includeCoverageGaps?: boolean = undefined;
384
+
385
+ @ColumnAccessControl({
386
+ create: createPermissions,
387
+ read: readPermissions,
388
+ update: updatePermissions,
389
+ })
390
+ @TableColumn({
391
+ isDefaultValueColumn: true,
392
+ type: TableColumnType.Number,
393
+ defaultValue: 60,
394
+ title: "Minimum Gap Minutes",
395
+ description:
396
+ "Coverage gaps shorter than this many minutes are not emitted as events.",
397
+ example: 60,
398
+ })
399
+ @Column({
400
+ type: ColumnType.Number,
401
+ default: 60,
402
+ nullable: false,
403
+ })
404
+ public minimumGapMinutes?: number = undefined;
405
+
406
+ @ColumnAccessControl({
407
+ create: createPermissions,
408
+ read: readPermissions,
409
+ update: updatePermissions,
410
+ })
411
+ @TableColumn({
412
+ isDefaultValueColumn: true,
413
+ type: TableColumnType.Number,
414
+ defaultValue: 2,
415
+ title: "Past Days",
416
+ description:
417
+ "How many days of past shifts the feed includes. Past shifts reflect the current rotation, not who was actually paged.",
418
+ example: 2,
419
+ })
420
+ @Column({
421
+ type: ColumnType.Number,
422
+ default: 2,
423
+ nullable: false,
424
+ })
425
+ public pastDays?: number = undefined;
426
+
427
+ @ColumnAccessControl({
428
+ create: createPermissions,
429
+ read: readPermissions,
430
+ update: updatePermissions,
431
+ })
432
+ @TableColumn({
433
+ isDefaultValueColumn: true,
434
+ type: TableColumnType.Number,
435
+ defaultValue: 90,
436
+ title: "Future Days",
437
+ description: "How many days of upcoming shifts the feed includes.",
438
+ example: 90,
439
+ })
440
+ @Column({
441
+ type: ColumnType.Number,
442
+ default: 90,
443
+ nullable: false,
444
+ })
445
+ public futureDays?: number = undefined;
446
+
447
+ /*
448
+ * When on, this link is rotated automatically the moment a user leaves the
449
+ * project (TeamMemberService cleanup), so a departed colleague's calendar
450
+ * app stops receiving the team's roster.
451
+ */
452
+ @ColumnAccessControl({
453
+ create: createPermissions,
454
+ read: readPermissions,
455
+ update: updatePermissions,
456
+ })
457
+ @TableColumn({
458
+ isDefaultValueColumn: true,
459
+ type: TableColumnType.Boolean,
460
+ defaultValue: false,
461
+ title: "Rotate When Member Leaves",
462
+ description:
463
+ "Automatically regenerate this link whenever a user leaves the project.",
464
+ example: false,
465
+ })
466
+ @Column({
467
+ type: ColumnType.Boolean,
468
+ default: false,
469
+ nullable: false,
470
+ })
471
+ public rotateWhenMemberLeaves?: boolean = undefined;
472
+
473
+ @ColumnAccessControl({
474
+ create: [],
475
+ read: readPermissions,
476
+ update: [],
477
+ })
478
+ @TableColumn({
479
+ type: TableColumnType.Date,
480
+ computed: true,
481
+ title: "Rotated At",
482
+ description: "When the current token was minted",
483
+ })
484
+ @Column({
485
+ type: ColumnType.Date,
486
+ nullable: true,
487
+ })
488
+ public rotatedAt?: Date = undefined;
489
+
490
+ @ColumnAccessControl({
491
+ create: [],
492
+ read: readPermissions,
493
+ update: [],
494
+ })
495
+ @TableColumn({
496
+ type: TableColumnType.Date,
497
+ computed: true,
498
+ title: "Last Fetched At",
499
+ description: "When a calendar client last fetched this feed",
500
+ })
501
+ @Column({
502
+ type: ColumnType.Date,
503
+ nullable: true,
504
+ })
505
+ public lastFetchedAt?: Date = undefined;
506
+
507
+ @ColumnAccessControl({
508
+ create: [],
509
+ read: readPermissions,
510
+ update: [],
511
+ })
512
+ @TableColumn({
513
+ type: TableColumnType.ShortText,
514
+ computed: true,
515
+ title: "Last Fetched Client",
516
+ description:
517
+ "Coarse family of the calendar client that last fetched this feed (for example Google Calendar)",
518
+ example: "Google Calendar",
519
+ })
520
+ @Column({
521
+ type: ColumnType.ShortText,
522
+ length: ColumnLength.ShortText,
523
+ nullable: true,
524
+ })
525
+ public lastFetchedClient?: string = undefined;
526
+
527
+ @ColumnAccessControl({
528
+ create: [],
529
+ read: readPermissions,
530
+ update: [],
531
+ })
532
+ @TableColumn({
533
+ isDefaultValueColumn: true,
534
+ type: TableColumnType.Number,
535
+ defaultValue: 0,
536
+ computed: true,
537
+ title: "Fetch Count",
538
+ description: "Approximate number of times this feed has been fetched",
539
+ example: 143,
540
+ })
541
+ @Column({
542
+ type: ColumnType.Number,
543
+ default: 0,
544
+ nullable: false,
545
+ })
546
+ public fetchCount?: number = undefined;
547
+
548
+ @ColumnAccessControl({
549
+ create: [],
550
+ read: readPermissions,
551
+ update: [],
552
+ })
553
+ @TableColumn({
554
+ isDefaultValueColumn: true,
555
+ type: TableColumnType.Boolean,
556
+ defaultValue: false,
557
+ computed: true,
558
+ title: "Last Render Truncated",
559
+ description:
560
+ "Whether the last render had to shrink the window or stop early to stay within limits",
561
+ example: false,
562
+ })
563
+ @Column({
564
+ type: ColumnType.Boolean,
565
+ default: false,
566
+ nullable: false,
567
+ })
568
+ public lastRenderTruncated?: boolean = undefined;
569
+
570
+ @ColumnAccessControl({
571
+ create: createPermissions,
572
+ read: readPermissions,
573
+ update: [],
574
+ })
575
+ @TableColumn({
576
+ manyToOneRelationColumn: "createdByUserId",
577
+ type: TableColumnType.Entity,
578
+ modelType: User,
579
+ title: "Created by User",
580
+ description:
581
+ "Relation to User who created this object (if this object was created by a User)",
582
+ })
583
+ @ManyToOne(
584
+ () => {
585
+ return User;
586
+ },
587
+ {
588
+ eager: false,
589
+ nullable: true,
590
+ onDelete: "SET NULL",
591
+ orphanedRowAction: "nullify",
592
+ },
593
+ )
594
+ @JoinColumn({ name: "createdByUserId" })
595
+ public createdByUser?: User = undefined;
596
+
597
+ @ColumnAccessControl({
598
+ create: createPermissions,
599
+ read: readPermissions,
600
+ update: [],
601
+ })
602
+ @TableColumn({
603
+ type: TableColumnType.ObjectID,
604
+ title: "Created by User ID",
605
+ description:
606
+ "User ID who created this object (if this object was created by a User)",
607
+ example: "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
608
+ })
609
+ @Column({
610
+ type: ColumnType.ObjectID,
611
+ nullable: true,
612
+ transformer: ObjectID.getDatabaseTransformer(),
613
+ })
614
+ public createdByUserId?: ObjectID = undefined;
615
+
616
+ @ColumnAccessControl({
617
+ create: [],
618
+ read: [],
619
+ update: [],
620
+ })
621
+ @TableColumn({
622
+ manyToOneRelationColumn: "deletedByUserId",
623
+ type: TableColumnType.Entity,
624
+ title: "Deleted by User",
625
+ modelType: User,
626
+ description:
627
+ "Relation to User who deleted this object (if this object was deleted by a User)",
628
+ })
629
+ @ManyToOne(
630
+ () => {
631
+ return User;
632
+ },
633
+ {
634
+ cascade: false,
635
+ eager: false,
636
+ nullable: true,
637
+ onDelete: "SET NULL",
638
+ orphanedRowAction: "nullify",
639
+ },
640
+ )
641
+ @JoinColumn({ name: "deletedByUserId" })
642
+ public deletedByUser?: User = undefined;
643
+
644
+ @ColumnAccessControl({
645
+ create: [],
646
+ read: [],
647
+ update: [],
648
+ })
649
+ @TableColumn({
650
+ type: TableColumnType.ObjectID,
651
+ title: "Deleted by User ID",
652
+ description:
653
+ "User ID who deleted this object (if this object was deleted by a User)",
654
+ example: "b2c3d4e5-f6a7-8901-bcde-f12345678901",
655
+ })
656
+ @Column({
657
+ type: ColumnType.ObjectID,
658
+ nullable: true,
659
+ transformer: ObjectID.getDatabaseTransformer(),
660
+ })
661
+ public deletedByUserId?: ObjectID = undefined;
662
+ }