@oneuptime/common 12.0.23 → 12.0.25

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 (323) hide show
  1. package/Models/AnalyticsModels/Span.ts +101 -0
  2. package/Models/DatabaseModels/DetectionRule.ts +55 -0
  3. package/Models/DatabaseModels/NetworkDeviceAutoImportRule.ts +27 -7
  4. package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +67 -0
  5. package/Models/DatabaseModels/Project.ts +68 -0
  6. package/Models/DatabaseModels/User.ts +68 -0
  7. package/Server/API/BaseAPI.ts +0 -24
  8. package/Server/API/SlackAPI.ts +0 -2
  9. package/Server/API/TelemetryAPI.ts +29 -0
  10. package/Server/Infrastructure/Postgres/SchemaMigrations/1789400000000-AddNameToNetworkDeviceDiscoveryScan.ts +28 -0
  11. package/Server/Infrastructure/Postgres/SchemaMigrations/1789500000000-AddCampaignUtmFields.ts +49 -0
  12. package/Server/Infrastructure/Postgres/SchemaMigrations/1789512000000-AddDetectionRuleDistinctCountColumns.ts +33 -0
  13. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
  14. package/Server/Middleware/GzipRequestBody.ts +311 -0
  15. package/Server/Middleware/MultipartFormData.ts +87 -3
  16. package/Server/Middleware/SlackAuthorization.ts +96 -18
  17. package/Server/Services/DetectionRuleService.ts +73 -6
  18. package/Server/Services/Index.ts +205 -0
  19. package/Server/Services/NetworkDeviceDiscoveryScanService.ts +59 -0
  20. package/Server/Services/NetworkDeviceService.ts +148 -0
  21. package/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.ts +65 -0
  22. package/Server/Services/OnCallDutyPolicyFeedService.ts +1 -1
  23. package/Server/Services/ProjectService.ts +29 -19
  24. package/Server/Services/SecurityEventService.ts +90 -13
  25. package/Server/Services/StatusPageResourceService.ts +223 -0
  26. package/Server/Services/TelemetryAttributeService.ts +17 -0
  27. package/Server/Services/UserService.ts +4 -6
  28. package/Server/Types/Markdown.ts +161 -67
  29. package/Server/Utils/AI/Toolbox/OnCallTools.ts +12 -4
  30. package/Server/Utils/AnalyticsDatabase/Statement.ts +13 -1
  31. package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +297 -6
  32. package/Server/Utils/Attribution.ts +4 -0
  33. package/Server/Utils/Marketing/MarketingEventUtil.ts +45 -7
  34. package/Server/Utils/SecurityEvent/DetectionRuleEvaluator.ts +55 -3
  35. package/Server/Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler.ts +21 -0
  36. package/Server/Utils/StartServer.ts +12 -32
  37. package/Server/Utils/Telemetry/LlmCostBudgetEvaluator.ts +101 -4
  38. package/Server/Utils/Telemetry/LlmMetricSpend.ts +181 -0
  39. package/Server/Utils/Telemetry/LlmSpan.ts +46 -0
  40. package/Server/Utils/Workspace/Slack/Actions/Auth.ts +0 -12
  41. package/Server/Views/Partials/AnalyticsConsent.ejs +159 -102
  42. package/Server/Views/Partials/Head.ejs +2 -1
  43. package/Tests/App/Dashboard/AdminUserNotificationMethodsPage.test.tsx +776 -38
  44. package/Tests/App/Dashboard/CorrelateFilterBuilder.test.tsx +359 -0
  45. package/Tests/App/Dashboard/CorrelateGraph.test.tsx +865 -0
  46. package/Tests/App/Dashboard/CorrelationGraph.test.ts +346 -0
  47. package/Tests/App/Dashboard/CriteriaFilterConditionDropdown.test.tsx +256 -0
  48. package/Tests/App/Dashboard/CriteriaFilterDefaults.test.ts +738 -0
  49. package/Tests/App/Dashboard/CriteriaFilterMonitorTypeChange.test.ts +1122 -0
  50. package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +283 -0
  51. package/Tests/App/Dashboard/ExternalStatusPageCriteriaFilter.test.ts +407 -0
  52. package/Tests/App/Dashboard/LlmCallsTableIdentity.test.tsx +322 -0
  53. package/Tests/App/Dashboard/LlmOverview.test.tsx +335 -0
  54. package/Tests/App/Dashboard/LlmSpanDisplay.test.ts +391 -0
  55. package/Tests/App/Dashboard/LlmUsageBreakdown.test.tsx +1007 -0
  56. package/Tests/App/Dashboard/MetricSeriesInvestigateMenu.test.tsx +5 -14
  57. package/Tests/App/Dashboard/MonitorCriteriaActionToggles.test.tsx +426 -0
  58. package/Tests/App/Dashboard/MonitorStepsCriteriaAlignmentWiring.test.tsx +352 -0
  59. package/Tests/App/Dashboard/OnCallLayerCardOverrides.test.tsx +278 -0
  60. package/Tests/App/Dashboard/OnCallLayerShiftPreviewOverrides.test.ts +237 -0
  61. package/Tests/App/Dashboard/OnCallReadinessSurfaces.test.tsx +2 -2
  62. package/Tests/App/Dashboard/OnCallSchedulePreviewOverrides.test.tsx +460 -0
  63. package/Tests/App/Dashboard/SecurityEventAttributeUtil.test.ts +171 -0
  64. package/Tests/App/Dashboard/SecurityEventCorrelation.test.ts +857 -0
  65. package/Tests/App/Dashboard/SecurityEventDetailObservables.test.tsx +194 -0
  66. package/Tests/App/Dashboard/SecurityEventsDetectionRulesPage.test.tsx +124 -0
  67. package/Tests/App/Dashboard/SecurityEventsMonitorStepForm.test.tsx +79 -19
  68. package/Tests/App/Dashboard/SecurityEventsTableColumns.test.tsx +382 -0
  69. package/Tests/App/StatusPage/BulkAddStatusPageMonitors.test.ts +216 -0
  70. package/Tests/App/StatusPage/BulkAddStatusPageMonitorsModal.test.tsx +590 -11
  71. package/Tests/App/StatusPage/StatusPageResourceExplorer.test.tsx +757 -0
  72. package/Tests/Models/DiscoveryScanNameColumn.test.ts +293 -0
  73. package/Tests/Server/API/BaseAPI.test.ts +41 -0
  74. package/Tests/Server/API/BaseAPIUpdatePayloadValidation.test.ts +9 -16
  75. package/Tests/Server/API/SecurityEventAttributesAPI.test.ts +564 -0
  76. package/Tests/Server/Infrastructure/Postgres/SchemaMigrationsOrdering.test.ts +120 -4
  77. package/Tests/Server/Middleware/GzipRequestBody.test.ts +725 -0
  78. package/Tests/Server/Middleware/MultipartFormData.test.ts +298 -0
  79. package/Tests/Server/Middleware/SlackAuthorization.test.ts +262 -5
  80. package/Tests/Server/Services/AddDetectionRuleDistinctCountColumnsMigration.test.ts +311 -0
  81. package/Tests/Server/Services/DetectionRuleService.test.ts +134 -2
  82. package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +7 -1
  83. package/Tests/Server/Services/FeedRetentionConsistency.test.ts +131 -0
  84. package/Tests/Server/Services/NetworkDeviceDiscoveryScanService.test.ts +194 -0
  85. package/Tests/Server/Services/NetworkDeviceMonitorStatusStamp.test.ts +800 -0
  86. package/Tests/Server/Services/OnCallScheduleAttachRosterRefresh.test.ts +244 -0
  87. package/Tests/Server/Services/SecurityEventService.test.ts +376 -0
  88. package/Tests/Server/Services/StatusPageResourceDuplicates.test.ts +703 -0
  89. package/Tests/Server/Services/TelemetryAttributeServiceSecurityEvent.test.ts +256 -0
  90. package/Tests/Server/Types/Workflow/Components/ComponentRegistryParity.test.ts +417 -0
  91. package/Tests/Server/Utils/AnalyticsDatabase/StatementGeneratorWhereOperators.test.ts +677 -0
  92. package/Tests/Server/Utils/Marketing/MarketingEventUtil.test.ts +43 -0
  93. package/Tests/Server/Utils/Monitor/Criteria/ProfileMonitorCriteria.test.ts +15 -11
  94. package/Tests/Server/Utils/SecurityEvent/DetectionRuleEvaluator.test.ts +369 -8
  95. package/Tests/Server/Utils/SecurityEvent/SigmaClickhouseCompiler.test.ts +35 -0
  96. package/Tests/Server/Utils/Telemetry/LlmCostBudgetEvaluator.test.ts +387 -4
  97. package/Tests/Server/Utils/Telemetry/LlmMetricSpend.test.ts +386 -0
  98. package/Tests/Server/Utils/Telemetry/LlmSpan.test.ts +804 -0
  99. package/Tests/Server/Views/AnalyticsConsentPartial.test.ts +48 -5
  100. package/Tests/Types/Code/YamlSyntax.test.ts +396 -0
  101. package/Tests/Types/Monitor/MetricAndProfileDefaultCriteria.test.ts +957 -0
  102. package/Tests/Types/Monitor/MonitorCriteriaActionValidation.test.ts +598 -0
  103. package/Tests/Types/Monitor/MonitorCriteriaInstance.test.ts +49 -0
  104. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +6 -6
  105. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.test.ts +4 -4
  106. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationUtil.test.ts +4 -3
  107. package/Tests/Types/Telemetry/LlmMetricConventions.test.ts +584 -0
  108. package/Tests/UI/Components/AiInvestigationSettingsCard.test.tsx +0 -12
  109. package/Tests/UI/Components/CardModelDetailEdit.test.tsx +1 -17
  110. package/Tests/UI/Components/CodeEditor.test.tsx +474 -10
  111. package/Tests/UI/Components/Detail/YamlField.test.tsx +105 -0
  112. package/Tests/UI/Components/EntityDropdownLabelsBulkAdd.test.tsx +319 -0
  113. package/Tests/UI/Components/Forms/FormFieldYaml.test.tsx +231 -0
  114. package/Tests/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.test.ts +1 -0
  115. package/Tests/UI/Components/Forms/ValidationYAML.test.ts +234 -0
  116. package/Tests/UI/Components/ModelTable/AttributeColumns.test.tsx +573 -0
  117. package/Tests/UI/Components/ModelTable/BaseModelTableAttributeColumns.test.tsx +824 -0
  118. package/Tests/UI/Components/ModelTable/ColumnCustomizationModalAddableColumns.test.tsx +707 -0
  119. package/Tests/UI/Components/SideOver.test.tsx +1 -1
  120. package/Tests/UI/Components/StatusPage/ResourceGridSelection.test.tsx +294 -0
  121. package/Tests/UI/Components/StatusPage/ResourceListSelection.test.tsx +436 -0
  122. package/Tests/UI/Components/TableBulkCsvExport.test.tsx +6 -2
  123. package/Tests/UI/Components/Toggle.test.tsx +25 -0
  124. package/Tests/UI/Components/YamlEditor.test.tsx +847 -0
  125. package/Tests/Utils/NetworkDevice/DeviceReachabilityUtil.test.ts +252 -0
  126. package/Tests/Utils/NetworkDiscovery/DiscoveredHostUtil.test.ts +221 -0
  127. package/Tests/Utils/NetworkDiscovery/ScanNameUtil.test.ts +312 -0
  128. package/Tests/Utils/StatusPage/ResourceExplorer.test.ts +468 -0
  129. package/Tests/Utils/Telemetry/LlmMetricQuery.test.ts +770 -0
  130. package/Types/Code/YamlSyntax.ts +396 -0
  131. package/Types/Exception/ExceptionCode.ts +1 -0
  132. package/Types/Exception/PayloadTooLargeException.ts +8 -0
  133. package/Types/Marketing/Attribution.ts +10 -0
  134. package/Types/Marketing/MarketingEvent.ts +4 -0
  135. package/Types/Monitor/MonitorCriteriaInstance.ts +116 -56
  136. package/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.ts +2 -1
  137. package/Types/SecurityEvent/DetectionFindingConstants.ts +11 -0
  138. package/Types/Telemetry/LlmConventions.ts +255 -0
  139. package/Types/Telemetry/LlmMetricConventions.ts +329 -0
  140. package/UI/Components/AutocompleteTextInput/AutocompleteTextInput.tsx +3 -0
  141. package/UI/Components/BulkUpdate/BulkUpdateForm.tsx +10 -1
  142. package/UI/Components/CodeEditor/CodeEditor.tsx +241 -79
  143. package/UI/Components/CodeEditor/YamlEditor.tsx +369 -0
  144. package/UI/Components/Detail/Detail.tsx +10 -0
  145. package/UI/Components/EntityDropdown/EntityDropdown.tsx +33 -0
  146. package/UI/Components/Forms/Fields/FormField.tsx +31 -0
  147. package/UI/Components/Forms/Types/Field.ts +8 -0
  148. package/UI/Components/Forms/Types/FormFieldSchemaType.ts +1 -0
  149. package/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.ts +2 -0
  150. package/UI/Components/Forms/Validation.ts +46 -0
  151. package/UI/Components/Input/Input.tsx +3 -0
  152. package/UI/Components/ModelTable/AttributeColumns.tsx +321 -0
  153. package/UI/Components/ModelTable/BaseModelTable.tsx +263 -14
  154. package/UI/Components/ModelTable/Column.ts +8 -0
  155. package/UI/Components/ModelTable/ColumnCustomizationModal.tsx +310 -0
  156. package/UI/Components/ModelTable/ColumnPreference.ts +13 -1
  157. package/UI/Components/MonitorTemplateVariables/TemplateVariablesModal.tsx +2 -2
  158. package/UI/Components/SideOver/SideOver.tsx +5 -5
  159. package/UI/Components/StatusPage/ResourceGrid.tsx +82 -2
  160. package/UI/Components/StatusPage/ResourceList.tsx +197 -38
  161. package/UI/Components/Toggle/Toggle.tsx +9 -1
  162. package/UI/Components/Types/FieldType.ts +1 -0
  163. package/Utils/NetworkDevice/DeviceReachabilityUtil.ts +73 -1
  164. package/Utils/NetworkDiscovery/ScanNameUtil.ts +181 -0
  165. package/Utils/StatusPage/ResourceExplorer.ts +258 -0
  166. package/Utils/Telemetry/LlmMetricQuery.ts +287 -0
  167. package/build/dist/Models/AnalyticsModels/Span.js +89 -0
  168. package/build/dist/Models/AnalyticsModels/Span.js.map +1 -1
  169. package/build/dist/Models/DatabaseModels/DetectionRule.js +57 -0
  170. package/build/dist/Models/DatabaseModels/DetectionRule.js.map +1 -1
  171. package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js +27 -7
  172. package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js.map +1 -1
  173. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js +69 -0
  174. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
  175. package/build/dist/Models/DatabaseModels/Project.js +76 -0
  176. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  177. package/build/dist/Models/DatabaseModels/User.js +76 -0
  178. package/build/dist/Models/DatabaseModels/User.js.map +1 -1
  179. package/build/dist/Server/API/BaseAPI.js +3 -19
  180. package/build/dist/Server/API/BaseAPI.js.map +1 -1
  181. package/build/dist/Server/API/SlackAPI.js +0 -2
  182. package/build/dist/Server/API/SlackAPI.js.map +1 -1
  183. package/build/dist/Server/API/TelemetryAPI.js +17 -0
  184. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  185. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789400000000-AddNameToNetworkDeviceDiscoveryScan.js +21 -0
  186. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789400000000-AddNameToNetworkDeviceDiscoveryScan.js.map +1 -0
  187. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789500000000-AddCampaignUtmFields.js +42 -0
  188. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789500000000-AddCampaignUtmFields.js.map +1 -0
  189. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789512000000-AddDetectionRuleDistinctCountColumns.js +22 -0
  190. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789512000000-AddDetectionRuleDistinctCountColumns.js.map +1 -0
  191. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -0
  192. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  193. package/build/dist/Server/Middleware/GzipRequestBody.js +224 -0
  194. package/build/dist/Server/Middleware/GzipRequestBody.js.map +1 -0
  195. package/build/dist/Server/Middleware/MultipartFormData.js +71 -2
  196. package/build/dist/Server/Middleware/MultipartFormData.js.map +1 -1
  197. package/build/dist/Server/Middleware/SlackAuthorization.js +58 -7
  198. package/build/dist/Server/Middleware/SlackAuthorization.js.map +1 -1
  199. package/build/dist/Server/Services/DetectionRuleService.js +49 -4
  200. package/build/dist/Server/Services/DetectionRuleService.js.map +1 -1
  201. package/build/dist/Server/Services/Index.js +204 -0
  202. package/build/dist/Server/Services/Index.js.map +1 -1
  203. package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js +50 -0
  204. package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js.map +1 -1
  205. package/build/dist/Server/Services/NetworkDeviceService.js +124 -0
  206. package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
  207. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js +68 -13
  208. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js.map +1 -1
  209. package/build/dist/Server/Services/OnCallDutyPolicyFeedService.js +1 -1
  210. package/build/dist/Server/Services/OnCallDutyPolicyFeedService.js.map +1 -1
  211. package/build/dist/Server/Services/ProjectService.js +25 -45
  212. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  213. package/build/dist/Server/Services/SecurityEventService.js +57 -5
  214. package/build/dist/Server/Services/SecurityEventService.js.map +1 -1
  215. package/build/dist/Server/Services/StatusPageResourceService.js +140 -0
  216. package/build/dist/Server/Services/StatusPageResourceService.js.map +1 -1
  217. package/build/dist/Server/Services/TelemetryAttributeService.js +17 -0
  218. package/build/dist/Server/Services/TelemetryAttributeService.js.map +1 -1
  219. package/build/dist/Server/Services/UserService.js +2 -12
  220. package/build/dist/Server/Services/UserService.js.map +1 -1
  221. package/build/dist/Server/Types/Markdown.js +147 -61
  222. package/build/dist/Server/Types/Markdown.js.map +1 -1
  223. package/build/dist/Server/Utils/AI/Toolbox/OnCallTools.js +12 -4
  224. package/build/dist/Server/Utils/AI/Toolbox/OnCallTools.js.map +1 -1
  225. package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js +12 -1
  226. package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js.map +1 -1
  227. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +246 -9
  228. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
  229. package/build/dist/Server/Utils/Attribution.js.map +1 -1
  230. package/build/dist/Server/Utils/Marketing/MarketingEventUtil.js +27 -7
  231. package/build/dist/Server/Utils/Marketing/MarketingEventUtil.js.map +1 -1
  232. package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js +42 -7
  233. package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js.map +1 -1
  234. package/build/dist/Server/Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler.js +18 -0
  235. package/build/dist/Server/Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler.js.map +1 -1
  236. package/build/dist/Server/Utils/StartServer.js +12 -21
  237. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  238. package/build/dist/Server/Utils/Telemetry/LlmCostBudgetEvaluator.js +76 -5
  239. package/build/dist/Server/Utils/Telemetry/LlmCostBudgetEvaluator.js.map +1 -1
  240. package/build/dist/Server/Utils/Telemetry/LlmMetricSpend.js +151 -0
  241. package/build/dist/Server/Utils/Telemetry/LlmMetricSpend.js.map +1 -0
  242. package/build/dist/Server/Utils/Telemetry/LlmSpan.js +24 -1
  243. package/build/dist/Server/Utils/Telemetry/LlmSpan.js.map +1 -1
  244. package/build/dist/Server/Utils/Workspace/Slack/Actions/Auth.js +0 -10
  245. package/build/dist/Server/Utils/Workspace/Slack/Actions/Auth.js.map +1 -1
  246. package/build/dist/Types/Code/YamlSyntax.js +212 -0
  247. package/build/dist/Types/Code/YamlSyntax.js.map +1 -0
  248. package/build/dist/Types/Exception/ExceptionCode.js +1 -0
  249. package/build/dist/Types/Exception/ExceptionCode.js.map +1 -1
  250. package/build/dist/Types/Exception/PayloadTooLargeException.js +8 -0
  251. package/build/dist/Types/Exception/PayloadTooLargeException.js.map +1 -0
  252. package/build/dist/Types/Marketing/Attribution.js +10 -0
  253. package/build/dist/Types/Marketing/Attribution.js.map +1 -1
  254. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +112 -51
  255. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
  256. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js +2 -1
  257. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js.map +1 -1
  258. package/build/dist/Types/SecurityEvent/DetectionFindingConstants.js +9 -0
  259. package/build/dist/Types/SecurityEvent/DetectionFindingConstants.js.map +1 -1
  260. package/build/dist/Types/Telemetry/LlmConventions.js +236 -0
  261. package/build/dist/Types/Telemetry/LlmConventions.js.map +1 -1
  262. package/build/dist/Types/Telemetry/LlmMetricConventions.js +290 -0
  263. package/build/dist/Types/Telemetry/LlmMetricConventions.js.map +1 -0
  264. package/build/dist/UI/Components/AutocompleteTextInput/AutocompleteTextInput.js +1 -1
  265. package/build/dist/UI/Components/AutocompleteTextInput/AutocompleteTextInput.js.map +1 -1
  266. package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js +5 -2
  267. package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js.map +1 -1
  268. package/build/dist/UI/Components/CodeEditor/CodeEditor.js +206 -76
  269. package/build/dist/UI/Components/CodeEditor/CodeEditor.js.map +1 -1
  270. package/build/dist/UI/Components/CodeEditor/YamlEditor.js +201 -0
  271. package/build/dist/UI/Components/CodeEditor/YamlEditor.js.map +1 -0
  272. package/build/dist/UI/Components/Detail/Detail.js +9 -0
  273. package/build/dist/UI/Components/Detail/Detail.js.map +1 -1
  274. package/build/dist/UI/Components/EntityDropdown/EntityDropdown.js +16 -1
  275. package/build/dist/UI/Components/EntityDropdown/EntityDropdown.js.map +1 -1
  276. package/build/dist/UI/Components/Forms/Fields/FormField.js +14 -1
  277. package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
  278. package/build/dist/UI/Components/Forms/Types/Field.js.map +1 -1
  279. package/build/dist/UI/Components/Forms/Types/FormFieldSchemaType.js +1 -0
  280. package/build/dist/UI/Components/Forms/Types/FormFieldSchemaType.js.map +1 -1
  281. package/build/dist/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.js +2 -0
  282. package/build/dist/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.js.map +1 -1
  283. package/build/dist/UI/Components/Forms/Validation.js +27 -0
  284. package/build/dist/UI/Components/Forms/Validation.js.map +1 -1
  285. package/build/dist/UI/Components/Input/Input.js +1 -1
  286. package/build/dist/UI/Components/Input/Input.js.map +1 -1
  287. package/build/dist/UI/Components/ModelTable/AttributeColumns.js +159 -0
  288. package/build/dist/UI/Components/ModelTable/AttributeColumns.js.map +1 -0
  289. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +179 -17
  290. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  291. package/build/dist/UI/Components/ModelTable/ColumnCustomizationModal.js +133 -2
  292. package/build/dist/UI/Components/ModelTable/ColumnCustomizationModal.js.map +1 -1
  293. package/build/dist/UI/Components/ModelTable/ColumnPreference.js +7 -1
  294. package/build/dist/UI/Components/ModelTable/ColumnPreference.js.map +1 -1
  295. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesModal.js +2 -2
  296. package/build/dist/UI/Components/SideOver/SideOver.js +5 -5
  297. package/build/dist/UI/Components/StatusPage/ResourceGrid.js +28 -2
  298. package/build/dist/UI/Components/StatusPage/ResourceGrid.js.map +1 -1
  299. package/build/dist/UI/Components/StatusPage/ResourceList.js +87 -20
  300. package/build/dist/UI/Components/StatusPage/ResourceList.js.map +1 -1
  301. package/build/dist/UI/Components/Toggle/Toggle.js +9 -1
  302. package/build/dist/UI/Components/Toggle/Toggle.js.map +1 -1
  303. package/build/dist/UI/Components/Types/FieldType.js +1 -0
  304. package/build/dist/UI/Components/Types/FieldType.js.map +1 -1
  305. package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js +37 -1
  306. package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js.map +1 -1
  307. package/build/dist/Utils/NetworkDiscovery/ScanNameUtil.js +120 -0
  308. package/build/dist/Utils/NetworkDiscovery/ScanNameUtil.js.map +1 -0
  309. package/build/dist/Utils/StatusPage/ResourceExplorer.js +171 -0
  310. package/build/dist/Utils/StatusPage/ResourceExplorer.js.map +1 -1
  311. package/build/dist/Utils/Telemetry/LlmMetricQuery.js +175 -0
  312. package/build/dist/Utils/Telemetry/LlmMetricQuery.js.map +1 -0
  313. package/jest.config.json +2 -0
  314. package/package.json +1 -1
  315. package/tsconfig.json +2 -1
  316. package/Tests/UI/Components/Toast.test.tsx +0 -197
  317. package/Tests/UI/Components/ToastStacking.test.tsx +0 -198
  318. package/UI/Components/Toast/Toast.tsx +0 -189
  319. package/UI/Components/Toast/ToastInit.tsx +0 -110
  320. package/build/dist/UI/Components/Toast/Toast.js +0 -123
  321. package/build/dist/UI/Components/Toast/Toast.js.map +0 -1
  322. package/build/dist/UI/Components/Toast/ToastInit.js +0 -53
  323. package/build/dist/UI/Components/Toast/ToastInit.js.map +0 -1
