@oneuptime/common 12.0.33 → 12.0.34

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 (652) hide show
  1. package/Models/AnalyticsModels/RumSession.ts +117 -1
  2. package/Models/AnalyticsModels/RumSessionChunk.ts +13 -0
  3. package/Models/DatabaseModels/AlertCustomField.ts +77 -3
  4. package/Models/DatabaseModels/ApiKeyPermission.ts +3 -27
  5. package/Models/DatabaseModels/IncidentCustomField.ts +77 -3
  6. package/Models/DatabaseModels/InventoryItemCustomField.ts +77 -3
  7. package/Models/DatabaseModels/MonitorCustomField.ts +77 -3
  8. package/Models/DatabaseModels/OnCallDutyPolicyCustomField.ts +77 -3
  9. package/Models/DatabaseModels/RumApplication.ts +6 -6
  10. package/Models/DatabaseModels/ScheduledMaintenanceCustomField.ts +77 -3
  11. package/Models/DatabaseModels/StatusPageCustomField.ts +77 -3
  12. package/Models/DatabaseModels/TeamCustomField.ts +77 -3
  13. package/Models/DatabaseModels/TeamMember.ts +0 -9
  14. package/Models/DatabaseModels/TeamMemberCustomField.ts +77 -3
  15. package/Models/DatabaseModels/TeamPermission.ts +3 -24
  16. package/Models/DatabaseModels/TelemetryIngestionKey.ts +260 -0
  17. package/Models/DatabaseModels/UserTelegram.ts +0 -4
  18. package/Scripts/benchmark-fanin-capacity.js +181 -0
  19. package/Server/API/TelemetryAPI.ts +1284 -164
  20. package/Server/API/UserNotificationSettingAPI.ts +55 -0
  21. package/Server/API/UserTelegramAPI.ts +48 -4
  22. package/Server/EnvironmentConfig.ts +35 -2
  23. package/Server/Infrastructure/Postgres/SchemaMigrations/1791300000000-AddTelemetryIngestionKeyType.ts +91 -0
  24. package/Server/Infrastructure/Postgres/SchemaMigrations/1791400000000-SessionReplayRecordEverySessionByDefault.ts +67 -0
  25. package/Server/Infrastructure/Postgres/SchemaMigrations/1791500000000-WidenCustomFieldDropdownOptions.ts +139 -0
  26. package/Server/Infrastructure/Postgres/SchemaMigrations/1791600000000-AddCustomFieldValueMapping.ts +121 -0
  27. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +8 -0
  28. package/Server/Infrastructure/QueueWorker.ts +20 -14
  29. package/Server/Infrastructure/Semaphore.ts +2 -0
  30. package/Server/Middleware/TelemetryIngest.ts +453 -7
  31. package/Server/Services/AccessTokenService.ts +1 -0
  32. package/Server/Services/AlertCustomFieldService.ts +98 -0
  33. package/Server/Services/AlertService.ts +37 -0
  34. package/Server/Services/ApiKeyPermissionService.ts +461 -29
  35. package/Server/Services/CustomFieldMappingService.ts +879 -0
  36. package/Server/Services/GlobalConfigService.ts +194 -0
  37. package/Server/Services/IncidentCustomFieldService.ts +98 -0
  38. package/Server/Services/IncidentService.ts +35 -0
  39. package/Server/Services/MetricService.ts +194 -0
  40. package/Server/Services/MonitorService.ts +32 -0
  41. package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +78 -25
  42. package/Server/Services/ProjectService.ts +22 -0
  43. package/Server/Services/RoutineEmailSettingsService.ts +73 -0
  44. package/Server/Services/RumSessionReplayViewService.ts +104 -24
  45. package/Server/Services/ScheduledMaintenanceCustomFieldService.ts +98 -0
  46. package/Server/Services/ScheduledMaintenanceService.ts +32 -0
  47. package/Server/Services/TeamMemberService.ts +78 -0
  48. package/Server/Services/TeamPermissionService.ts +235 -3
  49. package/Server/Services/TelemetryIngestionKeyService.ts +722 -19
  50. package/Server/Services/UserNotificationSettingService.ts +34 -6
  51. package/Server/Services/UserTelegramService.ts +326 -5
  52. package/Server/Types/Database/QueryHelper.ts +2 -0
  53. package/Server/Utils/APIKey/AccessPermission.ts +5 -2
  54. package/Server/Utils/CustomField/CustomFieldDefinitionMappingHooks.ts +54 -0
  55. package/Server/Utils/CustomField/CustomFieldMappingRegistry.ts +415 -0
  56. package/Server/Utils/CustomField/CustomFieldMappingValidator.ts +335 -0
  57. package/Server/Utils/DataSource/EgressGuard.ts +177 -8
  58. package/Server/Utils/EmailRollup/EmailRollupConstants.ts +38 -5
  59. package/Server/Utils/EmailRollup/EmailRollupFlushRunner.ts +57 -4
  60. package/Server/Utils/FrontendEnvironment.ts +40 -0
  61. package/Server/Utils/LogRedaction.ts +20 -0
  62. package/Server/Utils/Logger.ts +11 -0
  63. package/Server/Utils/Monitor/Criteria/CompareCriteria.ts +338 -77
  64. package/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.ts +30 -4
  65. package/Server/Utils/Monitor/MonitorAlert.ts +29 -6
  66. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +110 -15
  67. package/Server/Utils/Monitor/MonitorIncident.ts +22 -6
  68. package/Server/Utils/Monitor/MonitorTemplateUtil.ts +29 -0
  69. package/Server/Utils/Monitor/SeriesContextEnricher.ts +304 -0
  70. package/Server/Utils/SSRFProtection.ts +217 -10
  71. package/Server/Utils/SessionReplay/SessionReplayGateCache.ts +239 -138
  72. package/Server/Utils/SessionReplay/SessionReplayHealthCounters.ts +305 -0
  73. package/Server/Utils/SessionReplay/SessionReplayReadService.ts +1430 -289
  74. package/Server/Utils/StartServer.ts +2 -17
  75. package/Server/Utils/TelegramVerificationToken.ts +185 -0
  76. package/Server/Utils/Telemetry/PinServiceName.ts +197 -0
  77. package/Server/Utils/Telemetry/TelemetryFanInWriter.ts +38 -16
  78. package/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.ts +92 -0
  79. package/Server/Utils/Telemetry/TelemetryIngestionKeyRateLimiter.ts +217 -0
  80. package/Server/Utils/VM/VMAPI.ts +1 -0
  81. package/Server/Utils/VM/VMRunner.ts +975 -95
  82. package/Tests/App/AdminDashboard/AdminHeaderSmallScreens.test.tsx +202 -0
  83. package/Tests/App/Dashboard/DashboardHeaderSmallScreens.test.tsx +404 -0
  84. package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +468 -0
  85. package/Tests/App/Dashboard/NotificationEmailPreferences.test.tsx +399 -0
  86. package/Tests/App/StatusPage/StatusPageLastUpdated.test.tsx +263 -0
  87. package/Tests/App/StatusPage/StatusPageOverviewLiveAndSearch.test.tsx +753 -0
  88. package/Tests/App/StatusPage/StatusPageResourceSearchBox.test.tsx +224 -0
  89. package/Tests/Models/AnalyticsModels/RumSessionReplayColumns.test.ts +262 -0
  90. package/Tests/Models/CustomFieldMappingColumns.test.ts +166 -0
  91. package/Tests/Models/DatabaseModels/SessionReplayModels.test.ts +20 -6
  92. package/Tests/ResponsiveVisibility.test.ts +115 -0
  93. package/Tests/ResponsiveVisibility.ts +183 -0
  94. package/Tests/Server/API/SessionReplayAPI.test.ts +1940 -216
  95. package/Tests/Server/API/UserNotificationSettingAPI.test.ts +186 -0
  96. package/Tests/Server/API/UserTelegramAPISecurity.test.ts +231 -0
  97. package/Tests/Server/EnvironmentConfigFrontendSecurity.test.ts +234 -0
  98. package/Tests/Server/Infrastructure/Postgres/CustomFieldValueMappingMigration.test.ts +202 -0
  99. package/Tests/Server/Infrastructure/Postgres/InventoryItemArchiveMigration.test.ts +41 -0
  100. package/Tests/Server/Infrastructure/Postgres/SessionReplayRecordEverySessionByDefaultMigration.test.ts +169 -0
  101. package/Tests/Server/Infrastructure/QueueWorkerTimeout.test.ts +210 -0
  102. package/Tests/Server/Infrastructure/TelemetryExporterDeploymentConfig.test.ts +130 -0
  103. package/Tests/Server/Middleware/ProjectAuthorizationApiKeyMiddleware.test.ts +4 -1
  104. package/Tests/Server/Middleware/TelemetryIngestBrowserKey.test.ts +1163 -0
  105. package/Tests/Server/Middleware/TelemetryIngestTokenLog.test.ts +5 -3
  106. package/Tests/Server/Services/AddTelemetryIngestionKeyTypeMigration.test.ts +555 -0
  107. package/Tests/Server/Services/ApiKeyPermissionSecurity.test.ts +678 -0
  108. package/Tests/Server/Services/ApiKeyPermissionService.test.ts +276 -28
  109. package/Tests/Server/Services/CustomFieldDropdownOptionsColumnWidth.test.ts +431 -0
  110. package/Tests/Server/Services/CustomFieldMappingService.test.ts +850 -0
  111. package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +32 -0
  112. package/Tests/Server/Services/GlobalConfigService.test.ts +414 -1
  113. package/Tests/Server/Services/MetricRawEntityKeyPrune.test.ts +592 -0
  114. package/Tests/Server/Services/NetworkDeviceAutoImportRuleEngineService.test.ts +226 -1
  115. package/Tests/Server/Services/RoutineEmailSettingsPostgres.test.ts +329 -0
  116. package/Tests/Server/Services/RumSessionReplayViewService.test.ts +267 -0
  117. package/Tests/Server/Services/TeamMemberAutoAcceptInvitation.test.ts +9 -0
  118. package/Tests/Server/Services/TeamMemberInviteRegistrationToken.test.ts +9 -0
  119. package/Tests/Server/Services/TeamPrivilegeEscalation.test.ts +834 -0
  120. package/Tests/Server/Services/TelemetryIngestionKeyPolicyResolution.test.ts +814 -0
  121. package/Tests/Server/Services/TelemetryIngestionKeyValidation.test.ts +998 -0
  122. package/Tests/Server/Services/UserNotificationSettingRollupRouting.test.ts +141 -0
  123. package/Tests/Server/Services/UserNotificationSettingWorkspaceChannels.test.ts +18 -10
  124. package/Tests/Server/Services/UserTelegramVerificationSecurity.test.ts +688 -0
  125. package/Tests/Server/Utils/AI/SRE/Insights/FixRouting.test.ts +497 -0
  126. package/Tests/Server/Utils/AI/Toolbox/Serializer.test.ts +383 -0
  127. package/Tests/Server/Utils/APIKey/AccessPermission.test.ts +7 -3
  128. package/Tests/Server/Utils/AnalyticsDatabase/ClusterConfig.test.ts +315 -0
  129. package/Tests/Server/Utils/CustomField/CustomFieldMappingValidator.test.ts +437 -0
  130. package/Tests/Server/Utils/DataSource/EgressGuard.test.ts +300 -11
  131. package/Tests/Server/Utils/EmailRollup/EmailRollupBurstWindow.test.ts +83 -0
  132. package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerBehaviour.test.ts +1 -1
  133. package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerPreferences.test.ts +362 -0
  134. package/Tests/Server/Utils/EmailRollup/EmailRollupTestHarness.ts +77 -1
  135. package/Tests/Server/Utils/FrontendEnvironment.test.ts +190 -0
  136. package/Tests/Server/Utils/LogRedaction.test.ts +26 -0
  137. package/Tests/Server/Utils/LoggerCredentialLeak.test.ts +23 -9
  138. package/Tests/Server/Utils/Monitor/Criteria/CompareCriteriaAggregation.test.ts +584 -0
  139. package/Tests/Server/Utils/Monitor/Criteria/IncomingRequestHeaderCriteria.test.ts +236 -0
  140. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluator.test.ts +437 -0
  141. package/Tests/Server/Utils/Monitor/MonitorTemplateUtilSeriesContext.test.ts +176 -0
  142. package/Tests/Server/Utils/Monitor/SeriesContextEnricher.test.ts +356 -0
  143. package/Tests/Server/Utils/SSRFProtectionCloudServiceAddresses.test.ts +595 -0
  144. package/Tests/Server/Utils/SessionReplay/SessionReplayGateCachePolicy.test.ts +198 -1
  145. package/Tests/Server/Utils/SessionReplay/SessionReplayHealthCounters.test.ts +453 -0
  146. package/Tests/Server/Utils/SessionReplay/SessionReplayReadServiceQueries.test.ts +1378 -0
  147. package/Tests/Server/Utils/SessionReplayOriginAllowListRefactor.test.ts +420 -0
  148. package/Tests/Server/Utils/TelegramVerificationToken.test.ts +253 -0
  149. package/Tests/Server/Utils/Telemetry/PinServiceName.test.ts +666 -0
  150. package/Tests/Server/Utils/Telemetry/TelemetryFanInWriterCapacity.test.ts +458 -0
  151. package/Tests/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.test.ts +424 -0
  152. package/Tests/Server/Utils/Telemetry/TelemetryIngestionKeyRateLimiter.test.ts +528 -0
  153. package/Tests/Server/Utils/TelemetryExporterEnvironment.test.ts +56 -0
  154. package/Tests/Server/Utils/VM/VMRunnerHostBridgeLatency.test.ts +74 -0
  155. package/Tests/Server/Utils/VM/VMRunnerPrivateNetworkWiring.test.ts +100 -7
  156. package/Tests/Server/Utils/VM/VMRunnerSsrf.test.ts +1176 -6
  157. package/Tests/Types/CustomField/CustomFieldMappingCatalog.test.ts +220 -0
  158. package/Tests/Types/CustomField/CustomFieldValueMapping.test.ts +348 -0
  159. package/Tests/Types/JSONFunctions.test.ts +260 -0
  160. package/Tests/Types/Monitor/CephAlertTemplates.test.ts +422 -53
  161. package/Tests/Types/Monitor/DockerAlertTemplates.test.ts +495 -15
  162. package/Tests/Types/Monitor/DockerSwarmAlertTemplates.test.ts +191 -45
  163. package/Tests/Types/Monitor/HostAlertTemplates.test.ts +370 -42
  164. package/Tests/Types/Monitor/IotAlertTemplates.test.ts +375 -20
  165. package/Tests/Types/Monitor/KubernetesAlertTemplates.test.ts +636 -42
  166. package/Tests/Types/Monitor/KubernetesMetricCatalog.test.ts +189 -0
  167. package/Tests/Types/Monitor/KubernetesTemplateGroupByKeys.test.ts +95 -14
  168. package/Tests/Types/Monitor/PodmanAlertTemplates.test.ts +190 -21
  169. package/Tests/Types/Monitor/ProxmoxAlertTemplates.test.ts +352 -22
  170. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationAlertDebuggability.test.ts +363 -0
  171. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +93 -18
  172. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.test.ts +259 -0
  173. package/Tests/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.test.ts +476 -0
  174. package/Tests/Types/Monitor/RumAlertTemplates.test.ts +136 -0
  175. package/Tests/Types/Monitor/SeriesContext/SeriesDebugHints.test.ts +661 -0
  176. package/Tests/Types/Monitor/SeriesContext/SeriesLabelDisplay.test.ts +507 -0
  177. package/Tests/Types/Monitor/ServiceAlertTemplates.test.ts +270 -0
  178. package/Tests/Types/Monitor/TemplateGroupByKeys.test.ts +38 -10
  179. package/Tests/Types/Monitor/Utils/RecommendationCriteriaAssertions.ts +102 -0
  180. package/Tests/Types/NotificationSetting/RoutineEmailEvents.test.ts +47 -0
  181. package/Tests/Types/Rum/SessionReplayApiContracts.test.ts +608 -0
  182. package/Tests/Types/Rum/SessionReplayCustomEvents.test.ts +434 -0
  183. package/Tests/Types/WebsiteRequest.test.ts +285 -3
  184. package/Tests/UI/Components/Charts/ChartBucketIdentity.test.ts +16 -3
  185. package/Tests/UI/Components/Charts/ChartTrailingBucketGap.test.ts +691 -0
  186. package/Tests/UI/Components/ComponentsModal.test.tsx +12 -4
  187. package/Tests/UI/Components/ComponentsModalUsability.test.tsx +518 -0
  188. package/Tests/UI/Components/CustomFields/CustomFieldsDetailMapping.test.tsx +324 -0
  189. package/Tests/UI/Components/CustomFields/MapFromCustomFieldInput.test.tsx +176 -0
  190. package/Tests/UI/Components/Graphs/DayUptimeGraph.test.tsx +484 -0
  191. package/Tests/UI/Components/HeaderRightRail.test.tsx +157 -0
  192. package/Tests/UI/Components/IconDropdownItem.test.tsx +102 -0
  193. package/Tests/UI/Components/JSONTablePrototypePollution.test.tsx +117 -0
  194. package/Tests/UI/Components/KeyboardShortcutsModal.test.tsx +214 -0
  195. package/Tests/UI/Components/ModelTable/ModelTableWrapContent.test.tsx +561 -0
  196. package/Tests/UI/Components/MonitorGraphs/UptimeBarDayModal.test.tsx +302 -0
  197. package/Tests/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.test.ts +28 -12
  198. package/Tests/UI/Components/ShortcutDialogGuard.test.tsx +74 -0
  199. package/Tests/UI/Components/StatusPage/ResourceGroupSectionAutoExpand.test.tsx +248 -0
  200. package/Tests/UI/Components/TableCellWrapping.test.tsx +625 -0
  201. package/Tests/UI/Components/TableLoadingStates.test.tsx +205 -0
  202. package/Tests/UI/Components/Workflow/NodePlacement.test.ts +148 -0
  203. package/Tests/UI/Components/Workflow/Workflow.test.tsx +981 -0
  204. package/Tests/UI/ConfigBrowserTelemetry.test.ts +70 -0
  205. package/Tests/UI/Rum/ChunkLoader.test.ts +1036 -2
  206. package/Tests/UI/Rum/FidelityNotices.test.ts +187 -0
  207. package/Tests/UI/Rum/InactivityMap.test.ts +341 -0
  208. package/Tests/UI/Rum/PrivacySummaryCard.test.tsx +259 -0
  209. package/Tests/UI/Rum/RecordingHealthCard.test.tsx +855 -0
  210. package/Tests/UI/Rum/RecordingHealthStrip.test.tsx +594 -0
  211. package/Tests/UI/Rum/ReplayCard.test.tsx +451 -0
  212. package/Tests/UI/Rum/ReplayCorrelationPanel.test.tsx +536 -0
  213. package/Tests/UI/Rum/ReplayEngine.test.ts +2503 -0
  214. package/Tests/UI/Rum/ReplayEngineTypes.test.ts +171 -0
  215. package/Tests/UI/Rum/ReplayHeader.test.tsx +711 -0
  216. package/Tests/UI/Rum/ReplayLink.test.tsx +119 -0
  217. package/Tests/UI/Rum/ReplayPinControl.test.tsx +408 -0
  218. package/Tests/UI/Rum/ReplayPlaybackIntent.test.ts +152 -0
  219. package/Tests/UI/Rum/ReplayRail.test.tsx +1296 -0
  220. package/Tests/UI/Rum/ReplayRailDetail.test.tsx +900 -0
  221. package/Tests/UI/Rum/ReplayScrubber.test.tsx +763 -147
  222. package/Tests/UI/Rum/ReplaySignalTypes.test.ts +189 -0
  223. package/Tests/UI/Rum/ReplaySignals.test.ts +1579 -0
  224. package/Tests/UI/Rum/ReplayStage.test.tsx +396 -473
  225. package/Tests/UI/Rum/ReplayStageOverlays.test.tsx +918 -0
  226. package/Tests/UI/Rum/ReplayTimeline.test.tsx +696 -0
  227. package/Tests/UI/Rum/SessionReplayEmptyState.test.tsx +499 -0
  228. package/Tests/UI/Rum/SessionReplaySearchBar.test.tsx +346 -0
  229. package/Tests/UI/Rum/SessionReplaySetupGuide.test.tsx +545 -0
  230. package/Tests/UI/Rum/SessionReplayTable.test.tsx +991 -0
  231. package/Tests/UI/Rum/TargetedCapturePanel.test.tsx +254 -0
  232. package/Tests/UI/Telemetry/BrowserExporterIsolation.test.ts +71 -0
  233. package/Tests/UI/Utils/GlobalKeyboardShortcut.test.ts +344 -0
  234. package/Tests/Utils/API.test.ts +308 -0
  235. package/Tests/Utils/HTTPResponseBodyReader.test.ts +323 -0
  236. package/Tests/Utils/NetworkDiscovery/DiscoveryScanStatus.test.ts +117 -0
  237. package/Tests/Utils/Rum/ChunkMath.test.ts +83 -0
  238. package/Tests/Utils/Rum/SessionReplayHealthDiagnosis.test.ts +993 -0
  239. package/Tests/Utils/Rum/SessionReplayStringMap.test.ts +245 -0
  240. package/Tests/Utils/StatusPage/ResourceSearch.test.ts +631 -0
  241. package/Tests/Utils/Telemetry/OriginAllowList.test.ts +633 -0
  242. package/Tests/Utils/Uptime/DayUptimeGraphUtil.test.ts +461 -0
  243. package/Tests/Utils/ValueFormatter.test.ts +148 -0
  244. package/Types/CustomField/CustomFieldMappingCatalog.ts +161 -0
  245. package/Types/CustomField/CustomFieldMappingSourceResource.ts +19 -0
  246. package/Types/CustomField/CustomFieldValueMapping.ts +288 -0
  247. package/Types/Icon/IconProp.ts +1 -0
  248. package/Types/JSONFunctions.ts +189 -43
  249. package/Types/Monitor/CephAlertTemplates.ts +157 -195
  250. package/Types/Monitor/DockerAlertTemplates.ts +338 -128
  251. package/Types/Monitor/DockerSwarmAlertTemplates.ts +95 -112
  252. package/Types/Monitor/HostAlertTemplates.ts +302 -130
  253. package/Types/Monitor/IotAlertTemplates.ts +112 -104
  254. package/Types/Monitor/KubernetesAlertTemplates.ts +415 -224
  255. package/Types/Monitor/KubernetesMetricCatalog.ts +23 -19
  256. package/Types/Monitor/PodmanAlertTemplates.ts +116 -163
  257. package/Types/Monitor/ProxmoxAlertTemplates.ts +217 -99
  258. package/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.ts +98 -6
  259. package/Types/Monitor/Recommendation/MonitorRecommendationUtil.ts +44 -7
  260. package/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.ts +383 -0
  261. package/Types/Monitor/RumAlertTemplates.ts +46 -7
  262. package/Types/Monitor/SeriesContext/SeriesDebugHints.ts +596 -0
  263. package/Types/Monitor/SeriesContext/SeriesLabelDisplay.ts +554 -0
  264. package/Types/Monitor/ServiceAlertTemplates.ts +98 -11
  265. package/Types/Monitor/UptimeHistoryLabels.ts +56 -0
  266. package/Types/NotificationSetting/RoutineEmailEvents.ts +30 -0
  267. package/Types/Rum/SessionReplay.ts +209 -0
  268. package/Types/Rum/SessionReplayApi.ts +722 -0
  269. package/Types/Rum/SessionReplayCaptureTrigger.ts +21 -12
  270. package/Types/Rum/SessionReplayConsentMode.ts +11 -7
  271. package/Types/Rum/SessionReplayCustomEvents.ts +549 -0
  272. package/Types/Rum/SessionReplayHealth.ts +238 -0
  273. package/Types/Telemetry/TelemetryIngestSurface.ts +95 -0
  274. package/Types/Telemetry/TelemetryIngestionKeyPolicy.ts +75 -0
  275. package/Types/Telemetry/TelemetryIngestionKeyType.ts +29 -0
  276. package/Types/WebsiteRequest.ts +85 -3
  277. package/UI/Components/Charts/Area/AreaChart.tsx +13 -2
  278. package/UI/Components/Charts/Bar/BarChart.tsx +6 -2
  279. package/UI/Components/Charts/Line/LineChart.tsx +13 -2
  280. package/UI/Components/Charts/Types/XAxis/XAxis.ts +29 -0
  281. package/UI/Components/Charts/Utils/DataPoint.ts +22 -3
  282. package/UI/Components/Charts/Utils/TimeAnnotation.ts +76 -9
  283. package/UI/Components/Charts/Utils/XAxis.ts +217 -0
  284. package/UI/Components/CustomFields/CustomFieldsDetail.tsx +143 -25
  285. package/UI/Components/CustomFields/MapFromCustomFieldInput.tsx +216 -0
  286. package/UI/Components/Graphs/DayUptimeGraph.tsx +173 -8
  287. package/UI/Components/Graphs/UptimeBarTooltip.tsx +22 -278
  288. package/UI/Components/Graphs/UptimeDaySummary.tsx +327 -0
  289. package/UI/Components/Header/Header.tsx +25 -9
  290. package/UI/Components/Header/IconDropdown/IconDropdownItem.tsx +10 -1
  291. package/UI/Components/Header/IconDropdown/IconDropdownMenu.tsx +6 -1
  292. package/UI/Components/Header/ProjectPicker/ProjectPicker.tsx +6 -1
  293. package/UI/Components/HeaderAlert/NotificationBell/NotificationBellDropdown.tsx +6 -1
  294. package/UI/Components/Icon/Icon.tsx +11 -0
  295. package/UI/Components/JSONTable/JSONTable.tsx +2 -2
  296. package/UI/Components/KeyboardShortcut/KeyboardShortcutsModal.tsx +125 -0
  297. package/UI/Components/KeyboardShortcut/Screenshots/README.md +19 -0
  298. package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-command-palette.png +0 -0
  299. package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-dialog-dark.png +0 -0
  300. package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-dialog.png +0 -0
  301. package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-help-menu.png +0 -0
  302. package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-narrow.png +0 -0
  303. package/UI/Components/ModelTable/Column.ts +15 -0
  304. package/UI/Components/Monitor/SeriesDebugCommandsViewer.tsx +64 -0
  305. package/UI/Components/Monitor/SeriesLabelsViewer.tsx +93 -0
  306. package/UI/Components/MonitorGraphs/Uptime.tsx +14 -2
  307. package/UI/Components/MonitorGraphs/UptimeBarDayModal.tsx +63 -10
  308. package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +44 -0
  309. package/UI/Components/StatusPage/ResourceGroupSection.tsx +40 -0
  310. package/UI/Components/Table/CellClassName.ts +81 -0
  311. package/UI/Components/Table/TableRow.tsx +20 -14
  312. package/UI/Components/Table/TableSkeletonRows.tsx +9 -9
  313. package/UI/Components/Table/Types/Column.ts +36 -0
  314. package/UI/Components/Tooltip/Tooltip.tsx +11 -1
  315. package/UI/Components/Workflow/ComponentsModal.tsx +60 -39
  316. package/UI/Components/Workflow/NodePlacement.ts +57 -0
  317. package/UI/Components/Workflow/Workflow.tsx +47 -18
  318. package/UI/Config.ts +15 -33
  319. package/UI/Utils/GlobalKeyboardShortcut.ts +208 -0
  320. package/UI/Utils/Telemetry/BrowserTelemetryConfig.ts +28 -0
  321. package/UI/Utils/Telemetry/Telemetry.ts +10 -8
  322. package/Utils/API.ts +129 -3
  323. package/Utils/HTTPResponseBodyReader.ts +221 -0
  324. package/Utils/NetworkDiscovery/DiscoveryScanStatus.ts +77 -0
  325. package/Utils/Rum/ChunkMath.ts +106 -0
  326. package/Utils/Rum/SessionReplayHealth.ts +732 -0
  327. package/Utils/Rum/SessionReplayStringMap.ts +226 -0
  328. package/Utils/Schema/ModelSchema.ts +1 -0
  329. package/Utils/StatusPage/ResourceSearch.ts +290 -0
  330. package/Utils/Telemetry/OriginAllowList.ts +355 -0
  331. package/Utils/Uptime/DayUptimeGraphUtil.ts +205 -0
  332. package/Utils/ValueFormatter.ts +35 -1
  333. package/build/dist/Models/AnalyticsModels/RumSession.js +102 -19
  334. package/build/dist/Models/AnalyticsModels/RumSession.js.map +1 -1
  335. package/build/dist/Models/AnalyticsModels/RumSessionChunk.js +11 -9
  336. package/build/dist/Models/AnalyticsModels/RumSessionChunk.js.map +1 -1
  337. package/build/dist/Models/DatabaseModels/AlertCustomField.js +79 -3
  338. package/build/dist/Models/DatabaseModels/AlertCustomField.js.map +1 -1
  339. package/build/dist/Models/DatabaseModels/ApiKeyPermission.js +3 -27
  340. package/build/dist/Models/DatabaseModels/ApiKeyPermission.js.map +1 -1
  341. package/build/dist/Models/DatabaseModels/IncidentCustomField.js +79 -3
  342. package/build/dist/Models/DatabaseModels/IncidentCustomField.js.map +1 -1
  343. package/build/dist/Models/DatabaseModels/InventoryItemCustomField.js +79 -3
  344. package/build/dist/Models/DatabaseModels/InventoryItemCustomField.js.map +1 -1
  345. package/build/dist/Models/DatabaseModels/MonitorCustomField.js +79 -3
  346. package/build/dist/Models/DatabaseModels/MonitorCustomField.js.map +1 -1
  347. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyCustomField.js +79 -3
  348. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyCustomField.js.map +1 -1
  349. package/build/dist/Models/DatabaseModels/RumApplication.js +6 -6
  350. package/build/dist/Models/DatabaseModels/RumApplication.js.map +1 -1
  351. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceCustomField.js +79 -3
  352. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceCustomField.js.map +1 -1
  353. package/build/dist/Models/DatabaseModels/StatusPageCustomField.js +79 -3
  354. package/build/dist/Models/DatabaseModels/StatusPageCustomField.js.map +1 -1
  355. package/build/dist/Models/DatabaseModels/TeamCustomField.js +79 -3
  356. package/build/dist/Models/DatabaseModels/TeamCustomField.js.map +1 -1
  357. package/build/dist/Models/DatabaseModels/TeamMember.js +0 -9
  358. package/build/dist/Models/DatabaseModels/TeamMember.js.map +1 -1
  359. package/build/dist/Models/DatabaseModels/TeamMemberCustomField.js +79 -3
  360. package/build/dist/Models/DatabaseModels/TeamMemberCustomField.js.map +1 -1
  361. package/build/dist/Models/DatabaseModels/TeamPermission.js +3 -24
  362. package/build/dist/Models/DatabaseModels/TeamPermission.js.map +1 -1
  363. package/build/dist/Models/DatabaseModels/TelemetryIngestionKey.js +267 -0
  364. package/build/dist/Models/DatabaseModels/TelemetryIngestionKey.js.map +1 -1
  365. package/build/dist/Models/DatabaseModels/UserTelegram.js +0 -4
  366. package/build/dist/Models/DatabaseModels/UserTelegram.js.map +1 -1
  367. package/build/dist/Server/API/TelemetryAPI.js +769 -109
  368. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  369. package/build/dist/Server/API/UserNotificationSettingAPI.js +35 -0
  370. package/build/dist/Server/API/UserNotificationSettingAPI.js.map +1 -0
  371. package/build/dist/Server/API/UserTelegramAPI.js +28 -6
  372. package/build/dist/Server/API/UserTelegramAPI.js.map +1 -1
  373. package/build/dist/Server/EnvironmentConfig.js +29 -2
  374. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  375. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791300000000-AddTelemetryIngestionKeyType.js +60 -0
  376. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791300000000-AddTelemetryIngestionKeyType.js.map +1 -0
  377. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791400000000-SessionReplayRecordEverySessionByDefault.js +53 -0
  378. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791400000000-SessionReplayRecordEverySessionByDefault.js.map +1 -0
  379. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791500000000-WidenCustomFieldDropdownOptions.js +82 -0
  380. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791500000000-WidenCustomFieldDropdownOptions.js.map +1 -0
  381. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791600000000-AddCustomFieldValueMapping.js +46 -0
  382. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791600000000-AddCustomFieldValueMapping.js.map +1 -0
  383. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +8 -0
  384. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  385. package/build/dist/Server/Infrastructure/QueueWorker.js +19 -7
  386. package/build/dist/Server/Infrastructure/QueueWorker.js.map +1 -1
  387. package/build/dist/Server/Infrastructure/Semaphore.js +1 -0
  388. package/build/dist/Server/Infrastructure/Semaphore.js.map +1 -1
  389. package/build/dist/Server/Middleware/TelemetryIngest.js +315 -8
  390. package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
  391. package/build/dist/Server/Services/AccessTokenService.js +1 -0
  392. package/build/dist/Server/Services/AccessTokenService.js.map +1 -1
  393. package/build/dist/Server/Services/AlertCustomFieldService.js +93 -0
  394. package/build/dist/Server/Services/AlertCustomFieldService.js.map +1 -1
  395. package/build/dist/Server/Services/AlertService.js +34 -0
  396. package/build/dist/Server/Services/AlertService.js.map +1 -1
  397. package/build/dist/Server/Services/ApiKeyPermissionService.js +331 -28
  398. package/build/dist/Server/Services/ApiKeyPermissionService.js.map +1 -1
  399. package/build/dist/Server/Services/CustomFieldMappingService.js +614 -0
  400. package/build/dist/Server/Services/CustomFieldMappingService.js.map +1 -0
  401. package/build/dist/Server/Services/GlobalConfigService.js +133 -0
  402. package/build/dist/Server/Services/GlobalConfigService.js.map +1 -1
  403. package/build/dist/Server/Services/IncidentCustomFieldService.js +93 -0
  404. package/build/dist/Server/Services/IncidentCustomFieldService.js.map +1 -1
  405. package/build/dist/Server/Services/IncidentService.js +32 -0
  406. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  407. package/build/dist/Server/Services/MetricService.js +163 -0
  408. package/build/dist/Server/Services/MetricService.js.map +1 -1
  409. package/build/dist/Server/Services/MonitorService.js +29 -0
  410. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  411. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +79 -27
  412. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
  413. package/build/dist/Server/Services/ProjectService.js +22 -0
  414. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  415. package/build/dist/Server/Services/RoutineEmailSettingsService.js +69 -0
  416. package/build/dist/Server/Services/RoutineEmailSettingsService.js.map +1 -0
  417. package/build/dist/Server/Services/RumSessionReplayViewService.js +86 -24
  418. package/build/dist/Server/Services/RumSessionReplayViewService.js.map +1 -1
  419. package/build/dist/Server/Services/ScheduledMaintenanceCustomFieldService.js +93 -0
  420. package/build/dist/Server/Services/ScheduledMaintenanceCustomFieldService.js.map +1 -1
  421. package/build/dist/Server/Services/ScheduledMaintenanceService.js +29 -0
  422. package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
  423. package/build/dist/Server/Services/TeamMemberService.js +62 -2
  424. package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
  425. package/build/dist/Server/Services/TeamPermissionService.js +166 -3
  426. package/build/dist/Server/Services/TeamPermissionService.js.map +1 -1
  427. package/build/dist/Server/Services/TelemetryIngestionKeyService.js +562 -18
  428. package/build/dist/Server/Services/TelemetryIngestionKeyService.js.map +1 -1
  429. package/build/dist/Server/Services/UserNotificationSettingService.js +26 -6
  430. package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
  431. package/build/dist/Server/Services/UserTelegramService.js +257 -4
  432. package/build/dist/Server/Services/UserTelegramService.js.map +1 -1
  433. package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
  434. package/build/dist/Server/Utils/APIKey/AccessPermission.js +2 -2
  435. package/build/dist/Server/Utils/APIKey/AccessPermission.js.map +1 -1
  436. package/build/dist/Server/Utils/CustomField/CustomFieldDefinitionMappingHooks.js +27 -0
  437. package/build/dist/Server/Utils/CustomField/CustomFieldDefinitionMappingHooks.js.map +1 -0
  438. package/build/dist/Server/Utils/CustomField/CustomFieldMappingRegistry.js +226 -0
  439. package/build/dist/Server/Utils/CustomField/CustomFieldMappingRegistry.js.map +1 -0
  440. package/build/dist/Server/Utils/CustomField/CustomFieldMappingValidator.js +189 -0
  441. package/build/dist/Server/Utils/CustomField/CustomFieldMappingValidator.js.map +1 -0
  442. package/build/dist/Server/Utils/DataSource/EgressGuard.js +121 -7
  443. package/build/dist/Server/Utils/DataSource/EgressGuard.js.map +1 -1
  444. package/build/dist/Server/Utils/EmailRollup/EmailRollupConstants.js +38 -5
  445. package/build/dist/Server/Utils/EmailRollup/EmailRollupConstants.js.map +1 -1
  446. package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js +44 -2
  447. package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js.map +1 -1
  448. package/build/dist/Server/Utils/FrontendEnvironment.js +33 -0
  449. package/build/dist/Server/Utils/FrontendEnvironment.js.map +1 -0
  450. package/build/dist/Server/Utils/LogRedaction.js +20 -0
  451. package/build/dist/Server/Utils/LogRedaction.js.map +1 -1
  452. package/build/dist/Server/Utils/Logger.js +10 -0
  453. package/build/dist/Server/Utils/Logger.js.map +1 -1
  454. package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js +287 -68
  455. package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js.map +1 -1
  456. package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js +20 -4
  457. package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js.map +1 -1
  458. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +29 -6
  459. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  460. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +88 -13
  461. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  462. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +22 -6
  463. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  464. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +22 -0
  465. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
  466. package/build/dist/Server/Utils/Monitor/SeriesContextEnricher.js +237 -0
  467. package/build/dist/Server/Utils/Monitor/SeriesContextEnricher.js.map +1 -0
  468. package/build/dist/Server/Utils/SSRFProtection.js +136 -9
  469. package/build/dist/Server/Utils/SSRFProtection.js.map +1 -1
  470. package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCache.js +174 -89
  471. package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCache.js.map +1 -1
  472. package/build/dist/Server/Utils/SessionReplay/SessionReplayHealthCounters.js +223 -0
  473. package/build/dist/Server/Utils/SessionReplay/SessionReplayHealthCounters.js.map +1 -0
  474. package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js +945 -164
  475. package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js.map +1 -1
  476. package/build/dist/Server/Utils/StartServer.js +3 -14
  477. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  478. package/build/dist/Server/Utils/TelegramVerificationToken.js +129 -0
  479. package/build/dist/Server/Utils/TelegramVerificationToken.js.map +1 -0
  480. package/build/dist/Server/Utils/Telemetry/PinServiceName.js +163 -0
  481. package/build/dist/Server/Utils/Telemetry/PinServiceName.js.map +1 -0
  482. package/build/dist/Server/Utils/Telemetry/TelemetryFanInWriter.js +28 -15
  483. package/build/dist/Server/Utils/Telemetry/TelemetryFanInWriter.js.map +1 -1
  484. package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.js +64 -0
  485. package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.js.map +1 -0
  486. package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyRateLimiter.js +171 -0
  487. package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyRateLimiter.js.map +1 -0
  488. package/build/dist/Server/Utils/VM/VMAPI.js.map +1 -1
  489. package/build/dist/Server/Utils/VM/VMRunner.js +780 -69
  490. package/build/dist/Server/Utils/VM/VMRunner.js.map +1 -1
  491. package/build/dist/Types/CustomField/CustomFieldMappingCatalog.js +60 -0
  492. package/build/dist/Types/CustomField/CustomFieldMappingCatalog.js.map +1 -0
  493. package/build/dist/Types/CustomField/CustomFieldMappingSourceResource.js +20 -0
  494. package/build/dist/Types/CustomField/CustomFieldMappingSourceResource.js.map +1 -0
  495. package/build/dist/Types/CustomField/CustomFieldValueMapping.js +141 -0
  496. package/build/dist/Types/CustomField/CustomFieldValueMapping.js.map +1 -0
  497. package/build/dist/Types/Icon/IconProp.js +1 -0
  498. package/build/dist/Types/Icon/IconProp.js.map +1 -1
  499. package/build/dist/Types/JSONFunctions.js +118 -37
  500. package/build/dist/Types/JSONFunctions.js.map +1 -1
  501. package/build/dist/Types/Monitor/CephAlertTemplates.js +130 -171
  502. package/build/dist/Types/Monitor/CephAlertTemplates.js.map +1 -1
  503. package/build/dist/Types/Monitor/DockerAlertTemplates.js +286 -121
  504. package/build/dist/Types/Monitor/DockerAlertTemplates.js.map +1 -1
  505. package/build/dist/Types/Monitor/DockerSwarmAlertTemplates.js +84 -105
  506. package/build/dist/Types/Monitor/DockerSwarmAlertTemplates.js.map +1 -1
  507. package/build/dist/Types/Monitor/HostAlertTemplates.js +250 -122
  508. package/build/dist/Types/Monitor/HostAlertTemplates.js.map +1 -1
  509. package/build/dist/Types/Monitor/IotAlertTemplates.js +81 -81
  510. package/build/dist/Types/Monitor/IotAlertTemplates.js.map +1 -1
  511. package/build/dist/Types/Monitor/KubernetesAlertTemplates.js +375 -215
  512. package/build/dist/Types/Monitor/KubernetesAlertTemplates.js.map +1 -1
  513. package/build/dist/Types/Monitor/KubernetesMetricCatalog.js +19 -19
  514. package/build/dist/Types/Monitor/KubernetesMetricCatalog.js.map +1 -1
  515. package/build/dist/Types/Monitor/PodmanAlertTemplates.js +104 -153
  516. package/build/dist/Types/Monitor/PodmanAlertTemplates.js.map +1 -1
  517. package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js +156 -91
  518. package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js.map +1 -1
  519. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js +67 -6
  520. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js.map +1 -1
  521. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js +38 -7
  522. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js.map +1 -1
  523. package/build/dist/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.js +261 -0
  524. package/build/dist/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.js.map +1 -0
  525. package/build/dist/Types/Monitor/RumAlertTemplates.js +46 -7
  526. package/build/dist/Types/Monitor/RumAlertTemplates.js.map +1 -1
  527. package/build/dist/Types/Monitor/SeriesContext/SeriesDebugHints.js +422 -0
  528. package/build/dist/Types/Monitor/SeriesContext/SeriesDebugHints.js.map +1 -0
  529. package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js +441 -0
  530. package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js.map +1 -0
  531. package/build/dist/Types/Monitor/ServiceAlertTemplates.js +79 -15
  532. package/build/dist/Types/Monitor/ServiceAlertTemplates.js.map +1 -1
  533. package/build/dist/Types/Monitor/UptimeHistoryLabels.js +17 -0
  534. package/build/dist/Types/Monitor/UptimeHistoryLabels.js.map +1 -0
  535. package/build/dist/Types/NotificationSetting/RoutineEmailEvents.js +29 -0
  536. package/build/dist/Types/NotificationSetting/RoutineEmailEvents.js.map +1 -0
  537. package/build/dist/Types/Rum/SessionReplay.js +117 -0
  538. package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
  539. package/build/dist/Types/Rum/SessionReplayApi.js +181 -0
  540. package/build/dist/Types/Rum/SessionReplayApi.js.map +1 -0
  541. package/build/dist/Types/Rum/SessionReplayCaptureTrigger.js +21 -12
  542. package/build/dist/Types/Rum/SessionReplayCaptureTrigger.js.map +1 -1
  543. package/build/dist/Types/Rum/SessionReplayConsentMode.js +11 -7
  544. package/build/dist/Types/Rum/SessionReplayConsentMode.js.map +1 -1
  545. package/build/dist/Types/Rum/SessionReplayCustomEvents.js +172 -0
  546. package/build/dist/Types/Rum/SessionReplayCustomEvents.js.map +1 -0
  547. package/build/dist/Types/Rum/SessionReplayHealth.js +37 -0
  548. package/build/dist/Types/Rum/SessionReplayHealth.js.map +1 -0
  549. package/build/dist/Types/Telemetry/TelemetryIngestSurface.js +85 -0
  550. package/build/dist/Types/Telemetry/TelemetryIngestSurface.js.map +1 -0
  551. package/build/dist/Types/Telemetry/TelemetryIngestionKeyPolicy.js +15 -0
  552. package/build/dist/Types/Telemetry/TelemetryIngestionKeyPolicy.js.map +1 -0
  553. package/build/dist/Types/Telemetry/TelemetryIngestionKeyType.js +30 -0
  554. package/build/dist/Types/Telemetry/TelemetryIngestionKeyType.js.map +1 -0
  555. package/build/dist/Types/WebsiteRequest.js +55 -3
  556. package/build/dist/Types/WebsiteRequest.js.map +1 -1
  557. package/build/dist/UI/Components/Charts/Area/AreaChart.js +13 -2
  558. package/build/dist/UI/Components/Charts/Area/AreaChart.js.map +1 -1
  559. package/build/dist/UI/Components/Charts/Bar/BarChart.js +6 -2
  560. package/build/dist/UI/Components/Charts/Bar/BarChart.js.map +1 -1
  561. package/build/dist/UI/Components/Charts/Line/LineChart.js +13 -2
  562. package/build/dist/UI/Components/Charts/Line/LineChart.js.map +1 -1
  563. package/build/dist/UI/Components/Charts/Types/XAxis/XAxis.js.map +1 -1
  564. package/build/dist/UI/Components/Charts/Utils/DataPoint.js +15 -3
  565. package/build/dist/UI/Components/Charts/Utils/DataPoint.js.map +1 -1
  566. package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js +40 -9
  567. package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js.map +1 -1
  568. package/build/dist/UI/Components/Charts/Utils/XAxis.js +186 -0
  569. package/build/dist/UI/Components/Charts/Utils/XAxis.js.map +1 -1
  570. package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js +80 -6
  571. package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js.map +1 -1
  572. package/build/dist/UI/Components/CustomFields/MapFromCustomFieldInput.js +118 -0
  573. package/build/dist/UI/Components/CustomFields/MapFromCustomFieldInput.js.map +1 -0
  574. package/build/dist/UI/Components/Graphs/DayUptimeGraph.js +112 -7
  575. package/build/dist/UI/Components/Graphs/DayUptimeGraph.js.map +1 -1
  576. package/build/dist/UI/Components/Graphs/UptimeBarTooltip.js +5 -162
  577. package/build/dist/UI/Components/Graphs/UptimeBarTooltip.js.map +1 -1
  578. package/build/dist/UI/Components/Graphs/UptimeDaySummary.js +181 -0
  579. package/build/dist/UI/Components/Graphs/UptimeDaySummary.js.map +1 -0
  580. package/build/dist/UI/Components/Header/Header.js +2 -3
  581. package/build/dist/UI/Components/Header/Header.js.map +1 -1
  582. package/build/dist/UI/Components/Header/IconDropdown/IconDropdownItem.js +2 -1
  583. package/build/dist/UI/Components/Header/IconDropdown/IconDropdownItem.js.map +1 -1
  584. package/build/dist/UI/Components/Header/IconDropdown/IconDropdownMenu.js +7 -1
  585. package/build/dist/UI/Components/Header/IconDropdown/IconDropdownMenu.js.map +1 -1
  586. package/build/dist/UI/Components/Header/ProjectPicker/ProjectPicker.js +7 -1
  587. package/build/dist/UI/Components/Header/ProjectPicker/ProjectPicker.js.map +1 -1
  588. package/build/dist/UI/Components/HeaderAlert/NotificationBell/NotificationBellDropdown.js +7 -1
  589. package/build/dist/UI/Components/HeaderAlert/NotificationBell/NotificationBellDropdown.js.map +1 -1
  590. package/build/dist/UI/Components/Icon/Icon.js +5 -0
  591. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  592. package/build/dist/UI/Components/JSONTable/JSONTable.js +2 -2
  593. package/build/dist/UI/Components/JSONTable/JSONTable.js.map +1 -1
  594. package/build/dist/UI/Components/KeyboardShortcut/KeyboardShortcutsModal.js +35 -0
  595. package/build/dist/UI/Components/KeyboardShortcut/KeyboardShortcutsModal.js.map +1 -0
  596. package/build/dist/UI/Components/Monitor/SeriesDebugCommandsViewer.js +34 -0
  597. package/build/dist/UI/Components/Monitor/SeriesDebugCommandsViewer.js.map +1 -0
  598. package/build/dist/UI/Components/Monitor/SeriesLabelsViewer.js +49 -0
  599. package/build/dist/UI/Components/Monitor/SeriesLabelsViewer.js.map +1 -0
  600. package/build/dist/UI/Components/MonitorGraphs/Uptime.js +1 -1
  601. package/build/dist/UI/Components/MonitorGraphs/Uptime.js.map +1 -1
  602. package/build/dist/UI/Components/MonitorGraphs/UptimeBarDayModal.js +32 -6
  603. package/build/dist/UI/Components/MonitorGraphs/UptimeBarDayModal.js.map +1 -1
  604. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +38 -0
  605. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
  606. package/build/dist/UI/Components/StatusPage/ResourceGroupSection.js +22 -1
  607. package/build/dist/UI/Components/StatusPage/ResourceGroupSection.js.map +1 -1
  608. package/build/dist/UI/Components/Table/CellClassName.js +55 -0
  609. package/build/dist/UI/Components/Table/CellClassName.js.map +1 -0
  610. package/build/dist/UI/Components/Table/TableRow.js +16 -13
  611. package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
  612. package/build/dist/UI/Components/Table/TableSkeletonRows.js +9 -8
  613. package/build/dist/UI/Components/Table/TableSkeletonRows.js.map +1 -1
  614. package/build/dist/UI/Components/Tooltip/Tooltip.js +25 -1
  615. package/build/dist/UI/Components/Tooltip/Tooltip.js.map +1 -1
  616. package/build/dist/UI/Components/Workflow/ComponentsModal.js +47 -30
  617. package/build/dist/UI/Components/Workflow/ComponentsModal.js.map +1 -1
  618. package/build/dist/UI/Components/Workflow/NodePlacement.js +37 -0
  619. package/build/dist/UI/Components/Workflow/NodePlacement.js.map +1 -0
  620. package/build/dist/UI/Components/Workflow/Workflow.js +35 -18
  621. package/build/dist/UI/Components/Workflow/Workflow.js.map +1 -1
  622. package/build/dist/UI/Config.js +10 -20
  623. package/build/dist/UI/Config.js.map +1 -1
  624. package/build/dist/UI/Utils/GlobalKeyboardShortcut.js +138 -0
  625. package/build/dist/UI/Utils/GlobalKeyboardShortcut.js.map +1 -0
  626. package/build/dist/UI/Utils/Telemetry/BrowserTelemetryConfig.js +14 -0
  627. package/build/dist/UI/Utils/Telemetry/BrowserTelemetryConfig.js.map +1 -0
  628. package/build/dist/UI/Utils/Telemetry/Telemetry.js +7 -5
  629. package/build/dist/UI/Utils/Telemetry/Telemetry.js.map +1 -1
  630. package/build/dist/Utils/API.js +67 -5
  631. package/build/dist/Utils/API.js.map +1 -1
  632. package/build/dist/Utils/HTTPResponseBodyReader.js +157 -0
  633. package/build/dist/Utils/HTTPResponseBodyReader.js.map +1 -0
  634. package/build/dist/Utils/NetworkDiscovery/DiscoveryScanStatus.js +69 -0
  635. package/build/dist/Utils/NetworkDiscovery/DiscoveryScanStatus.js.map +1 -0
  636. package/build/dist/Utils/Rum/ChunkMath.js +76 -0
  637. package/build/dist/Utils/Rum/ChunkMath.js.map +1 -1
  638. package/build/dist/Utils/Rum/SessionReplayHealth.js +534 -0
  639. package/build/dist/Utils/Rum/SessionReplayHealth.js.map +1 -0
  640. package/build/dist/Utils/Rum/SessionReplayStringMap.js +165 -0
  641. package/build/dist/Utils/Rum/SessionReplayStringMap.js.map +1 -0
  642. package/build/dist/Utils/Schema/ModelSchema.js +1 -0
  643. package/build/dist/Utils/Schema/ModelSchema.js.map +1 -1
  644. package/build/dist/Utils/StatusPage/ResourceSearch.js +200 -0
  645. package/build/dist/Utils/StatusPage/ResourceSearch.js.map +1 -0
  646. package/build/dist/Utils/Telemetry/OriginAllowList.js +299 -0
  647. package/build/dist/Utils/Telemetry/OriginAllowList.js.map +1 -0
  648. package/build/dist/Utils/Uptime/DayUptimeGraphUtil.js +147 -0
  649. package/build/dist/Utils/Uptime/DayUptimeGraphUtil.js.map +1 -0
  650. package/build/dist/Utils/ValueFormatter.js +32 -1
  651. package/build/dist/Utils/ValueFormatter.js.map +1 -1
  652. package/package.json +1 -1
