@oneuptime/common 13.0.8 → 14.0.0
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/AnalyticsModels/AuditLog.ts +23 -15
- package/Models/DatabaseModels/GlobalConfig.ts +24 -0
- package/Models/DatabaseModels/Monitor.ts +3 -2
- package/Models/DatabaseModels/MonitorTemplate.ts +2 -1
- package/Scripts/generate-service-worker.js +65 -4
- package/Server/API/BaseAPI.ts +26 -5
- package/Server/API/GlobalConfigAPI.ts +228 -462
- package/Server/API/ProjectOIDC.ts +25 -16
- package/Server/API/ProjectSSO.ts +24 -16
- package/Server/API/StatusPageAPI.ts +100 -42
- package/Server/API/TeamMemberAPI.ts +10 -1
- package/Server/Enterprise/EnterpriseEdition.ts +649 -0
- package/Server/Enterprise/EnterpriseFeature.ts +48 -0
- package/Server/Enterprise/EnterpriseLicenseSnapshot.ts +192 -0
- package/Server/Enterprise/EnterpriseServerModule.ts +233 -0
- package/Server/EnvironmentConfig.ts +147 -2
- package/Server/Infrastructure/Postgres/SchemaMigrations/1793900000000-AddEnterpriseEditionFirstSeenAt.ts +25 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +2 -0
- package/Server/Middleware/UserAuthorization.ts +38 -16
- package/Server/Services/AuditLogService.ts +84 -1079
- package/Server/Services/EnterpriseLicenseService.ts +38 -0
- package/Server/Services/GlobalConfigService.ts +80 -1
- package/Server/Services/MonitorProbeService.ts +116 -20
- package/Server/Services/MonitorService.ts +56 -4
- package/Server/Services/MonitorStatusTimelineService.ts +284 -0
- package/Server/Services/MonitorTemplateService.ts +26 -0
- package/Server/Services/ProjectService.ts +284 -0
- package/Server/Services/RumSessionPinService.ts +25 -6
- package/Server/Services/StatusPagePrivateUserService.ts +7 -3
- package/Server/Services/StatusPageService.ts +78 -1
- package/Server/Services/TeamMemberService.ts +11 -0
- package/Server/Services/TeamService.ts +10 -0
- package/Server/Services/UserService.ts +10 -17
- package/Server/Types/Database/Permissions/CreatePermission.ts +15 -0
- package/Server/Types/Database/Permissions/EditionPermission.ts +208 -18
- package/Server/Types/Database/Permissions/TablePermission.ts +10 -3
- package/Server/Types/Database/Permissions/UpdatePermission.ts +29 -0
- package/Server/Types/Markdown.ts +41 -0
- package/Server/Utils/CommunityEditionSsoReport.ts +361 -0
- package/Server/Utils/EditionEnforcement.ts +233 -0
- package/Server/Utils/FrontendEnvironment.ts +41 -2
- package/Server/Utils/InstanceHealth/RedisHealth.ts +12 -277
- package/Server/Utils/Monitor/AffectedResourceList.ts +190 -0
- package/Server/Utils/Monitor/Criteria/EvaluateOverTime.ts +10 -1
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +543 -333
- package/Server/Utils/Monitor/MonitoringIntervalValidator.ts +116 -0
- package/Server/Utils/Workspace/Slack/Slack.ts +423 -10
- package/Tests/App/Accounts/LoginPasskey.test.tsx +18 -0
- package/Tests/App/Accounts/LoginSsoEdition.test.tsx +616 -0
- package/Tests/App/AdminDashboard/AdminAuthenticationSsoEdition.test.tsx +217 -0
- package/Tests/App/AdminDashboard/AdminEnterprisePluginPage.test.tsx +357 -0
- package/Tests/App/AdminDashboard/EnterpriseLicensesShell.test.tsx +214 -0
- package/Tests/App/AdminDashboard/GlobalSSOEnterpriseShells.test.tsx +271 -0
- package/Tests/App/AdminDashboard/HealthShells.test.tsx +659 -0
- package/Tests/App/Dashboard/AuditLogsAndComplianceShells.test.tsx +572 -0
- package/Tests/App/Dashboard/EnterpriseFeatureUpgrade.test.tsx +547 -0
- package/Tests/App/Dashboard/EnterprisePluginPage.test.tsx +667 -0
- package/Tests/App/Dashboard/IdentityEnterpriseShells.test.tsx +319 -0
- package/Tests/App/Dashboard/OnboardingSsoEmptyState.test.tsx +185 -0
- package/Tests/App/Dashboard/SecurityEventConnectionDiagnostics.test.tsx +45 -9
- package/Tests/App/Dashboard/SecurityEventDetailPanel.test.tsx +399 -0
- package/Tests/App/Dashboard/SecurityEventListRow.test.tsx +214 -0
- package/Tests/App/Dashboard/SecurityEventsEmptyState.test.tsx +1 -83
- package/Tests/App/Dashboard/SecurityEventsNavTabs.test.tsx +248 -0
- package/Tests/App/Dashboard/SecurityEventsViewer.test.tsx +1203 -0
- package/Tests/App/Dashboard/UserEmailCallSites.test.tsx +11 -91
- package/Tests/App/StatusPage/StatusPageSsoEmptyState.test.tsx +319 -0
- package/Tests/Helpers/RefreshAwareApiScan.ts +757 -0
- package/Tests/Helpers/TenantScopedRequestScan.ts +515 -0
- package/Tests/Scripts/GenerateServiceWorker.test.ts +931 -0
- package/Tests/Server/API/BaseAPICreateItemDoesNotMutateModel.test.ts +130 -0
- package/Tests/Server/API/GlobalConfigLicense.test.ts +742 -497
- package/Tests/Server/API/OnCallReadinessAPI.test.ts +35 -909
- package/Tests/Server/API/SsoProviderListingsEdition.test.ts +432 -0
- package/Tests/Server/API/TeamMemberLeaveScimLockEdition.test.ts +252 -0
- package/Tests/Server/Enterprise/EnterpriseEdition.test.ts +824 -0
- package/Tests/Server/Enterprise/EnterpriseFeatureActive.test.ts +643 -0
- package/Tests/Server/Enterprise/EnterpriseLicenseSnapshot.test.ts +294 -0
- package/Tests/Server/Enterprise/EnterpriseModelFeatureMap.test.ts +93 -0
- package/Tests/Server/Enterprise/EnterpriseOnlyModulesLiveInEe.test.ts +582 -0
- package/Tests/Server/Enterprise/EnterpriseServerModule.test.ts +247 -0
- package/Tests/Server/Enterprise/FakeEnterpriseModule.ts +502 -0
- package/Tests/Server/Enterprise/TestBillingFlag.ts +70 -0
- package/Tests/Server/EnvironmentConfigEnterpriseEdition.test.ts +314 -0
- package/Tests/Server/Infrastructure/ContainerBootConfiguration.test.ts +289 -0
- package/Tests/Server/Infrastructure/E2EClickHouseFixtureAccess.test.ts +5 -1
- package/Tests/Server/Middleware/UserAuthorization.test.ts +37 -2
- package/Tests/Server/Middleware/UserAuthorizationEditionEnforcement.test.ts +516 -0
- package/Tests/Server/Services/AuditLogService.test.ts +460 -990
- package/Tests/Server/Services/CreateAndReadResponsesKeepIds.test.ts +263 -0
- package/Tests/Server/Services/EnterpriseLicenseServiceKeyGeneration.test.ts +151 -0
- package/Tests/Server/Services/GlobalConfigServiceLicenseColumns.test.ts +357 -0
- package/Tests/Server/Services/MonitorDestinationInfoIPv6.test.ts +101 -0
- package/Tests/Server/Services/MonitorProbeServiceIntervalScheduling.test.ts +333 -0
- package/Tests/Server/Services/MonitorStatusTimelineDailyAggregates.test.ts +303 -0
- package/Tests/Server/Services/ProjectServiceAuditLogLicense.test.ts +701 -0
- package/Tests/Server/Services/ProjectServiceAuditLogSettingsCache.test.ts +31 -35
- package/Tests/Server/Services/ScimPushGroupsTeamLocksEdition.test.ts +431 -0
- package/Tests/Server/Services/SsoRequirementReadMasking.test.ts +419 -0
- package/Tests/Server/Services/SsoRequirementWriteGuard.test.ts +769 -0
- package/Tests/Server/Services/StatusPagePrivateUserInvitationPolicy.test.ts +94 -0
- package/Tests/Server/Services/UserAuthenticationService.test.ts +35 -0
- package/Tests/Server/Services/UserServiceSeatLimit.test.ts +94 -56
- package/Tests/Server/Types/Database/Permissions/EditionPermission.test.ts +1823 -0
- package/Tests/Server/Types/Markdown.test.ts +181 -0
- package/Tests/Server/Utils/CommunityEditionSsoReport.test.ts +565 -0
- package/Tests/Server/Utils/EditionEnforcement.test.ts +303 -0
- package/Tests/Server/Utils/FrontendEnvironment.test.ts +367 -0
- package/Tests/Server/Utils/InstanceHealth/RedisHealth.test.ts +38 -418
- package/Tests/Server/Utils/Monitor/AffectedResourceList.test.ts +518 -0
- package/Tests/Server/Utils/Monitor/Criteria/EvaluateOverTime.test.ts +24 -4
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluator.test.ts +934 -96
- package/Tests/Server/Utils/Monitor/MonitoringIntervalValidator.test.ts +188 -0
- package/Tests/Server/Utils/Workspace/Slack/SlackMarkdownSectionSplit.test.ts +1209 -0
- package/Tests/Types/API/HostnameFromAuthority.test.ts +20 -10
- package/Tests/Types/API/HostnameIPv6.test.ts +149 -0
- package/Tests/Types/Database/CanonicalModelInstance.test.ts +190 -0
- package/Tests/UI/Components/EditionLabelLapseCopy.ts +104 -0
- package/Tests/UI/Components/EditionLabelLicenseManagerWiring.test.tsx +254 -0
- package/Tests/UI/Components/EditionLabelLicenseRefresh.test.tsx +84 -178
- package/Tests/UI/Components/EditionLabelLicenseStatus.test.tsx +1586 -0
- package/Tests/UI/Components/EditionLabelLicenseWritesGuard.test.tsx +157 -0
- package/Tests/UI/Components/Graphs/DayUptimeGraph.test.tsx +49 -2
- package/Tests/UI/Components/MarkdownConverters.test.ts +684 -0
- package/Tests/UI/Components/ModelListEmptyState.test.tsx +289 -0
- package/Tests/UI/Components/TelemetryViewer/TelemetryViewerEmptyContent.test.tsx +131 -0
- package/Tests/UI/EsbuildEnterpriseAlias.test.ts +1127 -0
- package/Tests/Utils/HostAddressUtil.test.ts +138 -0
- package/Tests/Utils/Monitor/MonitorDestinationUtil.test.ts +313 -0
- package/Tests/Utils/Monitor/MonitoringIntervalUtil.test.ts +304 -0
- package/Tests/Utils/StatusPage/UptimeDailyAggregateUtil.test.ts +248 -0
- package/Types/API/Hostname.ts +63 -16
- package/Types/Database/AccessControl/ColumnAccessControl.ts +19 -7
- package/Types/Database/AccessControl/ColumnBillingAccessControl.ts +19 -7
- package/Types/Database/AccessControl/OwnerOnlyColumn.ts +15 -6
- package/Types/Database/CanonicalModelInstance.ts +102 -0
- package/Types/Database/TableColumn.ts +20 -6
- package/Types/EnterpriseLicense/EnterpriseLicensePeriods.ts +29 -0
- package/Types/IP/IPv6.ts +6 -1
- package/Types/Monitor/MonitorStep.ts +6 -1
- package/Types/Monitor/ProxmoxAlertTemplates.ts +1 -1
- package/Types/StatusPage/UptimeDailyAggregate.ts +110 -0
- package/UI/Components/EditionLabel/EditionLabel.tsx +796 -1195
- package/UI/Components/EditionLabel/LicenseManager.ts +119 -0
- package/UI/Components/Graphs/DayUptimeGraph.tsx +123 -15
- package/UI/Components/Markdown.tsx/MarkdownConverters.ts +0 -0
- package/UI/Components/ModelList/ModelList.tsx +11 -1
- package/UI/Components/MonitorGraphs/Uptime.tsx +69 -0
- package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +28 -12
- package/UI/esbuild-enterprise.js +263 -0
- package/Utils/EnterpriseLicense/EnterpriseLicenseUsage.ts +7 -2
- package/Utils/HostAddressUtil.ts +94 -0
- package/Utils/Monitor/MonitorDestinationUtil.ts +157 -0
- package/Utils/Monitor/MonitoringIntervalUtil.ts +436 -0
- package/Utils/StatusPage/UptimeDailyAggregateUtil.ts +192 -0
- package/build/dist/Models/AnalyticsModels/AuditLog.js +23 -15
- package/build/dist/Models/AnalyticsModels/AuditLog.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalConfig.js +25 -0
- package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Monitor.js +2 -2
- package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorTemplate.js +2 -1
- package/build/dist/Models/DatabaseModels/MonitorTemplate.js.map +1 -1
- package/build/dist/Server/API/BaseAPI.js +26 -5
- package/build/dist/Server/API/BaseAPI.js.map +1 -1
- package/build/dist/Server/API/GlobalConfigAPI.js +148 -344
- package/build/dist/Server/API/GlobalConfigAPI.js.map +1 -1
- package/build/dist/Server/API/ProjectOIDC.js +24 -16
- package/build/dist/Server/API/ProjectOIDC.js.map +1 -1
- package/build/dist/Server/API/ProjectSSO.js +24 -16
- package/build/dist/Server/API/ProjectSSO.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +93 -43
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/API/TeamMemberAPI.js +8 -1
- package/build/dist/Server/API/TeamMemberAPI.js.map +1 -1
- package/build/dist/Server/Enterprise/EnterpriseEdition.js +466 -0
- package/build/dist/Server/Enterprise/EnterpriseEdition.js.map +1 -0
- package/build/dist/Server/Enterprise/EnterpriseFeature.js +39 -0
- package/build/dist/Server/Enterprise/EnterpriseFeature.js.map +1 -0
- package/build/dist/Server/Enterprise/EnterpriseLicenseSnapshot.js +70 -0
- package/build/dist/Server/Enterprise/EnterpriseLicenseSnapshot.js.map +1 -0
- package/build/dist/Server/Enterprise/EnterpriseServerModule.js +84 -0
- package/build/dist/Server/Enterprise/EnterpriseServerModule.js.map +1 -0
- package/build/dist/Server/EnvironmentConfig.js +84 -2
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793900000000-AddEnterpriseEditionFirstSeenAt.js +18 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793900000000-AddEnterpriseEditionFirstSeenAt.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +2 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/UserAuthorization.js +30 -11
- package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
- package/build/dist/Server/Services/AuditLogService.js +71 -740
- package/build/dist/Server/Services/AuditLogService.js.map +1 -1
- package/build/dist/Server/Services/EnterpriseLicenseService.js +34 -0
- package/build/dist/Server/Services/EnterpriseLicenseService.js.map +1 -1
- package/build/dist/Server/Services/GlobalConfigService.js +63 -0
- package/build/dist/Server/Services/GlobalConfigService.js.map +1 -1
- package/build/dist/Server/Services/MonitorProbeService.js +90 -17
- package/build/dist/Server/Services/MonitorProbeService.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +45 -4
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/MonitorStatusTimelineService.js +242 -0
- package/build/dist/Server/Services/MonitorStatusTimelineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorTemplateService.js +16 -0
- package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +214 -0
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/RumSessionPinService.js +24 -6
- package/build/dist/Server/Services/RumSessionPinService.js.map +1 -1
- package/build/dist/Server/Services/StatusPagePrivateUserService.js +7 -3
- package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageService.js +71 -0
- package/build/dist/Server/Services/StatusPageService.js.map +1 -1
- package/build/dist/Server/Services/TeamMemberService.js +10 -0
- package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
- package/build/dist/Server/Services/TeamService.js +9 -0
- package/build/dist/Server/Services/TeamService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +10 -16
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/CreatePermission.js +10 -0
- package/build/dist/Server/Types/Database/Permissions/CreatePermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/EditionPermission.js +154 -14
- package/build/dist/Server/Types/Database/Permissions/EditionPermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/TablePermission.js +10 -3
- package/build/dist/Server/Types/Database/Permissions/TablePermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/UpdatePermission.js +17 -0
- package/build/dist/Server/Types/Database/Permissions/UpdatePermission.js.map +1 -1
- package/build/dist/Server/Types/Markdown.js +31 -0
- package/build/dist/Server/Types/Markdown.js.map +1 -1
- package/build/dist/Server/Utils/CommunityEditionSsoReport.js +223 -0
- package/build/dist/Server/Utils/CommunityEditionSsoReport.js.map +1 -0
- package/build/dist/Server/Utils/EditionEnforcement.js +187 -0
- package/build/dist/Server/Utils/EditionEnforcement.js.map +1 -0
- package/build/dist/Server/Utils/FrontendEnvironment.js +31 -2
- package/build/dist/Server/Utils/FrontendEnvironment.js.map +1 -1
- package/build/dist/Server/Utils/InstanceHealth/RedisHealth.js +6 -193
- package/build/dist/Server/Utils/InstanceHealth/RedisHealth.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/AffectedResourceList.js +96 -0
- package/build/dist/Server/Utils/Monitor/AffectedResourceList.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js +8 -1
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +449 -261
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitoringIntervalValidator.js +88 -0
- package/build/dist/Server/Utils/Monitor/MonitoringIntervalValidator.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js +331 -11
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
- package/build/dist/Types/API/Hostname.js +59 -11
- package/build/dist/Types/API/Hostname.js.map +1 -1
- package/build/dist/Types/Database/AccessControl/ColumnAccessControl.js +19 -7
- package/build/dist/Types/Database/AccessControl/ColumnAccessControl.js.map +1 -1
- package/build/dist/Types/Database/AccessControl/ColumnBillingAccessControl.js +19 -7
- package/build/dist/Types/Database/AccessControl/ColumnBillingAccessControl.js.map +1 -1
- package/build/dist/Types/Database/AccessControl/OwnerOnlyColumn.js +13 -6
- package/build/dist/Types/Database/AccessControl/OwnerOnlyColumn.js.map +1 -1
- package/build/dist/Types/Database/CanonicalModelInstance.js +88 -0
- package/build/dist/Types/Database/CanonicalModelInstance.js.map +1 -0
- package/build/dist/Types/Database/TableColumn.js +19 -6
- package/build/dist/Types/Database/TableColumn.js.map +1 -1
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicensePeriods.js +28 -0
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicensePeriods.js.map +1 -0
- package/build/dist/Types/IP/IPv6.js +6 -1
- package/build/dist/Types/IP/IPv6.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +5 -0
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js +1 -1
- package/build/dist/Types/StatusPage/UptimeDailyAggregate.js +32 -0
- package/build/dist/Types/StatusPage/UptimeDailyAggregate.js.map +1 -0
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js +414 -585
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
- package/build/dist/UI/Components/EditionLabel/LicenseManager.js +2 -0
- package/build/dist/UI/Components/EditionLabel/LicenseManager.js.map +1 -0
- package/build/dist/UI/Components/Graphs/DayUptimeGraph.js +90 -17
- package/build/dist/UI/Components/Graphs/DayUptimeGraph.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js +0 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js.map +1 -1
- package/build/dist/UI/Components/ModelList/ModelList.js +4 -1
- package/build/dist/UI/Components/ModelList/ModelList.js.map +1 -1
- package/build/dist/UI/Components/MonitorGraphs/Uptime.js +42 -1
- package/build/dist/UI/Components/MonitorGraphs/Uptime.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +2 -2
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js +6 -2
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js.map +1 -1
- package/build/dist/Utils/HostAddressUtil.js +80 -0
- package/build/dist/Utils/HostAddressUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitorDestinationUtil.js +127 -0
- package/build/dist/Utils/Monitor/MonitorDestinationUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitoringIntervalUtil.js +374 -0
- package/build/dist/Utils/Monitor/MonitoringIntervalUtil.js.map +1 -0
- package/build/dist/Utils/StatusPage/UptimeDailyAggregateUtil.js +148 -0
- package/build/dist/Utils/StatusPage/UptimeDailyAggregateUtil.js.map +1 -0
- package/jest.config.json +3 -1
- package/package.json +1 -1
- package/test-setup.sh +103 -34
- package/tsconfig.json +13 -0
- package/Server/API/EnterpriseLicenseAPI.ts +0 -925
- package/Server/API/TeamComplianceAPI.ts +0 -158
- package/Server/Middleware/SCIMAuthorization.ts +0 -141
- package/Server/Services/TeamComplianceService.ts +0 -733
- package/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.ts +0 -186
- package/Server/Utils/InstanceHealth/PostgresHealth.ts +0 -286
- package/Tests/App/AdminDashboard/EnterpriseLicenseInstanceActivity.test.tsx +0 -451
- package/Tests/App/Dashboard/AuditLogsTable.test.tsx +0 -598
- package/Tests/App/Dashboard/SecurityEventsExplorer.test.tsx +0 -761
- package/Tests/App/Dashboard/SecurityEventsSideMenu.test.tsx +0 -247
- package/Tests/App/Dashboard/SecurityEventsTableColumns.test.tsx +0 -382
- package/Tests/App/Dashboard/SecurityEventsVolumeChart.test.tsx +0 -321
- package/Tests/Server/API/EnterpriseLicenseReportUserCount.test.ts +0 -1851
- package/Tests/Server/Middleware/SCIMAuthorization.test.ts +0 -525
- package/Tests/Server/Services/TeamComplianceServiceBehaviour.test.ts +0 -1845
- package/Tests/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.test.ts +0 -495
- package/Tests/Server/Utils/InstanceHealth/PostgresHealth.test.ts +0 -337
- package/Tests/Utils/EnterpriseLicenseSeats.test.ts +0 -576
- package/Tests/Utils/EnterpriseLicenseSync.test.ts +0 -568
- package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +0 -287
- package/Utils/EnterpriseLicense/EnterpriseLicenseSync.ts +0 -244
- package/build/dist/Server/API/EnterpriseLicenseAPI.js +0 -646
- package/build/dist/Server/API/EnterpriseLicenseAPI.js.map +0 -1
- package/build/dist/Server/API/TeamComplianceAPI.js +0 -111
- package/build/dist/Server/API/TeamComplianceAPI.js.map +0 -1
- package/build/dist/Server/Middleware/SCIMAuthorization.js +0 -124
- package/build/dist/Server/Middleware/SCIMAuthorization.js.map +0 -1
- package/build/dist/Server/Services/TeamComplianceService.js +0 -537
- package/build/dist/Server/Services/TeamComplianceService.js.map +0 -1
- package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js +0 -145
- package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js.map +0 -1
- package/build/dist/Server/Utils/InstanceHealth/PostgresHealth.js +0 -194
- package/build/dist/Server/Utils/InstanceHealth/PostgresHealth.js.map +0 -1
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js +0 -168
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js.map +0 -1
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSync.js +0 -174
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSync.js.map +0 -1
|
@@ -20,7 +20,7 @@ import CaptureSpan from "../../Telemetry/CaptureSpan";
|
|
|
20
20
|
import BadDataException from "../../../../Types/Exception/BadDataException";
|
|
21
21
|
import WorkspaceProjectAuthTokenService from "../../../Services/WorkspaceProjectAuthTokenService";
|
|
22
22
|
import SSRFProtection from "../../SSRFProtection";
|
|
23
|
-
|
|
23
|
+
class SlackUtil extends WorkspaceBase {
|
|
24
24
|
static isValidSlackIncomingWebhookUrl(incomingWebhookUrl) {
|
|
25
25
|
/*
|
|
26
26
|
* Host AND path prefix. The host check is what stops SSRF; the "/services/"
|
|
@@ -874,7 +874,7 @@ export default class SlackUtil extends WorkspaceBase {
|
|
|
874
874
|
}
|
|
875
875
|
}
|
|
876
876
|
// Slack has a limit of 50 blocks per message. Split into batches if needed.
|
|
877
|
-
const maxBlocksPerMessage =
|
|
877
|
+
const maxBlocksPerMessage = SlackUtil.MAX_BLOCKS_PER_MESSAGE;
|
|
878
878
|
let lastThread;
|
|
879
879
|
if (blocks.length <= maxBlocksPerMessage) {
|
|
880
880
|
lastThread = await this.sendPayloadBlocksToChannel({
|
|
@@ -1407,28 +1407,311 @@ export default class SlackUtil extends WorkspaceBase {
|
|
|
1407
1407
|
},
|
|
1408
1408
|
blocks: this.getBlocksFromWorkspaceMessagePayload({
|
|
1409
1409
|
messageBlocks: data.payloadModalBlock.blocks,
|
|
1410
|
+
// A view takes twice as many blocks as a message.
|
|
1411
|
+
maxBlocks: SlackUtil.MAX_BLOCKS_PER_MODAL,
|
|
1410
1412
|
}),
|
|
1411
1413
|
};
|
|
1412
1414
|
logger.debug("Modal block generated:", {});
|
|
1413
1415
|
logger.debug(modalBlock, {});
|
|
1414
1416
|
return modalBlock;
|
|
1415
1417
|
}
|
|
1418
|
+
static getBlocksFromWorkspaceMessagePayload(data) {
|
|
1419
|
+
var _a, _b;
|
|
1420
|
+
const maxBlocks = (_a = data.maxBlocks) !== null && _a !== void 0 ? _a : SlackUtil.MAX_BLOCKS_PER_MESSAGE;
|
|
1421
|
+
/*
|
|
1422
|
+
* A markdown payload is the one block whose size we do not control: it
|
|
1423
|
+
* carries whatever the incident or alert says, root cause included, and
|
|
1424
|
+
* a section holds at most 3000 characters. So here it may expand into
|
|
1425
|
+
* several consecutive sections (see getMarkdownBlocks). Every other
|
|
1426
|
+
* block type still goes through the base class one block at a time, so
|
|
1427
|
+
* it renders exactly as before — one block, or none for an unknown type.
|
|
1428
|
+
*
|
|
1429
|
+
* The extra sections must not take the message past maxBlocks, or Slack
|
|
1430
|
+
* rejects all of it. So the other blocks are rendered first, every
|
|
1431
|
+
* markdown payload is counted for the one section it always had, and
|
|
1432
|
+
* only what is left of the budget is handed out as extra sections, in
|
|
1433
|
+
* message order, so the body a caller puts first is the last thing to
|
|
1434
|
+
* be cut short. A message that is already at the limit keeps one
|
|
1435
|
+
* section per markdown payload, exactly as many blocks as before.
|
|
1436
|
+
*/
|
|
1437
|
+
const renderedBlocks = [];
|
|
1438
|
+
let blockCountBeforeSplitting = 0;
|
|
1439
|
+
for (const messageBlock of data.messageBlocks) {
|
|
1440
|
+
if (messageBlock._type === "WorkspacePayloadMarkdown") {
|
|
1441
|
+
// Rendered in the second pass, once the budget is known.
|
|
1442
|
+
renderedBlocks.push(null);
|
|
1443
|
+
blockCountBeforeSplitting += 1;
|
|
1444
|
+
continue;
|
|
1445
|
+
}
|
|
1446
|
+
const otherBlocks = super.getBlocksFromWorkspaceMessagePayload({
|
|
1447
|
+
messageBlocks: [messageBlock],
|
|
1448
|
+
});
|
|
1449
|
+
renderedBlocks.push(otherBlocks);
|
|
1450
|
+
blockCountBeforeSplitting += otherBlocks.length;
|
|
1451
|
+
}
|
|
1452
|
+
let spareBlocks = Math.max(0, maxBlocks - blockCountBeforeSplitting);
|
|
1453
|
+
const blocks = [];
|
|
1454
|
+
for (let index = 0; index < data.messageBlocks.length; index++) {
|
|
1455
|
+
// Empty, not null, for a block of an unknown type — it stays dropped.
|
|
1456
|
+
const rendered = (_b = renderedBlocks[index]) !== null && _b !== void 0 ? _b : null;
|
|
1457
|
+
if (rendered !== null) {
|
|
1458
|
+
blocks.push(...rendered);
|
|
1459
|
+
continue;
|
|
1460
|
+
}
|
|
1461
|
+
const sections = this.getMarkdownBlocks({
|
|
1462
|
+
payloadMarkdownBlock: data.messageBlocks[index],
|
|
1463
|
+
maxSections: 1 +
|
|
1464
|
+
Math.min(spareBlocks, SlackUtil.MAX_SECTIONS_PER_MARKDOWN_BLOCK - 1),
|
|
1465
|
+
});
|
|
1466
|
+
spareBlocks -= sections.length - 1;
|
|
1467
|
+
blocks.push(...sections);
|
|
1468
|
+
}
|
|
1469
|
+
return blocks;
|
|
1470
|
+
}
|
|
1471
|
+
/*
|
|
1472
|
+
* One section block. Text over Slack's limit cannot be split here, so it
|
|
1473
|
+
* is cut short with a note instead of being sent as a block Slack would
|
|
1474
|
+
* reject; messages go through getBlocksFromWorkspaceMessagePayload, which
|
|
1475
|
+
* splits it across sections. Text within the limit renders as it always
|
|
1476
|
+
* has.
|
|
1477
|
+
*/
|
|
1416
1478
|
static getMarkdownBlock(data) {
|
|
1417
1479
|
logger.debug("Getting markdown block with data:", {});
|
|
1418
1480
|
logger.debug(data, {});
|
|
1419
|
-
const markdownBlock = {
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
text: data.payloadMarkdownBlock.text
|
|
1424
|
-
? SlackifyMarkdown(data.payloadMarkdownBlock.text)
|
|
1425
|
-
: "",
|
|
1426
|
-
},
|
|
1427
|
-
};
|
|
1481
|
+
const markdownBlock = this.getMarkdownBlocks({
|
|
1482
|
+
payloadMarkdownBlock: data.payloadMarkdownBlock,
|
|
1483
|
+
maxSections: 1,
|
|
1484
|
+
})[0];
|
|
1428
1485
|
logger.debug("Markdown block generated:", {});
|
|
1429
1486
|
logger.debug(markdownBlock, {});
|
|
1430
1487
|
return markdownBlock;
|
|
1431
1488
|
}
|
|
1489
|
+
/*
|
|
1490
|
+
* A markdown payload as consecutive section blocks, each within Slack's
|
|
1491
|
+
* 3000-character limit. Text that fits is one section, byte for byte what
|
|
1492
|
+
* a markdown payload has always rendered to (empty text included).
|
|
1493
|
+
*/
|
|
1494
|
+
static getMarkdownBlocks(data) {
|
|
1495
|
+
const text = data.payloadMarkdownBlock.text
|
|
1496
|
+
? SlackifyMarkdown(data.payloadMarkdownBlock.text)
|
|
1497
|
+
: "";
|
|
1498
|
+
const sectionTexts = this.splitSectionText({
|
|
1499
|
+
text: text,
|
|
1500
|
+
maxSections: data.maxSections,
|
|
1501
|
+
});
|
|
1502
|
+
if (sectionTexts.length > 1) {
|
|
1503
|
+
logger.debug(`Markdown block of ${text.length} characters split into ${sectionTexts.length} sections.`, {});
|
|
1504
|
+
}
|
|
1505
|
+
return sectionTexts.map((sectionText) => {
|
|
1506
|
+
return {
|
|
1507
|
+
type: "section",
|
|
1508
|
+
text: {
|
|
1509
|
+
type: "mrkdwn",
|
|
1510
|
+
text: sectionText,
|
|
1511
|
+
},
|
|
1512
|
+
};
|
|
1513
|
+
});
|
|
1514
|
+
}
|
|
1515
|
+
/*
|
|
1516
|
+
* Splits slackified text into section texts of at most
|
|
1517
|
+
* SECTION_TEXT_MAX_LENGTH characters, at the least disruptive places
|
|
1518
|
+
* available:
|
|
1519
|
+
*
|
|
1520
|
+
* 1. between paragraphs (a blank line),
|
|
1521
|
+
* 2. between list items, keeping an item together with the indented
|
|
1522
|
+
* bullets under it,
|
|
1523
|
+
* 3. between lines,
|
|
1524
|
+
* 4. and only inside a line that is on its own longer than the limit,
|
|
1525
|
+
* preferring a space there.
|
|
1526
|
+
*
|
|
1527
|
+
* The text between two sections is the newlines they were split at and
|
|
1528
|
+
* nothing else, so the sections read back in order give every line of the
|
|
1529
|
+
* original. A section that ends inside a ``` code block closes it and the
|
|
1530
|
+
* next one reopens it.
|
|
1531
|
+
*
|
|
1532
|
+
* Beyond maxSections the rest is dropped and the last section ends with
|
|
1533
|
+
* TRUNCATED_SECTION_NOTE. Text that fits is returned as it is.
|
|
1534
|
+
*/
|
|
1535
|
+
static splitSectionText(data) {
|
|
1536
|
+
var _a;
|
|
1537
|
+
const maxLength = SlackUtil.SECTION_TEXT_MAX_LENGTH;
|
|
1538
|
+
if (data.text.length <= maxLength) {
|
|
1539
|
+
return [data.text];
|
|
1540
|
+
}
|
|
1541
|
+
const maxSections = Math.max(1, (_a = data.maxSections) !== null && _a !== void 0 ? _a : SlackUtil.MAX_SECTIONS_PER_MARKDOWN_BLOCK);
|
|
1542
|
+
/*
|
|
1543
|
+
* Any piece may need to reopen a code block at its start and close one
|
|
1544
|
+
* at its end, so when the text has code blocks every piece leaves room
|
|
1545
|
+
* for both.
|
|
1546
|
+
*/
|
|
1547
|
+
const pieceMaxLength = data.text.includes(SlackUtil.CODE_FENCE)
|
|
1548
|
+
? maxLength -
|
|
1549
|
+
SlackUtil.CODE_FENCE_REOPEN.length -
|
|
1550
|
+
SlackUtil.CODE_FENCE_CLOSE.length
|
|
1551
|
+
: maxLength;
|
|
1552
|
+
let pieces = this.splitTextAtBoundaries(data.text, pieceMaxLength);
|
|
1553
|
+
if (pieces.length === 0) {
|
|
1554
|
+
// Nothing but whitespace — there is nothing to show.
|
|
1555
|
+
return [""];
|
|
1556
|
+
}
|
|
1557
|
+
const isTruncated = pieces.length > maxSections;
|
|
1558
|
+
if (isTruncated) {
|
|
1559
|
+
pieces = pieces.slice(0, maxSections);
|
|
1560
|
+
/*
|
|
1561
|
+
* Shorten the last piece until the note fits after it, with the same
|
|
1562
|
+
* boundary preferences — whole paragraphs, items or lines where it
|
|
1563
|
+
* can.
|
|
1564
|
+
*/
|
|
1565
|
+
const lastPiece = pieces[pieces.length - 1] || "";
|
|
1566
|
+
pieces[pieces.length - 1] =
|
|
1567
|
+
this.splitTextAtBoundaries(lastPiece, pieceMaxLength - SlackUtil.TRUNCATED_SECTION_NOTE.length)[0] || "";
|
|
1568
|
+
}
|
|
1569
|
+
const sections = [];
|
|
1570
|
+
let isInsideCodeBlock = false;
|
|
1571
|
+
for (let index = 0; index < pieces.length; index++) {
|
|
1572
|
+
const piece = pieces[index] || "";
|
|
1573
|
+
const isLastPiece = index === pieces.length - 1;
|
|
1574
|
+
let section = isInsideCodeBlock
|
|
1575
|
+
? SlackUtil.CODE_FENCE_REOPEN + piece
|
|
1576
|
+
: piece;
|
|
1577
|
+
// An odd number of fences opens or closes a code block.
|
|
1578
|
+
const fenceCount = piece.split(SlackUtil.CODE_FENCE).length - 1;
|
|
1579
|
+
if (fenceCount % 2 === 1) {
|
|
1580
|
+
isInsideCodeBlock = !isInsideCodeBlock;
|
|
1581
|
+
}
|
|
1582
|
+
/*
|
|
1583
|
+
* The last piece of text that was not truncated ends where the
|
|
1584
|
+
* original ends, so a code block still open there was never closed
|
|
1585
|
+
* and is left alone.
|
|
1586
|
+
*/
|
|
1587
|
+
if (isInsideCodeBlock && (!isLastPiece || isTruncated)) {
|
|
1588
|
+
section += SlackUtil.CODE_FENCE_CLOSE;
|
|
1589
|
+
}
|
|
1590
|
+
if (isLastPiece && isTruncated) {
|
|
1591
|
+
section += SlackUtil.TRUNCATED_SECTION_NOTE;
|
|
1592
|
+
}
|
|
1593
|
+
sections.push(section);
|
|
1594
|
+
}
|
|
1595
|
+
return sections;
|
|
1596
|
+
}
|
|
1597
|
+
/*
|
|
1598
|
+
* Pieces of at most maxLength characters, split at the boundaries listed
|
|
1599
|
+
* on splitSectionText. Each piece is trimmed of the newlines it was split
|
|
1600
|
+
* at; a piece with nothing but whitespace is dropped.
|
|
1601
|
+
*/
|
|
1602
|
+
static splitTextAtBoundaries(text, maxLength) {
|
|
1603
|
+
const pieces = this.packSectionPieces({
|
|
1604
|
+
units: text.split("\n\n"),
|
|
1605
|
+
separator: "\n\n",
|
|
1606
|
+
maxLength: maxLength,
|
|
1607
|
+
splitOversizedUnit: (paragraph) => {
|
|
1608
|
+
return this.packSectionPieces({
|
|
1609
|
+
units: this.groupIndentedLines(paragraph),
|
|
1610
|
+
separator: "\n",
|
|
1611
|
+
maxLength: maxLength,
|
|
1612
|
+
splitOversizedUnit: (lineGroup) => {
|
|
1613
|
+
return this.packSectionPieces({
|
|
1614
|
+
units: lineGroup.split("\n"),
|
|
1615
|
+
separator: "\n",
|
|
1616
|
+
maxLength: maxLength,
|
|
1617
|
+
splitOversizedUnit: (line) => {
|
|
1618
|
+
return this.hardCutLine(line, maxLength);
|
|
1619
|
+
},
|
|
1620
|
+
});
|
|
1621
|
+
},
|
|
1622
|
+
});
|
|
1623
|
+
},
|
|
1624
|
+
});
|
|
1625
|
+
return pieces
|
|
1626
|
+
.map((piece) => {
|
|
1627
|
+
return piece.replace(/^[\r\n]+|[\r\n]+$/g, "");
|
|
1628
|
+
})
|
|
1629
|
+
.filter((piece) => {
|
|
1630
|
+
return piece.trim().length > 0;
|
|
1631
|
+
});
|
|
1632
|
+
}
|
|
1633
|
+
/*
|
|
1634
|
+
* Greedily joins units with the separator into pieces of at most
|
|
1635
|
+
* maxLength. A unit that does not fit next to the piece being built
|
|
1636
|
+
* starts a new piece rather than being broken up; only a unit longer than
|
|
1637
|
+
* maxLength on its own is broken, by splitOversizedUnit. The last of its
|
|
1638
|
+
* parts stays open, so the unit after it can still join it.
|
|
1639
|
+
*/
|
|
1640
|
+
static packSectionPieces(data) {
|
|
1641
|
+
var _a;
|
|
1642
|
+
const pieces = [];
|
|
1643
|
+
// null until the first unit, so an empty unit still keeps its separator.
|
|
1644
|
+
let currentPiece = null;
|
|
1645
|
+
for (const unit of data.units) {
|
|
1646
|
+
if (currentPiece !== null) {
|
|
1647
|
+
const joined = currentPiece + data.separator + unit;
|
|
1648
|
+
if (joined.length <= data.maxLength) {
|
|
1649
|
+
currentPiece = joined;
|
|
1650
|
+
continue;
|
|
1651
|
+
}
|
|
1652
|
+
pieces.push(currentPiece);
|
|
1653
|
+
currentPiece = null;
|
|
1654
|
+
}
|
|
1655
|
+
if (unit.length <= data.maxLength) {
|
|
1656
|
+
currentPiece = unit;
|
|
1657
|
+
continue;
|
|
1658
|
+
}
|
|
1659
|
+
const parts = data.splitOversizedUnit(unit);
|
|
1660
|
+
pieces.push(...parts.slice(0, -1));
|
|
1661
|
+
currentPiece = (_a = parts[parts.length - 1]) !== null && _a !== void 0 ? _a : null;
|
|
1662
|
+
}
|
|
1663
|
+
if (currentPiece !== null) {
|
|
1664
|
+
pieces.push(currentPiece);
|
|
1665
|
+
}
|
|
1666
|
+
return pieces;
|
|
1667
|
+
}
|
|
1668
|
+
/*
|
|
1669
|
+
* The lines of a paragraph, with every indented line attached to the line
|
|
1670
|
+
* above it. slackify-markdown indents a nested bullet under its list item
|
|
1671
|
+
* — the Affected Resources list puts a resource's namespace, workload and
|
|
1672
|
+
* node there — so a split between groups never strands those bullets at
|
|
1673
|
+
* the top of the next section, away from the item they describe.
|
|
1674
|
+
*/
|
|
1675
|
+
static groupIndentedLines(paragraph) {
|
|
1676
|
+
const groups = [];
|
|
1677
|
+
for (const line of paragraph.split("\n")) {
|
|
1678
|
+
const isIndented = line.startsWith(" ") || line.startsWith("\t");
|
|
1679
|
+
const lastGroupIndex = groups.length - 1;
|
|
1680
|
+
if (isIndented && lastGroupIndex >= 0) {
|
|
1681
|
+
groups[lastGroupIndex] = (groups[lastGroupIndex] || "") + "\n" + line;
|
|
1682
|
+
continue;
|
|
1683
|
+
}
|
|
1684
|
+
groups.push(line);
|
|
1685
|
+
}
|
|
1686
|
+
return groups;
|
|
1687
|
+
}
|
|
1688
|
+
/*
|
|
1689
|
+
* Cuts a single line longer than maxLength. Each cut is made after the
|
|
1690
|
+
* last space that still leaves the piece at least half full, so words stay
|
|
1691
|
+
* whole where the line has spaces, and never between the two halves of a
|
|
1692
|
+
* surrogate pair (an emoji), which would leave both pieces invalid.
|
|
1693
|
+
*/
|
|
1694
|
+
static hardCutLine(line, maxLength) {
|
|
1695
|
+
const pieces = [];
|
|
1696
|
+
let rest = line;
|
|
1697
|
+
while (rest.length > maxLength) {
|
|
1698
|
+
let cutAt = maxLength;
|
|
1699
|
+
const lastSpaceIndex = rest.lastIndexOf(" ", maxLength - 1);
|
|
1700
|
+
if (lastSpaceIndex + 1 >= Math.ceil(maxLength / 2)) {
|
|
1701
|
+
cutAt = lastSpaceIndex + 1;
|
|
1702
|
+
}
|
|
1703
|
+
else {
|
|
1704
|
+
const charCodeBeforeCut = rest.charCodeAt(cutAt - 1);
|
|
1705
|
+
if (charCodeBeforeCut >= 0xd800 && charCodeBeforeCut <= 0xdbff) {
|
|
1706
|
+
cutAt -= 1;
|
|
1707
|
+
}
|
|
1708
|
+
}
|
|
1709
|
+
pieces.push(rest.slice(0, cutAt));
|
|
1710
|
+
rest = rest.slice(cutAt);
|
|
1711
|
+
}
|
|
1712
|
+
pieces.push(rest);
|
|
1713
|
+
return pieces;
|
|
1714
|
+
}
|
|
1432
1715
|
static async isUserInDirectMessageChannel(data) {
|
|
1433
1716
|
var _a, _b, _c;
|
|
1434
1717
|
// check of the user id is in the direct message channel id
|
|
@@ -1740,6 +2023,31 @@ export default class SlackUtil extends WorkspaceBase {
|
|
|
1740
2023
|
return messages;
|
|
1741
2024
|
}
|
|
1742
2025
|
}
|
|
2026
|
+
/*
|
|
2027
|
+
* Block Kit limits. A section's text may be at most 3000 characters, a
|
|
2028
|
+
* message may carry at most 50 blocks and a modal view at most 100. Going
|
|
2029
|
+
* over any of them makes Slack reject the whole message (invalid_blocks),
|
|
2030
|
+
* not just the offending block.
|
|
2031
|
+
*/
|
|
2032
|
+
SlackUtil.SECTION_TEXT_MAX_LENGTH = 3000;
|
|
2033
|
+
SlackUtil.MAX_BLOCKS_PER_MESSAGE = 50;
|
|
2034
|
+
SlackUtil.MAX_BLOCKS_PER_MODAL = 100;
|
|
2035
|
+
/*
|
|
2036
|
+
* How many sections one markdown payload may expand into — about 30,000
|
|
2037
|
+
* characters, several times the longest incident or alert body we send.
|
|
2038
|
+
* The 50-block ceiling alone would allow 150,000, but Slack also rejects a
|
|
2039
|
+
* message whose blocks are too long overall (msg_blocks_too_long) without
|
|
2040
|
+
* documenting where that starts, and text that long is better read in
|
|
2041
|
+
* OneUptime anyway.
|
|
2042
|
+
*/
|
|
2043
|
+
SlackUtil.MAX_SECTIONS_PER_MARKDOWN_BLOCK = 10;
|
|
2044
|
+
// Ends the last section of a markdown payload that did not fit.
|
|
2045
|
+
SlackUtil.TRUNCATED_SECTION_NOTE = "\n\n_… (truncated — see OneUptime for the full text)_";
|
|
2046
|
+
// Closes and reopens a ``` code block that a section boundary cuts through.
|
|
2047
|
+
SlackUtil.CODE_FENCE = "```";
|
|
2048
|
+
SlackUtil.CODE_FENCE_CLOSE = "\n```";
|
|
2049
|
+
SlackUtil.CODE_FENCE_REOPEN = "```\n";
|
|
2050
|
+
export default SlackUtil;
|
|
1743
2051
|
__decorate([
|
|
1744
2052
|
CaptureSpan(),
|
|
1745
2053
|
__metadata("design:type", Function),
|
|
@@ -1938,12 +2246,24 @@ __decorate([
|
|
|
1938
2246
|
__metadata("design:paramtypes", [Object]),
|
|
1939
2247
|
__metadata("design:returntype", Object)
|
|
1940
2248
|
], SlackUtil, "getModalBlock", null);
|
|
2249
|
+
__decorate([
|
|
2250
|
+
CaptureSpan(),
|
|
2251
|
+
__metadata("design:type", Function),
|
|
2252
|
+
__metadata("design:paramtypes", [Object]),
|
|
2253
|
+
__metadata("design:returntype", Array)
|
|
2254
|
+
], SlackUtil, "getBlocksFromWorkspaceMessagePayload", null);
|
|
1941
2255
|
__decorate([
|
|
1942
2256
|
CaptureSpan(),
|
|
1943
2257
|
__metadata("design:type", Function),
|
|
1944
2258
|
__metadata("design:paramtypes", [Object]),
|
|
1945
2259
|
__metadata("design:returntype", Object)
|
|
1946
2260
|
], SlackUtil, "getMarkdownBlock", null);
|
|
2261
|
+
__decorate([
|
|
2262
|
+
CaptureSpan(),
|
|
2263
|
+
__metadata("design:type", Function),
|
|
2264
|
+
__metadata("design:paramtypes", [Object]),
|
|
2265
|
+
__metadata("design:returntype", Array)
|
|
2266
|
+
], SlackUtil, "getMarkdownBlocks", null);
|
|
1947
2267
|
__decorate([
|
|
1948
2268
|
CaptureSpan(),
|
|
1949
2269
|
__metadata("design:type", Function),
|