@oneuptime/common 12.0.12 → 12.0.14

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 (596) hide show
  1. package/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.ts +32 -5
  2. package/Models/DatabaseModels/NetworkDevice.ts +64 -0
  3. package/Models/DatabaseModels/OnCallDutyPolicySchedule.ts +14 -0
  4. package/Models/DatabaseModels/StatusPage.ts +59 -0
  5. package/Models/DatabaseModels/StatusPageOidc.ts +2 -0
  6. package/Models/DatabaseModels/UserCall.ts +94 -3
  7. package/Models/DatabaseModels/UserEmail.ts +94 -3
  8. package/Models/DatabaseModels/UserIncomingCallNumber.ts +94 -3
  9. package/Models/DatabaseModels/UserPush.ts +37 -0
  10. package/Models/DatabaseModels/UserSMS.ts +94 -3
  11. package/Models/DatabaseModels/UserWhatsApp.ts +93 -2
  12. package/Models/DatabaseModels/WorkspaceProjectAuthToken.ts +19 -2
  13. package/Server/API/AIChatAPI.ts +55 -56
  14. package/Server/API/BaseAPI.ts +79 -14
  15. package/Server/API/CommonAPI.ts +89 -0
  16. package/Server/API/MicrosoftTeamsAPI.ts +20 -9
  17. package/Server/API/SlackAPI.ts +13 -10
  18. package/Server/API/StatusPageAPI.ts +2197 -2128
  19. package/Server/API/TelemetryAPI.ts +72 -3
  20. package/Server/API/UserCallAPI.ts +53 -45
  21. package/Server/API/UserEmailAPI.ts +53 -44
  22. package/Server/API/UserIncomingCallNumberAPI.ts +48 -38
  23. package/Server/API/UserNotificationMethodAdminAPI.ts +481 -0
  24. package/Server/API/UserPushAPI.ts +126 -2
  25. package/Server/API/UserSmsAPI.ts +53 -44
  26. package/Server/API/UserWhatsAppAPI.ts +53 -50
  27. package/Server/Infrastructure/Postgres/SchemaMigrations/1787142779538-MigrationName.ts +154 -0
  28. package/Server/Infrastructure/Postgres/SchemaMigrations/1787156982416-MigrationName.ts +17 -0
  29. package/Server/Infrastructure/Postgres/SchemaMigrations/1787500000000-AddEnableSearchEngineIndexingToStatusPage.ts +30 -0
  30. package/Server/Infrastructure/Postgres/SchemaMigrations/1787600000000-AddNetworkDeviceReachabilityColumns.ts +47 -0
  31. package/Server/Infrastructure/Postgres/SchemaMigrations/1787700000000-FixTotpOtpUrlAlgorithm.ts +45 -0
  32. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +10 -0
  33. package/Server/Middleware/UserAuthorization.ts +11 -2
  34. package/Server/Middleware/VerificationCodeRateLimit.ts +586 -0
  35. package/Server/Services/AnalyticsDatabaseService.ts +169 -0
  36. package/Server/Services/ApiKeyPermissionService.ts +116 -2
  37. package/Server/Services/DatabaseService.ts +118 -6
  38. package/Server/Services/LogAggregationService.ts +39 -0
  39. package/Server/Services/LogService.ts +21 -0
  40. package/Server/Services/NetworkSiteService.ts +12 -0
  41. package/Server/Services/PushNotificationService.ts +127 -12
  42. package/Server/Services/SpanService.ts +21 -0
  43. package/Server/Services/TeamMemberService.ts +53 -13
  44. package/Server/Services/TraceAggregationService.ts +15 -0
  45. package/Server/Services/UserCallService.ts +55 -24
  46. package/Server/Services/UserEmailService.ts +83 -17
  47. package/Server/Services/UserIncomingCallNumberService.ts +49 -85
  48. package/Server/Services/UserNotificationMethodAdminService.ts +1527 -0
  49. package/Server/Services/UserNotificationRuleService.ts +26 -0
  50. package/Server/Services/UserPushService.ts +89 -0
  51. package/Server/Services/UserSmsService.ts +50 -17
  52. package/Server/Services/UserWhatsAppService.ts +48 -15
  53. package/Server/Services/WorkspaceNotificationRuleService.ts +172 -220
  54. package/Server/Types/AnalyticsDatabase/ModelPermission.ts +9 -0
  55. package/Server/Types/Database/Permissions/AccessControlPermission.ts +47 -16
  56. package/Server/Types/Database/QueryHelper.ts +30 -0
  57. package/Server/Utils/APIKey/AccessPermission.ts +16 -40
  58. package/Server/Utils/AnalyticsDatabase/QuerySettingsHelper.ts +59 -0
  59. package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +144 -0
  60. package/Server/Utils/ChannelVerification.ts +510 -0
  61. package/Server/Utils/LogRedaction.ts +576 -0
  62. package/Server/Utils/Logger.ts +123 -46
  63. package/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.ts +13 -16
  64. package/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.ts +94 -23
  65. package/Server/Utils/Monitor/MonitorAlert.ts +24 -21
  66. package/Server/Utils/Monitor/MonitorIncident.ts +21 -18
  67. package/Server/Utils/Monitor/MonitorResource.ts +29 -9
  68. package/Server/Utils/Monitor/MonitorResourceContext.ts +107 -0
  69. package/Server/Utils/Monitor/MonitorStepResourceIdentity.ts +442 -0
  70. package/Server/Utils/Monitor/NetworkInventoryUtil.ts +28 -7
  71. package/Server/Utils/Monitor/SeriesResourceLabels.ts +3 -3
  72. package/Server/Utils/Monitor/SeriesResourceLinker.ts +96 -28
  73. package/Server/Utils/SessionReplay/SessionReplayGateCacheStore.ts +56 -10
  74. package/Server/Utils/StartServer.ts +30 -9
  75. package/Server/Utils/StatusPageSearchEngineIndexing.ts +33 -0
  76. package/Server/Utils/Telemetry/ResourceEntityFilter.ts +441 -0
  77. package/Server/Utils/TotpAuth.ts +137 -9
  78. package/Server/Utils/UserRegistrationToken.ts +182 -0
  79. package/Server/Utils/VerificationCode.ts +134 -0
  80. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +488 -46
  81. package/Tests/App/Dashboard/AdminNotificationRulesPage.test.tsx +173 -94
  82. package/Tests/App/Dashboard/AdminUserNotificationMethodsPage.test.tsx +1151 -0
  83. package/Tests/App/Dashboard/AdminUserOnCallPages.test.tsx +905 -0
  84. package/Tests/App/Dashboard/DashboardCommandPalette.test.tsx +338 -0
  85. package/Tests/App/Dashboard/InvestigationPanel.test.tsx +1 -1
  86. package/Tests/App/Dashboard/MonitorTypePicker.test.tsx +328 -0
  87. package/Tests/App/StatusPage/StatusPageIndexPageRobotsMeta.test.ts +130 -0
  88. package/Tests/Models/DatabaseModels/DatabaseBaseModelToJSONObjectCache.test.ts +180 -0
  89. package/Tests/Models/StatusPageEnableSearchEngineIndexing.test.ts +157 -0
  90. package/Tests/Models/UserPushCriticalAlertColumn.test.ts +172 -0
  91. package/Tests/Server/API/AIChatCancelAndFeedback.test.ts +23 -1
  92. package/Tests/Server/API/AIChatRouteAuthorization.test.ts +785 -0
  93. package/Tests/Server/API/BaseAPIApiKeyAuth.test.ts +21 -8
  94. package/Tests/Server/API/BaseAPIGetListParallel.test.ts +519 -0
  95. package/Tests/Server/API/CommonAPIAuthGuard.test.ts +290 -0
  96. package/Tests/Server/API/MicrosoftTeamsManifest.test.ts +7 -1
  97. package/Tests/Server/API/NotificationChannelVerificationAPI.test.ts +543 -0
  98. package/Tests/Server/API/StatusPageOverviewCache.test.ts +474 -0
  99. package/Tests/Server/API/StatusPageSeoSearchEngineIndexing.test.ts +189 -0
  100. package/Tests/Server/API/UserIncomingCallNumberApi.test.ts +108 -18
  101. package/Tests/Server/API/UserNotificationMethodAdminAPI.test.ts +963 -0
  102. package/Tests/Server/API/UserPushCriticalAlertsApi.test.ts +114 -0
  103. package/Tests/Server/API/UserSmsApi.test.ts +107 -14
  104. package/Tests/Server/API/UserTotpAuthAPI.test.ts +427 -0
  105. package/Tests/Server/Infrastructure/InMemoryTTLCache.test.ts +158 -0
  106. package/Tests/Server/Infrastructure/Postgres/DeviceRoleAndDeclaredLinkParentMigration.test.ts +9 -60
  107. package/Tests/Server/Infrastructure/Postgres/FixTotpOtpUrlAlgorithmMigration.test.ts +315 -0
  108. package/Tests/Server/Middleware/ProjectAuthorizationApiKeyMiddleware.test.ts +24 -15
  109. package/Tests/Server/Middleware/UserAuthorization.test.ts +79 -0
  110. package/Tests/Server/Middleware/VerificationCodeRateLimit.test.ts +775 -0
  111. package/Tests/Server/Services/AddNetworkDeviceReachabilityColumnsMigration.test.ts +280 -0
  112. package/Tests/Server/Services/AnalyticsDatabasePaginationStability.test.ts +33 -13
  113. package/Tests/Server/Services/AnalyticsDatabaseSortKeyBoundary.test.ts +658 -0
  114. package/Tests/Server/Services/ApiKeyPermissionService.test.ts +347 -0
  115. package/Tests/Server/Services/CriticalOnCallAlertDelivery.test.ts +458 -0
  116. package/Tests/Server/Services/CriticalPushAlertPayload.test.ts +301 -0
  117. package/Tests/Server/Services/DatabaseServiceAtomicIncrement.test.ts +143 -0
  118. package/Tests/Server/Services/DatabaseServiceUpdateDebugLogging.test.ts +282 -0
  119. package/Tests/Server/Services/DeliverNotificationForRuleExtraction.test.ts +1 -0
  120. package/Tests/Server/Services/LogAggregationScanMemory.test.ts +421 -0
  121. package/Tests/Server/Services/LogAggregationService.test.ts +2 -2
  122. package/Tests/Server/Services/NetworkSiteService.test.ts +56 -2
  123. package/Tests/Server/Services/NotificationChannelCodeIssuance.test.ts +401 -0
  124. package/Tests/Server/Services/PushNotificationDeliveryOptions.test.ts +204 -0
  125. package/Tests/Server/Services/TeamMemberAutoAcceptInvitation.test.ts +21 -1
  126. package/Tests/Server/Services/TeamMemberInviteRegistrationToken.test.ts +290 -0
  127. package/Tests/Server/Services/TelemetryResourceFacetFilters.test.ts +267 -0
  128. package/Tests/Server/Services/UserNotificationMethodAdminService.test.ts +948 -0
  129. package/Tests/Server/Services/UserNotificationRuleExecuteItem.test.ts +1 -0
  130. package/Tests/Server/Services/UserPushCriticalAlertToggle.test.ts +255 -0
  131. package/Tests/Server/Services/UserTotpAuthEnrolment.test.ts +218 -0
  132. package/Tests/Server/Services/WorkspaceNotificationRuleTestRuleChannels.test.ts +702 -0
  133. package/Tests/Server/TestingUtils/AuthenticatorApp.ts +248 -0
  134. package/Tests/Server/Types/Database/Permissions/AccessControlPermission.test.ts +165 -0
  135. package/Tests/Server/Types/Database/Permissions/NotificationChannelVerificationColumns.test.ts +135 -0
  136. package/Tests/Server/Types/Database/Permissions/OnCallScheduleRelationSelect.test.ts +504 -0
  137. package/Tests/Server/Types/Database/QueryHelperFindWithSameTextAnyOf.test.ts +91 -0
  138. package/Tests/Server/Types/Workflow/Components/JsonToText.test.ts +384 -0
  139. package/Tests/Server/Types/Workflow/Components/MergeJson.test.ts +403 -0
  140. package/Tests/Server/Utils/APIKey/AccessPermission.test.ts +48 -36
  141. package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +213 -0
  142. package/Tests/Server/Utils/Browser.test.ts +162 -0
  143. package/Tests/Server/Utils/ChannelVerification.test.ts +689 -0
  144. package/Tests/Server/Utils/Express.test.ts +371 -0
  145. package/Tests/Server/Utils/LogRedaction.test.ts +415 -0
  146. package/Tests/Server/Utils/LoggerCredentialLeak.test.ts +245 -0
  147. package/Tests/Server/Utils/Monitor/Criteria/CustomCodeMonitorCriteria.test.ts +707 -0
  148. package/Tests/Server/Utils/Monitor/Criteria/DnsMonitorCriteria.test.ts +698 -0
  149. package/Tests/Server/Utils/Monitor/Criteria/IncomingEmailBodyCriteria.test.ts +243 -0
  150. package/Tests/Server/Utils/Monitor/Criteria/IncomingRequestBodyCriteria.test.ts +278 -0
  151. package/Tests/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.test.ts +374 -4
  152. package/Tests/Server/Utils/Monitor/MonitorAlertResourceLinking.test.ts +160 -20
  153. package/Tests/Server/Utils/Monitor/MonitorDependencySuppressionCreatorSkip.test.ts +13 -8
  154. package/Tests/Server/Utils/Monitor/MonitorIncidentResourceLinking.test.ts +162 -18
  155. package/Tests/Server/Utils/Monitor/MonitorResourceContext.test.ts +349 -0
  156. package/Tests/Server/Utils/Monitor/MonitorResourceIngestedStepSelection.test.ts +455 -0
  157. package/Tests/Server/Utils/Monitor/MonitorStepResourceIdentity.test.ts +690 -0
  158. package/Tests/Server/Utils/Monitor/MonitorSummaryPersistence.test.ts +7 -2
  159. package/Tests/Server/Utils/Monitor/NetworkDeviceReachabilityRoundTrip.test.ts +369 -0
  160. package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +86 -8
  161. package/Tests/Server/Utils/Monitor/SeriesResourceLinker.test.ts +92 -18
  162. package/Tests/Server/Utils/PrivacyFilterUtil.test.ts +64 -0
  163. package/Tests/Server/Utils/PushNotificationUtilCreators.test.ts +267 -0
  164. package/Tests/Server/Utils/SessionReplay/SessionReplayGateCacheStore.test.ts +207 -0
  165. package/Tests/Server/Utils/StartServerBodyVerify.test.ts +335 -0
  166. package/Tests/Server/Utils/StatusPageSearchEngineIndexing.test.ts +60 -0
  167. package/Tests/Server/Utils/Telemetry/OneuptimeLabel.test.ts +439 -0
  168. package/Tests/Server/Utils/Telemetry/ResourceEntityFilter.test.ts +435 -0
  169. package/Tests/Server/Utils/TotpAuth.test.ts +719 -0
  170. package/Tests/Server/Utils/UserRegistrationToken.test.ts +322 -0
  171. package/Tests/Server/Utils/VerificationCode.test.ts +296 -0
  172. package/Tests/Server/Utils/Workspace/MicrosoftTeamsChannelSend.test.ts +607 -62
  173. package/Tests/Server/Utils/Workspace/MicrosoftTeamsInstalledTeamIdSpace.test.ts +778 -0
  174. package/Tests/Server/Utils/Workspace/MicrosoftTeamsTeamInstalls.test.ts +44 -10
  175. package/Tests/Types/API/HostnameFromAuthority.test.ts +164 -0
  176. package/Tests/Types/AutoRemediation/AutoRemediationSuggestionStatus.test.ts +192 -0
  177. package/Tests/Types/Call/CallRequest.test.ts +189 -0
  178. package/Tests/Types/Dashboard/DashboardSize.test.ts +226 -0
  179. package/Tests/Types/Database/AccessControl/ColumnAccessControlCache.test.ts +344 -0
  180. package/Tests/Types/Database/DatabasePropertyFindOperator.test.ts +518 -0
  181. package/Tests/Types/Database/TableColumnMetadataCache.test.ts +286 -0
  182. package/Tests/Types/Incident/IncidentSlaStatus.test.ts +191 -0
  183. package/Tests/Types/Metrics/MetricDashboardMetricType.test.ts +278 -0
  184. package/Tests/Types/Metrics/MetricPipelineRuleType.test.ts +517 -0
  185. package/Tests/Types/Monitor/IncomingMonitorDefaultCriteria.test.ts +470 -0
  186. package/Tests/Types/Monitor/MonitorCriteriaInstance.test.ts +6 -4
  187. package/Tests/Types/Monitor/MonitorStep.test.ts +100 -0
  188. package/Tests/Types/Monitor/MonitorTypeKeywords.test.ts +360 -0
  189. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCatalog.test.ts +262 -5
  190. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCoverage.test.ts +1 -1
  191. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +1 -1
  192. package/Tests/Types/Monitor/ServiceAlertTemplates.test.ts +905 -0
  193. package/Tests/Types/Service/ServiceLanguage.test.ts +255 -0
  194. package/Tests/Types/StatusPage/SearchEngineIndexing.test.ts +86 -0
  195. package/Tests/Types/Telemetry/ResourceEntityFacet.test.ts +254 -0
  196. package/Tests/Types/TextRandomGeneration.test.ts +211 -0
  197. package/Tests/UI/Components/Button.test.tsx +175 -1
  198. package/Tests/UI/Components/CardSelect.test.tsx +1021 -0
  199. package/Tests/UI/Components/CodeBlockLanguages.test.tsx +236 -0
  200. package/Tests/UI/Components/CommandPalette/CommandPalette.test.tsx +568 -0
  201. package/Tests/UI/Components/CommandPalette/CommandPaletteKeyboard.test.tsx +239 -0
  202. package/Tests/UI/Components/CommandPalette/CommandPaletteProviders.test.tsx +400 -0
  203. package/Tests/UI/Components/CommandPalette/PaletteFilter.test.ts +234 -0
  204. package/Tests/UI/Components/CommandPalette/RecentCommands.test.ts +97 -0
  205. package/Tests/UI/Components/CountModelSideMenuItemGuard.test.tsx +198 -0
  206. package/Tests/UI/Components/FeedItemSafeMode.test.tsx +1 -1
  207. package/Tests/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.test.ts +267 -0
  208. package/Tests/UI/Components/List.test.tsx +9 -2
  209. package/Tests/UI/Components/ListLoadingStates.test.tsx +173 -0
  210. package/Tests/UI/Components/MarkdownLazy.test.tsx +113 -0
  211. package/Tests/UI/Components/MarkdownMermaidRetry.test.tsx +110 -0
  212. package/Tests/UI/Components/MasterPage.test.tsx +36 -1
  213. package/Tests/UI/Components/ModelTable/useCustomFieldColumns.test.tsx +8 -0
  214. package/Tests/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.test.ts +692 -0
  215. package/Tests/UI/Components/MoreMenuMotion.test.tsx +118 -0
  216. package/Tests/UI/Components/NavBarCommandKGating.test.tsx +178 -0
  217. package/Tests/UI/Components/OrderedStatesList.test.tsx +19 -2
  218. package/Tests/UI/Components/SideOverMotion.test.tsx +109 -0
  219. package/Tests/UI/Components/Skeleton.test.tsx +71 -0
  220. package/Tests/UI/Components/TableLoadingStates.test.tsx +279 -0
  221. package/Tests/UI/Components/Tabs.test.tsx +24 -0
  222. package/Tests/UI/Components/Toast.test.tsx +130 -7
  223. package/Tests/UI/Components/ToastStacking.test.tsx +198 -0
  224. package/Tests/UI/Utils/Dropdown.test.ts +423 -0
  225. package/Tests/UI/Utils/ModelAPITenantHeader.test.ts +122 -0
  226. package/Tests/UI/Utils/ModelListCache.test.ts +338 -0
  227. package/Tests/UI/Utils/ProjectListCacheInvalidation.test.ts +225 -0
  228. package/Tests/Utils/API.test.ts +16 -2
  229. package/Tests/Utils/Dashboard/Components/DashboardKubernetesResourceListShared.test.ts +347 -0
  230. package/Tests/Utils/Dashboard/Components/DashboardListSharedArgs.test.ts +259 -0
  231. package/Tests/Utils/Dashboard/Components/DashboardMonitorListComponent.test.ts +466 -0
  232. package/Tests/Utils/Monitor/MonitorMetricType.test.ts +66 -1
  233. package/Tests/Utils/Monitor/NetworkTopologyUtil.test.ts +115 -6
  234. package/Tests/Utils/NetworkDevice/DeviceReachabilityUtil.test.ts +610 -0
  235. package/Tests/Utils/NetworkSite/SiteStatusRollupUtil.test.ts +114 -45
  236. package/Tests/Utils/Rum/UrlScrubberSegments.test.ts +362 -0
  237. package/Types/API/Hostname.ts +79 -0
  238. package/Types/Database/AccessControl/ColumnAccessControl.ts +33 -11
  239. package/Types/Database/AccessControl/ColumnBillingAccessControl.ts +33 -11
  240. package/Types/Database/DatabaseProperty.ts +38 -0
  241. package/Types/Database/TableColumn.ts +34 -7
  242. package/Types/Email/EmailTemplateType.ts +1 -0
  243. package/Types/Events/Recurring.ts +16 -1
  244. package/Types/Monitor/MonitorCriteriaInstance.ts +41 -20
  245. package/Types/Monitor/MonitorStep.ts +13 -1
  246. package/Types/Monitor/MonitorType.ts +345 -40
  247. package/Types/Monitor/Recommendation/MonitorRecommendationCatalog.ts +131 -8
  248. package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +48 -8
  249. package/Types/Monitor/SSLMonitor/SslMonitorResponse.ts +43 -0
  250. package/Types/Monitor/ServiceAlertTemplates.ts +1352 -0
  251. package/Types/Permission.ts +35 -0
  252. package/Types/PushNotification/AndroidNotificationChannel.ts +26 -0
  253. package/Types/PushNotification/PushNotificationMessage.ts +15 -0
  254. package/Types/PushNotification/PushNotificationRequest.ts +8 -16
  255. package/Types/Service/ServiceLanguage.ts +144 -0
  256. package/Types/StatusPage/SearchEngineIndexing.ts +61 -0
  257. package/Types/Telemetry/ResourceEntityFacet.ts +211 -0
  258. package/Types/Text.ts +111 -19
  259. package/UI/Components/Button/Button.tsx +27 -14
  260. package/UI/Components/CardSelect/CardSelect.tsx +714 -105
  261. package/UI/Components/CodeBlock/CodeBlock.tsx +54 -7
  262. package/UI/Components/CodeBlock/LanguageRegistry.ts +103 -0
  263. package/UI/Components/CommandPalette/CommandPalette.tsx +790 -0
  264. package/UI/Components/CommandPalette/PaletteFilter.ts +196 -0
  265. package/UI/Components/CommandPalette/PaletteRow.tsx +173 -0
  266. package/UI/Components/CommandPalette/RecentCommands.ts +57 -0
  267. package/UI/Components/CommandPalette/Types.ts +49 -0
  268. package/UI/Components/CommandPalette/UseProviderSearch.ts +129 -0
  269. package/UI/Components/Dropdown/Dropdown.tsx +6 -1
  270. package/UI/Components/EmptyState/EmptyState.tsx +8 -1
  271. package/UI/Components/Feed/FeedItem.tsx +1 -1
  272. package/UI/Components/Footer/Footer.tsx +32 -6
  273. package/UI/Components/Forms/Fields/FormField.tsx +3 -0
  274. package/UI/Components/Forms/Types/Field.ts +8 -0
  275. package/UI/Components/List/List.tsx +37 -5
  276. package/UI/Components/List/ListSkeleton.tsx +54 -0
  277. package/UI/Components/Loader/PageLoader.tsx +29 -8
  278. package/UI/Components/LogsViewer/components/LogsAnalyticsView.tsx +26 -4
  279. package/UI/Components/Markdown.tsx/LazyMarkdownViewer.tsx +23 -2
  280. package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +71 -26
  281. package/UI/Components/MasterPage/MasterPage.tsx +24 -11
  282. package/UI/Components/Modal/Modal.tsx +2 -2
  283. package/UI/Components/ModelTable/BaseModelTable.tsx +1 -1
  284. package/UI/Components/ModelTable/useCustomFieldColumns.ts +11 -5
  285. package/UI/Components/MoreMenu/MoreMenu.tsx +39 -1
  286. package/UI/Components/Navbar/NavBar.tsx +14 -1
  287. package/UI/Components/OrderedStatesList/OrderedStatesList.tsx +50 -5
  288. package/UI/Components/SideMenu/CountModelSideMenuItem.tsx +40 -1
  289. package/UI/Components/SideOver/SideOver.tsx +37 -2
  290. package/UI/Components/Skeleton/Skeleton.tsx +53 -0
  291. package/UI/Components/Table/Table.tsx +74 -44
  292. package/UI/Components/Table/TableSkeletonRows.tsx +141 -0
  293. package/UI/Components/Tabs/Tab.tsx +1 -1
  294. package/UI/Components/Toast/Toast.tsx +118 -53
  295. package/UI/Components/Toast/ToastInit.tsx +82 -32
  296. package/UI/Styles/Theme.css +40 -0
  297. package/UI/Utils/ModelAPI/ModelAPI.ts +20 -10
  298. package/UI/Utils/ModelListCache.ts +188 -0
  299. package/UI/Utils/Project.ts +29 -0
  300. package/Utils/API.ts +6 -1
  301. package/Utils/Monitor/MonitorMetricType.ts +16 -1
  302. package/Utils/Monitor/NetworkTopologyUtil.ts +60 -8
  303. package/Utils/NetworkDevice/DeviceReachabilityUtil.ts +262 -0
  304. package/Utils/NetworkSite/SiteStatusRollupUtil.ts +41 -24
  305. package/Utils/Telemetry/CrossSignalScope.ts +75 -4
  306. package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js +20 -4
  307. package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js.map +1 -1
  308. package/build/dist/Models/DatabaseModels/NetworkDevice.js +66 -0
  309. package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
  310. package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js +14 -0
  311. package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js.map +1 -1
  312. package/build/dist/Models/DatabaseModels/StatusPage.js +60 -0
  313. package/build/dist/Models/DatabaseModels/StatusPage.js.map +1 -1
  314. package/build/dist/Models/DatabaseModels/StatusPageOidc.js +2 -0
  315. package/build/dist/Models/DatabaseModels/StatusPageOidc.js.map +1 -1
  316. package/build/dist/Models/DatabaseModels/UserCall.js +101 -3
  317. package/build/dist/Models/DatabaseModels/UserCall.js.map +1 -1
  318. package/build/dist/Models/DatabaseModels/UserEmail.js +101 -3
  319. package/build/dist/Models/DatabaseModels/UserEmail.js.map +1 -1
  320. package/build/dist/Models/DatabaseModels/UserIncomingCallNumber.js +101 -3
  321. package/build/dist/Models/DatabaseModels/UserIncomingCallNumber.js.map +1 -1
  322. package/build/dist/Models/DatabaseModels/UserPush.js +38 -0
  323. package/build/dist/Models/DatabaseModels/UserPush.js.map +1 -1
  324. package/build/dist/Models/DatabaseModels/UserSMS.js +101 -3
  325. package/build/dist/Models/DatabaseModels/UserSMS.js.map +1 -1
  326. package/build/dist/Models/DatabaseModels/UserWhatsApp.js +100 -2
  327. package/build/dist/Models/DatabaseModels/UserWhatsApp.js.map +1 -1
  328. package/build/dist/Models/DatabaseModels/WorkspaceProjectAuthToken.js.map +1 -1
  329. package/build/dist/Server/API/AIChatAPI.js +48 -35
  330. package/build/dist/Server/API/AIChatAPI.js.map +1 -1
  331. package/build/dist/Server/API/BaseAPI.js +69 -13
  332. package/build/dist/Server/API/BaseAPI.js.map +1 -1
  333. package/build/dist/Server/API/CommonAPI.js +59 -0
  334. package/build/dist/Server/API/CommonAPI.js.map +1 -1
  335. package/build/dist/Server/API/MicrosoftTeamsAPI.js +20 -6
  336. package/build/dist/Server/API/MicrosoftTeamsAPI.js.map +1 -1
  337. package/build/dist/Server/API/SlackAPI.js +13 -10
  338. package/build/dist/Server/API/SlackAPI.js.map +1 -1
  339. package/build/dist/Server/API/StatusPageAPI.js +745 -673
  340. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  341. package/build/dist/Server/API/TelemetryAPI.js +34 -3
  342. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  343. package/build/dist/Server/API/UserCallAPI.js +42 -38
  344. package/build/dist/Server/API/UserCallAPI.js.map +1 -1
  345. package/build/dist/Server/API/UserEmailAPI.js +42 -38
  346. package/build/dist/Server/API/UserEmailAPI.js.map +1 -1
  347. package/build/dist/Server/API/UserIncomingCallNumberAPI.js +37 -32
  348. package/build/dist/Server/API/UserIncomingCallNumberAPI.js.map +1 -1
  349. package/build/dist/Server/API/UserNotificationMethodAdminAPI.js +341 -0
  350. package/build/dist/Server/API/UserNotificationMethodAdminAPI.js.map +1 -0
  351. package/build/dist/Server/API/UserPushAPI.js +95 -2
  352. package/build/dist/Server/API/UserPushAPI.js.map +1 -1
  353. package/build/dist/Server/API/UserSmsAPI.js +42 -38
  354. package/build/dist/Server/API/UserSmsAPI.js.map +1 -1
  355. package/build/dist/Server/API/UserWhatsAppAPI.js +42 -40
  356. package/build/dist/Server/API/UserWhatsAppAPI.js.map +1 -1
  357. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787142779538-MigrationName.js +89 -0
  358. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787142779538-MigrationName.js.map +1 -0
  359. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787156982416-MigrationName.js +12 -0
  360. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787156982416-MigrationName.js.map +1 -0
  361. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787500000000-AddEnableSearchEngineIndexingToStatusPage.js +23 -0
  362. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787500000000-AddEnableSearchEngineIndexingToStatusPage.js.map +1 -0
  363. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787600000000-AddNetworkDeviceReachabilityColumns.js +34 -0
  364. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787600000000-AddNetworkDeviceReachabilityColumns.js.map +1 -0
  365. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787700000000-FixTotpOtpUrlAlgorithm.js +40 -0
  366. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787700000000-FixTotpOtpUrlAlgorithm.js.map +1 -0
  367. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +10 -0
  368. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  369. package/build/dist/Server/Middleware/UserAuthorization.js +6 -2
  370. package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
  371. package/build/dist/Server/Middleware/VerificationCodeRateLimit.js +393 -0
  372. package/build/dist/Server/Middleware/VerificationCodeRateLimit.js.map +1 -0
  373. package/build/dist/Server/Services/AnalyticsDatabaseService.js +136 -0
  374. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  375. package/build/dist/Server/Services/ApiKeyPermissionService.js +90 -1
  376. package/build/dist/Server/Services/ApiKeyPermissionService.js.map +1 -1
  377. package/build/dist/Server/Services/DatabaseService.js +89 -6
  378. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  379. package/build/dist/Server/Services/LogAggregationService.js +7 -0
  380. package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
  381. package/build/dist/Server/Services/LogService.js +16 -0
  382. package/build/dist/Server/Services/LogService.js.map +1 -1
  383. package/build/dist/Server/Services/NetworkSiteService.js +12 -0
  384. package/build/dist/Server/Services/NetworkSiteService.js.map +1 -1
  385. package/build/dist/Server/Services/PushNotificationService.js +69 -30
  386. package/build/dist/Server/Services/PushNotificationService.js.map +1 -1
  387. package/build/dist/Server/Services/SpanService.js +16 -0
  388. package/build/dist/Server/Services/SpanService.js.map +1 -1
  389. package/build/dist/Server/Services/TeamMemberService.js +43 -7
  390. package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
  391. package/build/dist/Server/Services/TraceAggregationService.js +2 -0
  392. package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
  393. package/build/dist/Server/Services/UserCallService.js +54 -22
  394. package/build/dist/Server/Services/UserCallService.js.map +1 -1
  395. package/build/dist/Server/Services/UserEmailService.js +78 -17
  396. package/build/dist/Server/Services/UserEmailService.js.map +1 -1
  397. package/build/dist/Server/Services/UserIncomingCallNumberService.js +45 -74
  398. package/build/dist/Server/Services/UserIncomingCallNumberService.js.map +1 -1
  399. package/build/dist/Server/Services/UserNotificationMethodAdminService.js +1117 -0
  400. package/build/dist/Server/Services/UserNotificationMethodAdminService.js.map +1 -0
  401. package/build/dist/Server/Services/UserNotificationRuleService.js +20 -0
  402. package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
  403. package/build/dist/Server/Services/UserPushService.js +77 -0
  404. package/build/dist/Server/Services/UserPushService.js.map +1 -1
  405. package/build/dist/Server/Services/UserSmsService.js +50 -17
  406. package/build/dist/Server/Services/UserSmsService.js.map +1 -1
  407. package/build/dist/Server/Services/UserWhatsAppService.js +48 -15
  408. package/build/dist/Server/Services/UserWhatsAppService.js.map +1 -1
  409. package/build/dist/Server/Services/WorkspaceNotificationRuleService.js +137 -164
  410. package/build/dist/Server/Services/WorkspaceNotificationRuleService.js.map +1 -1
  411. package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js +9 -0
  412. package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js.map +1 -1
  413. package/build/dist/Server/Types/Database/Permissions/AccessControlPermission.js +21 -13
  414. package/build/dist/Server/Types/Database/Permissions/AccessControlPermission.js.map +1 -1
  415. package/build/dist/Server/Types/Database/QueryHelper.js +27 -0
  416. package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
  417. package/build/dist/Server/Utils/APIKey/AccessPermission.js +9 -32
  418. package/build/dist/Server/Utils/APIKey/AccessPermission.js.map +1 -1
  419. package/build/dist/Server/Utils/AnalyticsDatabase/QuerySettingsHelper.js +46 -0
  420. package/build/dist/Server/Utils/AnalyticsDatabase/QuerySettingsHelper.js.map +1 -1
  421. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +87 -0
  422. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
  423. package/build/dist/Server/Utils/ChannelVerification.js +348 -0
  424. package/build/dist/Server/Utils/ChannelVerification.js.map +1 -0
  425. package/build/dist/Server/Utils/LogRedaction.js +449 -0
  426. package/build/dist/Server/Utils/LogRedaction.js.map +1 -0
  427. package/build/dist/Server/Utils/Logger.js +98 -45
  428. package/build/dist/Server/Utils/Logger.js.map +1 -1
  429. package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js +13 -12
  430. package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js.map +1 -1
  431. package/build/dist/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.js +65 -13
  432. package/build/dist/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.js.map +1 -1
  433. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +20 -17
  434. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  435. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +17 -14
  436. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  437. package/build/dist/Server/Utils/Monitor/MonitorResource.js +20 -3
  438. package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
  439. package/build/dist/Server/Utils/Monitor/MonitorResourceContext.js +95 -0
  440. package/build/dist/Server/Utils/Monitor/MonitorResourceContext.js.map +1 -0
  441. package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js +313 -0
  442. package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js.map +1 -0
  443. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +27 -7
  444. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
  445. package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +3 -3
  446. package/build/dist/Server/Utils/Monitor/SeriesResourceLinker.js +67 -26
  447. package/build/dist/Server/Utils/Monitor/SeriesResourceLinker.js.map +1 -1
  448. package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCacheStore.js +29 -10
  449. package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCacheStore.js.map +1 -1
  450. package/build/dist/Server/Utils/StartServer.js +10 -7
  451. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  452. package/build/dist/Server/Utils/StatusPageSearchEngineIndexing.js +24 -0
  453. package/build/dist/Server/Utils/StatusPageSearchEngineIndexing.js.map +1 -0
  454. package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js +311 -0
  455. package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js.map +1 -0
  456. package/build/dist/Server/Utils/TotpAuth.js +127 -8
  457. package/build/dist/Server/Utils/TotpAuth.js.map +1 -1
  458. package/build/dist/Server/Utils/UserRegistrationToken.js +170 -0
  459. package/build/dist/Server/Utils/UserRegistrationToken.js.map +1 -0
  460. package/build/dist/Server/Utils/VerificationCode.js +120 -0
  461. package/build/dist/Server/Utils/VerificationCode.js.map +1 -0
  462. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +366 -37
  463. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
  464. package/build/dist/Types/API/Hostname.js +63 -0
  465. package/build/dist/Types/API/Hostname.js.map +1 -1
  466. package/build/dist/Types/Database/AccessControl/ColumnAccessControl.js +20 -6
  467. package/build/dist/Types/Database/AccessControl/ColumnAccessControl.js.map +1 -1
  468. package/build/dist/Types/Database/AccessControl/ColumnBillingAccessControl.js +20 -6
  469. package/build/dist/Types/Database/AccessControl/ColumnBillingAccessControl.js.map +1 -1
  470. package/build/dist/Types/Database/DatabaseProperty.js +38 -0
  471. package/build/dist/Types/Database/DatabaseProperty.js.map +1 -1
  472. package/build/dist/Types/Database/TableColumn.js +24 -6
  473. package/build/dist/Types/Database/TableColumn.js.map +1 -1
  474. package/build/dist/Types/Email/EmailTemplateType.js +1 -0
  475. package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
  476. package/build/dist/Types/Events/Recurring.js +13 -1
  477. package/build/dist/Types/Events/Recurring.js.map +1 -1
  478. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +42 -21
  479. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
  480. package/build/dist/Types/Monitor/MonitorStep.js +9 -1
  481. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  482. package/build/dist/Types/Monitor/MonitorType.js +330 -31
  483. package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
  484. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js +77 -5
  485. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js.map +1 -1
  486. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js +18 -6
  487. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js.map +1 -1
  488. package/build/dist/Types/Monitor/ServiceAlertTemplates.js +1028 -0
  489. package/build/dist/Types/Monitor/ServiceAlertTemplates.js.map +1 -0
  490. package/build/dist/Types/Permission.js +33 -0
  491. package/build/dist/Types/Permission.js.map +1 -1
  492. package/build/dist/Types/PushNotification/AndroidNotificationChannel.js +27 -0
  493. package/build/dist/Types/PushNotification/AndroidNotificationChannel.js.map +1 -0
  494. package/build/dist/Types/Service/ServiceLanguage.js +96 -0
  495. package/build/dist/Types/Service/ServiceLanguage.js.map +1 -0
  496. package/build/dist/Types/StatusPage/SearchEngineIndexing.js +55 -0
  497. package/build/dist/Types/StatusPage/SearchEngineIndexing.js.map +1 -0
  498. package/build/dist/Types/Telemetry/ResourceEntityFacet.js +156 -0
  499. package/build/dist/Types/Telemetry/ResourceEntityFacet.js.map +1 -0
  500. package/build/dist/Types/Text.js +82 -17
  501. package/build/dist/Types/Text.js.map +1 -1
  502. package/build/dist/UI/Components/Button/Button.js +22 -14
  503. package/build/dist/UI/Components/Button/Button.js.map +1 -1
  504. package/build/dist/UI/Components/CardSelect/CardSelect.js +360 -40
  505. package/build/dist/UI/Components/CardSelect/CardSelect.js.map +1 -1
  506. package/build/dist/UI/Components/CodeBlock/CodeBlock.js +35 -3
  507. package/build/dist/UI/Components/CodeBlock/CodeBlock.js.map +1 -1
  508. package/build/dist/UI/Components/CodeBlock/LanguageRegistry.js +57 -0
  509. package/build/dist/UI/Components/CodeBlock/LanguageRegistry.js.map +1 -0
  510. package/build/dist/UI/Components/CommandPalette/CommandPalette.js +439 -0
  511. package/build/dist/UI/Components/CommandPalette/CommandPalette.js.map +1 -0
  512. package/build/dist/UI/Components/CommandPalette/PaletteFilter.js +135 -0
  513. package/build/dist/UI/Components/CommandPalette/PaletteFilter.js.map +1 -0
  514. package/build/dist/UI/Components/CommandPalette/PaletteRow.js +83 -0
  515. package/build/dist/UI/Components/CommandPalette/PaletteRow.js.map +1 -0
  516. package/build/dist/UI/Components/CommandPalette/RecentCommands.js +47 -0
  517. package/build/dist/UI/Components/CommandPalette/RecentCommands.js.map +1 -0
  518. package/build/dist/UI/Components/CommandPalette/Types.js +2 -0
  519. package/build/dist/UI/Components/CommandPalette/Types.js.map +1 -0
  520. package/build/dist/UI/Components/CommandPalette/UseProviderSearch.js +88 -0
  521. package/build/dist/UI/Components/CommandPalette/UseProviderSearch.js.map +1 -0
  522. package/build/dist/UI/Components/Dropdown/Dropdown.js +6 -1
  523. package/build/dist/UI/Components/Dropdown/Dropdown.js.map +1 -1
  524. package/build/dist/UI/Components/EmptyState/EmptyState.js +1 -1
  525. package/build/dist/UI/Components/EmptyState/EmptyState.js.map +1 -1
  526. package/build/dist/UI/Components/Feed/FeedItem.js +1 -1
  527. package/build/dist/UI/Components/Feed/FeedItem.js.map +1 -1
  528. package/build/dist/UI/Components/Footer/Footer.js +7 -4
  529. package/build/dist/UI/Components/Footer/Footer.js.map +1 -1
  530. package/build/dist/UI/Components/Forms/Fields/FormField.js +1 -1
  531. package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
  532. package/build/dist/UI/Components/List/List.js +19 -5
  533. package/build/dist/UI/Components/List/List.js.map +1 -1
  534. package/build/dist/UI/Components/List/ListSkeleton.js +21 -0
  535. package/build/dist/UI/Components/List/ListSkeleton.js.map +1 -0
  536. package/build/dist/UI/Components/Loader/PageLoader.js +15 -5
  537. package/build/dist/UI/Components/Loader/PageLoader.js.map +1 -1
  538. package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js +16 -3
  539. package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js.map +1 -1
  540. package/build/dist/UI/Components/Markdown.tsx/LazyMarkdownViewer.js +13 -1
  541. package/build/dist/UI/Components/Markdown.tsx/LazyMarkdownViewer.js.map +1 -1
  542. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +52 -25
  543. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
  544. package/build/dist/UI/Components/MasterPage/MasterPage.js +10 -2
  545. package/build/dist/UI/Components/MasterPage/MasterPage.js.map +1 -1
  546. package/build/dist/UI/Components/Modal/Modal.js +2 -2
  547. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +1 -1
  548. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  549. package/build/dist/UI/Components/ModelTable/useCustomFieldColumns.js +9 -2
  550. package/build/dist/UI/Components/ModelTable/useCustomFieldColumns.js.map +1 -1
  551. package/build/dist/UI/Components/MoreMenu/MoreMenu.js +32 -1
  552. package/build/dist/UI/Components/MoreMenu/MoreMenu.js.map +1 -1
  553. package/build/dist/UI/Components/Navbar/NavBar.js +5 -1
  554. package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
  555. package/build/dist/UI/Components/OrderedStatesList/OrderedStatesList.js +29 -5
  556. package/build/dist/UI/Components/OrderedStatesList/OrderedStatesList.js.map +1 -1
  557. package/build/dist/UI/Components/SideMenu/CountModelSideMenuItem.js +23 -1
  558. package/build/dist/UI/Components/SideMenu/CountModelSideMenuItem.js.map +1 -1
  559. package/build/dist/UI/Components/SideOver/SideOver.js +23 -2
  560. package/build/dist/UI/Components/SideOver/SideOver.js.map +1 -1
  561. package/build/dist/UI/Components/Skeleton/Skeleton.js +23 -0
  562. package/build/dist/UI/Components/Skeleton/Skeleton.js.map +1 -0
  563. package/build/dist/UI/Components/Table/Table.js +35 -24
  564. package/build/dist/UI/Components/Table/Table.js.map +1 -1
  565. package/build/dist/UI/Components/Table/TableSkeletonRows.js +52 -0
  566. package/build/dist/UI/Components/Table/TableSkeletonRows.js.map +1 -0
  567. package/build/dist/UI/Components/Tabs/Tab.js +1 -1
  568. package/build/dist/UI/Components/Tabs/Tab.js.map +1 -1
  569. package/build/dist/UI/Components/Toast/Toast.js +77 -23
  570. package/build/dist/UI/Components/Toast/Toast.js.map +1 -1
  571. package/build/dist/UI/Components/Toast/ToastInit.js +37 -15
  572. package/build/dist/UI/Components/Toast/ToastInit.js.map +1 -1
  573. package/build/dist/UI/Utils/ModelAPI/ModelAPI.js +18 -9
  574. package/build/dist/UI/Utils/ModelAPI/ModelAPI.js.map +1 -1
  575. package/build/dist/UI/Utils/ModelListCache.js +126 -0
  576. package/build/dist/UI/Utils/ModelListCache.js.map +1 -0
  577. package/build/dist/UI/Utils/Project.js +24 -1
  578. package/build/dist/UI/Utils/Project.js.map +1 -1
  579. package/build/dist/Utils/API.js +6 -1
  580. package/build/dist/Utils/API.js.map +1 -1
  581. package/build/dist/Utils/Monitor/MonitorMetricType.js +13 -1
  582. package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
  583. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +34 -7
  584. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
  585. package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js +177 -0
  586. package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js.map +1 -0
  587. package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js +23 -27
  588. package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js.map +1 -1
  589. package/build/dist/Utils/Telemetry/CrossSignalScope.js +44 -4
  590. package/build/dist/Utils/Telemetry/CrossSignalScope.js.map +1 -1
  591. package/jest.config.json +1 -1
  592. package/package.json +2 -3
  593. package/Server/Utils/Monitor/MonitorClusterContext.ts +0 -182
  594. package/Tests/__mocks__/otpauth.js +0 -30
  595. package/build/dist/Server/Utils/Monitor/MonitorClusterContext.js +0 -141
  596. package/build/dist/Server/Utils/Monitor/MonitorClusterContext.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"UserAuthorization.js","sourceRoot":"","sources":["../../../../Server/Middleware/UserAuthorization.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"UserAuthorization.js","sourceRoot":"","sources":["../../../../Server/Middleware/UserAuthorization.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,393 @@
1
+ import Redis from "../Infrastructure/Redis";
2
+ import logger from "../Utils/Logger";
3
+ import resolveTrustedClientIp from "../Utils/ClientIp";
4
+ import Response from "../Utils/Response";
5
+ import ObjectID from "../../Types/ObjectID";
6
+ import TooManyRequestsException from "../../Types/Exception/TooManyRequestsException";
7
+ /*
8
+ * Request limiting for the notification-channel verification routes:
9
+ * /user-email/verify, /user-sms/verify, /user-call/verify,
10
+ * /user-whats-app/verify, /user-incoming-call-number/verify and each of their
11
+ * resend siblings.
12
+ *
13
+ * WHAT THIS IS FOR, GIVEN THE DATABASE ALREADY COUNTS ATTEMPTS
14
+ *
15
+ * The durable controls in ChannelVerification bound guessing against ONE
16
+ * issued code: five attempts, then the code is burned. This middleware bounds
17
+ * the things a per-row counter cannot see.
18
+ *
19
+ * ROW ROTATION. Nothing stops a caller creating a hundred channel rows —
20
+ * that is the ordinary "add my phone" flow — and each new row is a fresh
21
+ * code with a fresh attempt budget. Five guesses per row multiplied by
22
+ * however many rows the caller cares to create is not bounded by anything
23
+ * on the row. The per-user and per-address counters are.
24
+ *
25
+ * MESSAGE VOLUME. Every issued code is a real email, SMS, voice call or
26
+ * WhatsApp message to somebody who did not ask for it, billed to the
27
+ * project. The resend bucket bounds that independently of whether any
28
+ * individual row is inside its own cooldown.
29
+ *
30
+ * COST BEFORE THE CHECK. A verify request costs a session lookup and a row
31
+ * read before the attempt counter is even consulted. This runs first.
32
+ *
33
+ * THIS FAILS OPEN, DELIBERATELY
34
+ *
35
+ * If Redis is unreachable, requests are allowed through with a throttled
36
+ * warning. That is the opposite of the choice PublicDashboardRateLimit makes
37
+ * for /master-password, and the difference is that there the counter IS the
38
+ * only thing bounding guesses, whereas here the expiry, the attempt counter,
39
+ * the rotation and the resend cooldown all live in Postgres and are all still
40
+ * in force. Failing closed would mean nobody can verify a new phone number
41
+ * during a Redis blip, in exchange for a control that is at that moment
42
+ * redundant with four others.
43
+ */
44
+ export var VerificationCodeRateLimitBucket;
45
+ (function (VerificationCodeRateLimitBucket) {
46
+ /* Submitting a code. The guessing surface. */
47
+ VerificationCodeRateLimitBucket["Verify"] = "verify";
48
+ /* Asking for a new code. The spending-somebody-else's-attention surface. */
49
+ VerificationCodeRateLimitBucket["Resend"] = "resend";
50
+ })(VerificationCodeRateLimitBucket || (VerificationCodeRateLimitBucket = {}));
51
+ export var VerificationCodeRateLimitScope;
52
+ (function (VerificationCodeRateLimitScope) {
53
+ /* One channel row, for one user. */
54
+ VerificationCodeRateLimitScope["Item"] = "item";
55
+ /* One signed-in user, across every row they own. Survives row rotation. */
56
+ VerificationCodeRateLimitScope["User"] = "user";
57
+ /* One client address, across every account. Survives account rotation. */
58
+ VerificationCodeRateLimitScope["Ip"] = "ip";
59
+ })(VerificationCodeRateLimitScope || (VerificationCodeRateLimitScope = {}));
60
+ export var VerificationCodeRateLimitOutcome;
61
+ (function (VerificationCodeRateLimitOutcome) {
62
+ VerificationCodeRateLimitOutcome["Allowed"] = "allowed";
63
+ VerificationCodeRateLimitOutcome["RateLimited"] = "rate-limited";
64
+ /* Redis is unreachable, so no limit can be honoured either way. */
65
+ VerificationCodeRateLimitOutcome["CounterUnavailable"] = "counter-unavailable";
66
+ })(VerificationCodeRateLimitOutcome || (VerificationCodeRateLimitOutcome = {}));
67
+ const parsePositiveIntFromEnv = (envKey, fallback) => {
68
+ const rawValue = process.env[envKey];
69
+ if (!rawValue) {
70
+ return fallback;
71
+ }
72
+ const parsedValue = parseInt(rawValue, 10);
73
+ if (!Number.isFinite(parsedValue) || parsedValue <= 0) {
74
+ return fallback;
75
+ }
76
+ return parsedValue;
77
+ };
78
+ /*
79
+ * Verify budget, over a window matching the code's own lifetime.
80
+ *
81
+ * Per item is 10 against a per-code attempt limit of 5, so it never fires
82
+ * before the durable counter does for a single honest code — it is there to
83
+ * bound the requests that arrive after the row is already locked out.
84
+ *
85
+ * Per user is the one that closes row rotation: 50 submissions per quarter
86
+ * hour across every channel row the account owns. A person adding a phone
87
+ * number and mistyping the code a few times is nowhere near it; a script
88
+ * creating rows to farm attempt budgets hits it after ten rows.
89
+ *
90
+ * Per address is higher than per user because a corporate NAT can put a whole
91
+ * office behind one address, and several colleagues onboarding at once is a
92
+ * real thing that must not be refused.
93
+ */
94
+ const VERIFY_BUCKET = {
95
+ windowSeconds: parsePositiveIntFromEnv("NOTIFICATION_VERIFICATION_RATE_LIMIT_WINDOW_SECONDS", 15 * 60),
96
+ perItemLimit: parsePositiveIntFromEnv("NOTIFICATION_VERIFICATION_RATE_LIMIT_PER_ITEM_PER_WINDOW", 10),
97
+ perUserLimit: parsePositiveIntFromEnv("NOTIFICATION_VERIFICATION_RATE_LIMIT_PER_USER_PER_WINDOW", 50),
98
+ perIpLimit: parsePositiveIntFromEnv("NOTIFICATION_VERIFICATION_RATE_LIMIT_PER_IP_PER_WINDOW", 150),
99
+ };
100
+ /*
101
+ * Resend budget. Tighter than verify, because each one of these is a message
102
+ * that arrives on somebody's phone and a line on somebody's bill. The
103
+ * per-item figure sits just above what the 60-second per-row cooldown allows
104
+ * in the window, so an honest user pressing "resend" whenever the cooldown
105
+ * lets them is never refused by this.
106
+ */
107
+ const RESEND_BUCKET = {
108
+ windowSeconds: parsePositiveIntFromEnv("NOTIFICATION_VERIFICATION_RESEND_RATE_LIMIT_WINDOW_SECONDS", 15 * 60),
109
+ perItemLimit: parsePositiveIntFromEnv("NOTIFICATION_VERIFICATION_RESEND_RATE_LIMIT_PER_ITEM_PER_WINDOW", 5),
110
+ perUserLimit: parsePositiveIntFromEnv("NOTIFICATION_VERIFICATION_RESEND_RATE_LIMIT_PER_USER_PER_WINDOW", 15),
111
+ perIpLimit: parsePositiveIntFromEnv("NOTIFICATION_VERIFICATION_RESEND_RATE_LIMIT_PER_IP_PER_WINDOW", 45),
112
+ };
113
+ const KEY_PREFIX = "notifverify:rl:";
114
+ /*
115
+ * Counter keys outlive their window by one full window, so a request landing
116
+ * on a boundary cannot read a key that was reclaimed mid-window.
117
+ */
118
+ const TTL_MULTIPLIER = 2;
119
+ /* Bounds a Redis key built from caller-supplied values. */
120
+ const MAX_KEY_SEGMENT_LENGTH = 64;
121
+ /* How often the "counter unavailable" condition may be logged, per bucket. */
122
+ const COUNTER_UNAVAILABLE_LOG_INTERVAL_MS = 60 * 1000;
123
+ class VerificationCodeRateLimit {
124
+ /*
125
+ * The client address to bill this request to.
126
+ *
127
+ * Uses the shared ClientIp helper, which reads X-Forwarded-For from the
128
+ * trusted right-hand end. Express.getClientIp takes the LEFTMOST entry,
129
+ * which the caller can set themselves — for a rate limiter that is fatal,
130
+ * because a fresh spoofed value per request is a fresh bucket per request
131
+ * and therefore no limit at all.
132
+ */
133
+ static resolveClientIp(req) {
134
+ const clientIp = resolveTrustedClientIp(req);
135
+ if (clientIp) {
136
+ return VerificationCodeRateLimit.sanitizeKeySegment(clientIp);
137
+ }
138
+ /*
139
+ * Everything with no resolvable address shares one bucket. That is the
140
+ * conservative direction: an unidentifiable caller should not be handed a
141
+ * private allowance.
142
+ */
143
+ return "unknown";
144
+ }
145
+ /*
146
+ * The signed-in user this request belongs to.
147
+ *
148
+ * These routes all sit behind UserMiddleware, so in practice this is always
149
+ * present. If it somehow is not, everything anonymous shares one bucket
150
+ * rather than each getting its own.
151
+ */
152
+ static resolveUserKey(req) {
153
+ var _a;
154
+ const userId = (_a = req === null || req === void 0 ? void 0 : req.userAuthorization) === null || _a === void 0 ? void 0 : _a.userId;
155
+ if (!userId) {
156
+ return "anonymous";
157
+ }
158
+ return VerificationCodeRateLimit.sanitizeKeySegment(userId.toString());
159
+ }
160
+ /*
161
+ * The channel row this request is about.
162
+ *
163
+ * Anything that is not a valid id collapses into one shared "invalid"
164
+ * bucket. That bounds Redis memory against a caller feeding junk ids, and
165
+ * it is the right grouping anyway: those requests cannot name a real row,
166
+ * so one small shared allowance between all of them is what we want.
167
+ */
168
+ static resolveItemKey(req) {
169
+ var _a;
170
+ const raw = (_a = req.body) === null || _a === void 0 ? void 0 : _a["itemId"];
171
+ if (typeof raw !== "string" || raw.trim().length === 0) {
172
+ return "none";
173
+ }
174
+ const value = raw.trim();
175
+ if (!ObjectID.isValidUUID(value)) {
176
+ return "invalid";
177
+ }
178
+ return value.toLowerCase();
179
+ }
180
+ static sanitizeKeySegment(value) {
181
+ return (value
182
+ .slice(0, MAX_KEY_SEGMENT_LENGTH)
183
+ /*
184
+ * Redis keys are binary safe, but a predictable charset keeps
185
+ * operational tooling (SCAN patterns, dashboards) sane.
186
+ */
187
+ .replace(/[^a-zA-Z0-9._:%\-[\]]/g, "_"));
188
+ }
189
+ static getBucketConfig(bucket) {
190
+ return bucket === VerificationCodeRateLimitBucket.Resend
191
+ ? RESEND_BUCKET
192
+ : VERIFY_BUCKET;
193
+ }
194
+ /*
195
+ * Increment all three counters for this request and decide.
196
+ *
197
+ * All three INCRs go out in one pipeline so the common path is a single
198
+ * round trip; the EXPIRE follow-ups only happen on the request that created
199
+ * a key.
200
+ *
201
+ * Every counter is incremented on every request, INCLUDING a rejected one.
202
+ * That is standard fixed-window behaviour and it is deliberate: a caller
203
+ * who keeps hammering keeps their window pinned rather than being handed a
204
+ * fresh allowance for free.
205
+ */
206
+ static async consume(data) {
207
+ const client = Redis.getClient();
208
+ if (!client || !Redis.isConnected()) {
209
+ return { outcome: VerificationCodeRateLimitOutcome.CounterUnavailable };
210
+ }
211
+ const config = VerificationCodeRateLimit.getBucketConfig(data.bucket);
212
+ const windowMs = config.windowSeconds * 1000;
213
+ const windowIndex = Math.floor(Date.now() / windowMs);
214
+ /*
215
+ * The item counter is keyed on item AND user. Two users cannot own the
216
+ * same row, so this changes nothing about correctness — but it means a
217
+ * caller cannot deny a row's real owner their allowance by burning it
218
+ * against an id they do not own.
219
+ */
220
+ const itemCounterKey = `${KEY_PREFIX}${data.bucket}:t:${data.userKey}:${data.itemKey}:${windowIndex}`;
221
+ const userCounterKey = `${KEY_PREFIX}${data.bucket}:u:${data.userKey}:${windowIndex}`;
222
+ const ipCounterKey = `${KEY_PREFIX}${data.bucket}:i:${data.clientIp}:${windowIndex}`;
223
+ try {
224
+ const pipelineResults = (await client
225
+ .pipeline()
226
+ .incr(itemCounterKey)
227
+ .incr(userCounterKey)
228
+ .incr(ipCounterKey)
229
+ .exec());
230
+ if (!pipelineResults || pipelineResults.length < 3) {
231
+ throw new Error("Rate limit pipeline returned no result");
232
+ }
233
+ const itemCount = VerificationCodeRateLimit.readCounterResult(pipelineResults[0]);
234
+ const userCount = VerificationCodeRateLimit.readCounterResult(pipelineResults[1]);
235
+ const ipCount = VerificationCodeRateLimit.readCounterResult(pipelineResults[2]);
236
+ /*
237
+ * Set the expiry only on the write that created the key. Re-issuing
238
+ * EXPIRE on every increment would slide the window forward for as long
239
+ * as the load continues, so a caller who tripped the limit once could
240
+ * never recover.
241
+ */
242
+ const ttlSeconds = config.windowSeconds * TTL_MULTIPLIER;
243
+ const keysToExpire = [];
244
+ if (itemCount === 1) {
245
+ keysToExpire.push(itemCounterKey);
246
+ }
247
+ if (userCount === 1) {
248
+ keysToExpire.push(userCounterKey);
249
+ }
250
+ if (ipCount === 1) {
251
+ keysToExpire.push(ipCounterKey);
252
+ }
253
+ if (keysToExpire.length > 0) {
254
+ const expirePipeline = client.pipeline();
255
+ for (const key of keysToExpire) {
256
+ expirePipeline.expire(key, ttlSeconds);
257
+ }
258
+ await expirePipeline.exec();
259
+ }
260
+ const retryAfterSeconds = VerificationCodeRateLimit.getSecondsUntilWindowEnd(config.windowSeconds);
261
+ /*
262
+ * Reported most specific first, because that is the most useful thing
263
+ * to see in a log line when more than one is over.
264
+ */
265
+ if (itemCount > config.perItemLimit) {
266
+ return {
267
+ outcome: VerificationCodeRateLimitOutcome.RateLimited,
268
+ retryAfterSeconds,
269
+ scope: VerificationCodeRateLimitScope.Item,
270
+ isFirstRejectionInWindow: itemCount === config.perItemLimit + 1,
271
+ };
272
+ }
273
+ if (userCount > config.perUserLimit) {
274
+ return {
275
+ outcome: VerificationCodeRateLimitOutcome.RateLimited,
276
+ retryAfterSeconds,
277
+ scope: VerificationCodeRateLimitScope.User,
278
+ isFirstRejectionInWindow: userCount === config.perUserLimit + 1,
279
+ };
280
+ }
281
+ if (ipCount > config.perIpLimit) {
282
+ return {
283
+ outcome: VerificationCodeRateLimitOutcome.RateLimited,
284
+ retryAfterSeconds,
285
+ scope: VerificationCodeRateLimitScope.Ip,
286
+ isFirstRejectionInWindow: ipCount === config.perIpLimit + 1,
287
+ };
288
+ }
289
+ return { outcome: VerificationCodeRateLimitOutcome.Allowed };
290
+ }
291
+ catch (err) {
292
+ /*
293
+ * Throttled: whatever broke Redis is unlikely to have broken it for one
294
+ * request only, and a per-request log line buries the incident it is
295
+ * reporting.
296
+ */
297
+ if (VerificationCodeRateLimit.shouldLogCounterUnavailable(data.bucket)) {
298
+ logger.warn(`VerificationCodeRateLimit: counter failed for ${data.bucket} request from user ${data.userKey}`);
299
+ logger.warn(err);
300
+ }
301
+ return { outcome: VerificationCodeRateLimitOutcome.CounterUnavailable };
302
+ }
303
+ }
304
+ static readCounterResult(result) {
305
+ if (!result) {
306
+ throw new Error("Rate limit counter returned no result");
307
+ }
308
+ const [error, value] = result;
309
+ if (error) {
310
+ throw error;
311
+ }
312
+ if (typeof value !== "number") {
313
+ throw new Error("Rate limit counter returned a non-numeric value");
314
+ }
315
+ return value;
316
+ }
317
+ /*
318
+ * Remaining seconds in the current fixed window, so every rejected caller
319
+ * is told to come back when the window actually rolls rather than all
320
+ * backing off by the same constant and re-colliding.
321
+ */
322
+ static getSecondsUntilWindowEnd(windowSeconds) {
323
+ const windowMs = windowSeconds * 1000;
324
+ const msIntoWindow = Date.now() % windowMs;
325
+ return Math.max(1, Math.ceil((windowMs - msIntoWindow) / 1000));
326
+ }
327
+ /*
328
+ * Express middleware. Register AFTER UserMiddleware — the user counter is
329
+ * the one that closes row rotation, and it needs the session — but before
330
+ * the route handler, so a flood is refused before it costs a row read.
331
+ */
332
+ static getMiddleware(bucket) {
333
+ return async (req, res, next) => {
334
+ const itemKey = VerificationCodeRateLimit.resolveItemKey(req);
335
+ const userKey = VerificationCodeRateLimit.resolveUserKey(req);
336
+ const clientIp = VerificationCodeRateLimit.resolveClientIp(req);
337
+ const decision = await VerificationCodeRateLimit.consume({
338
+ itemKey,
339
+ userKey,
340
+ clientIp,
341
+ bucket,
342
+ });
343
+ if (decision.outcome === VerificationCodeRateLimitOutcome.RateLimited) {
344
+ if (decision.retryAfterSeconds) {
345
+ VerificationCodeRateLimit.setRetryAfterHeader(res, decision.retryAfterSeconds);
346
+ }
347
+ if (decision.isFirstRejectionInWindow) {
348
+ logger.warn(`VerificationCodeRateLimit: rejected ${bucket} request for item ${itemKey} from user ${userKey} at ${clientIp} (${decision.scope} limit)`);
349
+ }
350
+ return Response.sendErrorResponse(req, res, new TooManyRequestsException(bucket === VerificationCodeRateLimitBucket.Resend
351
+ ? "Too many verification codes requested. Please try again later."
352
+ : "Too many verification attempts. Please try again later."));
353
+ }
354
+ if (decision.outcome === VerificationCodeRateLimitOutcome.CounterUnavailable) {
355
+ /*
356
+ * Fails open. See the note at the top of this file: the expiry, the
357
+ * attempt counter, the rotation and the resend cooldown are all in
358
+ * Postgres and all still in force, so allowing the request through
359
+ * costs a bounded amount of extra attempt budget rather than an
360
+ * unlimited guessing oracle.
361
+ */
362
+ if (VerificationCodeRateLimit.shouldLogCounterUnavailable(bucket)) {
363
+ logger.warn(`VerificationCodeRateLimit: rate limit counter unavailable, allowing ${bucket} requests unthrottled`);
364
+ }
365
+ }
366
+ return next();
367
+ };
368
+ }
369
+ /*
370
+ * A Redis outage means EVERY request takes the unavailable path, so an
371
+ * unguarded log line there is one per request for as long as the outage
372
+ * lasts. One line per bucket per interval makes the condition visible
373
+ * without burying everything else.
374
+ */
375
+ static shouldLogCounterUnavailable(bucket) {
376
+ const now = Date.now();
377
+ const lastLoggedAt = VerificationCodeRateLimit.counterUnavailableLastLoggedAt.get(bucket) || 0;
378
+ if (now - lastLoggedAt < COUNTER_UNAVAILABLE_LOG_INTERVAL_MS) {
379
+ return false;
380
+ }
381
+ VerificationCodeRateLimit.counterUnavailableLastLoggedAt.set(bucket, now);
382
+ return true;
383
+ }
384
+ static setRetryAfterHeader(res, retryAfterSeconds) {
385
+ const setHeader = res["setHeader"];
386
+ if (typeof setHeader === "function") {
387
+ setHeader.call(res, "Retry-After", String(retryAfterSeconds));
388
+ }
389
+ }
390
+ }
391
+ VerificationCodeRateLimit.counterUnavailableLastLoggedAt = new Map();
392
+ export default VerificationCodeRateLimit;
393
+ //# sourceMappingURL=VerificationCodeRateLimit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VerificationCodeRateLimit.js","sourceRoot":"","sources":["../../../../Server/Middleware/VerificationCodeRateLimit.ts"],"names":[],"mappings":"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"}
@@ -1000,6 +1000,129 @@ export default class AnalyticsDatabaseService extends BaseService {
1000
1000
  */
1001
1001
  return Object.assign(Object.assign({}, sort), { _id: direction });
1002
1002
  }
1003
+ /**
1004
+ * Bounds the rows an `ORDER BY ... , _id` find has to sort, without
1005
+ * changing which rows it returns.
1006
+ *
1007
+ * ClickHouse can read in sorting-key order — and stop early — only when the
1008
+ * ORDER BY lines up with the table's physical key. The `_id` tiebreaker
1009
+ * appended by `toPaginationStableSort` is deliberately NOT a sorting-key
1010
+ * column, so it denies that plan: the engine reads every row matching the
1011
+ * WHERE, sorts the lot in memory, then discards all but one page. On the
1012
+ * Logs viewer that turned a 100-row page into a full-window scan and tripped
1013
+ * the 3 GiB `max_memory_usage` ceiling (Code 241, surfacing as
1014
+ * "Server Error").
1015
+ *
1016
+ * Weakening the tiebreaker would reintroduce the skip/repeat paging bug it
1017
+ * was added to fix, so bound the input instead. `min(k)` over the top
1018
+ * `skip + limit` values of the leading sort key `k` is a rank statistic of
1019
+ * k's MULTISET: it does not depend on which of several tied rows the inner
1020
+ * LIMIT happened to keep. Every row that could reach position `skip + limit`
1021
+ * satisfies `k >= min(k)`, and every row tied at the boundary value is
1022
+ * admitted — so the page is exactly the page the unbounded query returns.
1023
+ * That is what makes this a pure cost change: every gate below is a
1024
+ * performance gate, and getting one wrong can only make a query slower,
1025
+ * never lose or repeat a row.
1026
+ *
1027
+ * The inner pass reads one narrow key column in physical order and stops at
1028
+ * `skip + limit` rows, so it costs far less than the wide outer read it
1029
+ * saves.
1030
+ *
1031
+ * `min()` is nested over a subquery rather than taken as the N-th value via
1032
+ * `ORDER BY k DESC LIMIT 1 OFFSET n - 1` on purpose: on a final page with
1033
+ * fewer than `skip + limit` matching rows the latter returns no row, the
1034
+ * scalar is NULL, `k >= NULL` is NULL, and the page comes back empty.
1035
+ * `min()` over the available rows degrades to the smallest matching value.
1036
+ */
1037
+ toSortKeyBoundaryFilter(findBy, sort, options) {
1038
+ var _a;
1039
+ /*
1040
+ * Under GROUP BY the predicate would restrict the aggregation INPUT
1041
+ * rather than the page, so it would change results. Mirrors the
1042
+ * tiebreaker's own exemption, leaving grouped finds byte-identical.
1043
+ */
1044
+ if (options.hasGroupBy) {
1045
+ return null;
1046
+ }
1047
+ /*
1048
+ * Without an `_id` column there is no off-key tiebreaker — the six
1049
+ * `includeBaseColumns: false` aggregate targets — so the ORDER BY is
1050
+ * already key-aligned and the bound would be pure overhead. Same
1051
+ * condition toPaginationStableSort bails on.
1052
+ */
1053
+ const hasIdColumn = this.model.tableColumns.some((column) => {
1054
+ return column.key === "_id";
1055
+ });
1056
+ if (!hasIdColumn) {
1057
+ return null;
1058
+ }
1059
+ const leadingSortKey = Object.keys(sort || {})[0];
1060
+ if (!leadingSortKey) {
1061
+ return null;
1062
+ }
1063
+ /*
1064
+ * Only a column in the physical sorting key can be read in order, so
1065
+ * only there can the off-key `_id` term have cost anything. Off-key
1066
+ * leads (e.g. Log by `severityText`) already plan a bounded top-N and
1067
+ * an extra pass would be pure waste.
1068
+ */
1069
+ if (!this.model.sortKeys.includes(leadingSortKey)) {
1070
+ return null;
1071
+ }
1072
+ /*
1073
+ * A non-required column is `Nullable(...)` in the DDL, and `k >= NULL`
1074
+ * is NULL — the predicate would DROP those rows rather than just
1075
+ * narrowing the scan. Fail safe to today's behavior.
1076
+ */
1077
+ const leadingSortColumn = this.model.getTableColumn(leadingSortKey);
1078
+ if (!leadingSortColumn || !leadingSortColumn.required) {
1079
+ return null;
1080
+ }
1081
+ /*
1082
+ * `findOneById` funnels a point lookup through `findOneBy` carrying the
1083
+ * model's default sort. At most one row can match, so bounding it would
1084
+ * double a query that has no ordering problem to begin with.
1085
+ */
1086
+ if ((_a = findBy.query) === null || _a === void 0 ? void 0 : _a["_id"]) {
1087
+ return null;
1088
+ }
1089
+ /*
1090
+ * The predicate is valid only BECAUSE of LIMIT/OFFSET: it admits the
1091
+ * rows that can reach position `skip + limit` and no more. Guards the
1092
+ * `new PositiveNumber(undefined)` -> NaN path that exists upstream.
1093
+ */
1094
+ const limit = Number(findBy.limit);
1095
+ const skip = Number(findBy.skip);
1096
+ if (!Number.isFinite(limit) || !Number.isFinite(skip)) {
1097
+ return null;
1098
+ }
1099
+ const boundaryRowCount = skip + limit;
1100
+ if (boundaryRowCount <= 0) {
1101
+ return null;
1102
+ }
1103
+ const isDescending = sort[leadingSortKey] !==
1104
+ SortOrder.Ascending;
1105
+ /*
1106
+ * The bound must be computed over the same row set the outer query
1107
+ * filters on, so the WHERE is regenerated rather than shared: appending
1108
+ * one Statement into two places would bind its parameters twice.
1109
+ */
1110
+ const boundaryWhereStatement = this.statementGenerator.toWhereStatement(findBy.query);
1111
+ const boundaryStatement = SQL ` AND ${leadingSortKey} `;
1112
+ boundaryStatement.append(isDescending ? SQL `>=` : SQL `<=`);
1113
+ boundaryStatement.append(isDescending
1114
+ ? SQL ` (SELECT min(${leadingSortKey}) FROM (SELECT ${leadingSortKey} FROM ${options.databaseName}.${this.model.tableName} WHERE TRUE `
1115
+ : SQL ` (SELECT max(${leadingSortKey}) FROM (SELECT ${leadingSortKey} FROM ${options.databaseName}.${this.model.tableName} WHERE TRUE `);
1116
+ boundaryStatement.append(boundaryWhereStatement);
1117
+ boundaryStatement.append(this.getRetentionReadFilter());
1118
+ boundaryStatement.append(SQL ` ORDER BY ${leadingSortKey} `);
1119
+ boundaryStatement.append(isDescending ? SQL `DESC` : SQL `ASC`);
1120
+ boundaryStatement.append(SQL ` LIMIT ${{
1121
+ value: boundaryRowCount,
1122
+ type: TableColumnType.Number,
1123
+ }}))`);
1124
+ return boundaryStatement;
1125
+ }
1003
1126
  toFindStatement(findBy) {
1004
1127
  if (!this.database) {
1005
1128
  this.useDefaultDatabase();
@@ -1016,6 +1139,16 @@ export default class AnalyticsDatabaseService extends BaseService {
1016
1139
  const sortStatement = this.statementGenerator.toSortStatement(this.toPaginationStableSort(findBy.sort, {
1017
1140
  hasGroupBy: Boolean(groupByStatement),
1018
1141
  }));
1142
+ /*
1143
+ * Keeps the `_id` tiebreaker affordable. Result-preserving by
1144
+ * construction, so it is appended to the WHERE without touching the
1145
+ * ORDER BY above. Null whenever the bound cannot help or cannot be
1146
+ * proven safe.
1147
+ */
1148
+ const sortKeyBoundaryStatement = this.toSortKeyBoundaryFilter(findBy, findBy.sort, {
1149
+ hasGroupBy: Boolean(groupByStatement),
1150
+ databaseName: databaseName,
1151
+ });
1019
1152
  const statement = SQL ``;
1020
1153
  statement.append(SQL `SELECT `.append(select.statement));
1021
1154
  statement.append(SQL ` FROM ${databaseName}.${this.model.tableName}`);
@@ -1023,6 +1156,9 @@ export default class AnalyticsDatabaseService extends BaseService {
1023
1156
  .append(SQL ` WHERE TRUE `)
1024
1157
  .append(whereStatement)
1025
1158
  .append(this.getRetentionReadFilter());
1159
+ if (sortKeyBoundaryStatement) {
1160
+ statement.append(sortKeyBoundaryStatement);
1161
+ }
1026
1162
  if (groupByStatement) {
1027
1163
  statement.append(SQL ` GROUP BY `).append(groupByStatement);
1028
1164
  }