@camunda/ccma-api 5.2.0 → 5.3.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/dist/index.d.ts CHANGED
@@ -67,7 +67,7 @@ export type { AdminClusterAutoUpdateRequest, AdminClusterDetailsDto, AdminCluste
67
67
  export { ConsoleAdminService } from './services/console/console.admin.service.js';
68
68
  export { type CheckConsoleAlertParams, type CheckConsoleAlertResponse, ConsoleAlertsService, type CreateConsoleAlertParams, type DeleteConsoleAlertParams, type GetConsoleAlertsParams, type UpdateConsoleAlertParams, } from './services/console/console.alerts.service.js';
69
69
  export { type ConsoleApiClientDto, ConsoleApiClientsService, type CreateConsoleApiClientParams, type CreateConsoleApiClientResponse, type DeleteConsoleApiClientParams, type GetConsoleApiClientsParams, type UpdateConsoleApiClientParams, } from './services/console/console.api-clients.service.js';
70
- export type { AnnounceClusterBulkPlanUpdateRequest, ChangeClusterPlanTypeThroughApprovalRequest, CheckCustomerClusterPlanRemovalRequest, CreateCustomerClusterPlanThroughApprovalRequest, CustomerClusterPlanThroughApprovalResult, DeleteCustomerClusterPlanThroughApprovalRequest, DeleteInternalBackupThroughApprovalRequest, MoveClusterOwnerThroughApprovalRequest, RunClusterBulkStepThroughApprovalRequest, } from './services/console/console.approvals.m2m.service.js';
70
+ export type { AnnounceClusterBulkPlanUpdateRequest, ChangeClusterPlanTypeThroughApprovalRequest, CheckCustomClusterPlanRemovalRequest, CreateCustomClusterPlanThroughApprovalRequest, CustomClusterPlanThroughApprovalResult, DeleteCustomClusterPlanThroughApprovalRequest, DeleteInternalBackupThroughApprovalRequest, MoveClusterOwnerThroughApprovalRequest, RunClusterBulkStepThroughApprovalRequest, } from './services/console/console.approvals.m2m.service.js';
71
71
  export { ConsoleApprovalsM2MService } from './services/console/console.approvals.m2m.service.js';
72
72
  export { ConsoleBackupScheduleService, type GetConsoleBackupScheduleParams, type UpdateConsoleBackupScheduleParams, } from './services/console/console.backup-schedule.service.js';
73
73
  export { ConsoleByokScriptsService, type GetConsoleByokKmsPolicyParams, type GetConsoleByokScriptParams, } from './services/console/console.byok-scripts.service.js';
@@ -100,7 +100,7 @@ export { ConsoleValueMetricsService } from './services/console/console.valuemetr
100
100
  export { type CreateGenerationParams, type DeleteGenerationParams, GenerationService, type GenerationVersionsInput, type ListGenerationsParams, type SetGenerationArchivedParams, type SetGenerationBespokeParams, type UpdateGenerationParams, } from './services/console/generation.service.js';
101
101
  export type { AddAnnotationNoteRequest, AddAnnotationTagRequest, AnnotationIdRequest, AnnotationPageDto, AnnotationPageInfoDto, AnnotationTagPageDto, AnnotationTargetDto, EditAnnotationNoteRequest, GetEntityAnnotationsRequest, ListAnnotationTagsRequest, LookupAnnotationsRequest, SearchAnnotationsRequest, } from './services/control/control.annotations.service.js';
102
102
  export { ControlAnnotationsService } from './services/control/control.annotations.service.js';
103
- export type { ApprovalFacetParams, ApprovalIdRequest, ApprovalPageDto, ChangeClusterPlanTypePayloadDto, ChangeFeatureFlagPayloadDto, ChangeOrgLimitsPayloadDto, ChangePlatformRolesPayloadDto, ChangeSalesPlanPayloadDto, ChangeUserEmailPayloadDto, CountApprovalsRequest, CreateApprovalRequest, CreateCustomerHardwareSizingPayloadDto, CreatePersonalOrganisationPayloadDto, CreatePersonalOrganisationRequest, CustomerHardwareSizingRequest, DeleteInternalBackupPayloadDto, DeleteOrganizationPayloadDto, DeleteSsoConnectionPayloadDto, DeleteUserPayloadDto, ExtendTrialPayloadDto, FeatureFlagValuesDto, ListApprovalsRequest, MoveClusterOrgPayloadDto, OnboardToEnterpriseClusterDto, OnboardToEnterprisePayloadDto, PurgeUsersPayloadDto, RejectApprovalRequest, RemoveCustomerHardwareSizingPayloadDto, SendToExpiredTrialPayloadDto, UpdateUserMetadataPayloadDto, WithdrawApprovalRequest, } from './services/control/control.approvals.service.js';
103
+ export type { ApprovalFacetParams, ApprovalIdRequest, ApprovalPageDto, ChangeClusterPlanTypePayloadDto, ChangeFeatureFlagPayloadDto, ChangeOrgLimitsPayloadDto, ChangePlatformRolesPayloadDto, ChangeSalesPlanPayloadDto, ChangeUserEmailPayloadDto, CountApprovalsRequest, CreateApprovalRequest, CreateCustomHardwareSizingPayloadDto, CreatePersonalOrganisationPayloadDto, CreatePersonalOrganisationRequest, CustomHardwareSizingRequest, DeleteInternalBackupPayloadDto, DeleteOrganizationPayloadDto, DeleteSsoConnectionPayloadDto, DeleteUserPayloadDto, ExtendTrialPayloadDto, FeatureFlagValuesDto, ListApprovalsRequest, MoveClusterOrgPayloadDto, OnboardToEnterpriseClusterDto, OnboardToEnterprisePayloadDto, PurgeUsersPayloadDto, RejectApprovalRequest, RemoveCustomHardwareSizingPayloadDto, SendToExpiredTrialPayloadDto, UpdateUserMetadataPayloadDto, WithdrawApprovalRequest, } from './services/control/control.approvals.service.js';
104
104
  export { ControlApprovalsService } from './services/control/control.approvals.service.js';
105
105
  export type { AddDashboardTileRequest, CheckChartQueryRequest, CreateDashboardRequest, DashboardIdRequest, ListDashboardsRequest, UpdateDashboardRequest, } from './services/control/control.dashboards.service.js';
106
106
  export { ControlDashboardsService } from './services/control/control.dashboards.service.js';
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts"],
4
- "sourcesContent": ["/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a commercial license.\n * You may not use this file except in compliance with the commercial license.\n */\n\nexport type {\n GetDataExportRequest,\n GetDataExportResponse,\n} from './services/accounts/accounts.data-export.service.js'\n// accounts services\nexport { AccountsDataExportService } from './services/accounts/accounts.data-export.service.js'\nexport type { GetValueMetricsPerDayParams } from './services/accounts/accounts.valuemetrics.service.js'\nexport type {\n DownloadDatabaseDumpParams,\n TriggerValueMetricsCronParams,\n} from './services/accounts/admin-tools.service.js'\nexport { AdminToolsService } from './services/accounts/admin-tools.service.js'\nexport type {\n ChangeClusterPlanLinkThroughApprovalRequest,\n ChangeClusterPlanLinkThroughApprovalResult,\n ChangeOrgLimitThroughApprovalRequest,\n ChangePlatformRolesThroughApprovalRequest,\n ChangePlatformRolesThroughApprovalResult,\n ChangeSalesPlanThroughApprovalRequest,\n ChangeUserEmailThroughApprovalRequest,\n CreatePersonalOrganizationThroughApprovalRequest,\n CreatePersonalOrganizationThroughApprovalResult,\n DeleteOrganizationThroughApprovalRequest,\n DeleteOrganizationThroughApprovalResult,\n DeleteSsoConnectionThroughApprovalRequest,\n DeleteSsoConnectionThroughApprovalResult,\n DeleteUserThroughApprovalRequest,\n DeleteUserThroughApprovalResult,\n ExtendTrialThroughApprovalRequest,\n OnboardToEnterpriseClusterMapping,\n OnboardToEnterpriseContract,\n OnboardToEnterpriseThroughApprovalRequest,\n OrgLimitValue,\n SendToExpiredTrialThroughApprovalRequest,\n UnlinkClusterPlanFromMemberOrganizationsRequest,\n UnlinkClusterPlanFromMemberOrganizationsResult,\n UpdateReservationsThroughApprovalRequest,\n UpdateUserMetadataThroughApprovalRequest,\n} from './services/accounts/approvals.m2m.service.js'\nexport { AccountsApprovalsM2MService } from './services/accounts/approvals.m2m.service.js'\nexport { AccountsBotService } from './services/accounts/bot.service.js'\nexport type {\n BugReportRequest,\n BugReportRequestBody,\n BugReportResponse,\n} from './services/accounts/bug-report.service.js'\nexport { BugReportService } from './services/accounts/bug-report.service.js'\nexport type {\n CancelMatchParams,\n CancelMatchResponse,\n GameInfo,\n GetGameInfoParams,\n GetHighscoresParams,\n GetHighscoresResponse,\n GetMatchStateParams,\n GetOrganizationalGroupsParams,\n GetOrganizationalGroupsResponse,\n GetRunningMatchesParams,\n GetRunningMatchesResponse,\n HighscoreEntry,\n InitiateMatchParams,\n InitiateMatchResponse,\n JoinMatchParams,\n JoinMatchResponse,\n Match,\n Player,\n PlayerAnswer,\n Question,\n QuestionChoice,\n SlackProfile,\n StartMatchParams,\n StartMatchResponse,\n SubmitAnswerParams,\n SubmitAnswerResponse,\n} from './services/accounts/challenge.service.js'\nexport { ChallengeService } from './services/accounts/challenge.service.js'\nexport type {\n AzureConnectionPayload,\n Connection,\n ConnectionPayload,\n ConnectionUserDto,\n ConnectionWriteStrategy,\n CreateConnectionParams,\n DeleteConnectionParams,\n GetConnectionParams,\n GetConnectionsParams,\n SamlConnectionPayload,\n UpdateConnectionParams,\n} from './services/accounts/connections.service.js'\nexport { ConnectionsService } from './services/accounts/connections.service.js'\nexport type { GetEngineeringOperationsDashboardRequest } from './services/accounts/dashboards.service.js'\nexport { DashboardsService } from './services/accounts/dashboards.service.js'\nexport type {\n CreateEarlyAccessFeatureParams,\n DeleteEarlyAccessFeatureParams,\n EarlyAccessFeatureActivationDto,\n EarlyAccessFeatureDto,\n EarlyAccessFeatureOrgDto,\n EarlyAccessFeatureSalesPlanConfigDto,\n GetEarlyAccessFeatureOrgsParams,\n GetEarlyAccessFeaturesForOrgParams,\n SetEarlyAccessFeatureActivationParams,\n UpdateEarlyAccessFeatureParams,\n} from './services/accounts/early-access-features.service.js'\nexport { EarlyAccessFeaturesService } from './services/accounts/early-access-features.service.js'\nexport { GenericCacheService } from './services/accounts/genericCache.service.js'\nexport type {\n GetActiveOrgsRequest,\n GetActiveOrgsResponse,\n GetBackendChangeEventsRequest,\n GetClusterActivityRequest,\n GetClusterCapacityRequest,\n GetClusterDiskUsageParams,\n GetClusterDiskUsageRequest,\n GetClusterHostingCostRequest,\n GetClusterHostingCostResponse,\n GetLlmUsageRequest,\n GetTenantUsageRequest,\n GetUsageMetricsRequest,\n GetUsageMetricsResponse,\n LlmUsageEntry,\n QueryChartRequest,\n} from './services/accounts/hdp.service.js'\nexport { HdpService } from './services/accounts/hdp.service.js'\nexport {\n type InviteDto,\n InvitesService,\n type SearchInvitesRequest,\n} from './services/accounts/invites.service.js'\nexport type {\n OffboardCamundiRequest,\n OffboardCamundiResponse,\n} from './services/accounts/offboarding.service.js'\nexport { OffboardingService } from './services/accounts/offboarding.service.js'\nexport type {\n AssignNewOwnerParams,\n AssignNewOwnerResponse,\n CancelOrganizationInviteParams,\n GetOrganizationMembersParams,\n LeaveOrganizationParams,\n OrganizationMemberDto,\n OrganizationMemberInviteDto,\n RemoveUserFromOrganizationParams,\n ResendOrganizationInviteParams,\n UpdateOrganizationMemberRolesParams,\n} from './services/accounts/organization-members.service.js'\nexport { OrganizationMembersService } from './services/accounts/organization-members.service.js'\nexport type {\n AutomatedEnterpriseOnboardingRequest,\n AutomatedEnterpriseOnboardingResult,\n AwsOnlyRequest,\n BlockLiteLLMParams,\n ChangeSalesPlanRequest,\n CheckUserExistsForInviteRequest,\n CheckUserExistsForInviteResponse,\n ConvertTrialToInNegotiationRequest,\n DeleteOrganizationRequest,\n EnterpriseDevOnlyRequest,\n ExtendTrialRequest,\n GetLLMUsageInfoParams,\n GetQueuedOperationsParams,\n GetSubscriptionDetailsParams,\n GetSubscriptionDetailsResponse,\n GetSubscriptionItemsParams,\n IncreaseLLMBudgetParams,\n IncreaseLLMBudgetResponse,\n LicensingModelRequest,\n LLMUsageInfoResponse,\n OnboardLiteLLMParams,\n OrgClusterDefaultsRequest,\n OrgClusterDefaultsResponse,\n OrgInfo,\n QueuedOperationDto,\n RenameOrganizationRequest,\n ResetTrialExtensionsRequest,\n SelfExtendTrialRequest,\n SendInviteRequest,\n SetBetaTermsAcceptedRequest,\n SetLimitRequest,\n UnblockLiteLLMParams,\n UpdateOrgClusterDefaultsRequest,\n UpdateOrgLimitAsMemberRequest,\n UpdateOrgLimitAsMemberResponse,\n UpdateSuppressDropDisksRequest,\n UpdateSuppressDropDisksResponse,\n} from './services/accounts/orgs.service.js'\nexport { OrgsService } from './services/accounts/orgs.service.js'\nexport type {\n GetControlSessionRequest,\n GetOrganizationV2Request,\n ListOrganizationsV2Request,\n ListOrgMembersV2Request,\n} from './services/accounts/orgs.v2.service.js'\nexport { OrgsV2Service } from './services/accounts/orgs.v2.service.js'\nexport type {\n CreatePdfWatermarkProjectParams,\n PdfWatermarkAuditEntryDto,\n PdfWatermarkPasswordParams,\n PdfWatermarkProjectDto,\n PdfWatermarkProjectIdParams,\n RecordPdfWatermarkAuditParams,\n SetPdfWatermarkPdfParams,\n UpdatePdfWatermarkProjectParams,\n} from './services/accounts/pdf-watermark.service.js'\nexport { PdfWatermarkService } from './services/accounts/pdf-watermark.service.js'\nexport type {\n FleetQueuedOperationDto,\n ListQueuedOperationsParams,\n QueuedOperationStatus,\n QueuedOperationsResponse,\n QueueHealthDto,\n} from './services/accounts/queued-operations.service.js'\nexport { QueuedOperationsService } from './services/accounts/queued-operations.service.js'\nexport type {\n GetReleaseTrainParams,\n ReleaseTrainInfoDto,\n} from './services/accounts/release-train.service.js'\nexport {\n KNOWN_RELEASE_TRAINS,\n ReleaseTrainService,\n} from './services/accounts/release-train.service.js'\nexport type {\n CreateSalesPlanRequest,\n DeleteSalesPlanRequest,\n GetSalesPlansRequest,\n UpdateSalesPlanMetadataRequest,\n UpdateSalesPlanRequest,\n UpdateSalesPlanReservationsRequest,\n} from './services/accounts/salesplan.service.js'\nexport { SalesPlanService } from './services/accounts/salesplan.service.js'\nexport { SpamDetectionService } from './services/accounts/spam-detection.service.js'\nexport type { GetStatsParams } from './services/accounts/stats.service.js'\nexport { StatsService } from './services/accounts/stats.service.js'\nexport type { PostTracesRequest } from './services/accounts/telemetry-ingest.service.js'\nexport { TelemetryIngestService } from './services/accounts/telemetry-ingest.service.js'\nexport type {\n InvalidateTokenByClientParams,\n InvalidateTokenParams,\n} from './services/accounts/token-issuer.service.js'\nexport { TokenIssuerService } from './services/accounts/token-issuer.service.js'\nexport type {\n GetOrgTrialDetailParams,\n GetTrialManagementOrgsParams,\n GetTrialManagementParams,\n} from './services/accounts/trial-management.service.js'\nexport { TrialManagementService } from './services/accounts/trial-management.service.js'\nexport type {\n CreateUsageAlertParams,\n GetUsageAlertsParams,\n PatchUsageAlertParams,\n} from './services/accounts/usage-alerts.service.js'\nexport { UsageAlertsService } from './services/accounts/usage-alerts.service.js'\nexport type {\n AddUserToOrganizationRequest,\n ChangeUserEmailRequest,\n ChangeUserNameRequest,\n DeleteMeRequest,\n RemoveStaleOrganizationRequest,\n RemoveUserFromOrganizationRequest,\n SearchParams,\n SetDefaultOrgRequest,\n SimpleSearchParams,\n UpdateUserRoleRequest,\n UserIdRequest,\n} from './services/accounts/users.service.js'\nexport { UsersService } from './services/accounts/users.service.js'\nexport type {\n CreateAlertSubscription,\n DeleteAlertSubscription,\n GetAlertSubscriptions,\n UpdateAlertSubscription,\n} from './services/alerts/alerts.service.js'\n// alerts services\nexport { AlertsService } from './services/alerts/alerts.service.js'\nexport type {\n AddAnalyticBridgeRequest,\n AddClusterAnalyticBridgeRequest,\n} from './services/analytic-bridge/analytic-bridge.service.js'\n// analytic-bridge services\nexport { AnalyticBridgeService } from './services/analytic-bridge/analytic-bridge.service.js'\nexport type {\n AskBackendBaseParams,\n AskBackendGetOrgClustersParams,\n AskBackendOrgParams,\n AskBackendRunQueryParams,\n AskBackendSearchOrgsParams,\n OrgClusterRow,\n OrgDetail,\n OrgMemberInfo,\n OrgOwnerInfo,\n OrgSummary,\n} from './services/ask-backend/ask-backend.service.js'\n// ask-backend service\nexport { AskBackendService } from './services/ask-backend/ask-backend.service.js'\nexport type {\n AddAuditRequest,\n GetAuditRequest,\n GetClusterAuditRequest,\n} from './services/audit-logger/audit-logger.service.js'\n// audit-logger services\nexport { AuditLoggerService } from './services/audit-logger/audit-logger.service.js'\nexport type {\n AddSystemAuditRequest,\n GetSystemAuditRequest,\n} from './services/audit-logger/audit-logger.system.service.js'\nexport { SystemAuditLoggerService } from './services/audit-logger/audit-logger.system.service.js'\nexport type { Auth0Request } from './services/auth0/auth0.service.js'\n// auth0 services\nexport { Auth0Service } from './services/auth0/auth0.service.js'\nexport type { CommBridgeClientRequest } from './services/comm-bridge/comm-bridge.service.js'\n// comm-bridge services\nexport { CommBridgeService } from './services/comm-bridge/comm-bridge.service.js'\nexport type {\n AdminClusterAutoUpdateRequest,\n AdminClusterDetailsDto,\n AdminClusterNonSpotNodesRequest,\n AdminClusterOptionalTelemetryRequest,\n AdminClusterTtlRequest,\n CreateLiteLLMSecretsForOrgRequest,\n GetAdminClusterDetailsRequest,\n GetClusterCrdStateRequest,\n GetClusterRequest,\n GetSpecExplainerRequest,\n RemoveLlmSecretsForOrgRequest,\n RemoveLlmSecretsForOrgResponse,\n RepointLlmSecretsForOrgRequest,\n RepointLlmSecretsForOrgResponse,\n RotateLiteLLMKeySecretsForOrgRequest,\n RotateLiteLLMKeySecretsForOrgResponse,\n SignalSignupRequest,\n SpecExplainerFieldAnnotation,\n SpecExplainerFieldSource,\n SpecExplainerResponse,\n UpdateClusterMetricsStartDateRequest,\n UpdateClusterToNewPlanTypeRequest,\n} from './services/console/console.admin.service.js'\n// console services\nexport { ConsoleAdminService } from './services/console/console.admin.service.js'\nexport {\n type CheckConsoleAlertParams,\n type CheckConsoleAlertResponse,\n ConsoleAlertsService,\n type CreateConsoleAlertParams,\n type DeleteConsoleAlertParams,\n type GetConsoleAlertsParams,\n type UpdateConsoleAlertParams,\n} from './services/console/console.alerts.service.js'\nexport {\n type ConsoleApiClientDto,\n ConsoleApiClientsService,\n type CreateConsoleApiClientParams,\n type CreateConsoleApiClientResponse,\n type DeleteConsoleApiClientParams,\n type GetConsoleApiClientsParams,\n type UpdateConsoleApiClientParams,\n} from './services/console/console.api-clients.service.js'\nexport type {\n AnnounceClusterBulkPlanUpdateRequest,\n ChangeClusterPlanTypeThroughApprovalRequest,\n CheckCustomerClusterPlanRemovalRequest,\n CreateCustomerClusterPlanThroughApprovalRequest,\n CustomerClusterPlanThroughApprovalResult,\n DeleteCustomerClusterPlanThroughApprovalRequest,\n DeleteInternalBackupThroughApprovalRequest,\n MoveClusterOwnerThroughApprovalRequest,\n RunClusterBulkStepThroughApprovalRequest,\n} from './services/console/console.approvals.m2m.service.js'\nexport { ConsoleApprovalsM2MService } from './services/console/console.approvals.m2m.service.js'\nexport {\n ConsoleBackupScheduleService,\n type GetConsoleBackupScheduleParams,\n type UpdateConsoleBackupScheduleParams,\n} from './services/console/console.backup-schedule.service.js'\nexport {\n ConsoleByokScriptsService,\n type GetConsoleByokKmsPolicyParams,\n type GetConsoleByokScriptParams,\n} from './services/console/console.byok-scripts.service.js'\nexport {\n type ActivateConsoleByomMonitoringParams,\n type ByomMonitoringClientsResponseDto,\n type ByomMonitoringClientWithPasswordDto,\n ConsoleByomMonitoringService,\n type CreateConsoleByomMonitoringClientParams,\n type DeactivateConsoleByomMonitoringParams,\n type DeleteConsoleByomMonitoringClientParams,\n type GetConsoleByomMonitoringClientsParams,\n type RotateConsoleByomMonitoringClientPasswordParams,\n} from './services/console/console.byom-monitoring.service.js'\nexport {\n ChannelService,\n type ConsoleChannelDto,\n type CreateConsoleChannelParams,\n type DeleteConsoleChannelParams,\n type GetConsoleChannelsParams,\n type UpdateConsoleChannelParams,\n} from './services/console/console.channel.service.js'\nexport type {\n ConsoleClusterCarryOverResult,\n CreateConsoleClusterRequest,\n CreateConsoleClusterResponse,\n DeleteConsoleClusterRequest,\n DeleteExternalIdpRequest,\n DuplicateConsoleClusterRequest,\n DuplicateConsoleClusterResponse,\n FailoverConsoleClusterRequest,\n FailoverConsoleClusterResult,\n GetAdminClusterRequest,\n GetConsoleClusterRequest,\n GetConsoleClustersRequest,\n MoveClusterOwnerRequest,\n ProxyOrchestrationClusterRequest,\n SuspendConsoleClusterRequest,\n UpdateClusterRequest,\n UpdateExternalIdpSecretRequest,\n WakeConsoleClusterRequest,\n} from './services/console/console.cluster.service.js'\nexport { ConsoleClusterService } from './services/console/console.cluster.service.js'\nexport type {\n GetClusterParametersV2Request,\n GetClusterV2Request,\n ListClustersV2Request,\n ListOrgClustersV2Request,\n} from './services/console/console.cluster.v2.service.js'\nexport { ConsoleClusterV2Service } from './services/console/console.cluster.v2.service.js'\nexport {\n type ConsoleClusterClientDto,\n ConsoleClusterClientsService,\n type CreateConsoleClusterClientParams,\n type CreateConsoleClusterClientResponse,\n type DeleteConsoleClusterClientParams,\n type GetConsoleClusterClientsParams,\n type RotateConsoleClusterClientSecretParams,\n type RotateConsoleClusterClientSecretResponse,\n type UpdateConsoleClusterClientParams,\n} from './services/console/console.cluster-clients.service.js'\nexport {\n type ConsoleClusterCreationParametersChannel,\n type ConsoleClusterCreationParametersClusterPlanType,\n type ConsoleClusterCreationParametersGeneration,\n type ConsoleClusterCreationParametersRegion,\n type ConsoleClusterCreationParametersRegionBackup,\n type ConsoleClusterCreationParametersRegionBackupRegion,\n type ConsoleClusterCreationParametersResponse,\n type ConsoleClusterCreationParametersUnlockedClusterPlan,\n ConsoleClusterParametersService,\n type GetConsoleClusterCreationParametersRequest,\n} from './services/console/console.cluster-parameters.service.js'\nexport { ConsoleClusterBulkOperationService } from './services/console/console.clusterBulkOperation.service.js'\nexport { ClusterPlanModificationService } from './services/console/console.clusterplan.modification.service.js'\nexport type {\n CreateClusterPlanParams,\n DeleteClusterPlanParams,\n UpdateMigratableFromParams,\n UpdatePerformanceExpectationsParams,\n} from './services/console/console.clusterplan.service.js'\nexport { ClusterPlanService } from './services/console/console.clusterplan.service.js'\nexport {\n ClusterPlanTypeService,\n type CreateClusterPlanTypeParams,\n type DeleteClusterPlanTypeParams,\n type GetClusterPlanTypesParams,\n type SetClusterPlanTypeLimitsParams,\n type UpdateClusterPlanTypeParams,\n} from './services/console/console.clusterplantype.service.js'\nexport {\n ConsoleConnectorSecretsService,\n type DeleteConsoleConnectorSecretParams,\n type GetConsoleConnectorSecretsParams,\n type PutConsoleConnectorSecretParams,\n} from './services/console/console.connector-secrets.service.js'\nexport type {\n ConsoleCustomMetricsRequest,\n ConsoleCustomMetricsResponse,\n} from './services/console/console.custommetrics.service.js'\nexport { ConsoleCustomMetricsService } from './services/console/console.custommetrics.service.js'\nexport {\n ConsoleHotBackupsService,\n type CreateConsoleHotBackupParams,\n type CreateConsoleInternalBackupParams,\n type DeleteConsoleHotBackupParams,\n type DeleteConsoleInternalBackupParams,\n type GetConsoleHotBackupsParams,\n type GetConsoleInternalBackupsParams,\n type RestoreConsoleHotBackupParams,\n type RetryConsoleHotBackupParams,\n} from './services/console/console.hotbackups.service.js'\nexport {\n ConsoleIpWhitelistService,\n type IpWhitelistEntryDto,\n type UpdateConsoleIpWhitelistParams,\n} from './services/console/console.ip-whitelist.service.js'\nexport type {\n SaaSJobsBaseParams,\n SaaSJobsErrorsParams,\n SaaSJobsGlobalParams,\n SaaSJobsOverviewParams,\n SaaSJobsTimeSeriesParams,\n SaaSJobsWorkersParams,\n} from './services/console/console.jobs.saas.service.js'\nexport { SaaSJobsService } from './services/console/console.jobs.saas.service.js'\nexport {\n type GetK8sContextsParams,\n K8sContextService,\n} from './services/console/console.k8scontext.service.js'\nexport type {\n VerifyApiClientCredentialsResponse,\n VerifyClientCredentialsRequest,\n VerifyZeebeClientCredentialsResponse,\n} from './services/console/console.m2m.service.js'\nexport { ConsoleM2MService } from './services/console/console.m2m.service.js'\nexport {\n type ActivateSecureConnectivityParams,\n ConsoleSecureConnectivityService,\n type DeactivateSecureConnectivityParams,\n type GetSecureConnectivityStatusParams,\n type SecureConnectivityStatusDto,\n type UpdateSecureConnectivityParams,\n} from './services/console/console.secure-connectivity.service.js'\nexport {\n type GetStorybookConfigParams,\n StorybookConfigService,\n} from './services/console/console.storybook-config.service.js'\nexport { ConsoleValueMetricsService } from './services/console/console.valuemetrics.service.js'\n\nexport {\n type CreateGenerationParams,\n type DeleteGenerationParams,\n GenerationService,\n type GenerationVersionsInput,\n type ListGenerationsParams,\n type SetGenerationArchivedParams,\n type SetGenerationBespokeParams,\n type UpdateGenerationParams,\n} from './services/console/generation.service.js'\nexport type {\n AddAnnotationNoteRequest,\n AddAnnotationTagRequest,\n AnnotationIdRequest,\n AnnotationPageDto,\n AnnotationPageInfoDto,\n AnnotationTagPageDto,\n AnnotationTargetDto,\n EditAnnotationNoteRequest,\n GetEntityAnnotationsRequest,\n ListAnnotationTagsRequest,\n LookupAnnotationsRequest,\n SearchAnnotationsRequest,\n} from './services/control/control.annotations.service.js'\nexport { ControlAnnotationsService } from './services/control/control.annotations.service.js'\n// control-backend \u2014 the four-eyes approval surface\nexport type {\n ApprovalFacetParams,\n ApprovalIdRequest,\n ApprovalPageDto,\n ChangeClusterPlanTypePayloadDto,\n ChangeFeatureFlagPayloadDto,\n ChangeOrgLimitsPayloadDto,\n ChangePlatformRolesPayloadDto,\n ChangeSalesPlanPayloadDto,\n ChangeUserEmailPayloadDto,\n CountApprovalsRequest,\n CreateApprovalRequest,\n CreateCustomerHardwareSizingPayloadDto,\n CreatePersonalOrganisationPayloadDto,\n CreatePersonalOrganisationRequest,\n CustomerHardwareSizingRequest,\n DeleteInternalBackupPayloadDto,\n DeleteOrganizationPayloadDto,\n DeleteSsoConnectionPayloadDto,\n DeleteUserPayloadDto,\n ExtendTrialPayloadDto,\n FeatureFlagValuesDto,\n ListApprovalsRequest,\n MoveClusterOrgPayloadDto,\n OnboardToEnterpriseClusterDto,\n OnboardToEnterprisePayloadDto,\n PurgeUsersPayloadDto,\n RejectApprovalRequest,\n RemoveCustomerHardwareSizingPayloadDto,\n SendToExpiredTrialPayloadDto,\n UpdateUserMetadataPayloadDto,\n WithdrawApprovalRequest,\n} from './services/control/control.approvals.service.js'\nexport { ControlApprovalsService } from './services/control/control.approvals.service.js'\n// control-backend \u2014 the dashboards, whose tiles hold filters and never data\nexport type {\n AddDashboardTileRequest,\n CheckChartQueryRequest,\n CreateDashboardRequest,\n DashboardIdRequest,\n ListDashboardsRequest,\n UpdateDashboardRequest,\n} from './services/control/control.dashboards.service.js'\nexport { ControlDashboardsService } from './services/control/control.dashboards.service.js'\nexport type {\n CreateFeatureFlagRequest,\n EvaluateFeatureFlagsRequest,\n FeatureFlagIdRequest,\n UpdateFeatureFlagRequest,\n} from './services/control/control.feature-flags.service.js'\nexport { ControlFeatureFlagsService } from './services/control/control.feature-flags.service.js'\nexport type {\n ControlInfoDto,\n ControlWhoamiDto,\n} from './services/control/control.platform.service.js'\nexport { ControlPlatformService } from './services/control/control.platform.service.js'\n// external services (CORS-enabled webapp navigation surface)\nexport type {\n GetFeatureFlagsParams,\n UpdateUserThemeParams,\n UserThemePreference,\n} from './services/external/external.accounts.service.js'\nexport { ExternalAccountsService } from './services/external/external.accounts.service.js'\nexport type {\n GetOrgClustersParams,\n StreamOrgEventsParams,\n} from './services/external/external.console.service.js'\nexport { ExternalConsoleService } from './services/external/external.console.service.js'\nexport type {\n DismissAllNotificationsParams,\n GetUserNotificationsParams,\n MarkManyNotificationsReadParams,\n SetNotificationStateParams,\n StreamUserNotificationsParams,\n TrackNotificationEventParams,\n UserNotificationAnalyticsEvent,\n} from './services/external/external.notifications.service.js'\nexport { ExternalNotificationsService } from './services/external/external.notifications.service.js'\nexport type {\n GithubCommitComparison,\n GithubCompareCommitsRequest,\n GithubContentItem,\n GithubGetRawFileRequest,\n GithubListDirectoryContentRequest,\n GithubListMajorMinorReleasesRequest,\n GithubListReleasesRequest,\n GithubRelease,\n} from './services/github/github.service.js'\n// github services\nexport { GithubService } from './services/github/github.service.js'\nexport type {\n GleanSearchRequest,\n GleanSearchResult,\n} from './services/glean/glean.service.js'\n// glean services\nexport { GleanService } from './services/glean/glean.service.js'\nexport type {\n HelpCenterCardResponse,\n HelpCenterConfigResponse,\n HelpCenterGetCardsRequest,\n HelpCenterGetConfigRequest,\n} from './services/helpcenter/helpcenter.service.js'\n// helpcenter services\nexport { HelpCenterService } from './services/helpcenter/helpcenter.service.js'\nexport type {\n HibobEmployee,\n HibobGetAllUsersRequest,\n HibobReportsTo,\n HibobSearchRequest,\n HibobSearchResponse,\n} from './services/hibob/hibob.service.js'\n// hibob services\nexport {\n DEPARTMENT as HIBOB_DEPARTMENT_PATH,\n DIVISION as HIBOB_DIVISION_PATH,\n DIVISION_ID as HIBOB_DIVISION_ID,\n HibobService,\n SUB_DIVISION as HIBOB_SUB_DIVISION_PATH,\n SUB_DIVISION_ID as HIBOB_SUB_DIVISION_ID,\n} from './services/hibob/hibob.service.js'\nexport type {\n HubspotChangeContactPropertiesRequest,\n HubspotSubmission,\n HubspotSubmitRequest,\n HubspotTokenRequest,\n HubspotTokenResponse,\n} from './services/hubspot/hubspot.service.js'\n// hubspot services\nexport { HubspotService } from './services/hubspot/hubspot.service.js'\nexport type {\n IncidentIoGetOpenIncidentsRequest,\n OpenIncident,\n} from './services/incident-io/incident-io.service.js'\n// incident.io services\nexport { IncidentIoService } from './services/incident-io/incident-io.service.js'\n// litellm services\nexport type {\n BlockKeyRequest,\n BlockKeyResponse,\n CreateTeamRequest,\n CreateTeamResponse,\n DeleteKeyRequest,\n DeleteKeyResponse,\n DeleteTeamRequest,\n DeleteTeamResponse,\n GenerateKeyRequest,\n GenerateKeyResponse,\n GetKeyInfoRequest,\n GetKeyInfoResponse,\n RegenerateKeyRequest,\n RegenerateKeyResponse,\n UnblockKeyRequest,\n UnblockKeyResponse,\n UpdateKeyBudgetRequest,\n UpdateKeyBudgetResponse,\n UpdateTeamBudgetRequest,\n UpdateTeamBudgetResponse,\n} from './services/litellm/litellm.service.js'\nexport { LiteLLMService } from './services/litellm/litellm.service.js'\nexport type { LoginPayload } from './services/login/login.service.js'\n// login services\nexport { LoginService } from './services/login/login.service.js'\nexport type { MixpanelSetGroupPropertiesOnceRequest } from './services/mixpanel/mixpanel.service.js'\n// mixpanel services\nexport { MixpanelService } from './services/mixpanel/mixpanel.service.js'\n// notifications services\nexport type {\n CreateGlobalNotificationParams,\n CreateNotificationBySalesPlanParams,\n DeleteGlobalNotificationParams,\n UpdateNotificationParams,\n} from './services/notifications/notifications.service.js'\nexport { NotificationsService } from './services/notifications/notifications.service.js'\n// openrouter services\nexport type {\n CreateOpenRouterKeyRequest,\n CreateOpenRouterKeyResponse,\n DeleteOpenRouterKeyRequest,\n DeleteOpenRouterKeyResponse,\n GetOpenRouterKeyRequest,\n GetOpenRouterKeyResponse,\n GetOpenRouterWorkspaceRequest,\n GetOpenRouterWorkspaceResponse,\n ListOpenRouterKeysRequest,\n ListOpenRouterKeysResponse,\n OpenRouterKeyData,\n UpdateOpenRouterKeyRequest,\n UpdateOpenRouterKeyResponse,\n} from './services/openrouter/openrouter.service.js'\nexport {\n OPENROUTER_KEY_PAGE_SIZE,\n OpenRouterService,\n} from './services/openrouter/openrouter.service.js'\nexport type {\n IncomingWebhookData,\n IncomingWebhookRequest,\n SlackChatPostMessageParams,\n SlackChatPostMessageResponse,\n SlackConversationsInviteParams,\n SlackConversationsInviteResponse,\n SlackLookupUserByEmailParams,\n SlackLookupUserByEmailResponse,\n} from './services/slack/slack.service.js'\n// slack services\nexport { SlackService } from './services/slack/slack.service.js'\nexport type {\n SendBlockKitMessageParams,\n SendBlockKitMessageResponse,\n SlackBlock,\n} from './services/slack/slack-blockkit.service.js'\nexport { SlackBlockKitService } from './services/slack/slack-blockkit.service.js'\nexport type { TelemetryPostRequest } from './services/telemetry/telemetry.service.js'\n// telemetry services\nexport { TelemetryService } from './services/telemetry/telemetry.service.js'\nexport type {\n ThanosQueryRequest,\n ThanosQueryResponse,\n ThanosQueryResult,\n} from './services/thanos/thanos.service.js'\n// thanos services\nexport {\n ThanosApiEndpoint,\n ThanosService,\n} from './services/thanos/thanos.service.js'\nexport type {\n JwksRequest,\n JwksResponse,\n} from './services/token-issuer/token-issuer.jwks.service.js'\n// token-issuer services\nexport { TokenIssuerJwksService } from './services/token-issuer/token-issuer.jwks.service.js'\nexport type {\n WordpressGetCardsRequest,\n WordpressGetHelpCenterConfigRequest,\n WordpressGetSurveyConfigRequest,\n} from './services/wordpress/wordpress.service.js'\n// wordpress services\nexport { WordpressService } from './services/wordpress/wordpress.service.js'\n\n// types\nexport type {\n RequestBaseCustomMetrics,\n RequestBaseCustomMetricsDetailsType,\n RequestBaseMethodType,\n RequestBaseParams,\n RequestBaseParamsAuth,\n RequestBaseParamsConfig,\n RequestBaseParamsEnvOverride,\n RequestBaseParamsLogger,\n RequestBaseServiceContext,\n Stage,\n} from './types/general.types.js'\nexport type { RequestPayload, Response } from './utils/api.js'\n// utils\nexport { request } from './utils/api.js'\nexport { CustomMetricsCCMA } from './utils/ccma-metrics.js'\nexport type { ServiceAudience, ServiceName } from './utils/environments.js'\nexport { HttpError } from './utils/errors.js'\nexport type {\n SseConnection,\n SseConnectionOptions,\n SseConnectionState,\n SseMessage,\n} from './utils/sse.js'\nexport { connectSse } from './utils/sse.js'\n\nexport {\n correlationHeaders,\n generateTraceparent,\n getSessionId,\n sessionHeaders,\n setTraceparentProvider,\n traceparentHeaders,\n} from './utils/traceparent.js'\n"],
4
+ "sourcesContent": ["/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a commercial license.\n * You may not use this file except in compliance with the commercial license.\n */\n\nexport type {\n GetDataExportRequest,\n GetDataExportResponse,\n} from './services/accounts/accounts.data-export.service.js'\n// accounts services\nexport { AccountsDataExportService } from './services/accounts/accounts.data-export.service.js'\nexport type { GetValueMetricsPerDayParams } from './services/accounts/accounts.valuemetrics.service.js'\nexport type {\n DownloadDatabaseDumpParams,\n TriggerValueMetricsCronParams,\n} from './services/accounts/admin-tools.service.js'\nexport { AdminToolsService } from './services/accounts/admin-tools.service.js'\nexport type {\n ChangeClusterPlanLinkThroughApprovalRequest,\n ChangeClusterPlanLinkThroughApprovalResult,\n ChangeOrgLimitThroughApprovalRequest,\n ChangePlatformRolesThroughApprovalRequest,\n ChangePlatformRolesThroughApprovalResult,\n ChangeSalesPlanThroughApprovalRequest,\n ChangeUserEmailThroughApprovalRequest,\n CreatePersonalOrganizationThroughApprovalRequest,\n CreatePersonalOrganizationThroughApprovalResult,\n DeleteOrganizationThroughApprovalRequest,\n DeleteOrganizationThroughApprovalResult,\n DeleteSsoConnectionThroughApprovalRequest,\n DeleteSsoConnectionThroughApprovalResult,\n DeleteUserThroughApprovalRequest,\n DeleteUserThroughApprovalResult,\n ExtendTrialThroughApprovalRequest,\n OnboardToEnterpriseClusterMapping,\n OnboardToEnterpriseContract,\n OnboardToEnterpriseThroughApprovalRequest,\n OrgLimitValue,\n SendToExpiredTrialThroughApprovalRequest,\n UnlinkClusterPlanFromMemberOrganizationsRequest,\n UnlinkClusterPlanFromMemberOrganizationsResult,\n UpdateReservationsThroughApprovalRequest,\n UpdateUserMetadataThroughApprovalRequest,\n} from './services/accounts/approvals.m2m.service.js'\nexport { AccountsApprovalsM2MService } from './services/accounts/approvals.m2m.service.js'\nexport { AccountsBotService } from './services/accounts/bot.service.js'\nexport type {\n BugReportRequest,\n BugReportRequestBody,\n BugReportResponse,\n} from './services/accounts/bug-report.service.js'\nexport { BugReportService } from './services/accounts/bug-report.service.js'\nexport type {\n CancelMatchParams,\n CancelMatchResponse,\n GameInfo,\n GetGameInfoParams,\n GetHighscoresParams,\n GetHighscoresResponse,\n GetMatchStateParams,\n GetOrganizationalGroupsParams,\n GetOrganizationalGroupsResponse,\n GetRunningMatchesParams,\n GetRunningMatchesResponse,\n HighscoreEntry,\n InitiateMatchParams,\n InitiateMatchResponse,\n JoinMatchParams,\n JoinMatchResponse,\n Match,\n Player,\n PlayerAnswer,\n Question,\n QuestionChoice,\n SlackProfile,\n StartMatchParams,\n StartMatchResponse,\n SubmitAnswerParams,\n SubmitAnswerResponse,\n} from './services/accounts/challenge.service.js'\nexport { ChallengeService } from './services/accounts/challenge.service.js'\nexport type {\n AzureConnectionPayload,\n Connection,\n ConnectionPayload,\n ConnectionUserDto,\n ConnectionWriteStrategy,\n CreateConnectionParams,\n DeleteConnectionParams,\n GetConnectionParams,\n GetConnectionsParams,\n SamlConnectionPayload,\n UpdateConnectionParams,\n} from './services/accounts/connections.service.js'\nexport { ConnectionsService } from './services/accounts/connections.service.js'\nexport type { GetEngineeringOperationsDashboardRequest } from './services/accounts/dashboards.service.js'\nexport { DashboardsService } from './services/accounts/dashboards.service.js'\nexport type {\n CreateEarlyAccessFeatureParams,\n DeleteEarlyAccessFeatureParams,\n EarlyAccessFeatureActivationDto,\n EarlyAccessFeatureDto,\n EarlyAccessFeatureOrgDto,\n EarlyAccessFeatureSalesPlanConfigDto,\n GetEarlyAccessFeatureOrgsParams,\n GetEarlyAccessFeaturesForOrgParams,\n SetEarlyAccessFeatureActivationParams,\n UpdateEarlyAccessFeatureParams,\n} from './services/accounts/early-access-features.service.js'\nexport { EarlyAccessFeaturesService } from './services/accounts/early-access-features.service.js'\nexport { GenericCacheService } from './services/accounts/genericCache.service.js'\nexport type {\n GetActiveOrgsRequest,\n GetActiveOrgsResponse,\n GetBackendChangeEventsRequest,\n GetClusterActivityRequest,\n GetClusterCapacityRequest,\n GetClusterDiskUsageParams,\n GetClusterDiskUsageRequest,\n GetClusterHostingCostRequest,\n GetClusterHostingCostResponse,\n GetLlmUsageRequest,\n GetTenantUsageRequest,\n GetUsageMetricsRequest,\n GetUsageMetricsResponse,\n LlmUsageEntry,\n QueryChartRequest,\n} from './services/accounts/hdp.service.js'\nexport { HdpService } from './services/accounts/hdp.service.js'\nexport {\n type InviteDto,\n InvitesService,\n type SearchInvitesRequest,\n} from './services/accounts/invites.service.js'\nexport type {\n OffboardCamundiRequest,\n OffboardCamundiResponse,\n} from './services/accounts/offboarding.service.js'\nexport { OffboardingService } from './services/accounts/offboarding.service.js'\nexport type {\n AssignNewOwnerParams,\n AssignNewOwnerResponse,\n CancelOrganizationInviteParams,\n GetOrganizationMembersParams,\n LeaveOrganizationParams,\n OrganizationMemberDto,\n OrganizationMemberInviteDto,\n RemoveUserFromOrganizationParams,\n ResendOrganizationInviteParams,\n UpdateOrganizationMemberRolesParams,\n} from './services/accounts/organization-members.service.js'\nexport { OrganizationMembersService } from './services/accounts/organization-members.service.js'\nexport type {\n AutomatedEnterpriseOnboardingRequest,\n AutomatedEnterpriseOnboardingResult,\n AwsOnlyRequest,\n BlockLiteLLMParams,\n ChangeSalesPlanRequest,\n CheckUserExistsForInviteRequest,\n CheckUserExistsForInviteResponse,\n ConvertTrialToInNegotiationRequest,\n DeleteOrganizationRequest,\n EnterpriseDevOnlyRequest,\n ExtendTrialRequest,\n GetLLMUsageInfoParams,\n GetQueuedOperationsParams,\n GetSubscriptionDetailsParams,\n GetSubscriptionDetailsResponse,\n GetSubscriptionItemsParams,\n IncreaseLLMBudgetParams,\n IncreaseLLMBudgetResponse,\n LicensingModelRequest,\n LLMUsageInfoResponse,\n OnboardLiteLLMParams,\n OrgClusterDefaultsRequest,\n OrgClusterDefaultsResponse,\n OrgInfo,\n QueuedOperationDto,\n RenameOrganizationRequest,\n ResetTrialExtensionsRequest,\n SelfExtendTrialRequest,\n SendInviteRequest,\n SetBetaTermsAcceptedRequest,\n SetLimitRequest,\n UnblockLiteLLMParams,\n UpdateOrgClusterDefaultsRequest,\n UpdateOrgLimitAsMemberRequest,\n UpdateOrgLimitAsMemberResponse,\n UpdateSuppressDropDisksRequest,\n UpdateSuppressDropDisksResponse,\n} from './services/accounts/orgs.service.js'\nexport { OrgsService } from './services/accounts/orgs.service.js'\nexport type {\n GetControlSessionRequest,\n GetOrganizationV2Request,\n ListOrganizationsV2Request,\n ListOrgMembersV2Request,\n} from './services/accounts/orgs.v2.service.js'\nexport { OrgsV2Service } from './services/accounts/orgs.v2.service.js'\nexport type {\n CreatePdfWatermarkProjectParams,\n PdfWatermarkAuditEntryDto,\n PdfWatermarkPasswordParams,\n PdfWatermarkProjectDto,\n PdfWatermarkProjectIdParams,\n RecordPdfWatermarkAuditParams,\n SetPdfWatermarkPdfParams,\n UpdatePdfWatermarkProjectParams,\n} from './services/accounts/pdf-watermark.service.js'\nexport { PdfWatermarkService } from './services/accounts/pdf-watermark.service.js'\nexport type {\n FleetQueuedOperationDto,\n ListQueuedOperationsParams,\n QueuedOperationStatus,\n QueuedOperationsResponse,\n QueueHealthDto,\n} from './services/accounts/queued-operations.service.js'\nexport { QueuedOperationsService } from './services/accounts/queued-operations.service.js'\nexport type {\n GetReleaseTrainParams,\n ReleaseTrainInfoDto,\n} from './services/accounts/release-train.service.js'\nexport {\n KNOWN_RELEASE_TRAINS,\n ReleaseTrainService,\n} from './services/accounts/release-train.service.js'\nexport type {\n CreateSalesPlanRequest,\n DeleteSalesPlanRequest,\n GetSalesPlansRequest,\n UpdateSalesPlanMetadataRequest,\n UpdateSalesPlanRequest,\n UpdateSalesPlanReservationsRequest,\n} from './services/accounts/salesplan.service.js'\nexport { SalesPlanService } from './services/accounts/salesplan.service.js'\nexport { SpamDetectionService } from './services/accounts/spam-detection.service.js'\nexport type { GetStatsParams } from './services/accounts/stats.service.js'\nexport { StatsService } from './services/accounts/stats.service.js'\nexport type { PostTracesRequest } from './services/accounts/telemetry-ingest.service.js'\nexport { TelemetryIngestService } from './services/accounts/telemetry-ingest.service.js'\nexport type {\n InvalidateTokenByClientParams,\n InvalidateTokenParams,\n} from './services/accounts/token-issuer.service.js'\nexport { TokenIssuerService } from './services/accounts/token-issuer.service.js'\nexport type {\n GetOrgTrialDetailParams,\n GetTrialManagementOrgsParams,\n GetTrialManagementParams,\n} from './services/accounts/trial-management.service.js'\nexport { TrialManagementService } from './services/accounts/trial-management.service.js'\nexport type {\n CreateUsageAlertParams,\n GetUsageAlertsParams,\n PatchUsageAlertParams,\n} from './services/accounts/usage-alerts.service.js'\nexport { UsageAlertsService } from './services/accounts/usage-alerts.service.js'\nexport type {\n AddUserToOrganizationRequest,\n ChangeUserEmailRequest,\n ChangeUserNameRequest,\n DeleteMeRequest,\n RemoveStaleOrganizationRequest,\n RemoveUserFromOrganizationRequest,\n SearchParams,\n SetDefaultOrgRequest,\n SimpleSearchParams,\n UpdateUserRoleRequest,\n UserIdRequest,\n} from './services/accounts/users.service.js'\nexport { UsersService } from './services/accounts/users.service.js'\nexport type {\n CreateAlertSubscription,\n DeleteAlertSubscription,\n GetAlertSubscriptions,\n UpdateAlertSubscription,\n} from './services/alerts/alerts.service.js'\n// alerts services\nexport { AlertsService } from './services/alerts/alerts.service.js'\nexport type {\n AddAnalyticBridgeRequest,\n AddClusterAnalyticBridgeRequest,\n} from './services/analytic-bridge/analytic-bridge.service.js'\n// analytic-bridge services\nexport { AnalyticBridgeService } from './services/analytic-bridge/analytic-bridge.service.js'\nexport type {\n AskBackendBaseParams,\n AskBackendGetOrgClustersParams,\n AskBackendOrgParams,\n AskBackendRunQueryParams,\n AskBackendSearchOrgsParams,\n OrgClusterRow,\n OrgDetail,\n OrgMemberInfo,\n OrgOwnerInfo,\n OrgSummary,\n} from './services/ask-backend/ask-backend.service.js'\n// ask-backend service\nexport { AskBackendService } from './services/ask-backend/ask-backend.service.js'\nexport type {\n AddAuditRequest,\n GetAuditRequest,\n GetClusterAuditRequest,\n} from './services/audit-logger/audit-logger.service.js'\n// audit-logger services\nexport { AuditLoggerService } from './services/audit-logger/audit-logger.service.js'\nexport type {\n AddSystemAuditRequest,\n GetSystemAuditRequest,\n} from './services/audit-logger/audit-logger.system.service.js'\nexport { SystemAuditLoggerService } from './services/audit-logger/audit-logger.system.service.js'\nexport type { Auth0Request } from './services/auth0/auth0.service.js'\n// auth0 services\nexport { Auth0Service } from './services/auth0/auth0.service.js'\nexport type { CommBridgeClientRequest } from './services/comm-bridge/comm-bridge.service.js'\n// comm-bridge services\nexport { CommBridgeService } from './services/comm-bridge/comm-bridge.service.js'\nexport type {\n AdminClusterAutoUpdateRequest,\n AdminClusterDetailsDto,\n AdminClusterNonSpotNodesRequest,\n AdminClusterOptionalTelemetryRequest,\n AdminClusterTtlRequest,\n CreateLiteLLMSecretsForOrgRequest,\n GetAdminClusterDetailsRequest,\n GetClusterCrdStateRequest,\n GetClusterRequest,\n GetSpecExplainerRequest,\n RemoveLlmSecretsForOrgRequest,\n RemoveLlmSecretsForOrgResponse,\n RepointLlmSecretsForOrgRequest,\n RepointLlmSecretsForOrgResponse,\n RotateLiteLLMKeySecretsForOrgRequest,\n RotateLiteLLMKeySecretsForOrgResponse,\n SignalSignupRequest,\n SpecExplainerFieldAnnotation,\n SpecExplainerFieldSource,\n SpecExplainerResponse,\n UpdateClusterMetricsStartDateRequest,\n UpdateClusterToNewPlanTypeRequest,\n} from './services/console/console.admin.service.js'\n// console services\nexport { ConsoleAdminService } from './services/console/console.admin.service.js'\nexport {\n type CheckConsoleAlertParams,\n type CheckConsoleAlertResponse,\n ConsoleAlertsService,\n type CreateConsoleAlertParams,\n type DeleteConsoleAlertParams,\n type GetConsoleAlertsParams,\n type UpdateConsoleAlertParams,\n} from './services/console/console.alerts.service.js'\nexport {\n type ConsoleApiClientDto,\n ConsoleApiClientsService,\n type CreateConsoleApiClientParams,\n type CreateConsoleApiClientResponse,\n type DeleteConsoleApiClientParams,\n type GetConsoleApiClientsParams,\n type UpdateConsoleApiClientParams,\n} from './services/console/console.api-clients.service.js'\nexport type {\n AnnounceClusterBulkPlanUpdateRequest,\n ChangeClusterPlanTypeThroughApprovalRequest,\n CheckCustomClusterPlanRemovalRequest,\n CreateCustomClusterPlanThroughApprovalRequest,\n CustomClusterPlanThroughApprovalResult,\n DeleteCustomClusterPlanThroughApprovalRequest,\n DeleteInternalBackupThroughApprovalRequest,\n MoveClusterOwnerThroughApprovalRequest,\n RunClusterBulkStepThroughApprovalRequest,\n} from './services/console/console.approvals.m2m.service.js'\nexport { ConsoleApprovalsM2MService } from './services/console/console.approvals.m2m.service.js'\nexport {\n ConsoleBackupScheduleService,\n type GetConsoleBackupScheduleParams,\n type UpdateConsoleBackupScheduleParams,\n} from './services/console/console.backup-schedule.service.js'\nexport {\n ConsoleByokScriptsService,\n type GetConsoleByokKmsPolicyParams,\n type GetConsoleByokScriptParams,\n} from './services/console/console.byok-scripts.service.js'\nexport {\n type ActivateConsoleByomMonitoringParams,\n type ByomMonitoringClientsResponseDto,\n type ByomMonitoringClientWithPasswordDto,\n ConsoleByomMonitoringService,\n type CreateConsoleByomMonitoringClientParams,\n type DeactivateConsoleByomMonitoringParams,\n type DeleteConsoleByomMonitoringClientParams,\n type GetConsoleByomMonitoringClientsParams,\n type RotateConsoleByomMonitoringClientPasswordParams,\n} from './services/console/console.byom-monitoring.service.js'\nexport {\n ChannelService,\n type ConsoleChannelDto,\n type CreateConsoleChannelParams,\n type DeleteConsoleChannelParams,\n type GetConsoleChannelsParams,\n type UpdateConsoleChannelParams,\n} from './services/console/console.channel.service.js'\nexport type {\n ConsoleClusterCarryOverResult,\n CreateConsoleClusterRequest,\n CreateConsoleClusterResponse,\n DeleteConsoleClusterRequest,\n DeleteExternalIdpRequest,\n DuplicateConsoleClusterRequest,\n DuplicateConsoleClusterResponse,\n FailoverConsoleClusterRequest,\n FailoverConsoleClusterResult,\n GetAdminClusterRequest,\n GetConsoleClusterRequest,\n GetConsoleClustersRequest,\n MoveClusterOwnerRequest,\n ProxyOrchestrationClusterRequest,\n SuspendConsoleClusterRequest,\n UpdateClusterRequest,\n UpdateExternalIdpSecretRequest,\n WakeConsoleClusterRequest,\n} from './services/console/console.cluster.service.js'\nexport { ConsoleClusterService } from './services/console/console.cluster.service.js'\nexport type {\n GetClusterParametersV2Request,\n GetClusterV2Request,\n ListClustersV2Request,\n ListOrgClustersV2Request,\n} from './services/console/console.cluster.v2.service.js'\nexport { ConsoleClusterV2Service } from './services/console/console.cluster.v2.service.js'\nexport {\n type ConsoleClusterClientDto,\n ConsoleClusterClientsService,\n type CreateConsoleClusterClientParams,\n type CreateConsoleClusterClientResponse,\n type DeleteConsoleClusterClientParams,\n type GetConsoleClusterClientsParams,\n type RotateConsoleClusterClientSecretParams,\n type RotateConsoleClusterClientSecretResponse,\n type UpdateConsoleClusterClientParams,\n} from './services/console/console.cluster-clients.service.js'\nexport {\n type ConsoleClusterCreationParametersChannel,\n type ConsoleClusterCreationParametersClusterPlanType,\n type ConsoleClusterCreationParametersGeneration,\n type ConsoleClusterCreationParametersRegion,\n type ConsoleClusterCreationParametersRegionBackup,\n type ConsoleClusterCreationParametersRegionBackupRegion,\n type ConsoleClusterCreationParametersResponse,\n type ConsoleClusterCreationParametersUnlockedClusterPlan,\n ConsoleClusterParametersService,\n type GetConsoleClusterCreationParametersRequest,\n} from './services/console/console.cluster-parameters.service.js'\nexport { ConsoleClusterBulkOperationService } from './services/console/console.clusterBulkOperation.service.js'\nexport { ClusterPlanModificationService } from './services/console/console.clusterplan.modification.service.js'\nexport type {\n CreateClusterPlanParams,\n DeleteClusterPlanParams,\n UpdateMigratableFromParams,\n UpdatePerformanceExpectationsParams,\n} from './services/console/console.clusterplan.service.js'\nexport { ClusterPlanService } from './services/console/console.clusterplan.service.js'\nexport {\n ClusterPlanTypeService,\n type CreateClusterPlanTypeParams,\n type DeleteClusterPlanTypeParams,\n type GetClusterPlanTypesParams,\n type SetClusterPlanTypeLimitsParams,\n type UpdateClusterPlanTypeParams,\n} from './services/console/console.clusterplantype.service.js'\nexport {\n ConsoleConnectorSecretsService,\n type DeleteConsoleConnectorSecretParams,\n type GetConsoleConnectorSecretsParams,\n type PutConsoleConnectorSecretParams,\n} from './services/console/console.connector-secrets.service.js'\nexport type {\n ConsoleCustomMetricsRequest,\n ConsoleCustomMetricsResponse,\n} from './services/console/console.custommetrics.service.js'\nexport { ConsoleCustomMetricsService } from './services/console/console.custommetrics.service.js'\nexport {\n ConsoleHotBackupsService,\n type CreateConsoleHotBackupParams,\n type CreateConsoleInternalBackupParams,\n type DeleteConsoleHotBackupParams,\n type DeleteConsoleInternalBackupParams,\n type GetConsoleHotBackupsParams,\n type GetConsoleInternalBackupsParams,\n type RestoreConsoleHotBackupParams,\n type RetryConsoleHotBackupParams,\n} from './services/console/console.hotbackups.service.js'\nexport {\n ConsoleIpWhitelistService,\n type IpWhitelistEntryDto,\n type UpdateConsoleIpWhitelistParams,\n} from './services/console/console.ip-whitelist.service.js'\nexport type {\n SaaSJobsBaseParams,\n SaaSJobsErrorsParams,\n SaaSJobsGlobalParams,\n SaaSJobsOverviewParams,\n SaaSJobsTimeSeriesParams,\n SaaSJobsWorkersParams,\n} from './services/console/console.jobs.saas.service.js'\nexport { SaaSJobsService } from './services/console/console.jobs.saas.service.js'\nexport {\n type GetK8sContextsParams,\n K8sContextService,\n} from './services/console/console.k8scontext.service.js'\nexport type {\n VerifyApiClientCredentialsResponse,\n VerifyClientCredentialsRequest,\n VerifyZeebeClientCredentialsResponse,\n} from './services/console/console.m2m.service.js'\nexport { ConsoleM2MService } from './services/console/console.m2m.service.js'\nexport {\n type ActivateSecureConnectivityParams,\n ConsoleSecureConnectivityService,\n type DeactivateSecureConnectivityParams,\n type GetSecureConnectivityStatusParams,\n type SecureConnectivityStatusDto,\n type UpdateSecureConnectivityParams,\n} from './services/console/console.secure-connectivity.service.js'\nexport {\n type GetStorybookConfigParams,\n StorybookConfigService,\n} from './services/console/console.storybook-config.service.js'\nexport { ConsoleValueMetricsService } from './services/console/console.valuemetrics.service.js'\n\nexport {\n type CreateGenerationParams,\n type DeleteGenerationParams,\n GenerationService,\n type GenerationVersionsInput,\n type ListGenerationsParams,\n type SetGenerationArchivedParams,\n type SetGenerationBespokeParams,\n type UpdateGenerationParams,\n} from './services/console/generation.service.js'\nexport type {\n AddAnnotationNoteRequest,\n AddAnnotationTagRequest,\n AnnotationIdRequest,\n AnnotationPageDto,\n AnnotationPageInfoDto,\n AnnotationTagPageDto,\n AnnotationTargetDto,\n EditAnnotationNoteRequest,\n GetEntityAnnotationsRequest,\n ListAnnotationTagsRequest,\n LookupAnnotationsRequest,\n SearchAnnotationsRequest,\n} from './services/control/control.annotations.service.js'\nexport { ControlAnnotationsService } from './services/control/control.annotations.service.js'\n// control-backend \u2014 the four-eyes approval surface\nexport type {\n ApprovalFacetParams,\n ApprovalIdRequest,\n ApprovalPageDto,\n ChangeClusterPlanTypePayloadDto,\n ChangeFeatureFlagPayloadDto,\n ChangeOrgLimitsPayloadDto,\n ChangePlatformRolesPayloadDto,\n ChangeSalesPlanPayloadDto,\n ChangeUserEmailPayloadDto,\n CountApprovalsRequest,\n CreateApprovalRequest,\n CreateCustomHardwareSizingPayloadDto,\n CreatePersonalOrganisationPayloadDto,\n CreatePersonalOrganisationRequest,\n CustomHardwareSizingRequest,\n DeleteInternalBackupPayloadDto,\n DeleteOrganizationPayloadDto,\n DeleteSsoConnectionPayloadDto,\n DeleteUserPayloadDto,\n ExtendTrialPayloadDto,\n FeatureFlagValuesDto,\n ListApprovalsRequest,\n MoveClusterOrgPayloadDto,\n OnboardToEnterpriseClusterDto,\n OnboardToEnterprisePayloadDto,\n PurgeUsersPayloadDto,\n RejectApprovalRequest,\n RemoveCustomHardwareSizingPayloadDto,\n SendToExpiredTrialPayloadDto,\n UpdateUserMetadataPayloadDto,\n WithdrawApprovalRequest,\n} from './services/control/control.approvals.service.js'\nexport { ControlApprovalsService } from './services/control/control.approvals.service.js'\n// control-backend \u2014 the dashboards, whose tiles hold filters and never data\nexport type {\n AddDashboardTileRequest,\n CheckChartQueryRequest,\n CreateDashboardRequest,\n DashboardIdRequest,\n ListDashboardsRequest,\n UpdateDashboardRequest,\n} from './services/control/control.dashboards.service.js'\nexport { ControlDashboardsService } from './services/control/control.dashboards.service.js'\nexport type {\n CreateFeatureFlagRequest,\n EvaluateFeatureFlagsRequest,\n FeatureFlagIdRequest,\n UpdateFeatureFlagRequest,\n} from './services/control/control.feature-flags.service.js'\nexport { ControlFeatureFlagsService } from './services/control/control.feature-flags.service.js'\nexport type {\n ControlInfoDto,\n ControlWhoamiDto,\n} from './services/control/control.platform.service.js'\nexport { ControlPlatformService } from './services/control/control.platform.service.js'\n// external services (CORS-enabled webapp navigation surface)\nexport type {\n GetFeatureFlagsParams,\n UpdateUserThemeParams,\n UserThemePreference,\n} from './services/external/external.accounts.service.js'\nexport { ExternalAccountsService } from './services/external/external.accounts.service.js'\nexport type {\n GetOrgClustersParams,\n StreamOrgEventsParams,\n} from './services/external/external.console.service.js'\nexport { ExternalConsoleService } from './services/external/external.console.service.js'\nexport type {\n DismissAllNotificationsParams,\n GetUserNotificationsParams,\n MarkManyNotificationsReadParams,\n SetNotificationStateParams,\n StreamUserNotificationsParams,\n TrackNotificationEventParams,\n UserNotificationAnalyticsEvent,\n} from './services/external/external.notifications.service.js'\nexport { ExternalNotificationsService } from './services/external/external.notifications.service.js'\nexport type {\n GithubCommitComparison,\n GithubCompareCommitsRequest,\n GithubContentItem,\n GithubGetRawFileRequest,\n GithubListDirectoryContentRequest,\n GithubListMajorMinorReleasesRequest,\n GithubListReleasesRequest,\n GithubRelease,\n} from './services/github/github.service.js'\n// github services\nexport { GithubService } from './services/github/github.service.js'\nexport type {\n GleanSearchRequest,\n GleanSearchResult,\n} from './services/glean/glean.service.js'\n// glean services\nexport { GleanService } from './services/glean/glean.service.js'\nexport type {\n HelpCenterCardResponse,\n HelpCenterConfigResponse,\n HelpCenterGetCardsRequest,\n HelpCenterGetConfigRequest,\n} from './services/helpcenter/helpcenter.service.js'\n// helpcenter services\nexport { HelpCenterService } from './services/helpcenter/helpcenter.service.js'\nexport type {\n HibobEmployee,\n HibobGetAllUsersRequest,\n HibobReportsTo,\n HibobSearchRequest,\n HibobSearchResponse,\n} from './services/hibob/hibob.service.js'\n// hibob services\nexport {\n DEPARTMENT as HIBOB_DEPARTMENT_PATH,\n DIVISION as HIBOB_DIVISION_PATH,\n DIVISION_ID as HIBOB_DIVISION_ID,\n HibobService,\n SUB_DIVISION as HIBOB_SUB_DIVISION_PATH,\n SUB_DIVISION_ID as HIBOB_SUB_DIVISION_ID,\n} from './services/hibob/hibob.service.js'\nexport type {\n HubspotChangeContactPropertiesRequest,\n HubspotSubmission,\n HubspotSubmitRequest,\n HubspotTokenRequest,\n HubspotTokenResponse,\n} from './services/hubspot/hubspot.service.js'\n// hubspot services\nexport { HubspotService } from './services/hubspot/hubspot.service.js'\nexport type {\n IncidentIoGetOpenIncidentsRequest,\n OpenIncident,\n} from './services/incident-io/incident-io.service.js'\n// incident.io services\nexport { IncidentIoService } from './services/incident-io/incident-io.service.js'\n// litellm services\nexport type {\n BlockKeyRequest,\n BlockKeyResponse,\n CreateTeamRequest,\n CreateTeamResponse,\n DeleteKeyRequest,\n DeleteKeyResponse,\n DeleteTeamRequest,\n DeleteTeamResponse,\n GenerateKeyRequest,\n GenerateKeyResponse,\n GetKeyInfoRequest,\n GetKeyInfoResponse,\n RegenerateKeyRequest,\n RegenerateKeyResponse,\n UnblockKeyRequest,\n UnblockKeyResponse,\n UpdateKeyBudgetRequest,\n UpdateKeyBudgetResponse,\n UpdateTeamBudgetRequest,\n UpdateTeamBudgetResponse,\n} from './services/litellm/litellm.service.js'\nexport { LiteLLMService } from './services/litellm/litellm.service.js'\nexport type { LoginPayload } from './services/login/login.service.js'\n// login services\nexport { LoginService } from './services/login/login.service.js'\nexport type { MixpanelSetGroupPropertiesOnceRequest } from './services/mixpanel/mixpanel.service.js'\n// mixpanel services\nexport { MixpanelService } from './services/mixpanel/mixpanel.service.js'\n// notifications services\nexport type {\n CreateGlobalNotificationParams,\n CreateNotificationBySalesPlanParams,\n DeleteGlobalNotificationParams,\n UpdateNotificationParams,\n} from './services/notifications/notifications.service.js'\nexport { NotificationsService } from './services/notifications/notifications.service.js'\n// openrouter services\nexport type {\n CreateOpenRouterKeyRequest,\n CreateOpenRouterKeyResponse,\n DeleteOpenRouterKeyRequest,\n DeleteOpenRouterKeyResponse,\n GetOpenRouterKeyRequest,\n GetOpenRouterKeyResponse,\n GetOpenRouterWorkspaceRequest,\n GetOpenRouterWorkspaceResponse,\n ListOpenRouterKeysRequest,\n ListOpenRouterKeysResponse,\n OpenRouterKeyData,\n UpdateOpenRouterKeyRequest,\n UpdateOpenRouterKeyResponse,\n} from './services/openrouter/openrouter.service.js'\nexport {\n OPENROUTER_KEY_PAGE_SIZE,\n OpenRouterService,\n} from './services/openrouter/openrouter.service.js'\nexport type {\n IncomingWebhookData,\n IncomingWebhookRequest,\n SlackChatPostMessageParams,\n SlackChatPostMessageResponse,\n SlackConversationsInviteParams,\n SlackConversationsInviteResponse,\n SlackLookupUserByEmailParams,\n SlackLookupUserByEmailResponse,\n} from './services/slack/slack.service.js'\n// slack services\nexport { SlackService } from './services/slack/slack.service.js'\nexport type {\n SendBlockKitMessageParams,\n SendBlockKitMessageResponse,\n SlackBlock,\n} from './services/slack/slack-blockkit.service.js'\nexport { SlackBlockKitService } from './services/slack/slack-blockkit.service.js'\nexport type { TelemetryPostRequest } from './services/telemetry/telemetry.service.js'\n// telemetry services\nexport { TelemetryService } from './services/telemetry/telemetry.service.js'\nexport type {\n ThanosQueryRequest,\n ThanosQueryResponse,\n ThanosQueryResult,\n} from './services/thanos/thanos.service.js'\n// thanos services\nexport {\n ThanosApiEndpoint,\n ThanosService,\n} from './services/thanos/thanos.service.js'\nexport type {\n JwksRequest,\n JwksResponse,\n} from './services/token-issuer/token-issuer.jwks.service.js'\n// token-issuer services\nexport { TokenIssuerJwksService } from './services/token-issuer/token-issuer.jwks.service.js'\nexport type {\n WordpressGetCardsRequest,\n WordpressGetHelpCenterConfigRequest,\n WordpressGetSurveyConfigRequest,\n} from './services/wordpress/wordpress.service.js'\n// wordpress services\nexport { WordpressService } from './services/wordpress/wordpress.service.js'\n\n// types\nexport type {\n RequestBaseCustomMetrics,\n RequestBaseCustomMetricsDetailsType,\n RequestBaseMethodType,\n RequestBaseParams,\n RequestBaseParamsAuth,\n RequestBaseParamsConfig,\n RequestBaseParamsEnvOverride,\n RequestBaseParamsLogger,\n RequestBaseServiceContext,\n Stage,\n} from './types/general.types.js'\nexport type { RequestPayload, Response } from './utils/api.js'\n// utils\nexport { request } from './utils/api.js'\nexport { CustomMetricsCCMA } from './utils/ccma-metrics.js'\nexport type { ServiceAudience, ServiceName } from './utils/environments.js'\nexport { HttpError } from './utils/errors.js'\nexport type {\n SseConnection,\n SseConnectionOptions,\n SseConnectionState,\n SseMessage,\n} from './utils/sse.js'\nexport { connectSse } from './utils/sse.js'\n\nexport {\n correlationHeaders,\n generateTraceparent,\n getSessionId,\n sessionHeaders,\n setTraceparentProvider,\n traceparentHeaders,\n} from './utils/traceparent.js'\n"],
5
5
  "mappings": "AAWA,SAAS,iCAAiC;AAM1C,SAAS,yBAAyB;AA4BlC,SAAS,mCAAmC;AAC5C,SAAS,0BAA0B;AAMnC,SAAS,wBAAwB;AA6BjC,SAAS,wBAAwB;AAcjC,SAAS,0BAA0B;AAEnC,SAAS,yBAAyB;AAalC,SAAS,kCAAkC;AAC3C,SAAS,2BAA2B;AAkBpC,SAAS,kBAAkB;AAC3B;AAAA,EAEE;AAAA,OAEK;AAKP,SAAS,0BAA0B;AAanC,SAAS,kCAAkC;AAwC3C,SAAS,mBAAmB;AAO5B,SAAS,qBAAqB;AAW9B,SAAS,2BAA2B;AAQpC,SAAS,+BAA+B;AAKxC;AAAA,EACE;AAAA,EACA;AAAA,OACK;AASP,SAAS,wBAAwB;AACjC,SAAS,4BAA4B;AAErC,SAAS,oBAAoB;AAE7B,SAAS,8BAA8B;AAKvC,SAAS,0BAA0B;AAMnC,SAAS,8BAA8B;AAMvC,SAAS,0BAA0B;AAcnC,SAAS,oBAAoB;AAQ7B,SAAS,qBAAqB;AAM9B,SAAS,6BAA6B;AActC,SAAS,yBAAyB;AAOlC,SAAS,0BAA0B;AAKnC,SAAS,gCAAgC;AAGzC,SAAS,oBAAoB;AAG7B,SAAS,yBAAyB;AA0BlC,SAAS,2BAA2B;AACpC;AAAA,EAGE;AAAA,OAKK;AACP;AAAA,EAEE;AAAA,OAMK;AAYP,SAAS,kCAAkC;AAC3C;AAAA,EACE;AAAA,OAGK;AACP;AAAA,EACE;AAAA,OAGK;AACP;AAAA,EAIE;AAAA,OAMK;AACP;AAAA,EACE;AAAA,OAMK;AAqBP,SAAS,6BAA6B;AAOtC,SAAS,+BAA+B;AACxC;AAAA,EAEE;AAAA,OAQK;AACP;AAAA,EASE;AAAA,OAEK;AACP,SAAS,0CAA0C;AACnD,SAAS,sCAAsC;AAO/C,SAAS,0BAA0B;AACnC;AAAA,EACE;AAAA,OAMK;AACP;AAAA,EACE;AAAA,OAIK;AAKP,SAAS,mCAAmC;AAC5C;AAAA,EACE;AAAA,OASK;AACP;AAAA,EACE;AAAA,OAGK;AASP,SAAS,uBAAuB;AAChC;AAAA,EAEE;AAAA,OACK;AAMP,SAAS,yBAAyB;AAClC;AAAA,EAEE;AAAA,OAKK;AACP;AAAA,EAEE;AAAA,OACK;AACP,SAAS,kCAAkC;AAE3C;AAAA,EAGE;AAAA,OAMK;AAeP,SAAS,iCAAiC;AAmC1C,SAAS,+BAA+B;AAUxC,SAAS,gCAAgC;AAOzC,SAAS,kCAAkC;AAK3C,SAAS,8BAA8B;AAOvC,SAAS,+BAA+B;AAKxC,SAAS,8BAA8B;AAUvC,SAAS,oCAAoC;AAY7C,SAAS,qBAAqB;AAM9B,SAAS,oBAAoB;AAQ7B,SAAS,yBAAyB;AASlC;AAAA,EACgB;AAAA,EACF;AAAA,EACG;AAAA,EACf;AAAA,EACgB;AAAA,EACG;AAAA,OACd;AASP,SAAS,sBAAsB;AAM/B,SAAS,yBAAyB;AAwBlC,SAAS,sBAAsB;AAG/B,SAAS,oBAAoB;AAG7B,SAAS,uBAAuB;AAQhC,SAAS,4BAA4B;AAiBrC;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAYP,SAAS,oBAAoB;AAM7B,SAAS,4BAA4B;AAGrC,SAAS,wBAAwB;AAOjC;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAMP,SAAS,8BAA8B;AAOvC,SAAS,wBAAwB;AAiBjC,SAAS,eAAe;AACxB,SAAS,yBAAyB;AAElC,SAAS,iBAAiB;AAO1B,SAAS,kBAAkB;AAE3B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;",
6
6
  "names": []
7
7
  }