@@ -0,0 +1,722 @@
1
+ import {
2
+ SessionReplayChunkManifestEntry,
3
+ SessionReplayGap,
4
+ } from "./SessionReplay";
5
+
6
+ /*
7
+ * Wire contract between the Dashboard and the session-replay read routes
8
+ * in Common/Server/API/TelemetryAPI.ts (/list, /manifest, /chunks,
9
+ * /heartbeat, /views, /for-exception, /ingest-status). Everything here is
10
+ * the JSON as it
11
+ * crosses HTTP, which is why:
12
+ *
13
+ * - Dates are ISO-8601 STRINGS. The server builds Date objects
14
+ * (SessionReplayReadService) and Response.sendJsonObjectResponse
15
+ * serialises them; the Dashboard parsers have always read them back
16
+ * as strings (parseSessionReplaySummary). The *UnixMs numbers are
17
+ * additive siblings so the player can do clock arithmetic without
18
+ * re-parsing.
19
+ * - Every field added after the first release is OPTIONAL. The Dashboard
20
+ * is deployed with the server, but a manifest fixture, a cached
21
+ * response, or a self-hosted install mid-rollout can still present
22
+ * the old shape, and a parser that throws on a missing engagement
23
+ * counter would take the whole player down over a column that adds a
24
+ * badge. Absence means "not measured", and the UI renders that as
25
+ * unknown rather than 0.
26
+ * - Nothing here is a class. The Dashboard reads rows off untyped
27
+ * JSONObject bodies with the readDto* helpers at the bottom, which
28
+ * carry the same defensive semantics the player and table parsers
29
+ * were written with (UInt8 booleans as 0/1/"1", numeric strings).
30
+ */
31
+
32
+ /* ---- /list ---- */
33
+
34
+ /*
35
+ * Sort keys the list accepts. "frustration" sorts by the sum of the four
36
+ * frustration counters, which is what the Frustration quick filter shows.
37
+ */
38
+ export type SessionReplaySortBy =
39
+ | "startTime"
40
+ | "durationMs"
41
+ | "errorCount"
42
+ | "frustration";
43
+
44
+ export const SESSION_REPLAY_SORT_BY_VALUES: ReadonlyArray<SessionReplaySortBy> =
45
+ ["startTime", "durationMs", "errorCount", "frustration"];
46
+
47
+ /*
48
+ * Keyset cursor for the sorted list. sortValue is the numeric sort key of
49
+ * the last row on the previous page (unix ms for startTime, a count or a
50
+ * duration otherwise) and sessionId is the tiebreak.
51
+ */
52
+ export interface SessionReplaySortedListCursorDto {
53
+ sortBy: SessionReplaySortBy;
54
+ sortValue: number;
55
+ sessionId: string;
56
+ }
57
+
58
+ /*
59
+ * The cursor shape the list has emitted since its first release. Still
60
+ * accepted (as sortBy: "startTime") so a bookmarked page and an older
61
+ * Dashboard keep paging; still emitted when sortBy is startTime so an
62
+ * older Dashboard can read the response.
63
+ */
64
+ export interface SessionReplayLegacyListCursorDto {
65
+ startTimeUnixMs: number;
66
+ sessionId: string;
67
+ }
68
+
69
+ export type SessionReplayListCursorDto =
70
+ | SessionReplaySortedListCursorDto
71
+ | SessionReplayLegacyListCursorDto;
72
+
73
+ export interface SessionReplayListFiltersDto {
74
+ hasError?: boolean;
75
+ hasFrustration?: boolean;
76
+ isFinalized?: boolean;
77
+ triggerReasons?: Array<string>;
78
+ browserNames?: Array<string>;
79
+ osNames?: Array<string>;
80
+ deviceTypes?: Array<string>;
81
+ countryCodes?: Array<string>;
82
+ /*
83
+ * The end-user reference the customer's page supplied; the server hashes
84
+ * it. Silently dropped server-side unless the caller holds the identity
85
+ * permission, and a 400 when unusable.
86
+ */
87
+ identifiedUserRef?: string;
88
+ /* An already-derived digest, for API callers that hold one. */
89
+ identifiedUserKey?: string;
90
+ /* Exact route match against the routes array. */
91
+ route?: string;
92
+ minDurationMs?: number;
93
+
94
+ /* ---- Additive filters. ---- */
95
+
96
+ /*
97
+ * Free text, capped at SESSION_REPLAY_LIST_SEARCH_MAX_LENGTH: sessionId
98
+ * prefix, entry/exit URL and routes substring, exact trace id, and the
99
+ * identified user label when the caller may read it. The server refuses
100
+ * a search over more than SESSION_REPLAY_LIST_SEARCH_MAX_WINDOW_DAYS.
101
+ */
102
+ search?: string;
103
+ /* startsWith over routes and the entry URL: "/checkout", or a full URL. */
104
+ urlPrefix?: string;
105
+ /* Every pair must match (hasAll over the session's tag map). */
106
+ tags?: Record<string, string>;
107
+ hasIdentifiedUser?: boolean;
108
+ /* (not finalized OR has chunks) AND not recording-lost. */
109
+ isPlayable?: boolean;
110
+ hasTraces?: boolean;
111
+ }
112
+
113
+ export interface SessionReplayListRequestDto {
114
+ rumApplicationId: string;
115
+ /* ISO-8601. Defaults server-side to the past 7 days. */
116
+ startTime?: string;
117
+ endTime?: string;
118
+ filters?: SessionReplayListFiltersDto;
119
+ limit?: number;
120
+ cursor?: SessionReplayListCursorDto;
121
+ /* Additive. Absent means "startTime", which is what the list always did. */
122
+ sortBy?: SessionReplaySortBy;
123
+ }
124
+
125
+ export interface SessionReplayListItemDto {
126
+ sessionId: string;
127
+ rumApplicationId: string;
128
+ /* ISO-8601, server-clamped. */
129
+ startTime: string;
130
+ endTime: string;
131
+ durationMs: number;
132
+ isFinalized: boolean;
133
+ sealedReason: string;
134
+ chunkCount: number;
135
+ maxChunkIndex: number;
136
+ missingChunkCount: number;
137
+ eventCount: number;
138
+ payloadBytes: number;
139
+ hasError: boolean;
140
+ errorCount: number;
141
+ rageClickCount: number;
142
+ deadClickCount: number;
143
+ errorClickCount: number;
144
+ refreshRageCount: number;
145
+ pageCount: number;
146
+ triggerReason: string;
147
+ entryUrl: string;
148
+ exitUrl: string;
149
+ browserName: string;
150
+ browserVersion: string;
151
+ osName: string;
152
+ deviceType: string;
153
+ countryCode: string;
154
+ viewportWidth: number;
155
+ viewportHeight: number;
156
+ identifiedUserKey: string;
157
+ /* Present only when the caller holds the narrower identity permission. */
158
+ identifiedUserLabel?: string;
159
+ samplePercentageAtCapture: number;
160
+
161
+ /* ---- Additive projections. ---- */
162
+
163
+ /* First 5 routes, in order. */
164
+ routes?: Array<string>;
165
+ /* length(traceIds) - the header keeps at most 50 ids. */
166
+ traceCount?: number;
167
+ exceptionGroupCount?: number;
168
+ clickCount?: number;
169
+ /* Sum of chunk spans that carried user activity; 0 until finalized. */
170
+ activeMs?: number;
171
+ /* Offset of the first chunk with an error; 0 when there is none. */
172
+ firstErrorOffsetMs?: number;
173
+ /* argMax(retentionDate) as unix ms; drives "expires in 6d". */
174
+ expiresAtUnixMs?: number;
175
+ tags?: Record<string, string>;
176
+ startTimeUnixMs?: number;
177
+ endTimeUnixMs?: number;
178
+ /* Identity-gated like identifiedUserLabel. */
179
+ identifiedUserTraits?: Record<string, string>;
180
+ }
181
+
182
+ export interface SessionReplayListResponseDto {
183
+ sessions: Array<SessionReplayListItemDto>;
184
+ nextCursor: SessionReplayListCursorDto | null;
185
+ /*
186
+ * Additive. Filter keys the server accepted the request WITH but did not
187
+ * apply - today identifiedUserRef/identifiedUserKey, which are dropped
188
+ * when the caller does not hold the narrower identity permission. The
189
+ * list turns this into "your user filter was ignored": a silently
190
+ * dropped filter shows a wider set of rows as if it were the filtered
191
+ * one, which is the worst possible answer in an evidence tool. Absent
192
+ * (rather than []) on a server that predates the field, which the
193
+ * Dashboard reads as "nothing known to have been dropped".
194
+ */
195
+ ignoredFilters?: Array<string>;
196
+ }
197
+
198
+ /* ---- /manifest ---- */
199
+
200
+ export interface SessionReplayManifestRequestDto {
201
+ sessionId: string;
202
+ /*
203
+ * Additive disambiguator. A session id is minted in the browser and can,
204
+ * rarely, be seen under two applications of one project (a copied tab,
205
+ * a re-used identifier); the server refuses to guess between them, so
206
+ * the player sends the application it is looking at.
207
+ */
208
+ rumApplicationId?: string;
209
+ /* Audit fields, written to the view row. */
210
+ accessReason?: string;
211
+ linkedIncidentId?: string;
212
+ linkedExceptionFingerprint?: string;
213
+ /*
214
+ * Additive. A live-session poll: when true and viewId names a view row
215
+ * that belongs to this caller and session, the server SKIPS recordView
216
+ * and echoes the same viewId, so polling writes one audit row per view
217
+ * rather than one per 30s. A mismatch falls back to a fresh recordView.
218
+ */
219
+ isRefresh?: boolean;
220
+ viewId?: string;
221
+ }
222
+
223
+ /* ---- /chunks ---- */
224
+
225
+ export interface SessionReplayChunksRequestDto {
226
+ sessionId: string;
227
+ tabId: string;
228
+ /* At most MAX_SESSION_REPLAY_CHUNKS_PER_READ indexes, ascending. */
229
+ chunkIndexes: Array<number>;
230
+ /* Same disambiguator as the manifest request. */
231
+ rumApplicationId?: string;
232
+ }
233
+
234
+ /*
235
+ * Response header on /chunks, comma-separated ascending indexes: chunks
236
+ * that EXIST and were asked for, but did not fit this body under
237
+ * MAX_SESSION_REPLAY_READ_BYTES. Absent when nothing was left out.
238
+ *
239
+ * A loader that reads their absence as missing footage would draw a hole
240
+ * in a recording that is whole; the honest response is to ask for them
241
+ * again in a smaller page. Named here so the server that sets it and the
242
+ * loader that reads it quote one string.
243
+ */
244
+ export const SESSION_REPLAY_OMITTED_CHUNKS_HEADER: string =
245
+ "X-OneUptime-Replay-Omitted-Chunks";
246
+
247
+ /* ---- Read failures ---- */
248
+
249
+ /*
250
+ * The read routes answer 404 with a message whose PREFIX carries the
251
+ * reason, because the three reasons need three different screens and an
252
+ * HTTP status cannot tell them apart: a recording that aged out under
253
+ * retention (and whose signals may still exist in logs and traces), one
254
+ * erased by a data-subject request (which will never come back), and an
255
+ * id that was never recorded in this project. classifyManifestFailure in
256
+ * the Dashboard branches on exactly these; they live here so neither side
257
+ * invents a fourth spelling.
258
+ */
259
+ export const SESSION_REPLAY_READ_ERROR_PREFIX_EXPIRED: string = "expired:";
260
+ export const SESSION_REPLAY_READ_ERROR_PREFIX_ERASED: string = "erased:";
261
+ export const SESSION_REPLAY_READ_ERROR_PREFIX_NOT_FOUND: string = "not-found:";
262
+
263
+ export const SESSION_REPLAY_READ_ERROR_PREFIXES: ReadonlyArray<string> = [
264
+ SESSION_REPLAY_READ_ERROR_PREFIX_EXPIRED,
265
+ SESSION_REPLAY_READ_ERROR_PREFIX_ERASED,
266
+ SESSION_REPLAY_READ_ERROR_PREFIX_NOT_FOUND,
267
+ ];
268
+
269
+ /*
270
+ * The session header exactly as SessionReplayReadService.getSessionHeader
271
+ * builds it, serialised. The identity fields and the engagement counters
272
+ * are additive.
273
+ */
274
+ export interface SessionReplayManifestHeaderDto {
275
+ sessionId: string;
276
+ projectId: string;
277
+ rumApplicationId: string;
278
+ startTime: string;
279
+ endTime: string;
280
+ durationMs: number;
281
+ isFinalized: boolean;
282
+ sealedReason: string;
283
+ chunkCount: number;
284
+ maxChunkIndex: number;
285
+ missingChunkCount: number;
286
+ eventCount: number;
287
+ payloadBytes: number;
288
+ hasError: boolean;
289
+ errorCount: number;
290
+ rageClickCount: number;
291
+ deadClickCount: number;
292
+ errorClickCount: number;
293
+ refreshRageCount: number;
294
+ pageCount: number;
295
+ triggerReason: string;
296
+ maskingMode: string;
297
+ consentState: string;
298
+ recorderKind: string;
299
+ recorderVersion: string;
300
+ rrwebVersion: string;
301
+ schemaVersion: number;
302
+ wireVersion: number;
303
+ entryUrl: string;
304
+ exitUrl: string;
305
+ routes: Array<string>;
306
+ browserName: string;
307
+ browserVersion: string;
308
+ osName: string;
309
+ deviceType: string;
310
+ countryCode: string;
311
+ viewportWidth: number;
312
+ viewportHeight: number;
313
+ fidelityNotices: Array<string>;
314
+ fullSnapshotChunkIndexes: Array<number>;
315
+ traceIds: Array<string>;
316
+ exceptionFingerprints: Array<string>;
317
+ /* Client-minus-server, positive when the device runs ahead. */
318
+ clockSkewMs: number;
319
+
320
+ /* ---- Additive. ---- */
321
+
322
+ /*
323
+ * The session clock. Every telemetry row is placed on the timeline as
324
+ * rowUnixMs - startTimeUnixMs, so this is a number rather than a
325
+ * re-parsed ISO string.
326
+ */
327
+ startTimeUnixMs?: number;
328
+ endTimeUnixMs?: number;
329
+ /* The recorder's own start clock, before clamping. */
330
+ clientReportedStartUnixMs?: number;
331
+ tags?: Record<string, string>;
332
+ expiresAtUnixMs?: number;
333
+ clickCount?: number;
334
+ customEventCount?: number;
335
+ activeMs?: number;
336
+ firstErrorOffsetMs?: number;
337
+ /* Both present ONLY when the identity permission check passes. */
338
+ identifiedUserLabel?: string;
339
+ identifiedUserTraits?: Record<string, string>;
340
+ /*
341
+ * From chunk 0's envelope, so the player can say what an older recorder
342
+ * could not capture. Empty for recordings that predate the field.
343
+ */
344
+ recorderCapabilities?: Array<string>;
345
+ }
346
+
347
+ export interface SessionReplayManifestTabDto {
348
+ tabId: string;
349
+ chunks: Array<SessionReplayChunkManifestEntry>;
350
+ chunkIndexes: Array<number>;
351
+ fullSnapshotChunkIndexes: Array<number>;
352
+ gaps: Array<SessionReplayGap>;
353
+ maxChunkIndex: number;
354
+ totalPayloadBytes: number;
355
+ /*
356
+ * Additive. Where this tab's footage begins on the session clock, so the
357
+ * tab pill can say "Tab 2 - 30s (opened 2:14)".
358
+ */
359
+ firstChunkStartOffsetMs?: number;
360
+ }
361
+
362
+ export interface SessionReplayManifestResponseDto {
363
+ /* The audit row this read created; null only if no row could be made. */
364
+ viewId: string | null;
365
+ header: SessionReplayManifestHeaderDto;
366
+ tabs: Array<SessionReplayManifestTabDto>;
367
+ isChunkIndexTruncated: boolean;
368
+ }
369
+
370
+ /* ---- /heartbeat ---- */
371
+
372
+ export interface SessionReplayHeartbeatRequestDto {
373
+ viewId: string;
374
+ secondsWatched: number;
375
+ }
376
+
377
+ export interface SessionReplayHeartbeatResponseDto {
378
+ /* Floored to the 15s cadence server-side. */
379
+ secondsWatched: number;
380
+ }
381
+
382
+ /* ---- /views ---- */
383
+
384
+ /*
385
+ * "Who watched this recording". Every manifest read has written an audit
386
+ * row since the feature shipped; this route is what finally shows them,
387
+ * so a viewer can see that a colleague already watched (and why) instead
388
+ * of watching a customer's session a second time. Behind the payload
389
+ * permission, not the list permission: the viewer list is a fact about a
390
+ * recording of a real person and belongs to the people who may watch it.
391
+ */
392
+ export interface SessionReplayViewsRequestDto {
393
+ sessionId: string;
394
+ /*
395
+ * Same disambiguator as the manifest request - a session id is only
396
+ * unique within one application, and the server refuses to guess.
397
+ */
398
+ rumApplicationId?: string;
399
+ /* Server-capped; asking for more returns the cap, not an error. */
400
+ limit?: number;
401
+ }
402
+
403
+ /*
404
+ * The viewer, as the route projects them off the joined user row. The
405
+ * whole object is null for a view whose user was deleted since: the audit
406
+ * row outlives the account, and dropping the view would understate who
407
+ * has seen the recording. name/email are "" rather than null when the
408
+ * user row carries no value, so the header can render one branch.
409
+ */
410
+ export interface SessionReplayViewerDto {
411
+ id: string | null;
412
+ name: string;
413
+ email: string;
414
+ profilePictureId: string | null;
415
+ }
416
+
417
+ export interface SessionReplayViewDto {
418
+ /* The audit row's id; null only when the row could not be serialised. */
419
+ id: string | null;
420
+ /* ISO-8601, null when the row carries no timestamp. */
421
+ viewedAt: string | null;
422
+ /*
423
+ * Floored to the 15s heartbeat cadence. 0 is a REAL measurement here -
424
+ * a view that opened the player and never got a heartbeat in - so the
425
+ * header says "opened, not watched" rather than hiding the row.
426
+ */
427
+ secondsWatched: number;
428
+ /* Free text the reader gave ("incident-1234"); "" when they gave none. */
429
+ accessReason: string;
430
+ viewedByUserId: string | null;
431
+ viewedByUser: SessionReplayViewerDto | null;
432
+ }
433
+
434
+ export interface SessionReplayViewsResponseDto {
435
+ views: Array<SessionReplayViewDto>;
436
+ }
437
+
438
+ /* ---- /for-exception ---- */
439
+
440
+ export interface SessionReplayForExceptionRequestDto {
441
+ fingerprint: string;
442
+ /* ISO-8601 bounds; without them the server defaults to a 30-day window. */
443
+ startTime?: string;
444
+ endTime?: string;
445
+ limit?: number;
446
+ /*
447
+ * Additive. Pin the lookup to the session the exception instance itself
448
+ * carried, so the card lands on THIS occurrence's recording rather than
449
+ * on whichever session of the group sorted first.
450
+ */
451
+ sessionId?: string;
452
+ /*
453
+ * Additive. The instance's own time in unix ms; the server derives the
454
+ * partition window from it, so the card never scans the whole project.
455
+ */
456
+ errorTimeUnixMs?: number;
457
+ }
458
+
459
+ export interface SessionReplayExceptionSessionDto {
460
+ sessionId: string;
461
+ rumApplicationId: string;
462
+ startTime: string;
463
+ endTime: string;
464
+ durationMs: number;
465
+ hasError: boolean;
466
+ errorCount: number;
467
+ rageClickCount: number;
468
+ deadClickCount: number;
469
+ errorClickCount: number;
470
+ refreshRageCount: number;
471
+ maskingMode: string;
472
+ triggerReason: string;
473
+ entryUrl: string;
474
+ browserName: string;
475
+ osName: string;
476
+ deviceType: string;
477
+ isFinalized: boolean;
478
+ }
479
+
480
+ export interface SessionReplayForExceptionResponseDto {
481
+ sessions: Array<SessionReplayExceptionSessionDto>;
482
+ /* The accessible-application scan has a ceiling; true when it was hit. */
483
+ isApplicationScopeTruncated: boolean;
484
+ }
485
+
486
+ /* ---- /ingest-status ---- */
487
+
488
+ export interface SessionReplayIngestStatusRequestDto {
489
+ rumApplicationId: string;
490
+ }
491
+
492
+ /*
493
+ * The response is the wire form of RecordingHealthStatus; see
494
+ * Common/Types/Rum/SessionReplayHealth.ts, which owns it because the
495
+ * health diagnosis is the only consumer.
496
+ */
497
+
498
+ /* ---- Defensive row readers shared by the Dashboard parsers. ---- */
499
+
500
+ /*
501
+ * Every route above answers a hand-written ClickHouse projection, not a
502
+ * model serialisation, so nothing is trusted: numbers may arrive as
503
+ * strings (ClickHouse quotes 64-bit integers in JSON), UInt8 booleans as
504
+ * 0/1 or "0"/"1", and any field may be absent on an older server.
505
+ */
506
+
507
+ /* A finite number, or 0. Use readDtoOptionalNumber when 0 would be a lie. */
508
+ export function readDtoNumber(
509
+ row: Record<string, unknown>,
510
+ key: string,
511
+ ): number {
512
+ const parsed: number = Number(row[key]);
513
+
514
+ return Number.isFinite(parsed) ? parsed : 0;
515
+ }
516
+
517
+ /*
518
+ * A finite number, or undefined when the field is absent, null, or not a
519
+ * number. This is the reader for every additive counter: "not measured"
520
+ * must stay distinguishable from "measured as zero" all the way to the UI.
521
+ */
522
+ export function readDtoOptionalNumber(
523
+ row: Record<string, unknown>,
524
+ key: string,
525
+ ): number | undefined {
526
+ const value: unknown = row[key];
527
+
528
+ if (value === null || value === undefined || value === "") {
529
+ return undefined;
530
+ }
531
+
532
+ const parsed: number = Number(value);
533
+
534
+ return Number.isFinite(parsed) ? parsed : undefined;
535
+ }
536
+
537
+ export function readDtoString(
538
+ row: Record<string, unknown>,
539
+ key: string,
540
+ ): string {
541
+ const value: unknown = row[key];
542
+
543
+ return value === null || value === undefined ? "" : String(value);
544
+ }
545
+
546
+ /* A non-empty string, or undefined. */
547
+ export function readDtoOptionalString(
548
+ row: Record<string, unknown>,
549
+ key: string,
550
+ ): string | undefined {
551
+ const value: unknown = row[key];
552
+
553
+ if (typeof value === "string") {
554
+ return value.length > 0 ? value : undefined;
555
+ }
556
+
557
+ return undefined;
558
+ }
559
+
560
+ /* ClickHouse UInt8 booleans arrive as 0/1, sometimes as the strings "0"/"1". */
561
+ export function readDtoBoolean(
562
+ row: Record<string, unknown>,
563
+ key: string,
564
+ ): boolean {
565
+ const value: unknown = row[key];
566
+
567
+ return value === true || value === 1 || value === "1";
568
+ }
569
+
570
+ export function readDtoStringArray(
571
+ row: Record<string, unknown>,
572
+ key: string,
573
+ ): Array<string> {
574
+ const value: unknown = row[key];
575
+
576
+ if (!Array.isArray(value)) {
577
+ return [];
578
+ }
579
+
580
+ return value.map((entry: unknown): string => {
581
+ return String(entry);
582
+ });
583
+ }
584
+
585
+ export function readDtoNumberArray(
586
+ row: Record<string, unknown>,
587
+ key: string,
588
+ ): Array<number> {
589
+ const value: unknown = row[key];
590
+
591
+ if (!Array.isArray(value)) {
592
+ return [];
593
+ }
594
+
595
+ const numbers: Array<number> = [];
596
+
597
+ for (const entry of value) {
598
+ const parsed: number = Number(entry);
599
+
600
+ if (Number.isFinite(parsed)) {
601
+ numbers.push(parsed);
602
+ }
603
+ }
604
+
605
+ return numbers;
606
+ }
607
+
608
+ /*
609
+ * A Map(String, String) column, serialised by ClickHouse as a JSON object.
610
+ * Non-object values (including arrays) read as an empty map; values are
611
+ * stringified so a numeric-looking tag still renders.
612
+ */
613
+ export function readDtoStringMap(
614
+ row: Record<string, unknown>,
615
+ key: string,
616
+ ): Record<string, string> {
617
+ const value: unknown = row[key];
618
+ const result: Record<string, string> = {};
619
+
620
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
621
+ return result;
622
+ }
623
+
624
+ for (const entryKey of Object.keys(value as Record<string, unknown>)) {
625
+ const entry: unknown = (value as Record<string, unknown>)[entryKey];
626
+
627
+ if (entry === null || entry === undefined) {
628
+ continue;
629
+ }
630
+
631
+ result[entryKey] = String(entry);
632
+ }
633
+
634
+ return result;
635
+ }
636
+
637
+ /*
638
+ * An ISO-8601 timestamp as unix ms, or undefined when absent or
639
+ * unparseable. Never 0: epoch is a real instant and would place a row at
640
+ * 1970 on the timeline.
641
+ */
642
+ export function readDtoUnixMs(
643
+ row: Record<string, unknown>,
644
+ key: string,
645
+ ): number | undefined {
646
+ const value: unknown = row[key];
647
+
648
+ if (typeof value === "number") {
649
+ return Number.isFinite(value) ? value : undefined;
650
+ }
651
+
652
+ if (typeof value !== "string" || value.length === 0) {
653
+ return undefined;
654
+ }
655
+
656
+ const parsed: number = Date.parse(value);
657
+
658
+ return Number.isFinite(parsed) ? parsed : undefined;
659
+ }
660
+
661
+ /*
662
+ * True when the cursor carries the additive sort fields; false for the
663
+ * legacy {startTimeUnixMs, sessionId} shape.
664
+ */
665
+ export function isSessionReplaySortedListCursor(
666
+ cursor: SessionReplayListCursorDto,
667
+ ): cursor is SessionReplaySortedListCursorDto {
668
+ return (
669
+ typeof (cursor as SessionReplaySortedListCursorDto).sortBy === "string" &&
670
+ typeof (cursor as SessionReplaySortedListCursorDto).sortValue === "number"
671
+ );
672
+ }
673
+
674
+ /*
675
+ * Read a cursor off an untyped body. The legacy shape is normalised to
676
+ * sortBy "startTime" so callers have one branch to write. Returns null
677
+ * when neither shape is present.
678
+ */
679
+ export function parseSessionReplayListCursor(
680
+ value: unknown,
681
+ ): SessionReplaySortedListCursorDto | null {
682
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
683
+ return null;
684
+ }
685
+
686
+ const row: Record<string, unknown> = value as Record<string, unknown>;
687
+ const sessionId: string | undefined = readDtoOptionalString(row, "sessionId");
688
+
689
+ if (!sessionId) {
690
+ return null;
691
+ }
692
+
693
+ const sortBy: unknown = row["sortBy"];
694
+ const sortValue: number | undefined = readDtoOptionalNumber(row, "sortValue");
695
+
696
+ if (
697
+ typeof sortBy === "string" &&
698
+ (SESSION_REPLAY_SORT_BY_VALUES as ReadonlyArray<string>).includes(sortBy) &&
699
+ sortValue !== undefined
700
+ ) {
701
+ return {
702
+ sortBy: sortBy as SessionReplaySortBy,
703
+ sortValue: sortValue,
704
+ sessionId: sessionId,
705
+ };
706
+ }
707
+
708
+ const startTimeUnixMs: number | undefined = readDtoOptionalNumber(
709
+ row,
710
+ "startTimeUnixMs",
711
+ );
712
+
713
+ if (startTimeUnixMs !== undefined) {
714
+ return {
715
+ sortBy: "startTime",
716
+ sortValue: startTimeUnixMs,
717
+ sessionId: sessionId,
718
+ };
719
+ }
720
+
721
+ return null;
722
+ }