@oneuptime/common 12.0.1 → 12.0.3
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.
- package/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.ts +14 -0
- package/Models/DatabaseModels/Host.ts +12 -4
- package/Models/DatabaseModels/Index.ts +2 -0
- package/Models/DatabaseModels/KubernetesContainer.ts +5 -4
- package/Models/DatabaseModels/KubernetesResource.ts +8 -7
- package/Models/DatabaseModels/LogDropFilter.ts +9 -20
- package/Models/DatabaseModels/PodmanResource.ts +6 -6
- package/Models/DatabaseModels/ServiceLevelObjective.ts +91 -0
- package/Models/DatabaseModels/StatusPage.ts +95 -0
- package/Models/DatabaseModels/StatusPageMonitorRule.ts +911 -0
- package/Models/DatabaseModels/StatusPageResource.ts +73 -0
- package/Models/DatabaseModels/TraceDropFilter.ts +9 -20
- package/Server/API/BaseAPI.ts +13 -2
- package/Server/API/DashboardAPI.ts +39 -0
- package/Server/API/TeamMemberAPI.ts +85 -0
- package/Server/EnvironmentConfig.ts +31 -1
- package/Server/Infrastructure/GlobalCache.ts +115 -0
- package/Server/Infrastructure/Postgres/DataSourceOptions.ts +16 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1785900000000-AddSloMonitorLabelRule.ts +84 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1785915638551-IncreaseHostIpAddressesLength.ts +40 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1785930000000-WidenInventoryResourceNameColumns.ts +131 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1785930709405-AddStatusPageReportPeriod.ts +25 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1786005052769-AddStatusPageMonitorRule.ts +123 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +10 -0
- package/Server/Middleware/ProjectAuthorization.ts +66 -4
- package/Server/Services/AlertStateTimelineService.ts +20 -0
- package/Server/Services/BillingService.ts +600 -51
- package/Server/Services/CephClusterService.ts +27 -45
- package/Server/Services/CephResourceService.ts +43 -4
- package/Server/Services/CloudResourceService.ts +24 -42
- package/Server/Services/DatabaseService.ts +198 -6
- package/Server/Services/DockerHostService.ts +20 -38
- package/Server/Services/DockerResourceService.ts +62 -8
- package/Server/Services/DockerSwarmClusterService.ts +28 -46
- package/Server/Services/DockerSwarmResourceService.ts +53 -4
- package/Server/Services/HostService.ts +47 -57
- package/Server/Services/IncidentStateTimelineService.ts +20 -0
- package/Server/Services/Index.ts +2 -0
- package/Server/Services/IoTDeviceService.ts +1 -17
- package/Server/Services/IoTFleetService.ts +20 -38
- package/Server/Services/KubernetesClusterService.ts +18 -36
- package/Server/Services/KubernetesContainerService.ts +50 -9
- package/Server/Services/KubernetesResourceService.ts +53 -7
- package/Server/Services/LabelService.ts +153 -1
- package/Server/Services/MetricTypeService.ts +84 -0
- package/Server/Services/MonitorService.ts +146 -14
- package/Server/Services/MonitorStatusTimelineService.ts +29 -0
- package/Server/Services/MonitorTemplateService.ts +65 -0
- package/Server/Services/PodmanHostService.ts +20 -38
- package/Server/Services/PodmanResourceService.ts +62 -8
- package/Server/Services/ProjectService.ts +165 -35
- package/Server/Services/ProxmoxClusterService.ts +24 -42
- package/Server/Services/ProxmoxResourceService.ts +43 -4
- package/Server/Services/RumApplicationService.ts +20 -38
- package/Server/Services/ScheduledMaintenanceStateTimelineService.ts +21 -0
- package/Server/Services/ServerlessFunctionService.ts +25 -43
- package/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.ts +426 -0
- package/Server/Services/ServiceLevelObjectiveService.ts +39 -0
- package/Server/Services/ServiceService.ts +299 -73
- package/Server/Services/StatusPageMonitorRuleEngineService.ts +752 -0
- package/Server/Services/StatusPageMonitorRuleService.ts +471 -0
- package/Server/Services/StatusPageService.ts +95 -36
- package/Server/Services/StatusPageSubscriberNotificationTemplateService.ts +18 -1
- package/Server/Services/StatusPageSubscriberService.ts +3 -0
- package/Server/Services/TelemetryEntityRelationshipService.ts +1 -0
- package/Server/Services/TelemetryEntityService.ts +1 -0
- package/Server/Types/Database/JSONColumnQuery.ts +621 -0
- package/Server/Types/Database/Permissions/PublicPermission.ts +9 -2
- package/Server/Types/Database/QueryHelper.ts +17 -32
- package/Server/Utils/Database/ProjectScopedReferenceValidator.ts +170 -39
- package/Server/Utils/Database/TruncateColumnValue.ts +84 -0
- package/Server/Utils/Monitor/MonitorResource.ts +63 -36
- package/Server/Utils/Monitor/MonitorStatusTimeline.ts +36 -0
- package/Server/Utils/Monitor/MonitorStepsProjectValidator.ts +148 -127
- package/Server/Utils/Monitor/MonitorStepsReferenceExtractor.ts +434 -0
- package/Server/Utils/SingleFlight.ts +83 -0
- package/Server/Utils/StatusPage/MonitorRulePatternValidator.ts +46 -0
- package/Server/Utils/Telemetry/EntityRegistry.ts +107 -26
- package/Server/Utils/Telemetry/ResourceHeartbeat.ts +314 -0
- package/Server/Utils/Telemetry/Telemetry.ts +351 -122
- package/Tests/App/Dashboard/UsersTableGroupsByPerson.test.tsx +448 -0
- package/Tests/App/Dashboard/WidgetCatalog.test.ts +2 -0
- package/Tests/Models/DatabaseModels/ColumnTransformerInvariants.test.ts +306 -0
- package/Tests/Models/DatabaseModels/NumberColumnDeserialization.test.ts +333 -0
- package/Tests/Models/DatabaseModels/StatusPageMonitorRuleModel.test.ts +190 -0
- package/Tests/Server/API/BaseAPIApiKeyAuth.test.ts +704 -0
- package/Tests/Server/API/DashboardPublicResourceListAPI.test.ts +26 -0
- package/Tests/Server/API/TeamMemberRemoveUserFromProjectAPI.test.ts +303 -0
- package/Tests/Server/Infrastructure/GlobalCache.test.ts +226 -0
- package/Tests/Server/Infrastructure/PostgresLockTimeoutOptions.test.ts +181 -0
- package/Tests/Server/Middleware/MasterAdminAuthorization.test.ts +350 -0
- package/Tests/Server/Middleware/ProjectAuthorizationApiKeyHeader.test.ts +362 -0
- package/Tests/Server/Middleware/ProjectAuthorizationApiKeyMiddleware.test.ts +687 -0
- package/Tests/Server/Services/BillingService.test.ts +78 -3
- package/Tests/Server/Services/BillingServiceChangePlanCancel.test.ts +645 -0
- package/Tests/Server/Services/BillingServiceTrialPlanChange.test.ts +1005 -0
- package/Tests/Server/Services/DatabaseServiceUpdateColumnsIfUnlocked.test.ts +342 -0
- package/Tests/Server/Services/DropFilterSaveValidation.test.ts +245 -0
- package/Tests/Server/Services/HookFreeWriteLengthClamp.test.ts +503 -0
- package/Tests/Server/Services/HostIpAddressesColumnWidth.test.ts +198 -0
- package/Tests/Server/Services/HostServiceUpdateLastSeen.test.ts +658 -0
- package/Tests/Server/Services/InventoryResourceNameColumnWidth.test.ts +500 -0
- package/Tests/Server/Services/InventoryUpsertSchemaParity.test.ts +586 -0
- package/Tests/Server/Services/InventoryUpsertTruncationGuard.test.ts +1242 -0
- package/Tests/Server/Services/MetricTypeAttachServices.test.ts +222 -0
- package/Tests/Server/Services/MissingReferenceWriteGuard.test.ts +614 -0
- package/Tests/Server/Services/MonitorStatusTimelineFastPath.test.ts +23 -0
- package/Tests/Server/Services/ProjectServiceChangePlan.test.ts +650 -0
- package/Tests/Server/Services/ProjectServiceExtendTrial.test.ts +1 -0
- package/Tests/Server/Services/ResourceUpdateLastSeenLivenessFallback.test.ts +636 -0
- package/Tests/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.test.ts +770 -0
- package/Tests/Server/Services/ServiceLevelObjectiveService.test.ts +130 -0
- package/Tests/Server/Services/ServiceUpdateLastSeenSplitGates.test.ts +705 -0
- package/Tests/Server/Services/SloMonitorLabelRuleHooks.test.ts +352 -0
- package/Tests/Server/Services/StatusPageMonitorRuleEngineService.test.ts +1719 -0
- package/Tests/Server/Services/StatusPageMonitorRuleHooks.test.ts +1212 -0
- package/Tests/Server/Services/StatusPageMonitorRuleMonitorCreateHook.test.ts +228 -0
- package/Tests/Server/Services/StatusPageSubscriberReport.test.ts +29 -13
- package/Tests/Server/TestingUtils/Services/BillingServiceHelper.ts +69 -8
- package/Tests/Server/Types/Database/JSONColumnQuery.test.ts +593 -0
- package/Tests/Server/Types/Database/Permissions/PublicPermission.test.ts +495 -0
- package/Tests/Server/Types/Database/QueryUtil.test.ts +113 -0
- package/Tests/Server/Utils/APIKey/AccessPermission.test.ts +267 -0
- package/Tests/Server/Utils/Database/ProjectScopedReferenceValidator.test.ts +260 -13
- package/Tests/Server/Utils/Database/TruncateColumnValue.test.ts +179 -0
- package/Tests/Server/Utils/EntityRegistryRowFence.test.ts +302 -0
- package/Tests/Server/Utils/MetricTypeIndexConvergence.test.ts +598 -0
- package/Tests/Server/Utils/Monitor/MonitorStatusTimelineUnusableStatus.test.ts +154 -0
- package/Tests/Server/Utils/Monitor/MonitorStepsProjectValidator.test.ts +638 -92
- package/Tests/Server/Utils/Monitor/MonitorStepsReferenceExtractor.test.ts +724 -0
- package/Tests/Server/Utils/SingleFlight.test.ts +221 -0
- package/Tests/Types/Dashboard/NetworkDashboardTemplate.test.ts +793 -0
- package/Tests/Types/Database/BigIntColumnTransformer.test.ts +147 -0
- package/Tests/Types/Database/DatabasePropertyTransformer.test.ts +140 -0
- package/Tests/Types/Database/NumericColumnValue.test.ts +127 -0
- package/Tests/Types/Decimal.test.ts +37 -0
- package/Tests/Types/Events/Recurring.test.ts +157 -0
- package/Tests/Types/Monitor/SnmpVersionParsing.test.ts +152 -0
- package/Tests/Types/Port.test.ts +38 -0
- package/Tests/UI/Components/LogsHistogram.test.tsx +276 -0
- package/Tests/UI/Components/ModelTable/ModelTableGroupsProjectUsers.test.tsx +375 -0
- package/Tests/UI/Components/ModelTable/useCustomFieldColumns.test.tsx +196 -0
- package/Tests/UI/Components/UseLiveLogsRefresh.test.tsx +489 -0
- package/Tests/UI/Components/UseLogsHistogram.test.tsx +500 -0
- package/Tests/UI/Utils/ProjectUsersModelAPI.test.ts +739 -0
- package/Tests/UI/Utils/TeamMembersByUser.test.ts +633 -0
- package/Tests/Utils/Dashboard/Components/DashboardComponentsUtil.test.ts +120 -0
- package/Tests/Utils/Dashboard/DashboardNetworkMapComponent.test.ts +327 -0
- package/Tests/Utils/StatusPage/ReportPeriod.test.ts +218 -0
- package/Tests/Utils/Telemetry/HostIpAddresses.test.ts +291 -0
- package/Types/CustomField/CustomFieldDefinition.ts +24 -0
- package/Types/Dashboard/DashboardComponentType.ts +1 -0
- package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +1 -0
- package/Types/Dashboard/DashboardComponents/DashboardNetworkMapComponent.ts +40 -0
- package/Types/Dashboard/DashboardTemplates.ts +397 -0
- package/Types/Database/BigIntColumnTransformer.ts +74 -0
- package/Types/Database/DatabaseProperty.ts +26 -0
- package/Types/Database/NumericColumnValue.ts +128 -0
- package/Types/Date.ts +112 -0
- package/Types/Decimal.ts +16 -4
- package/Types/Events/Recurring.ts +99 -1
- package/Types/Permission.ts +48 -0
- package/Types/Port.ts +16 -4
- package/Types/StatusPage/StatusPageReport.ts +11 -0
- package/Types/StatusPage/StatusPageReportPeriodType.ts +21 -0
- package/UI/Components/LogsViewer/useLiveLogsRefresh.ts +86 -0
- package/UI/Components/LogsViewer/useLogsHistogram.ts +113 -0
- package/UI/Components/ModelTable/CustomFieldColumns.tsx +2 -6
- package/UI/Components/ModelTable/useCustomFieldColumns.ts +21 -2
- package/UI/Utils/ModelAPI/ProjectUsersModelAPI.ts +305 -0
- package/UI/Utils/TeamMembersByUser.ts +302 -0
- package/Utils/Dashboard/Components/DashboardNetworkMapComponent.ts +136 -0
- package/Utils/Dashboard/Components/Index.ts +7 -0
- package/Utils/StatusPage/ReportPeriod.ts +236 -0
- package/Utils/Telemetry/HostIpAddresses.ts +98 -0
- package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js +12 -0
- package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Host.js +12 -4
- package/build/dist/Models/DatabaseModels/Host.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +2 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/KubernetesContainer.js +4 -4
- package/build/dist/Models/DatabaseModels/KubernetesContainer.js.map +1 -1
- package/build/dist/Models/DatabaseModels/KubernetesResource.js +7 -7
- package/build/dist/Models/DatabaseModels/KubernetesResource.js.map +1 -1
- package/build/dist/Models/DatabaseModels/LogDropFilter.js +9 -20
- package/build/dist/Models/DatabaseModels/LogDropFilter.js.map +1 -1
- package/build/dist/Models/DatabaseModels/PodmanResource.js +6 -6
- package/build/dist/Models/DatabaseModels/PodmanResource.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServiceLevelObjective.js +87 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjective.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPage.js +98 -0
- package/build/dist/Models/DatabaseModels/StatusPage.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageMonitorRule.js +925 -0
- package/build/dist/Models/DatabaseModels/StatusPageMonitorRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/StatusPageResource.js +72 -0
- package/build/dist/Models/DatabaseModels/StatusPageResource.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TraceDropFilter.js +9 -20
- package/build/dist/Models/DatabaseModels/TraceDropFilter.js.map +1 -1
- package/build/dist/Server/API/BaseAPI.js +11 -1
- package/build/dist/Server/API/BaseAPI.js.map +1 -1
- package/build/dist/Server/API/DashboardAPI.js +39 -0
- package/build/dist/Server/API/DashboardAPI.js.map +1 -1
- package/build/dist/Server/API/TeamMemberAPI.js +57 -2
- package/build/dist/Server/API/TeamMemberAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +27 -1
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/GlobalCache.js +91 -0
- package/build/dist/Server/Infrastructure/GlobalCache.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/DataSourceOptions.js +5 -3
- package/build/dist/Server/Infrastructure/Postgres/DataSourceOptions.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785900000000-AddSloMonitorLabelRule.js +45 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785900000000-AddSloMonitorLabelRule.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785915638551-IncreaseHostIpAddressesLength.js +31 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785915638551-IncreaseHostIpAddressesLength.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785930000000-WidenInventoryResourceNameColumns.js +90 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785930000000-WidenInventoryResourceNameColumns.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785930709405-AddStatusPageReportPeriod.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785930709405-AddStatusPageReportPeriod.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786005052769-AddStatusPageMonitorRule.js +48 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786005052769-AddStatusPageMonitorRule.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +10 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/ProjectAuthorization.js +59 -4
- package/build/dist/Server/Middleware/ProjectAuthorization.js.map +1 -1
- package/build/dist/Server/Services/AlertStateTimelineService.js +19 -0
- package/build/dist/Server/Services/AlertStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/BillingService.js +466 -36
- package/build/dist/Server/Services/BillingService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterService.js +26 -39
- package/build/dist/Server/Services/CephClusterService.js.map +1 -1
- package/build/dist/Server/Services/CephResourceService.js +28 -3
- package/build/dist/Server/Services/CephResourceService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceService.js +23 -36
- package/build/dist/Server/Services/CloudResourceService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +155 -2
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostService.js +19 -32
- package/build/dist/Server/Services/DockerHostService.js.map +1 -1
- package/build/dist/Server/Services/DockerResourceService.js +34 -4
- package/build/dist/Server/Services/DockerResourceService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterService.js +27 -40
- package/build/dist/Server/Services/DockerSwarmClusterService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmResourceService.js +28 -3
- package/build/dist/Server/Services/DockerSwarmResourceService.js.map +1 -1
- package/build/dist/Server/Services/HostService.js +58 -64
- package/build/dist/Server/Services/HostService.js.map +1 -1
- package/build/dist/Server/Services/IncidentStateTimelineService.js +19 -0
- package/build/dist/Server/Services/IncidentStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +2 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/IoTDeviceService.js +1 -8
- package/build/dist/Server/Services/IoTDeviceService.js.map +1 -1
- package/build/dist/Server/Services/IoTFleetService.js +19 -32
- package/build/dist/Server/Services/IoTFleetService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterService.js +17 -30
- package/build/dist/Server/Services/KubernetesClusterService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesContainerService.js +29 -3
- package/build/dist/Server/Services/KubernetesContainerService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesResourceService.js +32 -4
- package/build/dist/Server/Services/KubernetesResourceService.js.map +1 -1
- package/build/dist/Server/Services/LabelService.js +127 -0
- package/build/dist/Server/Services/LabelService.js.map +1 -1
- package/build/dist/Server/Services/MetricTypeService.js +74 -0
- package/build/dist/Server/Services/MetricTypeService.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +128 -9
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/MonitorStatusTimelineService.js +28 -0
- package/build/dist/Server/Services/MonitorStatusTimelineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorTemplateService.js +60 -0
- package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostService.js +19 -32
- package/build/dist/Server/Services/PodmanHostService.js.map +1 -1
- package/build/dist/Server/Services/PodmanResourceService.js +34 -4
- package/build/dist/Server/Services/PodmanResourceService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +135 -21
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterService.js +23 -36
- package/build/dist/Server/Services/ProxmoxClusterService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxResourceService.js +28 -3
- package/build/dist/Server/Services/ProxmoxResourceService.js.map +1 -1
- package/build/dist/Server/Services/RumApplicationService.js +19 -32
- package/build/dist/Server/Services/RumApplicationService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js +20 -0
- package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/ServerlessFunctionService.js +24 -37
- package/build/dist/Server/Services/ServerlessFunctionService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.js +347 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveService.js +33 -1
- package/build/dist/Server/Services/ServiceLevelObjectiveService.js.map +1 -1
- package/build/dist/Server/Services/ServiceService.js +236 -61
- package/build/dist/Server/Services/ServiceService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageMonitorRuleEngineService.js +603 -0
- package/build/dist/Server/Services/StatusPageMonitorRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/StatusPageMonitorRuleService.js +401 -0
- package/build/dist/Server/Services/StatusPageMonitorRuleService.js.map +1 -0
- package/build/dist/Server/Services/StatusPageService.js +69 -46
- package/build/dist/Server/Services/StatusPageService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateService.js +17 -1
- package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageSubscriberService.js +3 -0
- package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryEntityRelationshipService.js +1 -0
- package/build/dist/Server/Services/TelemetryEntityRelationshipService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryEntityService.js +1 -0
- package/build/dist/Server/Services/TelemetryEntityService.js.map +1 -1
- package/build/dist/Server/Types/Database/JSONColumnQuery.js +402 -0
- package/build/dist/Server/Types/Database/JSONColumnQuery.js.map +1 -0
- package/build/dist/Server/Types/Database/Permissions/PublicPermission.js +9 -2
- package/build/dist/Server/Types/Database/Permissions/PublicPermission.js.map +1 -1
- package/build/dist/Server/Types/Database/QueryHelper.js +17 -27
- package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
- package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js +105 -29
- package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js.map +1 -1
- package/build/dist/Server/Utils/Database/TruncateColumnValue.js +32 -0
- package/build/dist/Server/Utils/Database/TruncateColumnValue.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorResource.js +56 -32
- package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorStatusTimeline.js +30 -3
- package/build/dist/Server/Utils/Monitor/MonitorStatusTimeline.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorStepsProjectValidator.js +110 -98
- package/build/dist/Server/Utils/Monitor/MonitorStepsProjectValidator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorStepsReferenceExtractor.js +312 -0
- package/build/dist/Server/Utils/Monitor/MonitorStepsReferenceExtractor.js.map +1 -0
- package/build/dist/Server/Utils/SingleFlight.js +76 -0
- package/build/dist/Server/Utils/SingleFlight.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/MonitorRulePatternValidator.js +29 -0
- package/build/dist/Server/Utils/StatusPage/MonitorRulePatternValidator.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +78 -19
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/ResourceHeartbeat.js +160 -0
- package/build/dist/Server/Utils/Telemetry/ResourceHeartbeat.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/Telemetry.js +279 -104
- package/build/dist/Server/Utils/Telemetry/Telemetry.js.map +1 -1
- package/build/dist/Types/CustomField/CustomFieldDefinition.js +2 -0
- package/build/dist/Types/CustomField/CustomFieldDefinition.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponentType.js +1 -0
- package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardNetworkMapComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardNetworkMapComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardTemplates.js +368 -0
- package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
- package/build/dist/Types/Database/BigIntColumnTransformer.js +66 -0
- package/build/dist/Types/Database/BigIntColumnTransformer.js.map +1 -0
- package/build/dist/Types/Database/DatabaseProperty.js +25 -0
- package/build/dist/Types/Database/DatabaseProperty.js.map +1 -1
- package/build/dist/Types/Database/NumericColumnValue.js +97 -0
- package/build/dist/Types/Database/NumericColumnValue.js.map +1 -0
- package/build/dist/Types/Date.js +68 -0
- package/build/dist/Types/Date.js.map +1 -1
- package/build/dist/Types/Decimal.js +14 -3
- package/build/dist/Types/Decimal.js.map +1 -1
- package/build/dist/Types/Events/Recurring.js +63 -0
- package/build/dist/Types/Events/Recurring.js.map +1 -1
- package/build/dist/Types/Permission.js +42 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Port.js +15 -5
- package/build/dist/Types/Port.js.map +1 -1
- package/build/dist/Types/StatusPage/StatusPageReportPeriodType.js +22 -0
- package/build/dist/Types/StatusPage/StatusPageReportPeriodType.js.map +1 -0
- package/build/dist/UI/Components/LogsViewer/useLiveLogsRefresh.js +44 -0
- package/build/dist/UI/Components/LogsViewer/useLiveLogsRefresh.js.map +1 -0
- package/build/dist/UI/Components/LogsViewer/useLogsHistogram.js +75 -0
- package/build/dist/UI/Components/LogsViewer/useLogsHistogram.js.map +1 -0
- package/build/dist/UI/Components/ModelTable/CustomFieldColumns.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/useCustomFieldColumns.js +18 -2
- package/build/dist/UI/Components/ModelTable/useCustomFieldColumns.js.map +1 -1
- package/build/dist/UI/Utils/ModelAPI/ProjectUsersModelAPI.js +213 -0
- package/build/dist/UI/Utils/ModelAPI/ProjectUsersModelAPI.js.map +1 -0
- package/build/dist/UI/Utils/TeamMembersByUser.js +195 -0
- package/build/dist/UI/Utils/TeamMembersByUser.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardNetworkMapComponent.js +114 -0
- package/build/dist/Utils/Dashboard/Components/DashboardNetworkMapComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/Index.js +4 -0
- package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
- package/build/dist/Utils/StatusPage/ReportPeriod.js +131 -0
- package/build/dist/Utils/StatusPage/ReportPeriod.js.map +1 -0
- package/build/dist/Utils/Telemetry/HostIpAddresses.js +82 -0
- package/build/dist/Utils/Telemetry/HostIpAddresses.js.map +1 -0
- package/jest.config.json +2 -0
- package/package.json +1 -1
- package/tsconfig.json +12 -1
package/build/dist/Types/Port.js
CHANGED
|
@@ -50,16 +50,26 @@ export default class Port extends DatabaseProperty {
|
|
|
50
50
|
this._port = new PositiveNumber(0);
|
|
51
51
|
this.port = new PositiveNumber(port);
|
|
52
52
|
}
|
|
53
|
+
/*
|
|
54
|
+
* A port column is declared `TableColumnType.Number`, so a raw number is
|
|
55
|
+
* as legitimate an incoming value as a raw string — the SMTP forms send
|
|
56
|
+
* one or the other depending on how far the value got through
|
|
57
|
+
* deserialization. Dropping a number on the floor here wrote NULL over a
|
|
58
|
+
* port the user had just typed, with no error anywhere.
|
|
59
|
+
*/
|
|
53
60
|
static toDatabase(value) {
|
|
54
|
-
|
|
55
|
-
|
|
61
|
+
/*
|
|
62
|
+
* The declared parameter type stays Port-shaped so this still overrides
|
|
63
|
+
* DatabaseProperty.toDatabase, but a raw string or number genuinely
|
|
64
|
+
* arrives here — see the note above — so widen at the check instead.
|
|
65
|
+
*/
|
|
66
|
+
const rawValue = value;
|
|
67
|
+
if (typeof rawValue === "string" || typeof rawValue === "number") {
|
|
68
|
+
value = new Port(rawValue);
|
|
56
69
|
}
|
|
57
70
|
if (value instanceof Port) {
|
|
58
71
|
return value.toNumber();
|
|
59
72
|
}
|
|
60
|
-
else if (typeof value === "string") {
|
|
61
|
-
return parseInt(value);
|
|
62
|
-
}
|
|
63
73
|
return null;
|
|
64
74
|
}
|
|
65
75
|
static fromDatabase(_value) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Port.js","sourceRoot":"","sources":["../../../Types/Port.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,MAAM,6BAA6B,CAAC;AAC3D,OAAO,gBAAgB,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAc,UAAU,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,MAAM,MAAM,UAAU,CAAC;AAE9B,OAAO,GAAkB,MAAM,qBAAqB,CAAC;AAErD,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,gBAAgB;IAGhD,IAAW,IAAI;QACb,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IACD,IAAW,IAAI,CAAC,KAAqB;QACnC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,gBAAgB,CAAC,8BAA8B,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAEe,MAAM;QACpB,OAAO;YACL,KAAK,EAAE,UAAU,CAAC,IAAI;YACtB,KAAK,EAAG,IAAa,CAAC,QAAQ,EAAE;SACjC,CAAC;IACJ,CAAC;IAEM,MAAM,CAAU,QAAQ,CAAC,IAAgB;QAC9C,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,UAAU,CAAC,IAAI,EAAE,CAAC;YACtC,OAAO,IAAI,IAAI,CAAE,IAAI,CAAC,OAAO,CAAY,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,MAAM,IAAI,gBAAgB,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACtE,CAAC;IAEM,MAAM,CAAC,OAAO,CAAC,IAAsC;QAC1D,IAAI,OAAO,IAAI,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACrD,CAAC;YAAC,WAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,IAAI,IAAI,YAAY,cAAc,EAAE,CAAC;YACnC,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QACzB,CAAC;QAED,IAAK,IAAe,IAAI,CAAC,IAAK,IAAe,IAAI,KAAK,EAAE,CAAC;YACvD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,YAAmB,IAAqB;QACtC,KAAK,EAAE,CAAC;QAhDF,UAAK,GAAmB,IAAI,cAAc,CAAC,CAAC,CAAC,CAAC;QAiDpD,IAAI,CAAC,IAAI,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;
|
|
1
|
+
{"version":3,"file":"Port.js","sourceRoot":"","sources":["../../../Types/Port.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* What stretch of time a scheduled status page report covers.
|
|
3
|
+
*
|
|
4
|
+
* The report used to only ever cover "the last N days counted back from the
|
|
5
|
+
* moment the email went out", which can never line up with a calendar month -
|
|
6
|
+
* a monthly report sent on 1 Aug covered 2 Jul - 1 Aug rather than the July
|
|
7
|
+
* everyone reading it expects, and consecutive reports silently overlapped or
|
|
8
|
+
* left gaps whenever the day count did not match the send frequency.
|
|
9
|
+
*/
|
|
10
|
+
var StatusPageReportPeriodType;
|
|
11
|
+
(function (StatusPageReportPeriodType) {
|
|
12
|
+
// The window ends when the email is sent and runs back `reportDataInDays`.
|
|
13
|
+
StatusPageReportPeriodType["Rolling"] = "Rolling";
|
|
14
|
+
/*
|
|
15
|
+
* The last whole calendar period before the email is sent, sized by the send
|
|
16
|
+
* frequency: a report sent monthly covers 1 Jul 00:00 - 31 Jul 23:59:59.999
|
|
17
|
+
* in the status page's report timezone.
|
|
18
|
+
*/
|
|
19
|
+
StatusPageReportPeriodType["PreviousCalendarPeriod"] = "Previous Calendar Period";
|
|
20
|
+
})(StatusPageReportPeriodType || (StatusPageReportPeriodType = {}));
|
|
21
|
+
export default StatusPageReportPeriodType;
|
|
22
|
+
//# sourceMappingURL=StatusPageReportPeriodType.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatusPageReportPeriodType.js","sourceRoot":"","sources":["../../../../Types/StatusPage/StatusPageReportPeriodType.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,IAAK,0BASJ;AATD,WAAK,0BAA0B;IAC7B,2EAA2E;IAC3E,iDAAmB,CAAA;IACnB;;;;OAIG;IACH,iFAAmD,CAAA;AACrD,CAAC,EATI,0BAA0B,KAA1B,0BAA0B,QAS9B;AAED,eAAe,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { useEffect, useRef } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Drives the polling loop behind the log viewer's live mode.
|
|
4
|
+
*
|
|
5
|
+
* Every tick refreshes the log list *and* the histogram together. That
|
|
6
|
+
* pairing is the point of this hook: the two come from different endpoints,
|
|
7
|
+
* and refreshing only the list leaves a chart that stops moving while rows
|
|
8
|
+
* keep arriving underneath it.
|
|
9
|
+
*
|
|
10
|
+
* The callbacks are read through refs, so a parent that re-renders (which it
|
|
11
|
+
* does on every poll, as results land) does not tear down and re-arm the
|
|
12
|
+
* timer — that would reset the cadence and fire an extra immediate poll each
|
|
13
|
+
* time. Only the gating flags and the interval restart the loop.
|
|
14
|
+
*/
|
|
15
|
+
const useLiveLogsRefresh = (options) => {
|
|
16
|
+
const { isLive, isEligible, intervalInMs } = options;
|
|
17
|
+
const refreshLogsRef = useRef(options.refreshLogs);
|
|
18
|
+
const refreshHistogramRef = useRef(options.refreshHistogram);
|
|
19
|
+
/*
|
|
20
|
+
* Declared before the polling effect so the refs are already current by the
|
|
21
|
+
* time that effect (re-)runs — effects fire in declaration order.
|
|
22
|
+
*/
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
refreshLogsRef.current = options.refreshLogs;
|
|
25
|
+
refreshHistogramRef.current = options.refreshHistogram;
|
|
26
|
+
});
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
if (!isLive || !isEligible) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const poll = () => {
|
|
32
|
+
refreshLogsRef.current();
|
|
33
|
+
refreshHistogramRef.current();
|
|
34
|
+
};
|
|
35
|
+
// Switching live mode on should show fresh data immediately, not one tick later.
|
|
36
|
+
poll();
|
|
37
|
+
const intervalId = setInterval(poll, intervalInMs);
|
|
38
|
+
return () => {
|
|
39
|
+
clearInterval(intervalId);
|
|
40
|
+
};
|
|
41
|
+
}, [isLive, isEligible, intervalInMs]);
|
|
42
|
+
};
|
|
43
|
+
export default useLiveLogsRefresh;
|
|
44
|
+
//# sourceMappingURL=useLiveLogsRefresh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLiveLogsRefresh.js","sourceRoot":"","sources":["../../../../../UI/Components/LogsViewer/useLiveLogsRefresh.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AA2BjD;;;;;;;;;;;;GAYG;AACH,MAAM,kBAAkB,GAA+B,CACrD,OAA+B,EACzB,EAAE;IACR,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;IAErD,MAAM,cAAc,GAAuC,MAAM,CAC/D,OAAO,CAAC,WAAW,CACpB,CAAC;IACF,MAAM,mBAAmB,GAAuC,MAAM,CAEpE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAE5B;;;OAGG;IACH,SAAS,CAAC,GAAG,EAAE;QACb,cAAc,CAAC,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;QAC7C,mBAAmB,CAAC,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAe,GAAS,EAAE;YAClC,cAAc,CAAC,OAAO,EAAE,CAAC;YACzB,mBAAmB,CAAC,OAAO,EAAE,CAAC;QAChC,CAAC,CAAC;QAEF,iFAAiF;QACjF,IAAI,EAAE,CAAC;QAEP,MAAM,UAAU,GAAmC,WAAW,CAC5D,IAAI,EACJ,YAAY,CACb,CAAC;QAEF,OAAO,GAAG,EAAE;YACV,aAAa,CAAC,UAAU,CAAC,CAAC;QAC5B,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;AACzC,CAAC,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Owns the log histogram's data, loading flag and refresh loop.
|
|
4
|
+
*
|
|
5
|
+
* The chart is fed by its own aggregation query rather than by the rows in
|
|
6
|
+
* the table, so it needs refreshing in its own right — including on every
|
|
7
|
+
* live-mode tick. A poll is a *silent* refresh, which is what keeps live mode
|
|
8
|
+
* from looking broken:
|
|
9
|
+
*
|
|
10
|
+
* - it does not raise the loading flag, so the chart does not flash a loader
|
|
11
|
+
* every few seconds;
|
|
12
|
+
* - it keeps the buckets already on screen if the request fails, so one bad
|
|
13
|
+
* response does not blank the chart;
|
|
14
|
+
* - it is dropped while an earlier poll is still running, so a slow
|
|
15
|
+
* aggregation cannot pile requests up behind it.
|
|
16
|
+
*
|
|
17
|
+
* `fetchBuckets` doubles as the query identity: hand over a new callback (a
|
|
18
|
+
* new time range, filter or scope) and the histogram reloads.
|
|
19
|
+
*/
|
|
20
|
+
const useLogsHistogram = (fetchBuckets) => {
|
|
21
|
+
const [buckets, setBuckets] = useState([]);
|
|
22
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
23
|
+
const silentRequestInFlight = useRef(false);
|
|
24
|
+
/*
|
|
25
|
+
* The query the viewer is on right now. A request that comes back after the
|
|
26
|
+
* reader has moved to another time range or filter is dropped rather than
|
|
27
|
+
* painted over the window they are actually looking at.
|
|
28
|
+
*/
|
|
29
|
+
const currentQuery = useRef(fetchBuckets);
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
currentQuery.current = fetchBuckets;
|
|
32
|
+
}, [fetchBuckets]);
|
|
33
|
+
const refresh = useCallback(async (options = {}) => {
|
|
34
|
+
const isSilent = options.silent === true;
|
|
35
|
+
if (isSilent) {
|
|
36
|
+
if (silentRequestInFlight.current) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
silentRequestInFlight.current = true;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
setIsLoading(true);
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
const nextBuckets = await fetchBuckets();
|
|
46
|
+
if (currentQuery.current === fetchBuckets) {
|
|
47
|
+
setBuckets(nextBuckets);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
catch (_a) {
|
|
51
|
+
// The histogram is non-critical; degrade rather than fail the page.
|
|
52
|
+
if (!isSilent && currentQuery.current === fetchBuckets) {
|
|
53
|
+
setBuckets([]);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
finally {
|
|
57
|
+
if (isSilent) {
|
|
58
|
+
silentRequestInFlight.current = false;
|
|
59
|
+
}
|
|
60
|
+
else if (currentQuery.current === fetchBuckets) {
|
|
61
|
+
setIsLoading(false);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}, [fetchBuckets]);
|
|
65
|
+
useEffect(() => {
|
|
66
|
+
void refresh();
|
|
67
|
+
}, [refresh]);
|
|
68
|
+
return {
|
|
69
|
+
buckets: buckets,
|
|
70
|
+
isLoading: isLoading,
|
|
71
|
+
refresh: refresh,
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
export default useLogsHistogram;
|
|
75
|
+
//# sourceMappingURL=useLogsHistogram.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLogsHistogram.js","sourceRoot":"","sources":["../../../../../UI/Components/LogsViewer/useLogsHistogram.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAyBxE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,gBAAgB,GAA6B,CACjD,YAA2C,EACvB,EAAE;IACtB,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAyB,EAAE,CAAC,CAAC;IACnE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;IAE3D,MAAM,qBAAqB,GACzB,MAAM,CAAU,KAAK,CAAC,CAAC;IAEzB;;;;OAIG;IACH,MAAM,YAAY,GAChB,MAAM,CAAgC,YAAY,CAAC,CAAC;IAEtD,SAAS,CAAC,GAAG,EAAE;QACb,YAAY,CAAC,OAAO,GAAG,YAAY,CAAC;IACtC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB,MAAM,OAAO,GACX,WAAW,CACT,KAAK,EAAE,UAAuC,EAAE,EAAiB,EAAE;QACjE,MAAM,QAAQ,GAAY,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC;QAElD,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,qBAAqB,CAAC,OAAO,EAAE,CAAC;gBAClC,OAAO;YACT,CAAC;YAED,qBAAqB,CAAC,OAAO,GAAG,IAAI,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;QAED,IAAI,CAAC;YACH,MAAM,WAAW,GAA2B,MAAM,YAAY,EAAE,CAAC;YAEjE,IAAI,YAAY,CAAC,OAAO,KAAK,YAAY,EAAE,CAAC;gBAC1C,UAAU,CAAC,WAAW,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAAC,WAAM,CAAC;YACP,oEAAoE;YACpE,IAAI,CAAC,QAAQ,IAAI,YAAY,CAAC,OAAO,KAAK,YAAY,EAAE,CAAC;gBACvD,UAAU,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,QAAQ,EAAE,CAAC;gBACb,qBAAqB,CAAC,OAAO,GAAG,KAAK,CAAC;YACxC,CAAC;iBAAM,IAAI,YAAY,CAAC,OAAO,KAAK,YAAY,EAAE,CAAC;gBACjD,YAAY,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC,EACD,CAAC,YAAY,CAAC,CACf,CAAC;IAEJ,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,OAAO,EAAE,CAAC;IACjB,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,OAAO;QACL,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,OAAO;KACjB,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomFieldColumns.js","sourceRoot":"","sources":["../../../../../UI/Components/ModelTable/CustomFieldColumns.tsx"],"names":[],"mappings":"AAEA,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,kBAAkB,MAAM,gCAAgC,CAAC;AAGhE,OAAO,eAAe,MAAM,4CAA4C,CAAC;
|
|
1
|
+
{"version":3,"file":"CustomFieldColumns.js","sourceRoot":"","sources":["../../../../../UI/Components/ModelTable/CustomFieldColumns.tsx"],"names":[],"mappings":"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"}
|
|
@@ -8,14 +8,30 @@ const useCustomFieldColumns = (data) => {
|
|
|
8
8
|
var _a;
|
|
9
9
|
const { customFieldsModelType } = data;
|
|
10
10
|
const [definitions, setDefinitions] = useState([]);
|
|
11
|
-
const [isLoading, setIsLoading] = useState(false);
|
|
12
|
-
const [error, setError] = useState("");
|
|
13
11
|
const projectId = (_a = data.projectId) !== null && _a !== void 0 ? _a : ProjectUtil.getCurrentProjectId();
|
|
12
|
+
/*
|
|
13
|
+
* Starts true whenever a request is actually going to happen, rather than
|
|
14
|
+
* false-until-the-effect-runs.
|
|
15
|
+
*
|
|
16
|
+
* Columns did not care — they only ever appear — but a caller that has to
|
|
17
|
+
* distinguish "no custom fields" from "not yet" does. The facet bar is one:
|
|
18
|
+
* on the first render it must know that a chip restored from a shared link
|
|
19
|
+
* may still be on its way, or it drops the link's filter before the request
|
|
20
|
+
* has even been sent.
|
|
21
|
+
*/
|
|
22
|
+
const [isLoading, setIsLoading] = useState(Boolean(data.customFieldsModelType && projectId));
|
|
23
|
+
const [error, setError] = useState("");
|
|
14
24
|
const projectIdString = (projectId === null || projectId === void 0 ? void 0 : projectId.toString()) || "";
|
|
15
25
|
const modelName = (customFieldsModelType === null || customFieldsModelType === void 0 ? void 0 : customFieldsModelType.name) || "";
|
|
16
26
|
useEffect(() => {
|
|
17
27
|
if (!customFieldsModelType || !projectId) {
|
|
18
28
|
setDefinitions([]);
|
|
29
|
+
/*
|
|
30
|
+
* Nothing to wait for. Said explicitly because the initial state is now
|
|
31
|
+
* "loading" whenever a request is expected, and a model type that goes
|
|
32
|
+
* away between renders would otherwise leave it stuck there.
|
|
33
|
+
*/
|
|
34
|
+
setIsLoading(false);
|
|
19
35
|
return;
|
|
20
36
|
}
|
|
21
37
|
let isCancelled = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCustomFieldColumns.js","sourceRoot":"","sources":["../../../../../UI/Components/ModelTable/useCustomFieldColumns.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,QAAQ,MAAM,+BAA+B,CAAC;AACrD,OAAO,WAAW,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAI5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAgCrD,MAAM,qBAAqB,GAAkC,CAE3D,IAGD,EAAwC,EAAE;;IACzC,MAAM,EAAE,qBAAqB,EAAE,GAAG,IAAI,CAAC;IAEvC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAC5C,EAAE,CACH,CAAC;
|
|
1
|
+
{"version":3,"file":"useCustomFieldColumns.js","sourceRoot":"","sources":["../../../../../UI/Components/ModelTable/useCustomFieldColumns.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import ModelAPI from "./ModelAPI";
|
|
2
|
+
import TeamMembersByUser from "../TeamMembersByUser";
|
|
3
|
+
import API from "../API/API";
|
|
4
|
+
import { APP_API_URL } from "../../Config";
|
|
5
|
+
import TeamMember from "../../../Models/DatabaseModels/TeamMember";
|
|
6
|
+
import HTTPErrorResponse from "../../../Types/API/HTTPErrorResponse";
|
|
7
|
+
import URL from "../../../Types/API/URL";
|
|
8
|
+
import Includes from "../../../Types/BaseDatabase/Includes";
|
|
9
|
+
import { LIMIT_PER_PROJECT } from "../../../Types/Database/LimitMax";
|
|
10
|
+
/*
|
|
11
|
+
* A drop-in ModelAPI for tables that list TeamMember but mean to list *people*
|
|
12
|
+
* - the project's Users table being the one that does.
|
|
13
|
+
*
|
|
14
|
+
* TeamMember rows are (user, team) pairs, so the plain API pages over
|
|
15
|
+
* memberships: a user on three teams occupies three rows and reads as three
|
|
16
|
+
* different people with the same name. This API pages over users instead. It
|
|
17
|
+
* reads the project's memberships, folds them into one row per user (see
|
|
18
|
+
* TeamMembersByUser), and then applies the table's skip/limit to *that* list,
|
|
19
|
+
* so `count` is a number of people and every page boundary falls between two
|
|
20
|
+
* people rather than between two of one person's teams.
|
|
21
|
+
*
|
|
22
|
+
* Paging cannot be pushed to the server here: the list endpoint has no DISTINCT
|
|
23
|
+
* or GROUP BY, so there is no way to ask it for the Nth user. Reading the whole
|
|
24
|
+
* membership list up front is what the project user pickers already do.
|
|
25
|
+
*
|
|
26
|
+
* Deleting is redefined to match what a row now means - see deleteItem.
|
|
27
|
+
*/
|
|
28
|
+
export default class ProjectUsersModelAPI extends ModelAPI {
|
|
29
|
+
static async getList(data) {
|
|
30
|
+
if (!(new data.modelType() instanceof TeamMember)) {
|
|
31
|
+
// Not the model this API exists for. Behave like the plain one.
|
|
32
|
+
return ModelAPI.getList(data);
|
|
33
|
+
}
|
|
34
|
+
const query = data.query;
|
|
35
|
+
const sort = data.sort;
|
|
36
|
+
const memberships = await this.readAllMemberships({
|
|
37
|
+
query: query,
|
|
38
|
+
select: this.getMembershipSelect(data.select),
|
|
39
|
+
sort: sort,
|
|
40
|
+
requestOptions: data.requestOptions,
|
|
41
|
+
});
|
|
42
|
+
let rows = TeamMembersByUser.groupByUser(memberships);
|
|
43
|
+
/*
|
|
44
|
+
* An explicit sort was already applied by the server and grouping kept it.
|
|
45
|
+
* Without one the server's order is arbitrary, and an arbitrary order that
|
|
46
|
+
* is then sliced into pages is worse here than elsewhere - so fall back to
|
|
47
|
+
* something a reader of a people directory expects, and that pages the same
|
|
48
|
+
* way every time.
|
|
49
|
+
*/
|
|
50
|
+
if (Object.keys(sort || {}).length === 0) {
|
|
51
|
+
rows = TeamMembersByUser.sortRowsByUserName(rows);
|
|
52
|
+
}
|
|
53
|
+
const pageRows = rows.slice(data.skip, data.skip + data.limit);
|
|
54
|
+
await this.fillInTeamsHiddenByFilters({
|
|
55
|
+
query: query,
|
|
56
|
+
pageRows: pageRows,
|
|
57
|
+
requestOptions: data.requestOptions,
|
|
58
|
+
});
|
|
59
|
+
return {
|
|
60
|
+
data: pageRows,
|
|
61
|
+
count: rows.length,
|
|
62
|
+
skip: data.skip,
|
|
63
|
+
limit: data.limit,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Removes the user on this row from the project - every one of their team
|
|
68
|
+
* memberships, not just the one whose id the row happens to carry.
|
|
69
|
+
*
|
|
70
|
+
* A grouped row stands for a person, so deleting one membership would leave
|
|
71
|
+
* the row on screen (still a member, via their other teams) and look like the
|
|
72
|
+
* delete silently failed. Removing a user from a single team is done from
|
|
73
|
+
* that user's own Teams tab, where a row is a membership again.
|
|
74
|
+
*
|
|
75
|
+
* This goes through one `remove-user-from-project` request rather than a
|
|
76
|
+
* DELETE per membership, and that is load-bearing rather than an
|
|
77
|
+
* optimisation. The server refuses to remove the last accepted member of the
|
|
78
|
+
* Owners team, and it refuses per request - so a loop deletes every other
|
|
79
|
+
* membership first and only then reports a failure, leaving the person
|
|
80
|
+
* stripped of the teams the caller was just told they had not lost. The
|
|
81
|
+
* endpoint runs that check across the whole set before deleting anything.
|
|
82
|
+
*/
|
|
83
|
+
static async deleteItem(data) {
|
|
84
|
+
if (!(new data.modelType() instanceof TeamMember)) {
|
|
85
|
+
return ModelAPI.deleteItem(data);
|
|
86
|
+
}
|
|
87
|
+
const rowMembership = await ModelAPI.getItem({
|
|
88
|
+
modelType: TeamMember,
|
|
89
|
+
id: data.id,
|
|
90
|
+
select: {
|
|
91
|
+
_id: true,
|
|
92
|
+
userId: true,
|
|
93
|
+
},
|
|
94
|
+
requestOptions: data.requestOptions,
|
|
95
|
+
});
|
|
96
|
+
const userId = rowMembership === null || rowMembership === void 0 ? void 0 : rowMembership.userId;
|
|
97
|
+
if (!userId) {
|
|
98
|
+
/*
|
|
99
|
+
* The row is gone, or came back without the user it stands for. Fall back
|
|
100
|
+
* to the single delete the table asked for rather than guessing.
|
|
101
|
+
*/
|
|
102
|
+
return ModelAPI.deleteItem(data);
|
|
103
|
+
}
|
|
104
|
+
const url = URL.fromString(APP_API_URL.toString())
|
|
105
|
+
.addRoute(new TeamMember().getCrudApiPath())
|
|
106
|
+
.addRoute("/remove-user-from-project");
|
|
107
|
+
const result = await API.post({
|
|
108
|
+
url: url,
|
|
109
|
+
data: {
|
|
110
|
+
userId: userId.toString(),
|
|
111
|
+
},
|
|
112
|
+
headers: ModelAPI.getCommonHeaders(data.requestOptions),
|
|
113
|
+
});
|
|
114
|
+
if (result instanceof HTTPErrorResponse) {
|
|
115
|
+
throw result;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Every membership matching the query, across as many requests as it takes.
|
|
120
|
+
*
|
|
121
|
+
* A single read would be capped at LIMIT_PER_PROJECT, and a capped read is
|
|
122
|
+
* indistinguishable here from a complete one: the grouped list would simply
|
|
123
|
+
* be missing whichever people fell outside the window, `count` would report
|
|
124
|
+
* the truncated total as authoritative, and nothing on screen would say so.
|
|
125
|
+
* Paging until a short page comes back keeps the grouping honest.
|
|
126
|
+
*/
|
|
127
|
+
static async readAllMemberships(data) {
|
|
128
|
+
const memberships = [];
|
|
129
|
+
/*
|
|
130
|
+
* A backstop, not an expected bound: every page after the first means a
|
|
131
|
+
* project with more than 10,000 memberships. Reaching it would mean
|
|
132
|
+
* something is paging without making progress.
|
|
133
|
+
*/
|
|
134
|
+
const maxPages = 10;
|
|
135
|
+
for (let page = 0; page < maxPages; page++) {
|
|
136
|
+
const result = await ModelAPI.getList({
|
|
137
|
+
modelType: TeamMember,
|
|
138
|
+
query: data.query,
|
|
139
|
+
limit: LIMIT_PER_PROJECT,
|
|
140
|
+
skip: page * LIMIT_PER_PROJECT,
|
|
141
|
+
select: data.select,
|
|
142
|
+
sort: data.sort,
|
|
143
|
+
requestOptions: data.requestOptions,
|
|
144
|
+
});
|
|
145
|
+
memberships.push(...result.data);
|
|
146
|
+
if (result.data.length < LIMIT_PER_PROJECT) {
|
|
147
|
+
// A short page is the last page.
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return memberships;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* The table's own select plus the fields grouping needs. Columns ask for what
|
|
155
|
+
* they render; grouping also needs to know which user and which team each
|
|
156
|
+
* membership belongs to, and whether it was accepted.
|
|
157
|
+
*/
|
|
158
|
+
static getMembershipSelect(select) {
|
|
159
|
+
const teamSelect = typeof (select === null || select === void 0 ? void 0 : select.team) === "object" && select.team !== null
|
|
160
|
+
? Object.assign({}, select.team) : {};
|
|
161
|
+
const userSelect = typeof (select === null || select === void 0 ? void 0 : select.user) === "object" && select.user !== null
|
|
162
|
+
? Object.assign({}, select.user) : {};
|
|
163
|
+
return Object.assign(Object.assign({}, select), { _id: true, userId: true, teamId: true, hasAcceptedInvitation: true, user: Object.assign(Object.assign({}, userSelect), { _id: true }), team: Object.assign(Object.assign({}, teamSelect), { _id: true, name: true }) });
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* When the table is filtered, the memberships that were read are only the
|
|
167
|
+
* matching ones - filter by a team and every user's Teams column would show
|
|
168
|
+
* that one team and nothing else, which is exactly the "which teams is this
|
|
169
|
+
* person on?" question the grouped row exists to answer.
|
|
170
|
+
*
|
|
171
|
+
* So for the users actually on this page (at most one page's worth), re-read
|
|
172
|
+
* their memberships unfiltered and merge the full team list back in.
|
|
173
|
+
*/
|
|
174
|
+
static async fillInTeamsHiddenByFilters(data) {
|
|
175
|
+
const projectId = data.query["projectId"];
|
|
176
|
+
const isFiltered = Object.keys(data.query).some((key) => {
|
|
177
|
+
return key !== "projectId";
|
|
178
|
+
});
|
|
179
|
+
if (!isFiltered || !projectId || data.pageRows.length === 0) {
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
const userIds = data.pageRows
|
|
183
|
+
.map((row) => {
|
|
184
|
+
return TeamMembersByUser.getGroupKey(row) || "";
|
|
185
|
+
})
|
|
186
|
+
.filter((userId) => {
|
|
187
|
+
return Boolean(userId);
|
|
188
|
+
});
|
|
189
|
+
if (userIds.length === 0) {
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
const allMemberships = await this.readAllMemberships({
|
|
193
|
+
query: {
|
|
194
|
+
projectId: projectId,
|
|
195
|
+
userId: new Includes(userIds),
|
|
196
|
+
},
|
|
197
|
+
select: {
|
|
198
|
+
_id: true,
|
|
199
|
+
userId: true,
|
|
200
|
+
teamId: true,
|
|
201
|
+
hasAcceptedInvitation: true,
|
|
202
|
+
team: {
|
|
203
|
+
_id: true,
|
|
204
|
+
name: true,
|
|
205
|
+
},
|
|
206
|
+
},
|
|
207
|
+
sort: {},
|
|
208
|
+
requestOptions: data.requestOptions,
|
|
209
|
+
});
|
|
210
|
+
TeamMembersByUser.mergeAllTeamsIntoRows(data.pageRows, allMemberships);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=ProjectUsersModelAPI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProjectUsersModelAPI.js","sourceRoot":"","sources":["../../../../../UI/Utils/ModelAPI/ProjectUsersModelAPI.ts"],"names":[],"mappings":"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"}
|