@@ -0,0 +1,396 @@
1
+ import {
2
+ hasEachBlock,
3
+ maskTemplateExpressions,
4
+ } from "../Workflow/TemplateSyntax";
5
+ import yaml from "js-yaml";
6
+
7
+ /*
8
+ * Is this text parseable as YAML?
9
+ *
10
+ * The JSON twin of this module lives in Types/Workflow/TemplateSyntax.ts
11
+ * (checkJSONSyntax) and this deliberately mirrors its contract, because the
12
+ * two are used side by side by Forms/Validation.ts and a caller should not
13
+ * have to remember which one skips what.
14
+ *
15
+ * Deliberately permissive, for the same reason checkJSONSyntax is: a false
16
+ * positive blocks Save on a document that actually works. Anything this
17
+ * module cannot decide about is reported valid and flagged as skipped.
18
+ */
19
+
20
+ export interface YamlSyntaxCheckResult {
21
+ /**
22
+ * False only when the document is definitely malformed. A value this module
23
+ * cannot decide about (a handlebars loop, a non-string, an empty box) is
24
+ * reported valid.
25
+ */
26
+ isValid: boolean;
27
+ /**
28
+ * The parser's own reason ("bad indentation of a mapping entry"), with no
29
+ * framing around it and no source snippet - callers phrase the sentence,
30
+ * since a form error and an editor status bar word it differently. Null
31
+ * when valid.
32
+ */
33
+ errorMessage: string | null;
34
+ /** True when the check was skipped rather than passed. */
35
+ wasSkipped: boolean;
36
+ /** 1-based line of the failure, when the parser reported one. */
37
+ line: number | null;
38
+ /** 1-based column of the failure, when the parser reported one. */
39
+ column: number | null;
40
+ }
41
+
42
+ /*
43
+ * js-yaml throws a YAMLException carrying `reason` (the message without the
44
+ * source snippet) and `mark` (0-based line/column). Neither is on the public
45
+ * type, and both are absent on a non-YAMLException, so read them defensively.
46
+ */
47
+ interface YamlExceptionShape {
48
+ reason?: string | undefined;
49
+ mark?: { line?: number | undefined; column?: number | undefined } | undefined;
50
+ }
51
+
52
+ type ReadMarkFunction = (error: unknown) => {
53
+ line: number | null;
54
+ column: number | null;
55
+ };
56
+
57
+ const readMark: ReadMarkFunction = (
58
+ error: unknown,
59
+ ): { line: number | null; column: number | null } => {
60
+ const mark: YamlExceptionShape["mark"] = (error as YamlExceptionShape | null)
61
+ ?.mark;
62
+
63
+ if (!mark) {
64
+ return { line: null, column: null };
65
+ }
66
+
67
+ return {
68
+ line: typeof mark.line === "number" ? mark.line + 1 : null,
69
+ column: typeof mark.column === "number" ? mark.column + 1 : null,
70
+ };
71
+ };
72
+
73
+ type ReadReasonFunction = (error: unknown) => string;
74
+
75
+ const readReason: ReadReasonFunction = (error: unknown): string => {
76
+ const reason: string | undefined = (error as YamlExceptionShape | null)
77
+ ?.reason;
78
+
79
+ if (reason) {
80
+ return reason;
81
+ }
82
+
83
+ /*
84
+ * Fall back to the first line of the message: js-yaml appends a multi-line
85
+ * source excerpt to `message`, which is far too much for a form error.
86
+ */
87
+ if (error instanceof Error && error.message) {
88
+ return error.message.split("\n")[0] || "Invalid YAML.";
89
+ }
90
+
91
+ return "Invalid YAML.";
92
+ };
93
+
94
+ /*
95
+ * A tab used as indentation, which YAML forbids outright.
96
+ *
97
+ * This has to be found by hand because js-yaml does not report it: it parses
98
+ * `detection:\n\tselection: 1` without complaint and yields
99
+ * `{detection: null, selection: 1}` — the tab silently makes `selection` a
100
+ * SIBLING of `detection` rather than its child. The document looks nested on
101
+ * screen and is flat in the parse, which is the worst shape a syntax error can
102
+ * take, and the reason this module reports it as invalid rather than trusting
103
+ * the parser's verdict.
104
+ *
105
+ * Tabs are only illegal in INDENTATION. They are ordinary characters inside a
106
+ * scalar, and a scan that ignores that blocks Save on documents that work —
107
+ * the exact failure this module's permissiveness exists to prevent. Verified
108
+ * against js-yaml, all of these parse and must not be flagged:
109
+ *
110
+ * a: | a: "one a: { data:
111
+ * \tcontent \ttwo" \tb: 1 } app.yaml: |
112
+ * outer:
113
+ * \tinner: 1
114
+ *
115
+ * So three contexts are tracked and skipped — block scalars (`|`, `>`),
116
+ * multi-line quoted scalars, and flow collections (`{}`, `[]`, where tabs are
117
+ * legal separation whitespace) — and within what remains a tab is reported
118
+ * only when the line goes on to open a block node (`key:` or `- `). Anything
119
+ * this cannot place confidently is left alone, valid, per the module contract.
120
+ */
121
+ interface TabIndentationFinding {
122
+ line: number;
123
+ column: number;
124
+ }
125
+
126
+ type QuoteCharacter = '"' | "'" | null;
127
+
128
+ interface LineScanState {
129
+ flowDepth: number;
130
+ openQuote: QuoteCharacter;
131
+ }
132
+
133
+ /*
134
+ * True when the quote at `index` opens a scalar rather than sitting inside
135
+ * one. Without this, the apostrophe in `a: it's fine` reads as an unterminated
136
+ * quote and silences the check for the rest of the document.
137
+ */
138
+ type IsScalarOpeningQuoteFunction = (line: string, index: number) => boolean;
139
+
140
+ const isScalarOpeningQuote: IsScalarOpeningQuoteFunction = (
141
+ line: string,
142
+ index: number,
143
+ ): boolean => {
144
+ const before: string = line.slice(0, index).trimEnd();
145
+
146
+ if (before === "") {
147
+ return true;
148
+ }
149
+
150
+ return ["-", ":", ",", "[", "{"].includes(before[before.length - 1] || "");
151
+ };
152
+
153
+ /*
154
+ * Walk one line's characters, updating flow depth and quote state and
155
+ * returning the line with any trailing comment removed.
156
+ */
157
+ type ScanLineFunction = (line: string, state: LineScanState) => string;
158
+
159
+ const scanLine: ScanLineFunction = (
160
+ line: string,
161
+ state: LineScanState,
162
+ ): string => {
163
+ let index: number = 0;
164
+
165
+ while (index < line.length) {
166
+ const character: string = line[index] || "";
167
+
168
+ if (state.openQuote === '"') {
169
+ if (character === "\\") {
170
+ index += 2;
171
+ continue;
172
+ }
173
+ if (character === '"') {
174
+ state.openQuote = null;
175
+ }
176
+ index++;
177
+ continue;
178
+ }
179
+
180
+ if (state.openQuote === "'") {
181
+ // '' is an escaped quote inside a single-quoted scalar, not a close.
182
+ if (character === "'" && line[index + 1] === "'") {
183
+ index += 2;
184
+ continue;
185
+ }
186
+ if (character === "'") {
187
+ state.openQuote = null;
188
+ }
189
+ index++;
190
+ continue;
191
+ }
192
+
193
+ const previous: string = line[index - 1] || "";
194
+
195
+ if (
196
+ character === "#" &&
197
+ (index === 0 || previous === " " || previous === "\t")
198
+ ) {
199
+ return line.slice(0, index);
200
+ }
201
+
202
+ if (
203
+ (character === '"' || character === "'") &&
204
+ isScalarOpeningQuote(line, index)
205
+ ) {
206
+ state.openQuote = character as QuoteCharacter;
207
+ index++;
208
+ continue;
209
+ }
210
+
211
+ if (character === "{" || character === "[") {
212
+ state.flowDepth++;
213
+ }
214
+
215
+ if (character === "}" || character === "]") {
216
+ state.flowDepth = Math.max(0, state.flowDepth - 1);
217
+ }
218
+
219
+ index++;
220
+ }
221
+
222
+ return line;
223
+ };
224
+
225
+ // `key:` or `- ` — the shapes whose indentation decides the document's tree.
226
+ const BLOCK_NODE_START: RegExp = /^(?:-(?:\s|$)|[^\s#].*?:(?:\s|$))/;
227
+
228
+ // A trailing `|`, `>`, with optional chomping and explicit-indent indicators.
229
+ const BLOCK_SCALAR_HEADER: RegExp = /(?:^|\s)[|>][+-]?[0-9]*[+-]?\s*$/;
230
+
231
+ type FindTabIndentationFunction = (
232
+ text: string,
233
+ ) => TabIndentationFinding | null;
234
+
235
+ const findTabIndentation: FindTabIndentationFunction = (
236
+ text: string,
237
+ ): TabIndentationFinding | null => {
238
+ const lines: Array<string> = text.split("\n");
239
+ const state: LineScanState = { flowDepth: 0, openQuote: null };
240
+
241
+ let blockScalarIndent: number | null = null;
242
+
243
+ for (let index: number = 0; index < lines.length; index++) {
244
+ // Tolerate CRLF: the \r is not indentation and must not shift a column.
245
+ const line: string = (lines[index] || "").replace(/\r$/, "");
246
+ const indentation: string = line.match(/^[ \t]*/)?.[0] || "";
247
+ const isBlank: boolean = line.trim() === "";
248
+
249
+ if (blockScalarIndent !== null) {
250
+ // Blank lines and anything indented past the header stay inside it.
251
+ if (isBlank || indentation.length > blockScalarIndent) {
252
+ continue;
253
+ }
254
+ blockScalarIndent = null;
255
+ }
256
+
257
+ if (isBlank) {
258
+ continue;
259
+ }
260
+
261
+ const wasInsideQuote: boolean = state.openQuote !== null;
262
+ const insideFlow: boolean = state.flowDepth > 0;
263
+ const code: string = scanLine(line, state);
264
+
265
+ /*
266
+ * Only judge lines that begin a block node in block context. A
267
+ * continuation of a quoted scalar, or a line inside `{}`/`[]`, may hold a
268
+ * leading tab legally.
269
+ */
270
+ if (
271
+ !wasInsideQuote &&
272
+ !insideFlow &&
273
+ indentation.includes("\t") &&
274
+ BLOCK_NODE_START.test(line.slice(indentation.length))
275
+ ) {
276
+ return {
277
+ line: index + 1,
278
+ column: indentation.indexOf("\t") + 1,
279
+ };
280
+ }
281
+
282
+ if (
283
+ state.openQuote === null &&
284
+ state.flowDepth === 0 &&
285
+ BLOCK_SCALAR_HEADER.test(code)
286
+ ) {
287
+ blockScalarIndent = indentation.length;
288
+ }
289
+ }
290
+
291
+ return null;
292
+ };
293
+
294
+ export type CheckYamlSyntaxFunction = (value: unknown) => YamlSyntaxCheckResult;
295
+
296
+ /**
297
+ * Parse `value` as YAML and report whether it is well formed.
298
+ */
299
+ export const checkYamlSyntax: CheckYamlSyntaxFunction = (
300
+ value: unknown,
301
+ ): YamlSyntaxCheckResult => {
302
+ const skipped: YamlSyntaxCheckResult = {
303
+ isValid: true,
304
+ errorMessage: null,
305
+ wasSkipped: true,
306
+ line: null,
307
+ column: null,
308
+ };
309
+
310
+ // Not a string: nothing was typed into an editor, so there is no text to parse.
311
+ if (typeof value !== "string") {
312
+ return skipped;
313
+ }
314
+
315
+ // Empty is the job of the required-field check, not this one.
316
+ if (value.trim() === "") {
317
+ return skipped;
318
+ }
319
+
320
+ /*
321
+ * A handlebars loop emits its body once per array element, so the document's
322
+ * indentation depends on data that only exists at run time.
323
+ */
324
+ if (hasEachBlock(value)) {
325
+ return skipped;
326
+ }
327
+
328
+ const masked: string = maskTemplateExpressions(value);
329
+
330
+ /*
331
+ * Before the parse, not after: js-yaml ACCEPTS tab indentation and returns a
332
+ * silently restructured document, so there is no exception to catch.
333
+ */
334
+ const tab: TabIndentationFinding | null = findTabIndentation(masked);
335
+
336
+ if (tab) {
337
+ return {
338
+ isValid: false,
339
+ errorMessage: "a tab character cannot be used for indentation",
340
+ wasSkipped: false,
341
+ line: tab.line,
342
+ column: tab.column,
343
+ };
344
+ }
345
+
346
+ try {
347
+ /*
348
+ * loadAll, not load: a YAML stream may hold several `---` separated
349
+ * documents and load() rejects the second one. The parsed values are
350
+ * discarded - only the syntax is being judged here.
351
+ */
352
+ yaml.loadAll(masked);
353
+
354
+ return {
355
+ isValid: true,
356
+ errorMessage: null,
357
+ wasSkipped: false,
358
+ line: null,
359
+ column: null,
360
+ };
361
+ } catch (err: unknown) {
362
+ const { line, column } = readMark(err);
363
+
364
+ return {
365
+ isValid: false,
366
+ errorMessage: readReason(err),
367
+ wasSkipped: false,
368
+ line,
369
+ column,
370
+ };
371
+ }
372
+ };
373
+
374
+ export type DescribeYamlSyntaxErrorFunction = (
375
+ result: YamlSyntaxCheckResult,
376
+ ) => string;
377
+
378
+ /**
379
+ * "bad indentation of a mapping entry (line 4, column 3)" - the one-line
380
+ * sentence both the form error and the editor status bar are built from.
381
+ */
382
+ export const describeYamlSyntaxError: DescribeYamlSyntaxErrorFunction = (
383
+ result: YamlSyntaxCheckResult,
384
+ ): string => {
385
+ const reason: string = result.errorMessage || "Invalid YAML.";
386
+
387
+ if (result.line === null) {
388
+ return reason;
389
+ }
390
+
391
+ if (result.column === null) {
392
+ return `${reason} (line ${result.line})`;
393
+ }
394
+
395
+ return `${reason} (line ${result.line}, column ${result.column})`;
396
+ };
@@ -15,6 +15,7 @@ enum ExceptionCode {
15
15
  PaymentRequiredException = 402,
16
16
  NotFoundException = 404,
17
17
  TimeoutException = 408,
18
+ PayloadTooLargeException = 413,
18
19
  TenantNotFoundException = 405,
19
20
  SsoAuthorizationException = 406,
20
21
  TooManyRequestsException = 429,
@@ -0,0 +1,8 @@
1
+ import Exception from "./Exception";
2
+ import ExceptionCode from "./ExceptionCode";
3
+
4
+ export default class PayloadTooLargeException extends Exception {
5
+ public constructor(message: string) {
6
+ super(ExceptionCode.PayloadTooLargeException, message);
7
+ }
8
+ }
@@ -36,6 +36,16 @@ export const UtmWireKeyToPropertyKey: Record<string, string> = {
36
36
  utm_campaign: "utmCampaign",
37
37
  utm_term: "utmTerm",
38
38
  utm_content: "utmContent",
39
+ /*
40
+ * GA4's second tier of campaign parameters. Google Ads auto-tagging and the
41
+ * GA4 URL builder emit these alongside the five above, and the booking
42
+ * receiver reports on them, so they are stored rather than dropped at the
43
+ * door.
44
+ */
45
+ utm_id: "utmId",
46
+ utm_source_platform: "utmSourcePlatform",
47
+ utm_creative_format: "utmCreativeFormat",
48
+ utm_marketing_tactic: "utmMarketingTactic",
39
49
  };
40
50
 
41
51
  export const UtmPropertyKeys: Array<string> = Object.values(
@@ -64,6 +64,10 @@ export interface MarketingEventAttribution extends JSONObject {
64
64
  utmCampaign?: string | undefined;
65
65
  utmTerm?: string | undefined;
66
66
  utmContent?: string | undefined;
67
+ utmId?: string | undefined;
68
+ utmSourcePlatform?: string | undefined;
69
+ utmCreativeFormat?: string | undefined;
70
+ utmMarketingTactic?: string | undefined;
67
71
  utmUrl?: string | undefined;
68
72
  clickIds: JSONObject;
69
73
  firstTouch: JSONObject;