@@ -66,7 +66,7 @@ export interface DeleteInternalBackupThroughApprovalRequest extends RequestBaseP
66
66
  actor: ApprovalM2mActor;
67
67
  };
68
68
  }
69
- export interface CreateCustomerClusterPlanThroughApprovalRequest extends RequestBaseParams {
69
+ export interface CreateCustomClusterPlanThroughApprovalRequest extends RequestBaseParams {
70
70
  body: {
71
71
  actor: ApprovalM2mActor;
72
72
  clusterPlanId: string;
@@ -74,7 +74,7 @@ export interface CreateCustomerClusterPlanThroughApprovalRequest extends Request
74
74
  plan: Record<string, unknown>;
75
75
  };
76
76
  }
77
- export interface CheckCustomerClusterPlanRemovalRequest extends RequestBaseParams {
77
+ export interface CheckCustomClusterPlanRemovalRequest extends RequestBaseParams {
78
78
  params: {
79
79
  clusterPlanId: string;
80
80
  };
@@ -83,7 +83,7 @@ export interface CheckCustomerClusterPlanRemovalRequest extends RequestBaseParam
83
83
  forDelete: boolean;
84
84
  };
85
85
  }
86
- export interface DeleteCustomerClusterPlanThroughApprovalRequest extends RequestBaseParams {
86
+ export interface DeleteCustomClusterPlanThroughApprovalRequest extends RequestBaseParams {
87
87
  params: {
88
88
  clusterPlanId: string;
89
89
  };
@@ -91,8 +91,8 @@ export interface DeleteCustomerClusterPlanThroughApprovalRequest extends Request
91
91
  actor: ApprovalM2mActor;
92
92
  };
93
93
  }
94
- /** What console answers for a customer cluster plan call. */
95
- export interface CustomerClusterPlanThroughApprovalResult {
94
+ /** What console answers for a custom cluster plan call. */
95
+ export interface CustomClusterPlanThroughApprovalResult {
96
96
  clusterPlanId: string;
97
97
  }
98
98
  export declare class ConsoleApprovalsM2MService {
@@ -129,13 +129,13 @@ export declare class ConsoleApprovalsM2MService {
129
129
  /** Deletes an internal (incident) backup of a cluster. It cannot be undone. */
130
130
  static deleteInternalBackup(params: DeleteInternalBackupThroughApprovalRequest): Promise<BackupDto>;
131
131
  /** Creates a cluster plan for a Camundi, with the uuid that the caller gives. */
132
- static createCustomerClusterPlan(params: CreateCustomerClusterPlanThroughApprovalRequest): Promise<CustomerClusterPlanThroughApprovalResult>;
132
+ static createCustomClusterPlan(params: CreateCustomClusterPlanThroughApprovalRequest): Promise<CustomClusterPlanThroughApprovalResult>;
133
133
  /**
134
134
  * Asks whether a Camundi may remove a plan. Console answers 403 for a plan
135
135
  * of another person, and 409 for a plan that a cluster uses.
136
136
  */
137
- static checkCustomerClusterPlanRemoval(params: CheckCustomerClusterPlanRemovalRequest): Promise<CustomerClusterPlanThroughApprovalResult>;
137
+ static checkCustomClusterPlanRemoval(params: CheckCustomClusterPlanRemovalRequest): Promise<CustomClusterPlanThroughApprovalResult>;
138
138
  /** Deletes a cluster plan that the Camundi created. It cannot be undone. */
139
- static deleteCustomerClusterPlan(params: DeleteCustomerClusterPlanThroughApprovalRequest): Promise<CustomerClusterPlanThroughApprovalResult>;
139
+ static deleteCustomClusterPlan(params: DeleteCustomClusterPlanThroughApprovalRequest): Promise<CustomClusterPlanThroughApprovalResult>;
140
140
  private static callClusterPlan;
141
141
  }
@@ -174,10 +174,10 @@ class ConsoleApprovalsM2MService {
174
174
  return response.body;
175
175
  }
176
176
  /** Creates a cluster plan for a Camundi, with the uuid that the caller gives. */
177
- static async createCustomerClusterPlan(params) {
177
+ static async createCustomClusterPlan(params) {
178
178
  return ConsoleApprovalsM2MService.callClusterPlan({
179
179
  config: params.config,
180
- name: "ConsoleApprovalsM2MService.createCustomerClusterPlan",
180
+ name: "ConsoleApprovalsM2MService.createCustomClusterPlan",
181
181
  url: "api/admin/approvals/cluster-plans",
182
182
  normalizedUrl: "api/admin/approvals/cluster-plans",
183
183
  type: "post",
@@ -188,11 +188,11 @@ class ConsoleApprovalsM2MService {
188
188
  * Asks whether a Camundi may remove a plan. Console answers 403 for a plan
189
189
  * of another person, and 409 for a plan that a cluster uses.
190
190
  */
191
- static async checkCustomerClusterPlanRemoval(params) {
191
+ static async checkCustomClusterPlanRemoval(params) {
192
192
  const { clusterPlanId } = params.params;
193
193
  return ConsoleApprovalsM2MService.callClusterPlan({
194
194
  config: params.config,
195
- name: "ConsoleApprovalsM2MService.checkCustomerClusterPlanRemoval",
195
+ name: "ConsoleApprovalsM2MService.checkCustomClusterPlanRemoval",
196
196
  url: `api/admin/approvals/cluster-plans/${clusterPlanId}/removal-check`,
197
197
  normalizedUrl: "api/admin/approvals/cluster-plans/:clusterPlanId/removal-check",
198
198
  type: "post",
@@ -200,11 +200,11 @@ class ConsoleApprovalsM2MService {
200
200
  });
201
201
  }
202
202
  /** Deletes a cluster plan that the Camundi created. It cannot be undone. */
203
- static async deleteCustomerClusterPlan(params) {
203
+ static async deleteCustomClusterPlan(params) {
204
204
  const { clusterPlanId } = params.params;
205
205
  return ConsoleApprovalsM2MService.callClusterPlan({
206
206
  config: params.config,
207
- name: "ConsoleApprovalsM2MService.deleteCustomerClusterPlan",
207
+ name: "ConsoleApprovalsM2MService.deleteCustomClusterPlan",
208
208
  url: `api/admin/approvals/cluster-plans/${clusterPlanId}`,
209
209
  normalizedUrl: "api/admin/approvals/cluster-plans/:clusterPlanId",
210
210
  type: "delete",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/services/console/console.approvals.m2m.service.ts"],
4
- "sourcesContent": ["/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a commercial license.\n * You may not use this file except in compliance with the commercial license.\n */\n\nimport type {\n ApprovalM2mActor,\n BackupDto,\n ChangeClusterPlanTypeResult,\n ClusterBulkStepRequestDto,\n ClusterBulkStepResultDto,\n MoveClusterOwnerResult,\n} from '@camunda/ccma-shared-types'\nimport type {\n RequestBaseParams,\n RequestBaseServiceContext,\n} from '../../types/general.types.js'\nimport { request } from '../../utils/api.js'\nimport { HttpError } from '../../utils/errors.js'\n\n/**\n * The route of `api/admin/approvals` in console-backend.\n *\n * The twin of `AccountsApprovalsM2MService`. Read the note there.\n */\n\nexport interface MoveClusterOwnerThroughApprovalRequest\n extends RequestBaseParams {\n params: { clusterId: string }\n body: {\n actor: ApprovalM2mActor\n ownerId: string\n }\n}\n\nexport interface ChangeClusterPlanTypeThroughApprovalRequest\n extends RequestBaseParams {\n params: { clusterId: string }\n body: {\n actor: ApprovalM2mActor\n /** The organization that owns the cluster. Console refuses another one. */\n orgId: string\n toPlanTypeUuid: string\n numberOfAllocatedHwPackages: number\n /**\n * The plan type that the person who asked READ. Console compares it with\n * the plan type of the cluster when the action runs, and changes nothing\n * when the two differ.\n */\n expectedPlanTypeUuid: string\n /** The packages the person READ, 1 for a cluster that holds none. */\n expectedNumberOfAllocatedHwPackages: number\n /** The plan the cluster ran when the person read it. */\n expectedClusterPlanUuid: string\n /** The active modification config the person read, absent for none. */\n expectedActiveModificationConfigUuid?: string\n /** The active plan of the new plan type the person read. */\n expectedTargetPlanUuid: string\n /** Whether the cluster plan moves to that plan, as the person read it. */\n expectedClusterPlanUpdate: boolean\n }\n}\n\nexport interface RunClusterBulkStepThroughApprovalRequest\n extends RequestBaseParams {\n params: { clusterId: string }\n body: ClusterBulkStepRequestDto & { actor: ApprovalM2mActor }\n}\n\nexport interface AnnounceClusterBulkPlanUpdateRequest\n extends RequestBaseParams {\n body: {\n actor: ApprovalM2mActor\n toPlanUuid: string\n doneCount: number\n }\n}\n\nexport interface DeleteInternalBackupThroughApprovalRequest\n extends RequestBaseParams {\n params: { clusterId: string; backupName: string }\n body: { actor: ApprovalM2mActor }\n}\n\nexport interface CreateCustomerClusterPlanThroughApprovalRequest\n extends RequestBaseParams {\n body: {\n actor: ApprovalM2mActor\n clusterPlanId: string\n name: string\n plan: Record<string, unknown>\n }\n}\n\nexport interface CheckCustomerClusterPlanRemovalRequest\n extends RequestBaseParams {\n params: { clusterPlanId: string }\n body: { actor: ApprovalM2mActor; forDelete: boolean }\n}\n\nexport interface DeleteCustomerClusterPlanThroughApprovalRequest\n extends RequestBaseParams {\n params: { clusterPlanId: string }\n body: { actor: ApprovalM2mActor }\n}\n\n/** What console answers for a customer cluster plan call. */\nexport interface CustomerClusterPlanThroughApprovalResult {\n clusterPlanId: string\n}\n\nexport class ConsoleApprovalsM2MService {\n public static async moveClusterOwner(\n params: MoveClusterOwnerThroughApprovalRequest,\n ): Promise<MoveClusterOwnerResult> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'ConsoleApprovalsM2MService.moveClusterOwner',\n url: `api/admin/approvals/clusters/${params.params.clusterId}/owner`,\n normalizedUrl: 'api/admin/approvals/clusters/:clusterId/owner',\n type: 'put',\n },\n source: params.config.metrics?.source || 'unset',\n target: { name: 'console', type: 'internal' },\n }\n\n const response = await request<MoveClusterOwnerResult>({\n config: params.config,\n base: { id: 'console' },\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n responseType: 'json',\n body: params.body,\n })\n\n if (!response.ok) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n\n // This route is new, so there is no older backend that answers 204 with no\n // body for the same-owner case. `ConsoleClusterService.moveClusterOwner`\n // carries that case, and this one does not need it.\n return response.body!\n }\n\n /**\n * Changes the plan type and the hardware packages of one cluster.\n *\n * Console checks the reservations of the organization, and it moves the\n * cluster plan to the active plan of the new type when that plan is\n * migratable from the plan of the cluster. It answers 409 when one of the\n * `expected\u2026` fields of the body differs at the run: the plan type, the\n * hardware packages, the cluster plan or the active modification config\n * of the cluster, or the active plan of the new type. A cluster that runs\n * no plan and a type that has no active plan meet that guard too, because\n * both fields of the body are required. It answers 400 when the request\n * changes nothing, when the new type is retired, when its active plan is\n * neither the plan of the cluster nor migratable from it, or when the\n * organization has no free reservation.\n */\n public static async changeClusterPlanType(\n params: ChangeClusterPlanTypeThroughApprovalRequest,\n ): Promise<ChangeClusterPlanTypeResult> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'ConsoleApprovalsM2MService.changeClusterPlanType',\n url: `api/admin/approvals/clusters/${params.params.clusterId}/plan-type`,\n normalizedUrl: 'api/admin/approvals/clusters/:clusterId/plan-type',\n type: 'patch',\n },\n source: params.config.metrics?.source || 'unset',\n target: { name: 'console', type: 'internal' },\n }\n\n const response = await request<ChangeClusterPlanTypeResult>({\n config: params.config,\n base: { id: 'console' },\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n responseType: 'json',\n body: params.body,\n })\n\n if (!response.ok || !response.body) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n return response.body\n }\n\n /**\n * Runs one step of a cluster bulk operation on one cluster.\n *\n * Every outcome of the STEP answers 200, including a cluster that refused.\n * A thrown `HttpError` says that the CALL failed, and the caller then\n * leaves the cluster to run again.\n */\n public static async runClusterBulkStep(\n params: RunClusterBulkStepThroughApprovalRequest,\n ): Promise<ClusterBulkStepResultDto> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'ConsoleApprovalsM2MService.runClusterBulkStep',\n url: `api/admin/approvals/clusters/${params.params.clusterId}/bulk-step`,\n normalizedUrl: 'api/admin/approvals/clusters/:clusterId/bulk-step',\n type: 'post',\n },\n source: params.config.metrics?.source || 'unset',\n target: { name: 'console', type: 'internal' },\n }\n\n const response = await request<ClusterBulkStepResultDto>({\n config: params.config,\n base: { id: 'console' },\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n responseType: 'json',\n body: params.body,\n })\n\n if (!response.ok || !response.body) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n return response.body\n }\n\n /**\n * Posts the Slack message that ends an approved bulk plan update. The bulk\n * operation of console-backend posts the same message after its run.\n */\n public static async announceClusterBulkPlanUpdate(\n params: AnnounceClusterBulkPlanUpdateRequest,\n ): Promise<void> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'ConsoleApprovalsM2MService.announceClusterBulkPlanUpdate',\n url: 'api/admin/approvals/cluster-bulk/plan-update-announcement',\n normalizedUrl:\n 'api/admin/approvals/cluster-bulk/plan-update-announcement',\n type: 'post',\n },\n source: params.config.metrics?.source || 'unset',\n target: { name: 'console', type: 'internal' },\n }\n\n const response = await request<void>({\n config: params.config,\n base: { id: 'console' },\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n responseType: 'none',\n body: params.body,\n })\n\n if (!response.ok) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n }\n\n /** Deletes an internal (incident) backup of a cluster. It cannot be undone. */\n public static async deleteInternalBackup(\n params: DeleteInternalBackupThroughApprovalRequest,\n ): Promise<BackupDto> {\n const { clusterId, backupName } = params.params\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'ConsoleApprovalsM2MService.deleteInternalBackup',\n url: `api/admin/approvals/clusters/${clusterId}/internal-backups/${encodeURIComponent(backupName)}`,\n normalizedUrl:\n 'api/admin/approvals/clusters/:clusterId/internal-backups/:backupName',\n type: 'delete',\n },\n source: params.config.metrics?.source || 'unset',\n target: { name: 'console', type: 'internal' },\n }\n\n const response = await request<BackupDto>({\n config: params.config,\n base: { id: 'console' },\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n responseType: 'json',\n body: params.body,\n })\n\n if (!response.ok) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n return response.body!\n }\n\n /** Creates a cluster plan for a Camundi, with the uuid that the caller gives. */\n public static async createCustomerClusterPlan(\n params: CreateCustomerClusterPlanThroughApprovalRequest,\n ): Promise<CustomerClusterPlanThroughApprovalResult> {\n return ConsoleApprovalsM2MService.callClusterPlan({\n config: params.config,\n name: 'ConsoleApprovalsM2MService.createCustomerClusterPlan',\n url: 'api/admin/approvals/cluster-plans',\n normalizedUrl: 'api/admin/approvals/cluster-plans',\n type: 'post',\n body: params.body,\n })\n }\n\n /**\n * Asks whether a Camundi may remove a plan. Console answers 403 for a plan\n * of another person, and 409 for a plan that a cluster uses.\n */\n public static async checkCustomerClusterPlanRemoval(\n params: CheckCustomerClusterPlanRemovalRequest,\n ): Promise<CustomerClusterPlanThroughApprovalResult> {\n const { clusterPlanId } = params.params\n return ConsoleApprovalsM2MService.callClusterPlan({\n config: params.config,\n name: 'ConsoleApprovalsM2MService.checkCustomerClusterPlanRemoval',\n url: `api/admin/approvals/cluster-plans/${clusterPlanId}/removal-check`,\n normalizedUrl:\n 'api/admin/approvals/cluster-plans/:clusterPlanId/removal-check',\n type: 'post',\n body: params.body,\n })\n }\n\n /** Deletes a cluster plan that the Camundi created. It cannot be undone. */\n public static async deleteCustomerClusterPlan(\n params: DeleteCustomerClusterPlanThroughApprovalRequest,\n ): Promise<CustomerClusterPlanThroughApprovalResult> {\n const { clusterPlanId } = params.params\n return ConsoleApprovalsM2MService.callClusterPlan({\n config: params.config,\n name: 'ConsoleApprovalsM2MService.deleteCustomerClusterPlan',\n url: `api/admin/approvals/cluster-plans/${clusterPlanId}`,\n normalizedUrl: 'api/admin/approvals/cluster-plans/:clusterPlanId',\n type: 'delete',\n body: params.body,\n })\n }\n\n private static async callClusterPlan(args: {\n config: RequestBaseParams['config']\n name: string\n url: string\n normalizedUrl: string\n type: 'post' | 'delete'\n body: unknown\n }): Promise<CustomerClusterPlanThroughApprovalResult> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: args.name,\n url: args.url,\n normalizedUrl: args.normalizedUrl,\n type: args.type,\n },\n source: args.config.metrics?.source || 'unset',\n target: { name: 'console', type: 'internal' },\n }\n\n const response = await request<CustomerClusterPlanThroughApprovalResult>({\n config: args.config,\n base: { id: 'console' },\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n responseType: 'json',\n body: args.body,\n })\n\n if (!response.ok) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n return response.body!\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a commercial license.\n * You may not use this file except in compliance with the commercial license.\n */\n\nimport type {\n ApprovalM2mActor,\n BackupDto,\n ChangeClusterPlanTypeResult,\n ClusterBulkStepRequestDto,\n ClusterBulkStepResultDto,\n MoveClusterOwnerResult,\n} from '@camunda/ccma-shared-types'\nimport type {\n RequestBaseParams,\n RequestBaseServiceContext,\n} from '../../types/general.types.js'\nimport { request } from '../../utils/api.js'\nimport { HttpError } from '../../utils/errors.js'\n\n/**\n * The route of `api/admin/approvals` in console-backend.\n *\n * The twin of `AccountsApprovalsM2MService`. Read the note there.\n */\n\nexport interface MoveClusterOwnerThroughApprovalRequest\n extends RequestBaseParams {\n params: { clusterId: string }\n body: {\n actor: ApprovalM2mActor\n ownerId: string\n }\n}\n\nexport interface ChangeClusterPlanTypeThroughApprovalRequest\n extends RequestBaseParams {\n params: { clusterId: string }\n body: {\n actor: ApprovalM2mActor\n /** The organization that owns the cluster. Console refuses another one. */\n orgId: string\n toPlanTypeUuid: string\n numberOfAllocatedHwPackages: number\n /**\n * The plan type that the person who asked READ. Console compares it with\n * the plan type of the cluster when the action runs, and changes nothing\n * when the two differ.\n */\n expectedPlanTypeUuid: string\n /** The packages the person READ, 1 for a cluster that holds none. */\n expectedNumberOfAllocatedHwPackages: number\n /** The plan the cluster ran when the person read it. */\n expectedClusterPlanUuid: string\n /** The active modification config the person read, absent for none. */\n expectedActiveModificationConfigUuid?: string\n /** The active plan of the new plan type the person read. */\n expectedTargetPlanUuid: string\n /** Whether the cluster plan moves to that plan, as the person read it. */\n expectedClusterPlanUpdate: boolean\n }\n}\n\nexport interface RunClusterBulkStepThroughApprovalRequest\n extends RequestBaseParams {\n params: { clusterId: string }\n body: ClusterBulkStepRequestDto & { actor: ApprovalM2mActor }\n}\n\nexport interface AnnounceClusterBulkPlanUpdateRequest\n extends RequestBaseParams {\n body: {\n actor: ApprovalM2mActor\n toPlanUuid: string\n doneCount: number\n }\n}\n\nexport interface DeleteInternalBackupThroughApprovalRequest\n extends RequestBaseParams {\n params: { clusterId: string; backupName: string }\n body: { actor: ApprovalM2mActor }\n}\n\nexport interface CreateCustomClusterPlanThroughApprovalRequest\n extends RequestBaseParams {\n body: {\n actor: ApprovalM2mActor\n clusterPlanId: string\n name: string\n plan: Record<string, unknown>\n }\n}\n\nexport interface CheckCustomClusterPlanRemovalRequest\n extends RequestBaseParams {\n params: { clusterPlanId: string }\n body: { actor: ApprovalM2mActor; forDelete: boolean }\n}\n\nexport interface DeleteCustomClusterPlanThroughApprovalRequest\n extends RequestBaseParams {\n params: { clusterPlanId: string }\n body: { actor: ApprovalM2mActor }\n}\n\n/** What console answers for a custom cluster plan call. */\nexport interface CustomClusterPlanThroughApprovalResult {\n clusterPlanId: string\n}\n\nexport class ConsoleApprovalsM2MService {\n public static async moveClusterOwner(\n params: MoveClusterOwnerThroughApprovalRequest,\n ): Promise<MoveClusterOwnerResult> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'ConsoleApprovalsM2MService.moveClusterOwner',\n url: `api/admin/approvals/clusters/${params.params.clusterId}/owner`,\n normalizedUrl: 'api/admin/approvals/clusters/:clusterId/owner',\n type: 'put',\n },\n source: params.config.metrics?.source || 'unset',\n target: { name: 'console', type: 'internal' },\n }\n\n const response = await request<MoveClusterOwnerResult>({\n config: params.config,\n base: { id: 'console' },\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n responseType: 'json',\n body: params.body,\n })\n\n if (!response.ok) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n\n // This route is new, so there is no older backend that answers 204 with no\n // body for the same-owner case. `ConsoleClusterService.moveClusterOwner`\n // carries that case, and this one does not need it.\n return response.body!\n }\n\n /**\n * Changes the plan type and the hardware packages of one cluster.\n *\n * Console checks the reservations of the organization, and it moves the\n * cluster plan to the active plan of the new type when that plan is\n * migratable from the plan of the cluster. It answers 409 when one of the\n * `expected\u2026` fields of the body differs at the run: the plan type, the\n * hardware packages, the cluster plan or the active modification config\n * of the cluster, or the active plan of the new type. A cluster that runs\n * no plan and a type that has no active plan meet that guard too, because\n * both fields of the body are required. It answers 400 when the request\n * changes nothing, when the new type is retired, when its active plan is\n * neither the plan of the cluster nor migratable from it, or when the\n * organization has no free reservation.\n */\n public static async changeClusterPlanType(\n params: ChangeClusterPlanTypeThroughApprovalRequest,\n ): Promise<ChangeClusterPlanTypeResult> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'ConsoleApprovalsM2MService.changeClusterPlanType',\n url: `api/admin/approvals/clusters/${params.params.clusterId}/plan-type`,\n normalizedUrl: 'api/admin/approvals/clusters/:clusterId/plan-type',\n type: 'patch',\n },\n source: params.config.metrics?.source || 'unset',\n target: { name: 'console', type: 'internal' },\n }\n\n const response = await request<ChangeClusterPlanTypeResult>({\n config: params.config,\n base: { id: 'console' },\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n responseType: 'json',\n body: params.body,\n })\n\n if (!response.ok || !response.body) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n return response.body\n }\n\n /**\n * Runs one step of a cluster bulk operation on one cluster.\n *\n * Every outcome of the STEP answers 200, including a cluster that refused.\n * A thrown `HttpError` says that the CALL failed, and the caller then\n * leaves the cluster to run again.\n */\n public static async runClusterBulkStep(\n params: RunClusterBulkStepThroughApprovalRequest,\n ): Promise<ClusterBulkStepResultDto> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'ConsoleApprovalsM2MService.runClusterBulkStep',\n url: `api/admin/approvals/clusters/${params.params.clusterId}/bulk-step`,\n normalizedUrl: 'api/admin/approvals/clusters/:clusterId/bulk-step',\n type: 'post',\n },\n source: params.config.metrics?.source || 'unset',\n target: { name: 'console', type: 'internal' },\n }\n\n const response = await request<ClusterBulkStepResultDto>({\n config: params.config,\n base: { id: 'console' },\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n responseType: 'json',\n body: params.body,\n })\n\n if (!response.ok || !response.body) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n return response.body\n }\n\n /**\n * Posts the Slack message that ends an approved bulk plan update. The bulk\n * operation of console-backend posts the same message after its run.\n */\n public static async announceClusterBulkPlanUpdate(\n params: AnnounceClusterBulkPlanUpdateRequest,\n ): Promise<void> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'ConsoleApprovalsM2MService.announceClusterBulkPlanUpdate',\n url: 'api/admin/approvals/cluster-bulk/plan-update-announcement',\n normalizedUrl:\n 'api/admin/approvals/cluster-bulk/plan-update-announcement',\n type: 'post',\n },\n source: params.config.metrics?.source || 'unset',\n target: { name: 'console', type: 'internal' },\n }\n\n const response = await request<void>({\n config: params.config,\n base: { id: 'console' },\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n responseType: 'none',\n body: params.body,\n })\n\n if (!response.ok) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n }\n\n /** Deletes an internal (incident) backup of a cluster. It cannot be undone. */\n public static async deleteInternalBackup(\n params: DeleteInternalBackupThroughApprovalRequest,\n ): Promise<BackupDto> {\n const { clusterId, backupName } = params.params\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'ConsoleApprovalsM2MService.deleteInternalBackup',\n url: `api/admin/approvals/clusters/${clusterId}/internal-backups/${encodeURIComponent(backupName)}`,\n normalizedUrl:\n 'api/admin/approvals/clusters/:clusterId/internal-backups/:backupName',\n type: 'delete',\n },\n source: params.config.metrics?.source || 'unset',\n target: { name: 'console', type: 'internal' },\n }\n\n const response = await request<BackupDto>({\n config: params.config,\n base: { id: 'console' },\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n responseType: 'json',\n body: params.body,\n })\n\n if (!response.ok) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n return response.body!\n }\n\n /** Creates a cluster plan for a Camundi, with the uuid that the caller gives. */\n public static async createCustomClusterPlan(\n params: CreateCustomClusterPlanThroughApprovalRequest,\n ): Promise<CustomClusterPlanThroughApprovalResult> {\n return ConsoleApprovalsM2MService.callClusterPlan({\n config: params.config,\n name: 'ConsoleApprovalsM2MService.createCustomClusterPlan',\n url: 'api/admin/approvals/cluster-plans',\n normalizedUrl: 'api/admin/approvals/cluster-plans',\n type: 'post',\n body: params.body,\n })\n }\n\n /**\n * Asks whether a Camundi may remove a plan. Console answers 403 for a plan\n * of another person, and 409 for a plan that a cluster uses.\n */\n public static async checkCustomClusterPlanRemoval(\n params: CheckCustomClusterPlanRemovalRequest,\n ): Promise<CustomClusterPlanThroughApprovalResult> {\n const { clusterPlanId } = params.params\n return ConsoleApprovalsM2MService.callClusterPlan({\n config: params.config,\n name: 'ConsoleApprovalsM2MService.checkCustomClusterPlanRemoval',\n url: `api/admin/approvals/cluster-plans/${clusterPlanId}/removal-check`,\n normalizedUrl:\n 'api/admin/approvals/cluster-plans/:clusterPlanId/removal-check',\n type: 'post',\n body: params.body,\n })\n }\n\n /** Deletes a cluster plan that the Camundi created. It cannot be undone. */\n public static async deleteCustomClusterPlan(\n params: DeleteCustomClusterPlanThroughApprovalRequest,\n ): Promise<CustomClusterPlanThroughApprovalResult> {\n const { clusterPlanId } = params.params\n return ConsoleApprovalsM2MService.callClusterPlan({\n config: params.config,\n name: 'ConsoleApprovalsM2MService.deleteCustomClusterPlan',\n url: `api/admin/approvals/cluster-plans/${clusterPlanId}`,\n normalizedUrl: 'api/admin/approvals/cluster-plans/:clusterPlanId',\n type: 'delete',\n body: params.body,\n })\n }\n\n private static async callClusterPlan(args: {\n config: RequestBaseParams['config']\n name: string\n url: string\n normalizedUrl: string\n type: 'post' | 'delete'\n body: unknown\n }): Promise<CustomClusterPlanThroughApprovalResult> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: args.name,\n url: args.url,\n normalizedUrl: args.normalizedUrl,\n type: args.type,\n },\n source: args.config.metrics?.source || 'unset',\n target: { name: 'console', type: 'internal' },\n }\n\n const response = await request<CustomClusterPlanThroughApprovalResult>({\n config: args.config,\n base: { id: 'console' },\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n responseType: 'json',\n body: args.body,\n })\n\n if (!response.ok) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n return response.body!\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -116,7 +116,7 @@ export interface CreatePersonalOrganisationRequest extends RequestBaseParams {
116
116
  reason?: string;
117
117
  };
118
118
  }
119
- export interface CreateCustomerHardwareSizingPayloadDto {
119
+ export interface CreateCustomHardwareSizingPayloadDto {
120
120
  /** The organization that gets the plan. The requester must own it. */
121
121
  orgId: string;
122
122
  /** 3 to 100 characters, after the spaces at both ends are cut. */
@@ -128,7 +128,7 @@ export interface CreateCustomerHardwareSizingPayloadDto {
128
128
  * `unlink` removes the plan from one organization that the requester owns.
129
129
  * `delete` removes it from every organization of the requester, and deletes it.
130
130
  */
131
- export type RemoveCustomerHardwareSizingPayloadDto = {
131
+ export type RemoveCustomHardwareSizingPayloadDto = {
132
132
  mode: 'unlink';
133
133
  clusterPlanId: string;
134
134
  orgId: string;
@@ -137,10 +137,10 @@ export type RemoveCustomerHardwareSizingPayloadDto = {
137
137
  clusterPlanId: string;
138
138
  };
139
139
  /**
140
- * The create call of a customer hardware sizing use case. Like
140
+ * The create call of a custom hardware sizing use case. Like
141
141
  * `CreatePersonalOrganisationRequest`, it has no `requiredAcks`.
142
142
  */
143
- export interface CustomerHardwareSizingRequest<TPayload> extends RequestBaseParams {
143
+ export interface CustomHardwareSizingRequest<TPayload> extends RequestBaseParams {
144
144
  params: {
145
145
  payload: TPayload;
146
146
  reason?: string;
@@ -668,13 +668,13 @@ export declare class ControlApprovalsService {
668
668
  */
669
669
  static createPersonalOrganisation(params: CreatePersonalOrganisationRequest): Promise<ApprovalJobDto>;
670
670
  /**
671
- * Opens a create-customer-hardware-sizing request. Any signed-in Camundi
671
+ * Opens a create-custom-hardware-sizing request. Any signed-in Camundi
672
672
  * can. It runs on dev only, needs no approval, and the route answers 403
673
673
  * on every other stage.
674
674
  */
675
- static createCustomerHardwareSizing(params: CustomerHardwareSizingRequest<CreateCustomerHardwareSizingPayloadDto>): Promise<ApprovalJobDto>;
676
- /** Opens a remove-customer-hardware-sizing request. See the one above. */
677
- static removeCustomerHardwareSizing(params: CustomerHardwareSizingRequest<RemoveCustomerHardwareSizingPayloadDto>): Promise<ApprovalJobDto>;
675
+ static createCustomHardwareSizing(params: CustomHardwareSizingRequest<CreateCustomHardwareSizingPayloadDto>): Promise<ApprovalJobDto>;
676
+ /** Opens a remove-custom-hardware-sizing request. See the one above. */
677
+ static removeCustomHardwareSizing(params: CustomHardwareSizingRequest<RemoveCustomHardwareSizingPayloadDto>): Promise<ApprovalJobDto>;
678
678
  /**
679
679
  * The shared half of every call that answers one request.
680
680
  *
@@ -436,24 +436,24 @@ class ControlApprovalsService {
436
436
  return approval;
437
437
  }
438
438
  /**
439
- * Opens a create-customer-hardware-sizing request. Any signed-in Camundi
439
+ * Opens a create-custom-hardware-sizing request. Any signed-in Camundi
440
440
  * can. It runs on dev only, needs no approval, and the route answers 403
441
441
  * on every other stage.
442
442
  */
443
- static async createCustomerHardwareSizing(params) {
443
+ static async createCustomHardwareSizing(params) {
444
444
  const { approval } = await ControlApprovalsService.create(
445
445
  params,
446
- "createCustomerHardwareSizing",
447
- "api/approvals/create-customer-hardware-sizing"
446
+ "createCustomHardwareSizing",
447
+ "api/approvals/create-custom-hardware-sizing"
448
448
  );
449
449
  return approval;
450
450
  }
451
- /** Opens a remove-customer-hardware-sizing request. See the one above. */
452
- static async removeCustomerHardwareSizing(params) {
451
+ /** Opens a remove-custom-hardware-sizing request. See the one above. */
452
+ static async removeCustomHardwareSizing(params) {
453
453
  const { approval } = await ControlApprovalsService.create(
454
454
  params,
455
- "removeCustomerHardwareSizing",
456
- "api/approvals/remove-customer-hardware-sizing"
455
+ "removeCustomHardwareSizing",
456
+ "api/approvals/remove-custom-hardware-sizing"
457
457
  );
458
458
  return approval;
459
459
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/services/control/control.approvals.service.ts"],
4
- "sourcesContent": ["/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a commercial license.\n * You may not use this file except in compliance with the commercial license.\n */\n\nimport type {\n ApprovalEntityType,\n ApprovalJobDto,\n ApprovalJobStatus,\n ApprovalSortField,\n ApprovalSortOrder,\n ApprovalStatusCountsDto,\n ApprovalUseCaseDto,\n ClusterBulkOperationPayloadDto,\n ClusterBulkOperationType,\n EnterpriseIncludingValueMetrics,\n LicensingModelType,\n} from '@camunda/ccma-shared-types'\nimport { CLUSTER_BULK_OPERATION_RULES } from '@camunda/ccma-shared-types'\nimport type {\n RequestBaseParams,\n RequestBaseServiceContext,\n} from '../../types/general.types.js'\nimport { request } from '../../utils/api.js'\nimport { HttpError } from '../../utils/errors.js'\n\n/**\n * The four-eyes approval surface of control-backend.\n *\n * One service for the whole mechanism, and not one for each use case. The\n * generic routes (list, read, approve, reject, withdraw, run) carry no\n * knowledge of a use case, which is what lets one view in control-frontend\n * show every privileged action. Only the create calls are per use case,\n * because a payload can be validated only for the use case it belongs to.\n *\n * A use case that walks its own rollout behind a flag answers 404 on its\n * create route while that flag is off.\n */\n\nconst BASE = { id: 'control' } as const\n\nexport interface ApprovalPageDto {\n approvals: ApprovalJobDto[]\n page: {\n limit: number\n offset: number\n /** True when the next page holds more. Never read the length instead. */\n hasMore: boolean\n }\n}\n\n/**\n * What narrows the queue. The list and the counts read the same fields.\n *\n * `entityType` and `entityId` are ONE filter, not two. control-backend answers\n * 400 for one without the other, so the type carries both or neither.\n */\nexport type ApprovalFacetParams = {\n type?: string\n /**\n * One organization, matched whole against `orgId` of the payload.\n *\n * It reads only the payload, so `entityType`/`entityId` is wider. That filter\n * reads the entity link, so it finds a request that touches the organization\n * through another field. The organization page of control-frontend asks the\n * entity-link filter, not this one. `orgId` is also not `q`: the free text\n * reads the whole payload as text.\n */\n orgId?: string\n /**\n * Free text. control-backend matches it in the reason, the person who\n * opened the request, the action and its label, and the payload that the\n * summary shows.\n */\n q?: string\n /**\n * The queue of one person: what they opened, or what waits for them.\n *\n * `actionable` is the rule of the Approve button asked in SQL \u2014 pending,\n * opened by somebody else, not approved by this person yet, and guarded by\n * permissions that they hold.\n */\n mine?: 'created' | 'actionable'\n} & (\n | {\n /**\n * The kind of entity a request must touch. Read with `entityId`.\n *\n * It reads the entity link of control-backend, so it is wider and truer\n * than `orgId`: a cluster-move request answers for its source\n * organization, its target organization AND the cluster. The organization\n * and cluster detail pages of control-frontend ask this.\n */\n entityType: ApprovalEntityType\n /** The id of the entity a request must touch. Read with `entityType`. */\n entityId: string\n }\n | { entityType?: never; entityId?: never }\n)\n\nexport interface ListApprovalsRequest extends RequestBaseParams {\n params?: ApprovalFacetParams & {\n status?: ApprovalJobStatus\n sort?: ApprovalSortField\n order?: ApprovalSortOrder\n limit?: number\n offset?: number\n }\n}\n\nexport interface CountApprovalsRequest extends RequestBaseParams {\n params?: ApprovalFacetParams\n}\n\nexport interface ApprovalIdRequest extends RequestBaseParams {\n params: { id: string }\n}\n\nexport interface RejectApprovalRequest extends RequestBaseParams {\n params: { id: string; reason: string }\n}\n\n/** A withdrawal says why, or says nothing. The reason is not demanded. */\nexport interface WithdrawApprovalRequest extends RequestBaseParams {\n params: { id: string; reason?: string }\n}\n\n/** The envelope that every create route of every use case shares. */\nexport interface CreateApprovalRequest<TPayload> extends RequestBaseParams {\n params: {\n payload: TPayload\n reason?: string\n /** More approvals than the floor of the use case. Never fewer. */\n requiredAcks?: number\n }\n}\n\nexport interface SendToExpiredTrialPayloadDto {\n orgId: string\n orgName?: string\n}\n\nexport interface CreatePersonalOrganisationPayloadDto {\n /** 3 to 100 characters, after the spaces at both ends are cut. */\n name: string\n}\n\n/**\n * The create call of `create-personal-organisation`.\n *\n * It has no `requiredAcks`: the request needs no approval, and the route\n * answers 400 to a body that names the field.\n */\nexport interface CreatePersonalOrganisationRequest extends RequestBaseParams {\n params: {\n payload: CreatePersonalOrganisationPayloadDto\n reason?: string\n }\n}\n\nexport interface CreateCustomerHardwareSizingPayloadDto {\n /** The organization that gets the plan. The requester must own it. */\n orgId: string\n /** 3 to 100 characters, after the spaces at both ends are cut. */\n name: string\n /** The cluster plan, in the same format as the plan route of the admin tool. */\n plan: Record<string, unknown>\n}\n\n/**\n * `unlink` removes the plan from one organization that the requester owns.\n * `delete` removes it from every organization of the requester, and deletes it.\n */\nexport type RemoveCustomerHardwareSizingPayloadDto =\n | { mode: 'unlink'; clusterPlanId: string; orgId: string }\n | { mode: 'delete'; clusterPlanId: string }\n\n/**\n * The create call of a customer hardware sizing use case. Like\n * `CreatePersonalOrganisationRequest`, it has no `requiredAcks`.\n */\nexport interface CustomerHardwareSizingRequest<TPayload>\n extends RequestBaseParams {\n params: {\n payload: TPayload\n reason?: string\n }\n}\n\nexport interface ExtendTrialPayloadDto {\n orgId: string\n orgName?: string\n /**\n * Days of trial counted from the moment the action RUNS.\n *\n * Never a date. Accounts holds the new expiry inside a window that it\n * measures when the call arrives, and under approvals that is days after the\n * person chose the value. See `use-cases/extend-trial.ts` in\n * control-backend.\n */\n days: number\n}\n\nexport interface MoveClusterOrgPayloadDto {\n clusterId: string\n /** A copy, so a list shows a name that a person knows. Nothing reads it. */\n clusterName?: string\n targetOrgId: string\n /** A copy, for the same reason as `clusterName`. */\n targetOrgName?: string\n // The SOURCE organization is not here on purpose. control-backend resolves it\n // server-side from the cluster's current owner, so a caller cannot attach the\n // request to an organization the cluster never belonged to.\n}\n\nexport interface ChangePlatformRolesPayloadDto {\n userId: string\n /** A copy, so a list shows a person and not an Auth0 id. Nothing reads it. */\n userEmail?: string\n /**\n * A CHANGE, and never the whole set. Accounts applies it over the roles that\n * the user holds when the action RUNS, so a role change that somebody else\n * made while the request waited stays.\n */\n rolesToAdd: string[]\n rolesToRemove: string[]\n}\n\nexport interface ChangeOrgLimitsPayloadDto {\n orgId: string\n /** A copy, so a list shows a name that a person knows. Nothing reads it. */\n orgName?: string\n /** One key of `allSalesPlanLimits()`. One limit for each request. */\n limitKey: string\n /**\n * The override that the person who asked READ. Absent for \"not set\".\n *\n * Accounts compares it with the override that it holds when the action\n * runs, and writes nothing when the two differ. See `staleApprovalKeys`.\n */\n expected?: string | number | boolean\n /** The new override. `null` clears it, and the default of the plan applies. */\n value: string | number | boolean | null\n}\n\n/** One cluster of the organization and the plan type it moves to. */\nexport interface OnboardToEnterpriseClusterDto {\n clusterId: string\n /** A copy, so the approver reads a name. Nothing reads it. */\n clusterName?: string\n planTypeId: string\n /** A copy of the name of the plan type, for the approver to read. */\n planTypeName?: string\n numberOfAllocatedHwPackages?: number\n keepModification: boolean\n}\n\nexport interface OnboardToEnterprisePayloadDto {\n orgId: string\n /** A copy, so a list shows a name that a person knows. Nothing reads it. */\n orgName?: string\n salesPlanId: string\n /** A copy of the name of the new plan, for the approver to read. */\n salesPlanName?: string\n /**\n * The plan that the person who asked READ. Accounts compares it with the\n * plan that it holds when the action runs, and switches nothing when the\n * two differ. An organization with no plan cannot be onboarded this way.\n */\n expectedSalesPlanId: string\n expectedSalesPlanName?: string\n contract: {\n /** The renewal term, in months. */\n duration: number\n includedValueMetrics: EnterpriseIncludingValueMetrics\n /** `YYYY-MM-DD`. */\n enterPriseStartDate: string\n enterpriseDevOnly: boolean\n awsOnly: boolean\n licensingModel: LicensingModelType\n salesForceId?: string\n }\n /** One entry for each cluster of the organization. Empty for none. */\n clusters: OnboardToEnterpriseClusterDto[]\n /** The reservations after the switch, by plan type uuid. */\n reservations: Record<string, number>\n /** The names of the plan types of `reservations`, for the approver. */\n reservationNames?: Record<string, string>\n}\n\nexport interface ChangeClusterPlanTypePayloadDto {\n clusterId: string\n /** A copy, so a list shows a name that a person knows. Nothing reads it. */\n clusterName?: string\n /** The organization that owns the cluster. Console refuses another one. */\n orgId: string\n /** A copy, for the same reason as `clusterName`. */\n orgName?: string\n toPlanTypeUuid: string\n /** A copy of the name of the new plan type, for the approver to read. */\n toPlanTypeName?: string\n /**\n * The hardware packages of the cluster after the change, 1 at least.\n *\n * Always sent, also for a plan type with no availability class, where it is\n * 1. Console checks the reservations of the organization only when the\n * packages are in the call, and the check is the point of this use case.\n */\n numberOfAllocatedHwPackages: number\n /**\n * The plan type that the person who asked READ.\n *\n * Console compares it with the plan type of the cluster when the action\n * runs, and changes nothing when the two differ.\n */\n expectedPlanTypeUuid: string\n /** A copy of the name of the current plan type, for the approver to read. */\n expectedPlanTypeName?: string\n /**\n * The hardware packages that the person who asked READ, 1 for a cluster\n * that holds none. The same stale guard as `expectedPlanTypeUuid`.\n */\n expectedNumberOfAllocatedHwPackages: number\n /**\n * The cluster plan that the person who asked READ. Console decides the\n * plan move from it, so it is part of the stale guard too, and Console\n * refuses a cluster that runs none, so a request needs one.\n */\n expectedClusterPlanUuid: string\n /** A copy of the name of that plan, for the approver to read. */\n expectedClusterPlanName?: string\n /**\n * The active modification config that the person who asked READ, absent\n * when the cluster has none. The change removes it, and an approver must\n * read which one goes.\n */\n expectedActiveModificationConfigUuid?: string\n /**\n * The active plan of the NEW plan type that the person who asked READ. The\n * cluster moves to it, so a plan that a Camundi changed on the type while\n * the request waited fails the guard, and Console refuses a type that has\n * none, so a request needs one.\n */\n expectedTargetPlanUuid: string\n /** A copy of the name of that plan, for the approver to read. */\n expectedTargetPlanName?: string\n /**\n * Whether the cluster plan moves to the active plan of the new type, as\n * the dialog read it. The list of migratable plans can change while the\n * request waits, and a verdict that moved changes whether the cluster\n * restarts, so Console refuses a request whose verdict moved.\n */\n expectedClusterPlanUpdate: boolean\n}\n\nexport interface ChangeSalesPlanPayloadDto {\n orgId: string\n /** A copy, so a list shows a name that a person knows. Nothing reads it. */\n orgName?: string\n salesPlanId: string\n /** A copy of the name of the new plan, for the approver to read. */\n salesPlanName?: string\n /**\n * The plan that the person who asked READ. Absent for \"no plan\".\n *\n * Accounts compares it with the plan that it holds when the action runs,\n * and switches nothing when the two differ.\n */\n expectedSalesPlanId?: string\n /** A copy of the name of the current plan, for the approver to read. */\n expectedSalesPlanName?: string\n /** Skips the validation of the switch. The approver sees it. */\n force: boolean\n}\n\n/** Every value of a flag row that a person can change. */\nexport interface FeatureFlagValuesDto {\n description: string\n enabled: boolean\n orgIds: string[]\n emailDomains: string[]\n /** The team that owns the flag. A create needs it. An older row has none. */\n owner?: string\n /** `YYYY-MM-DD`, the day after which the flag is late. */\n expiresAt?: string\n /**\n * The issue that tracks the flag. A create and an edit need it. An older\n * row has none.\n */\n issueUrl?: string\n}\n\n/**\n * One change of the feature flag table: the action, and the whole row that it\n * asks for.\n *\n * An edit and a delete carry the row that the person who asked READ, as\n * `expected`. The action writes nothing when the row changed in the meantime.\n * `key` of an edit and a delete is a copy for the approver, and the action\n * compares it too.\n */\nexport type ChangeFeatureFlagPayloadDto =\n | {\n action: 'create'\n key: string\n value: FeatureFlagValuesDto & { owner: string; issueUrl: string }\n }\n | {\n action: 'update'\n id: string\n key: string\n expected: FeatureFlagValuesDto\n value: FeatureFlagValuesDto & { issueUrl: string }\n }\n | {\n action: 'delete'\n id: string\n key: string\n expected: FeatureFlagValuesDto\n }\n\nexport interface DeleteSsoConnectionPayloadDto {\n strategy: 'waad' | 'samlp'\n connectionId: string\n /** A copy, so a list shows a name that a person knows. Nothing reads it. */\n connectionName?: string\n /**\n * The organizations that the connection serves, as copies for the approver.\n * The request is findable on the page of each one.\n */\n orgIds?: string[]\n}\n\nexport interface DeleteOrganizationPayloadDto {\n orgId: string\n /**\n * The name that the approvers read. Accounts refuses the deletion when the\n * organization has another name when the action runs.\n */\n orgName: string\n}\n\nexport interface DeleteUserPayloadDto {\n userId: string\n /**\n * The address that the approvers read. Accounts refuses the deletion when\n * the user has another address when the action runs.\n */\n userEmail: string\n}\n\nexport interface ChangeUserEmailPayloadDto {\n userId: string\n /**\n * The address that the person who asked READ. Accounts compares it with\n * the address that the user has when the action runs, and changes nothing\n * when the two differ.\n */\n expectedEmail: string\n newEmail: string\n}\n\nexport interface PurgeUsersPayloadDto {\n /**\n * The users to delete, at most `PURGE_USERS_MAX_USERS`. The address is a\n * copy for the approver, and accounts refuses a user whose address is not\n * that copy. A list that came from a file of ids carries none.\n */\n users: { userId: string; email?: string }[]\n}\n\nexport interface UpdateUserMetadataPayloadDto {\n userId: string\n /** A copy, so a list shows a person and not an Auth0 id. Nothing reads it. */\n userEmail?: string\n /** `app` writes `app_metadata`, `user` writes `user_metadata`. */\n kind: 'app' | 'user'\n /**\n * The metadata that the person who asked READ. Absent for \"not set\".\n * Accounts writes nothing when it holds another value when the action runs.\n */\n expected?: Record<string, unknown>\n metadata: Record<string, unknown>\n}\n\nexport interface DeleteInternalBackupPayloadDto {\n clusterId: string\n /** A copy, so a list shows a name that a person knows. Nothing reads it. */\n clusterName?: string\n backupName: string\n /** A copy of the Slack link of the incident, for the approver to read. */\n incidentLink?: string\n}\n\n/**\n * The query string of a read, with the fields that carry no value dropped.\n *\n * An empty value is not the same as an absent one: `q=` would reach the schema\n * of control-backend, which holds the text at one character and answers 400.\n */\nfunction querySuffix(params: object = {}): string {\n const query = new URLSearchParams()\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined && value !== '') {\n query.set(key, String(value))\n }\n }\n return query.size > 0 ? `?${query.toString()}` : ''\n}\n\nfunction contextFor(\n name: string,\n url: string,\n normalizedUrl: string,\n type: 'get' | 'post',\n source: string,\n): RequestBaseServiceContext {\n return {\n method: {\n name: `ControlApprovalsService.${name}`,\n url,\n normalizedUrl,\n type,\n },\n source,\n target: { name: 'control', type: 'internal' },\n }\n}\n\nexport class ControlApprovalsService {\n /**\n * The registered privileged actions, with the rules that guard each one.\n *\n * A frontend reads this to run the same policy as the service, so it never\n * holds a copy of the registry. A new use case then needs no frontend\n * deploy.\n */\n public static async listUseCases(\n params: RequestBaseParams,\n ): Promise<ApprovalUseCaseDto[]> {\n const serviceContext = contextFor(\n 'listUseCases',\n 'api/approvals/use-cases',\n 'api/approvals/use-cases',\n 'get',\n params.config.metrics?.source || 'unset',\n )\n const response = await request<{ useCases: ApprovalUseCaseDto[] }>({\n config: params.config,\n base: BASE,\n url: serviceContext.method.url,\n method: 'get',\n metricsDetails: serviceContext,\n })\n if (!response.ok) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n return response.body!.useCases\n }\n\n /**\n * One page of the requests that the caller can read.\n *\n * It is not the whole table: control-backend hides a request whose use case\n * the caller cannot act on, unless the caller opened it.\n */\n public static async list(\n params: ListApprovalsRequest,\n ): Promise<ApprovalPageDto> {\n const suffix = querySuffix(params.params)\n const serviceContext = contextFor(\n 'list',\n `api/approvals${suffix}`,\n 'api/approvals',\n 'get',\n params.config.metrics?.source || 'unset',\n )\n const response = await request<ApprovalPageDto>({\n config: params.config,\n base: BASE,\n url: serviceContext.method.url,\n method: 'get',\n metricsDetails: serviceContext,\n })\n if (!response.ok) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n return response.body!\n }\n\n /**\n * How many requests each status holds, for the status filters of a queue.\n *\n * It is the same question as `list` without the status, so a filter that\n * shows a number never opens an empty page.\n */\n public static async counts(\n params: CountApprovalsRequest,\n ): Promise<ApprovalStatusCountsDto> {\n const suffix = querySuffix(params.params)\n const serviceContext = contextFor(\n 'counts',\n `api/approvals/counts${suffix}`,\n 'api/approvals/counts',\n 'get',\n params.config.metrics?.source || 'unset',\n )\n const response = await request<{ counts: ApprovalStatusCountsDto }>({\n config: params.config,\n base: BASE,\n url: serviceContext.method.url,\n method: 'get',\n metricsDetails: serviceContext,\n })\n if (!response.ok) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n return response.body!.counts\n }\n\n public static async get(params: ApprovalIdRequest): Promise<ApprovalJobDto> {\n return ControlApprovalsService.readOne(\n params,\n 'get',\n `api/approvals/${params.params.id}`,\n 'api/approvals/:id',\n 'get',\n )\n }\n\n /**\n * What a create route answers, plus whether it opened a NEW request.\n *\n * The route answers 201 for a fresh request and 200 for the one already\n * open for the same target \u2014 `create` deduplicates. A caller that must\n * tell the two apart (a floor-of-one use case, where 200 is the ordinary\n * path and not a failure) reads `created`.\n */\n public static async createMoveClusterOrg(\n params: CreateApprovalRequest<MoveClusterOrgPayloadDto>,\n ): Promise<{ approval: ApprovalJobDto; created: boolean }> {\n return ControlApprovalsService.create(\n params,\n 'createMoveClusterOrg',\n 'api/approvals/move-cluster-org',\n )\n }\n\n /**\n * Opens a cluster bulk operation of one type.\n *\n * Each type is its own use case with its own route, because each one has\n * its own permission. The floor of approvals is the same for every type,\n * and it depends on the stage: 2 on prod, 1 on dev, int and local. The\n * route is `api/approvals/<use case>`, as for every other use case. A 200\n * means that the same operation over the same clusters is already open.\n */\n public static async createClusterBulkOperation<\n T extends ClusterBulkOperationType,\n >(\n type: T,\n params: CreateApprovalRequest<ClusterBulkOperationPayloadDto<T>>,\n ): Promise<{ approval: ApprovalJobDto; created: boolean }> {\n const useCase = CLUSTER_BULK_OPERATION_RULES[type].useCase\n return ControlApprovalsService.create(\n params,\n 'createClusterBulkOperation',\n `api/approvals/${useCase}`,\n )\n }\n\n /**\n * Opens a change-platform-roles request.\n *\n * Opening one needs `accounts:admin:changeRole`, the same permission that\n * approving needs, and the reason is necessary. A 200 means that a request\n * for the same user is already open.\n */\n public static async createChangePlatformRoles(\n params: CreateApprovalRequest<ChangePlatformRolesPayloadDto>,\n ): Promise<{ approval: ApprovalJobDto; created: boolean }> {\n return ControlApprovalsService.create(\n params,\n 'createChangePlatformRoles',\n 'api/approvals/change-platform-roles',\n )\n }\n\n /**\n * Opens a delete-internal-backup request.\n *\n * Opening one needs `console:clusters:canCreateInternalBackup`, the same\n * permission that approving needs. A 200 means that a request for the same\n * backup is already open.\n */\n public static async createDeleteInternalBackup(\n params: CreateApprovalRequest<DeleteInternalBackupPayloadDto>,\n ): Promise<{ approval: ApprovalJobDto; created: boolean }> {\n return ControlApprovalsService.create(\n params,\n 'createDeleteInternalBackup',\n 'api/approvals/delete-internal-backup',\n )\n }\n\n /**\n * Opens a change-org-limits request.\n *\n * Opening one needs `accounts:admin:mayChangeOrgLimits`, the same\n * permission that approving needs. A 200 means that a request for the same\n * limit of the same organization is already open.\n */\n public static async createChangeOrgLimits(\n params: CreateApprovalRequest<ChangeOrgLimitsPayloadDto>,\n ): Promise<{ approval: ApprovalJobDto; created: boolean }> {\n return ControlApprovalsService.create(\n params,\n 'createChangeOrgLimits',\n 'api/approvals/change-org-limits',\n )\n }\n\n /**\n * Opens a delete-sso-connection request.\n *\n * Opening one needs `AccountsPermissions.ADMIN_AUTH0_CONNECTIONS_DELETE`, the same\n * permission that approving needs. A 200 means that a request for the same\n * connection is already open.\n */\n public static async createDeleteSsoConnection(\n params: CreateApprovalRequest<DeleteSsoConnectionPayloadDto>,\n ): Promise<{ approval: ApprovalJobDto; created: boolean }> {\n return ControlApprovalsService.create(\n params,\n 'createDeleteSsoConnection',\n 'api/approvals/delete-sso-connection',\n )\n }\n\n /**\n * Opens an onboard-to-enterprise request.\n *\n * Opening one needs `AccountsPermissions.ENTERPRISE_ORG_CONVERT`, the same\n * permission that approving needs. A 200 means that a request for the same\n * organization is already open. The route answers 404 while\n * `control.onboardToEnterpriseApproval` is off.\n */\n public static async createOnboardToEnterprise(\n params: CreateApprovalRequest<OnboardToEnterprisePayloadDto>,\n ): Promise<{ approval: ApprovalJobDto; created: boolean }> {\n return ControlApprovalsService.create(\n params,\n 'createOnboardToEnterprise',\n 'api/approvals/onboard-to-enterprise',\n )\n }\n\n /**\n * Opens a change-sales-plan request.\n *\n * Opening one needs `AccountsPermissions.SALES_PLAN_SWITCH`, the same\n * permission that approving needs. A 200 means that a request for the same\n * organization is already open.\n */\n public static async createChangeSalesPlan(\n params: CreateApprovalRequest<ChangeSalesPlanPayloadDto>,\n ): Promise<{ approval: ApprovalJobDto; created: boolean }> {\n return ControlApprovalsService.create(\n params,\n 'createChangeSalesPlan',\n 'api/approvals/change-sales-plan',\n )\n }\n\n /**\n * Opens a change-cluster-plan-type request.\n *\n * Opening one needs `ConsolePermissions.CLUSTERS_CAN_UPDATE_CLUSTERPLANTYPE`,\n * the same permission that approving needs. A 200 means that a request for\n * the same cluster is already open. The route answers 404 while\n * `control.changeClusterPlanType` is off.\n */\n public static async createChangeClusterPlanType(\n params: CreateApprovalRequest<ChangeClusterPlanTypePayloadDto>,\n ): Promise<{ approval: ApprovalJobDto; created: boolean }> {\n return ControlApprovalsService.create(\n params,\n 'createChangeClusterPlanType',\n 'api/approvals/change-cluster-plan-type',\n )\n }\n\n /**\n * Opens a delete-organization request.\n *\n * Opening one needs `AccountsPermissions.DELETE_ORG`, the same permission\n * that approving needs. A 200 means that a request for the same\n * organization is already open.\n */\n public static async createDeleteOrganization(\n params: CreateApprovalRequest<DeleteOrganizationPayloadDto>,\n ): Promise<{ approval: ApprovalJobDto; created: boolean }> {\n return ControlApprovalsService.create(\n params,\n 'createDeleteOrganization',\n 'api/approvals/delete-organization',\n )\n }\n\n /**\n * Opens a delete-user request.\n *\n * Opening one needs `AccountsPermissions.DELETE_USER`, the same permission\n * that approving needs. A 200 means that a request for the same user is\n * already open.\n */\n public static async createDeleteUser(\n params: CreateApprovalRequest<DeleteUserPayloadDto>,\n ): Promise<{ approval: ApprovalJobDto; created: boolean }> {\n return ControlApprovalsService.create(\n params,\n 'createDeleteUser',\n 'api/approvals/delete-user',\n )\n }\n\n /**\n * Opens a change-user-email request.\n *\n * Opening one needs `AccountsPermissions.ADMIN_CHANGE_EMAIL`, the same\n * permission that approving needs. A 200 means that a request for the same\n * user is already open.\n */\n public static async createChangeUserEmail(\n params: CreateApprovalRequest<ChangeUserEmailPayloadDto>,\n ): Promise<{ approval: ApprovalJobDto; created: boolean }> {\n return ControlApprovalsService.create(\n params,\n 'createChangeUserEmail',\n 'api/approvals/change-user-email',\n )\n }\n\n /**\n * Opens a purge-users request.\n *\n * Opening one needs `AccountsPermissions.GOD_PURGE_USERS` and\n * `AccountsPermissions.DELETE_USER`, the same permissions that approving\n * needs. A 200 means that a request for the same set of users is already\n * open.\n */\n public static async createPurgeUsers(\n params: CreateApprovalRequest<PurgeUsersPayloadDto>,\n ): Promise<{ approval: ApprovalJobDto; created: boolean }> {\n return ControlApprovalsService.create(\n params,\n 'createPurgeUsers',\n 'api/approvals/purge-users',\n )\n }\n\n /**\n * Opens an update-user-metadata request.\n *\n * Opening one needs `AccountsPermissions.GOD_UPDATE_USER_METADATA`, the\n * same permission that approving needs. A 200 means that a request for the\n * same user and the same kind of metadata is already open.\n */\n public static async createUpdateUserMetadata(\n params: CreateApprovalRequest<UpdateUserMetadataPayloadDto>,\n ): Promise<{ approval: ApprovalJobDto; created: boolean }> {\n return ControlApprovalsService.create(\n params,\n 'createUpdateUserMetadata',\n 'api/approvals/update-user-metadata',\n )\n }\n\n /**\n * Opens a change-feature-flag request.\n *\n * Opening one needs `aafw`, the same permission that approving needs. A 200\n * means that a request for the same flag is already open. On int this is\n * the only way to change a flag.\n */\n public static async createChangeFeatureFlag(\n params: CreateApprovalRequest<ChangeFeatureFlagPayloadDto>,\n ): Promise<{ approval: ApprovalJobDto; created: boolean }> {\n return ControlApprovalsService.create(\n params,\n 'createChangeFeatureFlag',\n 'api/approvals/change-feature-flag',\n )\n }\n\n /** Adds the approval of the caller. The last one can run the action. */\n public static async acknowledge(\n params: ApprovalIdRequest,\n ): Promise<ApprovalJobDto> {\n return ControlApprovalsService.readOne(\n params,\n 'acknowledge',\n `api/approvals/${params.params.id}/ack`,\n 'api/approvals/:id/ack',\n 'post',\n )\n }\n\n /** Closes a request without running the action. The reason is necessary. */\n public static async reject(\n params: RejectApprovalRequest,\n ): Promise<ApprovalJobDto> {\n return ControlApprovalsService.readOne(\n params,\n 'reject',\n `api/approvals/${params.params.id}/reject`,\n 'api/approvals/:id/reject',\n 'post',\n { reason: params.params.reason },\n )\n }\n\n /**\n * Takes back a request. Only the person who opened it can.\n *\n * The reason is optional, and it lands in the same field that a rejection\n * writes. The creator cannot reject their own request, so this is where they\n * say why they closed it.\n */\n public static async withdraw(\n params: WithdrawApprovalRequest,\n ): Promise<ApprovalJobDto> {\n return ControlApprovalsService.readOne(\n params,\n 'withdraw',\n `api/approvals/${params.params.id}/withdraw`,\n 'api/approvals/:id/withdraw',\n 'post',\n params.params.reason ? { reason: params.params.reason } : undefined,\n )\n }\n\n /**\n * Runs a request that holds its approvals.\n *\n * Only a use case in the explicit mode needs this. An action that throws\n * leaves the request `failed`, and this call still answers 200 with it, so\n * read `status` and `executionError` of the answer.\n */\n public static async execute(\n params: ApprovalIdRequest,\n ): Promise<ApprovalJobDto> {\n return ControlApprovalsService.readOne(\n params,\n 'execute',\n `api/approvals/${params.params.id}/execute`,\n 'api/approvals/:id/execute',\n 'post',\n )\n }\n\n /** Opens a send-to-expired-trial request. Any signed-in Camundi can. */\n public static async createSendToExpiredTrial(\n params: CreateApprovalRequest<SendToExpiredTrialPayloadDto>,\n ): Promise<ApprovalJobDto> {\n const { approval } = await ControlApprovalsService.create(\n params,\n 'createSendToExpiredTrial',\n 'api/approvals/send-to-expired-trial',\n )\n return approval\n }\n\n /**\n * Opens an extend-trial request.\n *\n * Opening one needs `accounts:admin:extendTrial`, the same permission that\n * approving needs, and the reason is necessary.\n */\n public static async createExtendTrial(\n params: CreateApprovalRequest<ExtendTrialPayloadDto>,\n ): Promise<ApprovalJobDto> {\n const { approval } = await ControlApprovalsService.create(\n params,\n 'createExtendTrial',\n 'api/approvals/extend-trial',\n )\n return approval\n }\n\n /**\n * Opens a create-personal-organisation request. Any signed-in Camundi can.\n *\n * The request needs no approval, so the answer already holds the outcome,\n * and the route answers 404 while `control.personalOrganisation` is off.\n */\n public static async createPersonalOrganisation(\n params: CreatePersonalOrganisationRequest,\n ): Promise<ApprovalJobDto> {\n // The route answers 429 for the cap, and the cap does not go away. `request`\n // tries a 429 up to 8 times with growing waits, so a person at the cap\n // would wait minutes for the message. A rate limit of the service is a\n // retry that the person can press.\n const { approval } = await ControlApprovalsService.create(\n params,\n 'createPersonalOrganisation',\n 'api/approvals/create-personal-organisation',\n { retryRateLimit: false },\n )\n return approval\n }\n\n /**\n * Opens a create-customer-hardware-sizing request. Any signed-in Camundi\n * can. It runs on dev only, needs no approval, and the route answers 403\n * on every other stage.\n */\n public static async createCustomerHardwareSizing(\n params: CustomerHardwareSizingRequest<CreateCustomerHardwareSizingPayloadDto>,\n ): Promise<ApprovalJobDto> {\n const { approval } = await ControlApprovalsService.create(\n params,\n 'createCustomerHardwareSizing',\n 'api/approvals/create-customer-hardware-sizing',\n )\n return approval\n }\n\n /** Opens a remove-customer-hardware-sizing request. See the one above. */\n public static async removeCustomerHardwareSizing(\n params: CustomerHardwareSizingRequest<RemoveCustomerHardwareSizingPayloadDto>,\n ): Promise<ApprovalJobDto> {\n const { approval } = await ControlApprovalsService.create(\n params,\n 'removeCustomerHardwareSizing',\n 'api/approvals/remove-customer-hardware-sizing',\n )\n return approval\n }\n\n /**\n * The shared half of every call that answers one request.\n *\n * Six routes answer `{ approval }` and differ only in the verb and the path.\n * One private helper keeps the metrics context, the status check and the\n * unwrapping in one place.\n */\n private static async readOne(\n params: RequestBaseParams,\n name: string,\n url: string,\n normalizedUrl: string,\n method: 'get' | 'post',\n body?: Record<string, unknown>,\n ): Promise<ApprovalJobDto> {\n const serviceContext = contextFor(\n name,\n url,\n normalizedUrl,\n method,\n params.config.metrics?.source || 'unset',\n )\n const response = await request<{ approval: ApprovalJobDto }>({\n config: params.config,\n base: BASE,\n url,\n method,\n metricsDetails: serviceContext,\n body,\n })\n if (!response.ok) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n return response.body!.approval\n }\n\n /**\n * The shared half of every create route. See `approvalRequestBody`.\n *\n * The route answers 201 for a fresh request and 200 for the one already\n * open for the same target (`create` deduplicates). `created` carries that\n * difference. `createSendToExpiredTrial` and `createExtendTrial` do not\n * need it, so they read `approval` alone off this result.\n */\n private static async create<TPayload>(\n params: CreateApprovalRequest<TPayload>,\n name: string,\n url: string,\n options: {\n /** False sends the call once, also when the answer is a 429. */\n retryRateLimit?: boolean\n } = {},\n ): Promise<{ approval: ApprovalJobDto; created: boolean }> {\n const serviceContext = contextFor(\n name,\n url,\n url,\n 'post',\n params.config.metrics?.source || 'unset',\n )\n const response = await request<{ approval: ApprovalJobDto }>({\n config: params.config,\n base: BASE,\n url,\n method: 'post',\n metricsDetails: serviceContext,\n ...(options.retryRateLimit === false\n ? { retry: { attempts: 1, remaining: 0 } }\n : {}),\n body: {\n payload: params.params.payload,\n reason: params.params.reason,\n requiredAcks: params.params.requiredAcks,\n },\n })\n if (!response.ok) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n return {\n approval: response.body!.approval,\n created: response.status === 201,\n }\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a commercial license.\n * You may not use this file except in compliance with the commercial license.\n */\n\nimport type {\n ApprovalEntityType,\n ApprovalJobDto,\n ApprovalJobStatus,\n ApprovalSortField,\n ApprovalSortOrder,\n ApprovalStatusCountsDto,\n ApprovalUseCaseDto,\n ClusterBulkOperationPayloadDto,\n ClusterBulkOperationType,\n EnterpriseIncludingValueMetrics,\n LicensingModelType,\n} from '@camunda/ccma-shared-types'\nimport { CLUSTER_BULK_OPERATION_RULES } from '@camunda/ccma-shared-types'\nimport type {\n RequestBaseParams,\n RequestBaseServiceContext,\n} from '../../types/general.types.js'\nimport { request } from '../../utils/api.js'\nimport { HttpError } from '../../utils/errors.js'\n\n/**\n * The four-eyes approval surface of control-backend.\n *\n * One service for the whole mechanism, and not one for each use case. The\n * generic routes (list, read, approve, reject, withdraw, run) carry no\n * knowledge of a use case, which is what lets one view in control-frontend\n * show every privileged action. Only the create calls are per use case,\n * because a payload can be validated only for the use case it belongs to.\n *\n * A use case that walks its own rollout behind a flag answers 404 on its\n * create route while that flag is off.\n */\n\nconst BASE = { id: 'control' } as const\n\nexport interface ApprovalPageDto {\n approvals: ApprovalJobDto[]\n page: {\n limit: number\n offset: number\n /** True when the next page holds more. Never read the length instead. */\n hasMore: boolean\n }\n}\n\n/**\n * What narrows the queue. The list and the counts read the same fields.\n *\n * `entityType` and `entityId` are ONE filter, not two. control-backend answers\n * 400 for one without the other, so the type carries both or neither.\n */\nexport type ApprovalFacetParams = {\n type?: string\n /**\n * One organization, matched whole against `orgId` of the payload.\n *\n * It reads only the payload, so `entityType`/`entityId` is wider. That filter\n * reads the entity link, so it finds a request that touches the organization\n * through another field. The organization page of control-frontend asks the\n * entity-link filter, not this one. `orgId` is also not `q`: the free text\n * reads the whole payload as text.\n */\n orgId?: string\n /**\n * Free text. control-backend matches it in the reason, the person who\n * opened the request, the action and its label, and the payload that the\n * summary shows.\n */\n q?: string\n /**\n * The queue of one person: what they opened, or what waits for them.\n *\n * `actionable` is the rule of the Approve button asked in SQL \u2014 pending,\n * opened by somebody else, not approved by this person yet, and guarded by\n * permissions that they hold.\n */\n mine?: 'created' | 'actionable'\n} & (\n | {\n /**\n * The kind of entity a request must touch. Read with `entityId`.\n *\n * It reads the entity link of control-backend, so it is wider and truer\n * than `orgId`: a cluster-move request answers for its source\n * organization, its target organization AND the cluster. The organization\n * and cluster detail pages of control-frontend ask this.\n */\n entityType: ApprovalEntityType\n /** The id of the entity a request must touch. Read with `entityType`. */\n entityId: string\n }\n | { entityType?: never; entityId?: never }\n)\n\nexport interface ListApprovalsRequest extends RequestBaseParams {\n params?: ApprovalFacetParams & {\n status?: ApprovalJobStatus\n sort?: ApprovalSortField\n order?: ApprovalSortOrder\n limit?: number\n offset?: number\n }\n}\n\nexport interface CountApprovalsRequest extends RequestBaseParams {\n params?: ApprovalFacetParams\n}\n\nexport interface ApprovalIdRequest extends RequestBaseParams {\n params: { id: string }\n}\n\nexport interface RejectApprovalRequest extends RequestBaseParams {\n params: { id: string; reason: string }\n}\n\n/** A withdrawal says why, or says nothing. The reason is not demanded. */\nexport interface WithdrawApprovalRequest extends RequestBaseParams {\n params: { id: string; reason?: string }\n}\n\n/** The envelope that every create route of every use case shares. */\nexport interface CreateApprovalRequest<TPayload> extends RequestBaseParams {\n params: {\n payload: TPayload\n reason?: string\n /** More approvals than the floor of the use case. Never fewer. */\n requiredAcks?: number\n }\n}\n\nexport interface SendToExpiredTrialPayloadDto {\n orgId: string\n orgName?: string\n}\n\nexport interface CreatePersonalOrganisationPayloadDto {\n /** 3 to 100 characters, after the spaces at both ends are cut. */\n name: string\n}\n\n/**\n * The create call of `create-personal-organisation`.\n *\n * It has no `requiredAcks`: the request needs no approval, and the route\n * answers 400 to a body that names the field.\n */\nexport interface CreatePersonalOrganisationRequest extends RequestBaseParams {\n params: {\n payload: CreatePersonalOrganisationPayloadDto\n reason?: string\n }\n}\n\nexport interface CreateCustomHardwareSizingPayloadDto {\n /** The organization that gets the plan. The requester must own it. */\n orgId: string\n /** 3 to 100 characters, after the spaces at both ends are cut. */\n name: string\n /** The cluster plan, in the same format as the plan route of the admin tool. */\n plan: Record<string, unknown>\n}\n\n/**\n * `unlink` removes the plan from one organization that the requester owns.\n * `delete` removes it from every organization of the requester, and deletes it.\n */\nexport type RemoveCustomHardwareSizingPayloadDto =\n | { mode: 'unlink'; clusterPlanId: string; orgId: string }\n | { mode: 'delete'; clusterPlanId: string }\n\n/**\n * The create call of a custom hardware sizing use case. Like\n * `CreatePersonalOrganisationRequest`, it has no `requiredAcks`.\n */\nexport interface CustomHardwareSizingRequest<TPayload>\n extends RequestBaseParams {\n params: {\n payload: TPayload\n reason?: string\n }\n}\n\nexport interface ExtendTrialPayloadDto {\n orgId: string\n orgName?: string\n /**\n * Days of trial counted from the moment the action RUNS.\n *\n * Never a date. Accounts holds the new expiry inside a window that it\n * measures when the call arrives, and under approvals that is days after the\n * person chose the value. See `use-cases/extend-trial.ts` in\n * control-backend.\n */\n days: number\n}\n\nexport interface MoveClusterOrgPayloadDto {\n clusterId: string\n /** A copy, so a list shows a name that a person knows. Nothing reads it. */\n clusterName?: string\n targetOrgId: string\n /** A copy, for the same reason as `clusterName`. */\n targetOrgName?: string\n // The SOURCE organization is not here on purpose. control-backend resolves it\n // server-side from the cluster's current owner, so a caller cannot attach the\n // request to an organization the cluster never belonged to.\n}\n\nexport interface ChangePlatformRolesPayloadDto {\n userId: string\n /** A copy, so a list shows a person and not an Auth0 id. Nothing reads it. */\n userEmail?: string\n /**\n * A CHANGE, and never the whole set. Accounts applies it over the roles that\n * the user holds when the action RUNS, so a role change that somebody else\n * made while the request waited stays.\n */\n rolesToAdd: string[]\n rolesToRemove: string[]\n}\n\nexport interface ChangeOrgLimitsPayloadDto {\n orgId: string\n /** A copy, so a list shows a name that a person knows. Nothing reads it. */\n orgName?: string\n /** One key of `allSalesPlanLimits()`. One limit for each request. */\n limitKey: string\n /**\n * The override that the person who asked READ. Absent for \"not set\".\n *\n * Accounts compares it with the override that it holds when the action\n * runs, and writes nothing when the two differ. See `staleApprovalKeys`.\n */\n expected?: string | number | boolean\n /** The new override. `null` clears it, and the default of the plan applies. */\n value: string | number | boolean | null\n}\n\n/** One cluster of the organization and the plan type it moves to. */\nexport interface OnboardToEnterpriseClusterDto {\n clusterId: string\n /** A copy, so the approver reads a name. Nothing reads it. */\n clusterName?: string\n planTypeId: string\n /** A copy of the name of the plan type, for the approver to read. */\n planTypeName?: string\n numberOfAllocatedHwPackages?: number\n keepModification: boolean\n}\n\nexport interface OnboardToEnterprisePayloadDto {\n orgId: string\n /** A copy, so a list shows a name that a person knows. Nothing reads it. */\n orgName?: string\n salesPlanId: string\n /** A copy of the name of the new plan, for the approver to read. */\n salesPlanName?: string\n /**\n * The plan that the person who asked READ. Accounts compares it with the\n * plan that it holds when the action runs, and switches nothing when the\n * two differ. An organization with no plan cannot be onboarded this way.\n */\n expectedSalesPlanId: string\n expectedSalesPlanName?: string\n contract: {\n /** The renewal term, in months. */\n duration: number\n includedValueMetrics: EnterpriseIncludingValueMetrics\n /** `YYYY-MM-DD`. */\n enterPriseStartDate: string\n enterpriseDevOnly: boolean\n awsOnly: boolean\n licensingModel: LicensingModelType\n salesForceId?: string\n }\n /** One entry for each cluster of the organization. Empty for none. */\n clusters: OnboardToEnterpriseClusterDto[]\n /** The reservations after the switch, by plan type uuid. */\n reservations: Record<string, number>\n /** The names of the plan types of `reservations`, for the approver. */\n reservationNames?: Record<string, string>\n}\n\nexport interface ChangeClusterPlanTypePayloadDto {\n clusterId: string\n /** A copy, so a list shows a name that a person knows. Nothing reads it. */\n clusterName?: string\n /** The organization that owns the cluster. Console refuses another one. */\n orgId: string\n /** A copy, for the same reason as `clusterName`. */\n orgName?: string\n toPlanTypeUuid: string\n /** A copy of the name of the new plan type, for the approver to read. */\n toPlanTypeName?: string\n /**\n * The hardware packages of the cluster after the change, 1 at least.\n *\n * Always sent, also for a plan type with no availability class, where it is\n * 1. Console checks the reservations of the organization only when the\n * packages are in the call, and the check is the point of this use case.\n */\n numberOfAllocatedHwPackages: number\n /**\n * The plan type that the person who asked READ.\n *\n * Console compares it with the plan type of the cluster when the action\n * runs, and changes nothing when the two differ.\n */\n expectedPlanTypeUuid: string\n /** A copy of the name of the current plan type, for the approver to read. */\n expectedPlanTypeName?: string\n /**\n * The hardware packages that the person who asked READ, 1 for a cluster\n * that holds none. The same stale guard as `expectedPlanTypeUuid`.\n */\n expectedNumberOfAllocatedHwPackages: number\n /**\n * The cluster plan that the person who asked READ. Console decides the\n * plan move from it, so it is part of the stale guard too, and Console\n * refuses a cluster that runs none, so a request needs one.\n */\n expectedClusterPlanUuid: string\n /** A copy of the name of that plan, for the approver to read. */\n expectedClusterPlanName?: string\n /**\n * The active modification config that the person who asked READ, absent\n * when the cluster has none. The change removes it, and an approver must\n * read which one goes.\n */\n expectedActiveModificationConfigUuid?: string\n /**\n * The active plan of the NEW plan type that the person who asked READ. The\n * cluster moves to it, so a plan that a Camundi changed on the type while\n * the request waited fails the guard, and Console refuses a type that has\n * none, so a request needs one.\n */\n expectedTargetPlanUuid: string\n /** A copy of the name of that plan, for the approver to read. */\n expectedTargetPlanName?: string\n /**\n * Whether the cluster plan moves to the active plan of the new type, as\n * the dialog read it. The list of migratable plans can change while the\n * request waits, and a verdict that moved changes whether the cluster\n * restarts, so Console refuses a request whose verdict moved.\n */\n expectedClusterPlanUpdate: boolean\n}\n\nexport interface ChangeSalesPlanPayloadDto {\n orgId: string\n /** A copy, so a list shows a name that a person knows. Nothing reads it. */\n orgName?: string\n salesPlanId: string\n /** A copy of the name of the new plan, for the approver to read. */\n salesPlanName?: string\n /**\n * The plan that the person who asked READ. Absent for \"no plan\".\n *\n * Accounts compares it with the plan that it holds when the action runs,\n * and switches nothing when the two differ.\n */\n expectedSalesPlanId?: string\n /** A copy of the name of the current plan, for the approver to read. */\n expectedSalesPlanName?: string\n /** Skips the validation of the switch. The approver sees it. */\n force: boolean\n}\n\n/** Every value of a flag row that a person can change. */\nexport interface FeatureFlagValuesDto {\n description: string\n enabled: boolean\n orgIds: string[]\n emailDomains: string[]\n /** The team that owns the flag. A create needs it. An older row has none. */\n owner?: string\n /** `YYYY-MM-DD`, the day after which the flag is late. */\n expiresAt?: string\n /**\n * The issue that tracks the flag. A create and an edit need it. An older\n * row has none.\n */\n issueUrl?: string\n}\n\n/**\n * One change of the feature flag table: the action, and the whole row that it\n * asks for.\n *\n * An edit and a delete carry the row that the person who asked READ, as\n * `expected`. The action writes nothing when the row changed in the meantime.\n * `key` of an edit and a delete is a copy for the approver, and the action\n * compares it too.\n */\nexport type ChangeFeatureFlagPayloadDto =\n | {\n action: 'create'\n key: string\n value: FeatureFlagValuesDto & { owner: string; issueUrl: string }\n }\n | {\n action: 'update'\n id: string\n key: string\n expected: FeatureFlagValuesDto\n value: FeatureFlagValuesDto & { issueUrl: string }\n }\n | {\n action: 'delete'\n id: string\n key: string\n expected: FeatureFlagValuesDto\n }\n\nexport interface DeleteSsoConnectionPayloadDto {\n strategy: 'waad' | 'samlp'\n connectionId: string\n /** A copy, so a list shows a name that a person knows. Nothing reads it. */\n connectionName?: string\n /**\n * The organizations that the connection serves, as copies for the approver.\n * The request is findable on the page of each one.\n */\n orgIds?: string[]\n}\n\nexport interface DeleteOrganizationPayloadDto {\n orgId: string\n /**\n * The name that the approvers read. Accounts refuses the deletion when the\n * organization has another name when the action runs.\n */\n orgName: string\n}\n\nexport interface DeleteUserPayloadDto {\n userId: string\n /**\n * The address that the approvers read. Accounts refuses the deletion when\n * the user has another address when the action runs.\n */\n userEmail: string\n}\n\nexport interface ChangeUserEmailPayloadDto {\n userId: string\n /**\n * The address that the person who asked READ. Accounts compares it with\n * the address that the user has when the action runs, and changes nothing\n * when the two differ.\n */\n expectedEmail: string\n newEmail: string\n}\n\nexport interface PurgeUsersPayloadDto {\n /**\n * The users to delete, at most `PURGE_USERS_MAX_USERS`. The address is a\n * copy for the approver, and accounts refuses a user whose address is not\n * that copy. A list that came from a file of ids carries none.\n */\n users: { userId: string; email?: string }[]\n}\n\nexport interface UpdateUserMetadataPayloadDto {\n userId: string\n /** A copy, so a list shows a person and not an Auth0 id. Nothing reads it. */\n userEmail?: string\n /** `app` writes `app_metadata`, `user` writes `user_metadata`. */\n kind: 'app' | 'user'\n /**\n * The metadata that the person who asked READ. Absent for \"not set\".\n * Accounts writes nothing when it holds another value when the action runs.\n */\n expected?: Record<string, unknown>\n metadata: Record<string, unknown>\n}\n\nexport interface DeleteInternalBackupPayloadDto {\n clusterId: string\n /** A copy, so a list shows a name that a person knows. Nothing reads it. */\n clusterName?: string\n backupName: string\n /** A copy of the Slack link of the incident, for the approver to read. */\n incidentLink?: string\n}\n\n/**\n * The query string of a read, with the fields that carry no value dropped.\n *\n * An empty value is not the same as an absent one: `q=` would reach the schema\n * of control-backend, which holds the text at one character and answers 400.\n */\nfunction querySuffix(params: object = {}): string {\n const query = new URLSearchParams()\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined && value !== '') {\n query.set(key, String(value))\n }\n }\n return query.size > 0 ? `?${query.toString()}` : ''\n}\n\nfunction contextFor(\n name: string,\n url: string,\n normalizedUrl: string,\n type: 'get' | 'post',\n source: string,\n): RequestBaseServiceContext {\n return {\n method: {\n name: `ControlApprovalsService.${name}`,\n url,\n normalizedUrl,\n type,\n },\n source,\n target: { name: 'control', type: 'internal' },\n }\n}\n\nexport class ControlApprovalsService {\n /**\n * The registered privileged actions, with the rules that guard each one.\n *\n * A frontend reads this to run the same policy as the service, so it never\n * holds a copy of the registry. A new use case then needs no frontend\n * deploy.\n */\n public static async listUseCases(\n params: RequestBaseParams,\n ): Promise<ApprovalUseCaseDto[]> {\n const serviceContext = contextFor(\n 'listUseCases',\n 'api/approvals/use-cases',\n 'api/approvals/use-cases',\n 'get',\n params.config.metrics?.source || 'unset',\n )\n const response = await request<{ useCases: ApprovalUseCaseDto[] }>({\n config: params.config,\n base: BASE,\n url: serviceContext.method.url,\n method: 'get',\n metricsDetails: serviceContext,\n })\n if (!response.ok) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n return response.body!.useCases\n }\n\n /**\n * One page of the requests that the caller can read.\n *\n * It is not the whole table: control-backend hides a request whose use case\n * the caller cannot act on, unless the caller opened it.\n */\n public static async list(\n params: ListApprovalsRequest,\n ): Promise<ApprovalPageDto> {\n const suffix = querySuffix(params.params)\n const serviceContext = contextFor(\n 'list',\n `api/approvals${suffix}`,\n 'api/approvals',\n 'get',\n params.config.metrics?.source || 'unset',\n )\n const response = await request<ApprovalPageDto>({\n config: params.config,\n base: BASE,\n url: serviceContext.method.url,\n method: 'get',\n metricsDetails: serviceContext,\n })\n if (!response.ok) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n return response.body!\n }\n\n /**\n * How many requests each status holds, for the status filters of a queue.\n *\n * It is the same question as `list` without the status, so a filter that\n * shows a number never opens an empty page.\n */\n public static async counts(\n params: CountApprovalsRequest,\n ): Promise<ApprovalStatusCountsDto> {\n const suffix = querySuffix(params.params)\n const serviceContext = contextFor(\n 'counts',\n `api/approvals/counts${suffix}`,\n 'api/approvals/counts',\n 'get',\n params.config.metrics?.source || 'unset',\n )\n const response = await request<{ counts: ApprovalStatusCountsDto }>({\n config: params.config,\n base: BASE,\n url: serviceContext.method.url,\n method: 'get',\n metricsDetails: serviceContext,\n })\n if (!response.ok) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n return response.body!.counts\n }\n\n public static async get(params: ApprovalIdRequest): Promise<ApprovalJobDto> {\n return ControlApprovalsService.readOne(\n params,\n 'get',\n `api/approvals/${params.params.id}`,\n 'api/approvals/:id',\n 'get',\n )\n }\n\n /**\n * What a create route answers, plus whether it opened a NEW request.\n *\n * The route answers 201 for a fresh request and 200 for the one already\n * open for the same target \u2014 `create` deduplicates. A caller that must\n * tell the two apart (a floor-of-one use case, where 200 is the ordinary\n * path and not a failure) reads `created`.\n */\n public static async createMoveClusterOrg(\n params: CreateApprovalRequest<MoveClusterOrgPayloadDto>,\n ): Promise<{ approval: ApprovalJobDto; created: boolean }> {\n return ControlApprovalsService.create(\n params,\n 'createMoveClusterOrg',\n 'api/approvals/move-cluster-org',\n )\n }\n\n /**\n * Opens a cluster bulk operation of one type.\n *\n * Each type is its own use case with its own route, because each one has\n * its own permission. The floor of approvals is the same for every type,\n * and it depends on the stage: 2 on prod, 1 on dev, int and local. The\n * route is `api/approvals/<use case>`, as for every other use case. A 200\n * means that the same operation over the same clusters is already open.\n */\n public static async createClusterBulkOperation<\n T extends ClusterBulkOperationType,\n >(\n type: T,\n params: CreateApprovalRequest<ClusterBulkOperationPayloadDto<T>>,\n ): Promise<{ approval: ApprovalJobDto; created: boolean }> {\n const useCase = CLUSTER_BULK_OPERATION_RULES[type].useCase\n return ControlApprovalsService.create(\n params,\n 'createClusterBulkOperation',\n `api/approvals/${useCase}`,\n )\n }\n\n /**\n * Opens a change-platform-roles request.\n *\n * Opening one needs `accounts:admin:changeRole`, the same permission that\n * approving needs, and the reason is necessary. A 200 means that a request\n * for the same user is already open.\n */\n public static async createChangePlatformRoles(\n params: CreateApprovalRequest<ChangePlatformRolesPayloadDto>,\n ): Promise<{ approval: ApprovalJobDto; created: boolean }> {\n return ControlApprovalsService.create(\n params,\n 'createChangePlatformRoles',\n 'api/approvals/change-platform-roles',\n )\n }\n\n /**\n * Opens a delete-internal-backup request.\n *\n * Opening one needs `console:clusters:canCreateInternalBackup`, the same\n * permission that approving needs. A 200 means that a request for the same\n * backup is already open.\n */\n public static async createDeleteInternalBackup(\n params: CreateApprovalRequest<DeleteInternalBackupPayloadDto>,\n ): Promise<{ approval: ApprovalJobDto; created: boolean }> {\n return ControlApprovalsService.create(\n params,\n 'createDeleteInternalBackup',\n 'api/approvals/delete-internal-backup',\n )\n }\n\n /**\n * Opens a change-org-limits request.\n *\n * Opening one needs `accounts:admin:mayChangeOrgLimits`, the same\n * permission that approving needs. A 200 means that a request for the same\n * limit of the same organization is already open.\n */\n public static async createChangeOrgLimits(\n params: CreateApprovalRequest<ChangeOrgLimitsPayloadDto>,\n ): Promise<{ approval: ApprovalJobDto; created: boolean }> {\n return ControlApprovalsService.create(\n params,\n 'createChangeOrgLimits',\n 'api/approvals/change-org-limits',\n )\n }\n\n /**\n * Opens a delete-sso-connection request.\n *\n * Opening one needs `AccountsPermissions.ADMIN_AUTH0_CONNECTIONS_DELETE`, the same\n * permission that approving needs. A 200 means that a request for the same\n * connection is already open.\n */\n public static async createDeleteSsoConnection(\n params: CreateApprovalRequest<DeleteSsoConnectionPayloadDto>,\n ): Promise<{ approval: ApprovalJobDto; created: boolean }> {\n return ControlApprovalsService.create(\n params,\n 'createDeleteSsoConnection',\n 'api/approvals/delete-sso-connection',\n )\n }\n\n /**\n * Opens an onboard-to-enterprise request.\n *\n * Opening one needs `AccountsPermissions.ENTERPRISE_ORG_CONVERT`, the same\n * permission that approving needs. A 200 means that a request for the same\n * organization is already open. The route answers 404 while\n * `control.onboardToEnterpriseApproval` is off.\n */\n public static async createOnboardToEnterprise(\n params: CreateApprovalRequest<OnboardToEnterprisePayloadDto>,\n ): Promise<{ approval: ApprovalJobDto; created: boolean }> {\n return ControlApprovalsService.create(\n params,\n 'createOnboardToEnterprise',\n 'api/approvals/onboard-to-enterprise',\n )\n }\n\n /**\n * Opens a change-sales-plan request.\n *\n * Opening one needs `AccountsPermissions.SALES_PLAN_SWITCH`, the same\n * permission that approving needs. A 200 means that a request for the same\n * organization is already open.\n */\n public static async createChangeSalesPlan(\n params: CreateApprovalRequest<ChangeSalesPlanPayloadDto>,\n ): Promise<{ approval: ApprovalJobDto; created: boolean }> {\n return ControlApprovalsService.create(\n params,\n 'createChangeSalesPlan',\n 'api/approvals/change-sales-plan',\n )\n }\n\n /**\n * Opens a change-cluster-plan-type request.\n *\n * Opening one needs `ConsolePermissions.CLUSTERS_CAN_UPDATE_CLUSTERPLANTYPE`,\n * the same permission that approving needs. A 200 means that a request for\n * the same cluster is already open. The route answers 404 while\n * `control.changeClusterPlanType` is off.\n */\n public static async createChangeClusterPlanType(\n params: CreateApprovalRequest<ChangeClusterPlanTypePayloadDto>,\n ): Promise<{ approval: ApprovalJobDto; created: boolean }> {\n return ControlApprovalsService.create(\n params,\n 'createChangeClusterPlanType',\n 'api/approvals/change-cluster-plan-type',\n )\n }\n\n /**\n * Opens a delete-organization request.\n *\n * Opening one needs `AccountsPermissions.DELETE_ORG`, the same permission\n * that approving needs. A 200 means that a request for the same\n * organization is already open.\n */\n public static async createDeleteOrganization(\n params: CreateApprovalRequest<DeleteOrganizationPayloadDto>,\n ): Promise<{ approval: ApprovalJobDto; created: boolean }> {\n return ControlApprovalsService.create(\n params,\n 'createDeleteOrganization',\n 'api/approvals/delete-organization',\n )\n }\n\n /**\n * Opens a delete-user request.\n *\n * Opening one needs `AccountsPermissions.DELETE_USER`, the same permission\n * that approving needs. A 200 means that a request for the same user is\n * already open.\n */\n public static async createDeleteUser(\n params: CreateApprovalRequest<DeleteUserPayloadDto>,\n ): Promise<{ approval: ApprovalJobDto; created: boolean }> {\n return ControlApprovalsService.create(\n params,\n 'createDeleteUser',\n 'api/approvals/delete-user',\n )\n }\n\n /**\n * Opens a change-user-email request.\n *\n * Opening one needs `AccountsPermissions.ADMIN_CHANGE_EMAIL`, the same\n * permission that approving needs. A 200 means that a request for the same\n * user is already open.\n */\n public static async createChangeUserEmail(\n params: CreateApprovalRequest<ChangeUserEmailPayloadDto>,\n ): Promise<{ approval: ApprovalJobDto; created: boolean }> {\n return ControlApprovalsService.create(\n params,\n 'createChangeUserEmail',\n 'api/approvals/change-user-email',\n )\n }\n\n /**\n * Opens a purge-users request.\n *\n * Opening one needs `AccountsPermissions.GOD_PURGE_USERS` and\n * `AccountsPermissions.DELETE_USER`, the same permissions that approving\n * needs. A 200 means that a request for the same set of users is already\n * open.\n */\n public static async createPurgeUsers(\n params: CreateApprovalRequest<PurgeUsersPayloadDto>,\n ): Promise<{ approval: ApprovalJobDto; created: boolean }> {\n return ControlApprovalsService.create(\n params,\n 'createPurgeUsers',\n 'api/approvals/purge-users',\n )\n }\n\n /**\n * Opens an update-user-metadata request.\n *\n * Opening one needs `AccountsPermissions.GOD_UPDATE_USER_METADATA`, the\n * same permission that approving needs. A 200 means that a request for the\n * same user and the same kind of metadata is already open.\n */\n public static async createUpdateUserMetadata(\n params: CreateApprovalRequest<UpdateUserMetadataPayloadDto>,\n ): Promise<{ approval: ApprovalJobDto; created: boolean }> {\n return ControlApprovalsService.create(\n params,\n 'createUpdateUserMetadata',\n 'api/approvals/update-user-metadata',\n )\n }\n\n /**\n * Opens a change-feature-flag request.\n *\n * Opening one needs `aafw`, the same permission that approving needs. A 200\n * means that a request for the same flag is already open. On int this is\n * the only way to change a flag.\n */\n public static async createChangeFeatureFlag(\n params: CreateApprovalRequest<ChangeFeatureFlagPayloadDto>,\n ): Promise<{ approval: ApprovalJobDto; created: boolean }> {\n return ControlApprovalsService.create(\n params,\n 'createChangeFeatureFlag',\n 'api/approvals/change-feature-flag',\n )\n }\n\n /** Adds the approval of the caller. The last one can run the action. */\n public static async acknowledge(\n params: ApprovalIdRequest,\n ): Promise<ApprovalJobDto> {\n return ControlApprovalsService.readOne(\n params,\n 'acknowledge',\n `api/approvals/${params.params.id}/ack`,\n 'api/approvals/:id/ack',\n 'post',\n )\n }\n\n /** Closes a request without running the action. The reason is necessary. */\n public static async reject(\n params: RejectApprovalRequest,\n ): Promise<ApprovalJobDto> {\n return ControlApprovalsService.readOne(\n params,\n 'reject',\n `api/approvals/${params.params.id}/reject`,\n 'api/approvals/:id/reject',\n 'post',\n { reason: params.params.reason },\n )\n }\n\n /**\n * Takes back a request. Only the person who opened it can.\n *\n * The reason is optional, and it lands in the same field that a rejection\n * writes. The creator cannot reject their own request, so this is where they\n * say why they closed it.\n */\n public static async withdraw(\n params: WithdrawApprovalRequest,\n ): Promise<ApprovalJobDto> {\n return ControlApprovalsService.readOne(\n params,\n 'withdraw',\n `api/approvals/${params.params.id}/withdraw`,\n 'api/approvals/:id/withdraw',\n 'post',\n params.params.reason ? { reason: params.params.reason } : undefined,\n )\n }\n\n /**\n * Runs a request that holds its approvals.\n *\n * Only a use case in the explicit mode needs this. An action that throws\n * leaves the request `failed`, and this call still answers 200 with it, so\n * read `status` and `executionError` of the answer.\n */\n public static async execute(\n params: ApprovalIdRequest,\n ): Promise<ApprovalJobDto> {\n return ControlApprovalsService.readOne(\n params,\n 'execute',\n `api/approvals/${params.params.id}/execute`,\n 'api/approvals/:id/execute',\n 'post',\n )\n }\n\n /** Opens a send-to-expired-trial request. Any signed-in Camundi can. */\n public static async createSendToExpiredTrial(\n params: CreateApprovalRequest<SendToExpiredTrialPayloadDto>,\n ): Promise<ApprovalJobDto> {\n const { approval } = await ControlApprovalsService.create(\n params,\n 'createSendToExpiredTrial',\n 'api/approvals/send-to-expired-trial',\n )\n return approval\n }\n\n /**\n * Opens an extend-trial request.\n *\n * Opening one needs `accounts:admin:extendTrial`, the same permission that\n * approving needs, and the reason is necessary.\n */\n public static async createExtendTrial(\n params: CreateApprovalRequest<ExtendTrialPayloadDto>,\n ): Promise<ApprovalJobDto> {\n const { approval } = await ControlApprovalsService.create(\n params,\n 'createExtendTrial',\n 'api/approvals/extend-trial',\n )\n return approval\n }\n\n /**\n * Opens a create-personal-organisation request. Any signed-in Camundi can.\n *\n * The request needs no approval, so the answer already holds the outcome,\n * and the route answers 404 while `control.personalOrganisation` is off.\n */\n public static async createPersonalOrganisation(\n params: CreatePersonalOrganisationRequest,\n ): Promise<ApprovalJobDto> {\n // The route answers 429 for the cap, and the cap does not go away. `request`\n // tries a 429 up to 8 times with growing waits, so a person at the cap\n // would wait minutes for the message. A rate limit of the service is a\n // retry that the person can press.\n const { approval } = await ControlApprovalsService.create(\n params,\n 'createPersonalOrganisation',\n 'api/approvals/create-personal-organisation',\n { retryRateLimit: false },\n )\n return approval\n }\n\n /**\n * Opens a create-custom-hardware-sizing request. Any signed-in Camundi\n * can. It runs on dev only, needs no approval, and the route answers 403\n * on every other stage.\n */\n public static async createCustomHardwareSizing(\n params: CustomHardwareSizingRequest<CreateCustomHardwareSizingPayloadDto>,\n ): Promise<ApprovalJobDto> {\n const { approval } = await ControlApprovalsService.create(\n params,\n 'createCustomHardwareSizing',\n 'api/approvals/create-custom-hardware-sizing',\n )\n return approval\n }\n\n /** Opens a remove-custom-hardware-sizing request. See the one above. */\n public static async removeCustomHardwareSizing(\n params: CustomHardwareSizingRequest<RemoveCustomHardwareSizingPayloadDto>,\n ): Promise<ApprovalJobDto> {\n const { approval } = await ControlApprovalsService.create(\n params,\n 'removeCustomHardwareSizing',\n 'api/approvals/remove-custom-hardware-sizing',\n )\n return approval\n }\n\n /**\n * The shared half of every call that answers one request.\n *\n * Six routes answer `{ approval }` and differ only in the verb and the path.\n * One private helper keeps the metrics context, the status check and the\n * unwrapping in one place.\n */\n private static async readOne(\n params: RequestBaseParams,\n name: string,\n url: string,\n normalizedUrl: string,\n method: 'get' | 'post',\n body?: Record<string, unknown>,\n ): Promise<ApprovalJobDto> {\n const serviceContext = contextFor(\n name,\n url,\n normalizedUrl,\n method,\n params.config.metrics?.source || 'unset',\n )\n const response = await request<{ approval: ApprovalJobDto }>({\n config: params.config,\n base: BASE,\n url,\n method,\n metricsDetails: serviceContext,\n body,\n })\n if (!response.ok) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n return response.body!.approval\n }\n\n /**\n * The shared half of every create route. See `approvalRequestBody`.\n *\n * The route answers 201 for a fresh request and 200 for the one already\n * open for the same target (`create` deduplicates). `created` carries that\n * difference. `createSendToExpiredTrial` and `createExtendTrial` do not\n * need it, so they read `approval` alone off this result.\n */\n private static async create<TPayload>(\n params: CreateApprovalRequest<TPayload>,\n name: string,\n url: string,\n options: {\n /** False sends the call once, also when the answer is a 429. */\n retryRateLimit?: boolean\n } = {},\n ): Promise<{ approval: ApprovalJobDto; created: boolean }> {\n const serviceContext = contextFor(\n name,\n url,\n url,\n 'post',\n params.config.metrics?.source || 'unset',\n )\n const response = await request<{ approval: ApprovalJobDto }>({\n config: params.config,\n base: BASE,\n url,\n method: 'post',\n metricsDetails: serviceContext,\n ...(options.retryRateLimit === false\n ? { retry: { attempts: 1, remaining: 0 } }\n : {}),\n body: {\n payload: params.params.payload,\n reason: params.params.reason,\n requiredAcks: params.params.requiredAcks,\n },\n })\n if (!response.ok) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n return {\n approval: response.body!.approval,\n created: response.status === 201,\n }\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camunda/ccma-api",
3
- "version": "5.2.0",
3
+ "version": "5.3.0",
4
4
  "description": "Centralized API service layer for Camunda Cloud Management Apps",
5
5
  "bugs": {
6
6
  "url": "https://github.com/camunda/camunda-cloud-management-apps/issues"
@@ -41,7 +41,7 @@
41
41
  }
42
42
  },
43
43
  "dependencies": {
44
- "@camunda/ccma-shared-types": "7.3.0"
44
+ "@camunda/ccma-shared-types": "7.4.0"
45
45
  },
46
46
  "scripts": {
47
47
  "build": "node esbuild.mjs && tsc --emitDeclarationOnly --outDir dist",