@camunda/ccma-api 5.18.0 → 5.20.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 +5 -5
- package/dist/index.js.map +2 -2
- package/dist/services/accounts/approvals.m2m.service.d.ts +14 -0
- package/dist/services/accounts/approvals.m2m.service.js +32 -0
- package/dist/services/accounts/approvals.m2m.service.js.map +2 -2
- package/dist/services/api-client-deletion.approvals.spec.d.ts +1 -0
- package/dist/services/console/console.admin.service.d.ts +21 -3
- package/dist/services/console/console.admin.service.js +44 -5
- package/dist/services/console/console.admin.service.js.map +2 -2
- package/dist/services/console/console.approvals.m2m.service.d.ts +36 -0
- package/dist/services/console/console.approvals.m2m.service.js +68 -0
- package/dist/services/console/console.approvals.m2m.service.js.map +2 -2
- package/dist/services/control/control.approvals.service.d.ts +44 -0
- package/dist/services/control/control.approvals.service.js +28 -0
- package/dist/services/control/control.approvals.service.js.map +2 -2
- package/dist/services/external/external.console.service.d.ts +24 -3
- package/dist/services/external/external.console.service.js +49 -0
- package/dist/services/external/external.console.service.js.map +2 -2
- package/package.json +2 -2
|
@@ -166,6 +166,30 @@ export interface DeleteInternalBackupThroughApprovalRequest extends RequestBaseP
|
|
|
166
166
|
actor: ApprovalM2mActor;
|
|
167
167
|
};
|
|
168
168
|
}
|
|
169
|
+
export interface DeleteApiClientThroughApprovalRequest extends RequestBaseParams {
|
|
170
|
+
/** `clientUuid` is the `uuid` of the client, not its OAuth `clientId`. */
|
|
171
|
+
params: {
|
|
172
|
+
orgId: string;
|
|
173
|
+
clientUuid: string;
|
|
174
|
+
};
|
|
175
|
+
body: {
|
|
176
|
+
actor: ApprovalM2mActor;
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
export interface ReadApiClientThroughApprovalRequest extends RequestBaseParams {
|
|
180
|
+
/** `clientUuid` is the `uuid` of the client, not its OAuth `clientId`. */
|
|
181
|
+
params: {
|
|
182
|
+
orgId: string;
|
|
183
|
+
clientUuid: string;
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
/** The names of a Console API client, as console holds them. */
|
|
187
|
+
export interface ApprovalApiClientDto {
|
|
188
|
+
uuid: string;
|
|
189
|
+
name: string;
|
|
190
|
+
/** The OAuth client id, which the customer knows. */
|
|
191
|
+
clientId: string;
|
|
192
|
+
}
|
|
169
193
|
export interface DeleteClusterPastTtlThroughApprovalRequest extends RequestBaseParams {
|
|
170
194
|
params: {
|
|
171
195
|
clusterId: string;
|
|
@@ -349,6 +373,11 @@ export declare class ConsoleApprovalsM2MService {
|
|
|
349
373
|
static announceClusterBulkPlanUpdate(params: AnnounceClusterBulkPlanUpdateRequest): Promise<void>;
|
|
350
374
|
/** Deletes an internal (incident) backup of a cluster. It cannot be undone. */
|
|
351
375
|
static deleteInternalBackup(params: DeleteInternalBackupThroughApprovalRequest): Promise<BackupDto>;
|
|
376
|
+
/**
|
|
377
|
+
* Deletes a Console API client of an organization. Console answers 404 for
|
|
378
|
+
* a client that is gone, and 403 for a client of another organization.
|
|
379
|
+
*/
|
|
380
|
+
static deleteApiClient(params: DeleteApiClientThroughApprovalRequest): Promise<void>;
|
|
352
381
|
/**
|
|
353
382
|
* Deletes a cluster whose TTL ran out. Console tests the TTL and the owner
|
|
354
383
|
* again first, and answers `kept` when the cluster stays.
|
|
@@ -374,6 +403,13 @@ export declare class ConsoleApprovalsM2MService {
|
|
|
374
403
|
static checkCustomGenerationRemoval(params: CheckCustomGenerationRemovalRequest): Promise<CustomGenerationThroughApprovalResult>;
|
|
375
404
|
/** Deletes a custom generation that the Camundi created. It cannot be undone. */
|
|
376
405
|
static deleteCustomGeneration(params: DeleteCustomGenerationThroughApprovalRequest): Promise<CustomGenerationThroughApprovalResult>;
|
|
406
|
+
/**
|
|
407
|
+
* The names of a Console API client of an organization, for a
|
|
408
|
+
* delete-api-client request when it opens. Console answers 404 for a client
|
|
409
|
+
* that is not in the organization, and 403 when the caller lacks the
|
|
410
|
+
* permission.
|
|
411
|
+
*/
|
|
412
|
+
static readApiClient(params: ReadApiClientThroughApprovalRequest): Promise<ApprovalApiClientDto>;
|
|
377
413
|
/**
|
|
378
414
|
* The corpses of one kind now, for the request that deletes them. Console
|
|
379
415
|
* reads them from its watch of Kubernetes and from its rows, as the
|
|
@@ -286,6 +286,39 @@ class ConsoleApprovalsM2MService {
|
|
|
286
286
|
}
|
|
287
287
|
return response.body;
|
|
288
288
|
}
|
|
289
|
+
/**
|
|
290
|
+
* Deletes a Console API client of an organization. Console answers 404 for
|
|
291
|
+
* a client that is gone, and 403 for a client of another organization.
|
|
292
|
+
*/
|
|
293
|
+
static async deleteApiClient(params) {
|
|
294
|
+
const { orgId, clientUuid } = params.params;
|
|
295
|
+
const serviceContext = {
|
|
296
|
+
method: {
|
|
297
|
+
name: "ConsoleApprovalsM2MService.deleteApiClient",
|
|
298
|
+
url: `api/admin/approvals/orgs/${orgId}/api-clients/${clientUuid}`,
|
|
299
|
+
normalizedUrl: "api/admin/approvals/orgs/:orgId/api-clients/:clientUuid",
|
|
300
|
+
type: "delete"
|
|
301
|
+
},
|
|
302
|
+
source: params.config.metrics?.source || "unset",
|
|
303
|
+
target: { name: "console", type: "internal" }
|
|
304
|
+
};
|
|
305
|
+
const response = await request({
|
|
306
|
+
config: params.config,
|
|
307
|
+
base: { id: "console" },
|
|
308
|
+
url: serviceContext.method.url,
|
|
309
|
+
method: serviceContext.method.type,
|
|
310
|
+
metricsDetails: serviceContext,
|
|
311
|
+
responseType: "none",
|
|
312
|
+
body: params.body
|
|
313
|
+
});
|
|
314
|
+
if (!response.ok) {
|
|
315
|
+
throw new HttpError(
|
|
316
|
+
`${serviceContext.method.name}: ${response.status} ${response.statusText}`,
|
|
317
|
+
response.status,
|
|
318
|
+
response.statusText
|
|
319
|
+
);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
289
322
|
/**
|
|
290
323
|
* Deletes a cluster whose TTL ran out. Console tests the TTL and the owner
|
|
291
324
|
* again first, and answers `kept` when the cluster stays.
|
|
@@ -410,6 +443,41 @@ class ConsoleApprovalsM2MService {
|
|
|
410
443
|
}
|
|
411
444
|
);
|
|
412
445
|
}
|
|
446
|
+
/**
|
|
447
|
+
* The names of a Console API client of an organization, for a
|
|
448
|
+
* delete-api-client request when it opens. Console answers 404 for a client
|
|
449
|
+
* that is not in the organization, and 403 when the caller lacks the
|
|
450
|
+
* permission.
|
|
451
|
+
*/
|
|
452
|
+
static async readApiClient(params) {
|
|
453
|
+
const { orgId, clientUuid } = params.params;
|
|
454
|
+
const serviceContext = {
|
|
455
|
+
method: {
|
|
456
|
+
name: "ConsoleApprovalsM2MService.readApiClient",
|
|
457
|
+
url: `api/admin/approvals/orgs/${orgId}/api-clients/${clientUuid}`,
|
|
458
|
+
normalizedUrl: "api/admin/approvals/orgs/:orgId/api-clients/:clientUuid",
|
|
459
|
+
type: "get"
|
|
460
|
+
},
|
|
461
|
+
source: params.config.metrics?.source || "unset",
|
|
462
|
+
target: { name: "console", type: "internal" }
|
|
463
|
+
};
|
|
464
|
+
const response = await request({
|
|
465
|
+
config: params.config,
|
|
466
|
+
base: { id: "console" },
|
|
467
|
+
url: serviceContext.method.url,
|
|
468
|
+
method: serviceContext.method.type,
|
|
469
|
+
metricsDetails: serviceContext,
|
|
470
|
+
responseType: "json"
|
|
471
|
+
});
|
|
472
|
+
if (!response.ok || !response.body) {
|
|
473
|
+
throw new HttpError(
|
|
474
|
+
`${serviceContext.method.name}: ${response.status} ${response.statusText}`,
|
|
475
|
+
response.status,
|
|
476
|
+
response.statusText
|
|
477
|
+
);
|
|
478
|
+
}
|
|
479
|
+
return response.body;
|
|
480
|
+
}
|
|
413
481
|
/**
|
|
414
482
|
* The corpses of one kind now, for the request that deletes them. Console
|
|
415
483
|
* reads them from its watch of Kubernetes and from its rows, as the
|
|
@@ -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 ChangeGenerationVersionsResult,\n ClusterBulkStepRequestDto,\n ClusterBulkStepResultDto,\n ClusterCorpseKind,\n ClusterCorpsesDto,\n ClusterModificationConfigDto,\n ClusterPlanModificationConfig,\n ClusterPlanTypeClustersDto,\n ClusterPlanTypeStateDto,\n ClusterTtlDeletionResult,\n DeleteClusterCorpseResult,\n EditGenerationResult,\n ForceDeleteClusterPlanTypeStepResult,\n GenerationEnvVarsDto,\n GenerationImageVersionsDto,\n MoveClusterOwnerResult,\n ReleaseTrainPreview,\n ReleaseTrainPublishPayload,\n ReleaseTrainRollbackPayload,\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'\nimport type { GenerationService } from './generation.service.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 * Whether the active modification config stays on the cluster. Absent\n * reads as false: the change removes it.\n */\n keepModification?: boolean\n }\n}\n\nexport interface ReadClusterCorpsesRequest extends RequestBaseParams {\n params: { kind: ClusterCorpseKind }\n}\n\nexport interface DeleteClusterCorpseThroughApprovalRequest\n extends RequestBaseParams {\n params: { kind: ClusterCorpseKind; clusterId: string }\n body: {\n actor: ApprovalM2mActor\n /** The context of a `k8s` corpse, where console deletes the resource. */\n k8sContextUuid?: string\n /** The uid of the resource of a `k8s` corpse. See `ClusterCorpseDto.resourceUid`. */\n resourceUid?: string\n }\n}\n\nexport interface ReadClusterPlanTypeClustersRequest extends RequestBaseParams {\n params: { planTypeId: string }\n}\n\nexport interface DeleteClusterOfPlanTypeThroughApprovalRequest\n extends RequestBaseParams {\n params: { planTypeId: string; clusterId: string }\n body: { actor: ApprovalM2mActor }\n}\n\nexport interface DeleteClusterPlanTypeThroughApprovalRequest\n extends RequestBaseParams {\n params: { planTypeId: string }\n body: { actor: ApprovalM2mActor }\n}\n\nexport interface ReadClusterPlanTypeStateRequest extends RequestBaseParams {\n params: { clusterId: string }\n query: {\n /** The organization that owns the cluster. Console refuses another one. */\n orgId: string\n /** The plan type of the question: its active plan is in the answer. */\n toPlanTypeUuid: string\n }\n}\n\nexport interface ChangeGenerationVersionsThroughApprovalRequest\n extends RequestBaseParams {\n params: { generationId: string }\n body: {\n actor: ApprovalM2mActor\n /**\n * The image versions to write. A key that is absent keeps its value.\n * An empty string clears an optional one. The env var fields are not\n * accepted: see `GENERATION_IMAGE_VERSION_KEYS`.\n */\n versions: GenerationImageVersionsDto\n /**\n * The values that the person who asked READ, one for each key of\n * `versions`. Console compares them with the generation when the action\n * runs, and changes nothing when one differs.\n */\n expectedVersions: GenerationImageVersionsDto\n }\n}\n\nexport interface EditGenerationThroughApprovalRequest\n extends RequestBaseParams {\n params: { generationId: string }\n body: {\n actor: ApprovalM2mActor\n /** The new name. Absent keeps the name. */\n name?: string\n /** The name that the person who asked READ. Necessary with `name`. */\n expectedName?: string\n /**\n * The env var text to write, by key. A key that is absent keeps its\n * value. An empty string clears the field.\n */\n envVars: GenerationEnvVarsDto\n /**\n * The text that the person who asked READ, one for each key of\n * `envVars`. Console compares it with the generation when the action\n * runs, and changes nothing when one differs.\n */\n expectedEnvVars: GenerationEnvVarsDto\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 DeleteClusterPastTtlThroughApprovalRequest\n extends RequestBaseParams {\n params: { clusterId: string }\n body: {\n actor: ApprovalM2mActor\n /** The owner that the request names. Console keeps a cluster with another. */\n orgId: string\n }\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/** The publish and rollback requests carry no `preview`. Console reads it. */\nexport type ReleaseTrainPublishRequest = Omit<\n ReleaseTrainPublishPayload,\n 'preview'\n>\nexport type ReleaseTrainRollbackRequest = Omit<\n ReleaseTrainRollbackPayload,\n 'preview'\n>\n\n/** The answer of `GenerationService.publishReleaseTrain`. */\nexport type PublishReleaseTrainThroughApprovalResult = NonNullable<\n Awaited<ReturnType<typeof GenerationService.publishReleaseTrain>>\n>\n\n/** The answer of `GenerationService.rollbackReleaseTrain`. */\nexport type RollbackReleaseTrainThroughApprovalResult = NonNullable<\n Awaited<ReturnType<typeof GenerationService.rollbackReleaseTrain>>\n>\n\nexport interface PreviewReleaseTrainPublishRequest extends RequestBaseParams {\n body: { request: ReleaseTrainPublishRequest }\n}\n\nexport interface PublishReleaseTrainThroughApprovalRequest\n extends RequestBaseParams {\n body: { actor: ApprovalM2mActor; request: ReleaseTrainPublishRequest }\n}\n\nexport interface PreviewReleaseTrainRollbackRequest extends RequestBaseParams {\n body: { request: ReleaseTrainRollbackRequest }\n}\n\nexport interface RollbackReleaseTrainThroughApprovalRequest\n extends RequestBaseParams {\n body: { actor: ApprovalM2mActor; request: ReleaseTrainRollbackRequest }\n}\n\n/** What console answers for a custom cluster plan call. */\nexport interface CustomClusterPlanThroughApprovalResult {\n clusterPlanId: string\n}\n\nexport interface CreateCustomGenerationThroughApprovalRequest\n extends RequestBaseParams {\n body: {\n actor: ApprovalM2mActor\n generationId: string\n name: string\n versions: Record<string, string>\n upgradeableFrom?: string[]\n }\n}\n\nexport interface CheckCustomGenerationRemovalRequest extends RequestBaseParams {\n params: { generationId: string }\n body: { actor: ApprovalM2mActor; forDelete: boolean }\n}\n\nexport interface DeleteCustomGenerationThroughApprovalRequest\n extends RequestBaseParams {\n params: { generationId: string }\n body: { actor: ApprovalM2mActor }\n}\n\n/** What console answers for a custom generation call. */\nexport interface CustomGenerationThroughApprovalResult {\n generationId: string\n}\n\nexport interface ApplySelfServiceModificationRequest extends RequestBaseParams {\n params: { clusterUuid: string }\n body: {\n actor: ApprovalM2mActor\n /** The organization that owns the cluster. Console refuses another one. */\n orgId: string\n description: string\n planModifications: ClusterPlanModificationConfig[]\n /**\n * An ISO date, today to 30 days ahead. With no date, the config does not\n * expire.\n */\n expiresAt?: string\n }\n}\n\nexport interface DeactivateSelfServiceModificationRequest\n extends RequestBaseParams {\n params: { clusterUuid: string }\n body: {\n actor: ApprovalM2mActor\n orgId: string\n configId: string\n }\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 * The cluster as a plan type change reads it: the fields of the stale\n * guard of `changeClusterPlanType`, for a comparison before a request\n * opens. See `ClusterPlanTypeStateDto`.\n */\n public static async readClusterPlanTypeState(\n params: ReadClusterPlanTypeStateRequest,\n ): Promise<ClusterPlanTypeStateDto> {\n const query = new URLSearchParams({\n orgId: params.query.orgId,\n toPlanTypeUuid: params.query.toPlanTypeUuid,\n })\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'ConsoleApprovalsM2MService.readClusterPlanTypeState',\n url: `api/admin/approvals/clusters/${params.params.clusterId}/plan-type-state?${query.toString()}`,\n normalizedUrl:\n 'api/admin/approvals/clusters/:clusterId/plan-type-state',\n type: 'get',\n },\n source: params.config.metrics?.source || 'unset',\n target: { name: 'console', type: 'internal' },\n }\n\n const response = await request<ClusterPlanTypeStateDto>({\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 })\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 * Changes the mutable versions of one generation, and restarts its clusters.\n *\n * Console answers 409 when a value that the request expected is not the\n * value of the generation any more.\n */\n public static async changeGenerationVersions(\n params: ChangeGenerationVersionsThroughApprovalRequest,\n ): Promise<ChangeGenerationVersionsResult> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'ConsoleApprovalsM2MService.changeGenerationVersions',\n url: `api/admin/approvals/generations/${params.params.generationId}/versions`,\n normalizedUrl: 'api/admin/approvals/generations/:generationId/versions',\n type: 'patch',\n },\n source: params.config.metrics?.source || 'unset',\n target: { name: 'console', type: 'internal' },\n }\n\n const response = await request<ChangeGenerationVersionsResult>({\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 * Changes the name and the env vars of one generation, and sends the new\n * spec to its clusters.\n *\n * Console answers 409 when a value that the request expected is not the\n * value of the generation any more, and is not the requested value either.\n * When the generation already holds the requested value, console writes\n * nothing, sends the spec again and answers `reapplied: true`. The body\n * holds env var text, so no log line of this call carries a value of the\n * body.\n */\n public static async editGeneration(\n params: EditGenerationThroughApprovalRequest,\n ): Promise<EditGenerationResult> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'ConsoleApprovalsM2MService.editGeneration',\n url: `api/admin/approvals/generations/${params.params.generationId}/edit`,\n normalizedUrl: 'api/admin/approvals/generations/:generationId/edit',\n type: 'patch',\n },\n source: params.config.metrics?.source || 'unset',\n target: { name: 'console', type: 'internal' },\n }\n\n const response = await request<EditGenerationResult>({\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 redactBody: true,\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 * 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 /**\n * Deletes a cluster whose TTL ran out. Console tests the TTL and the owner\n * again first, and answers `kept` when the cluster stays.\n */\n public static async deleteClusterPastTtl(\n params: DeleteClusterPastTtlThroughApprovalRequest,\n ): Promise<ClusterTtlDeletionResult> {\n const { clusterId } = params.params\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'ConsoleApprovalsM2MService.deleteClusterPastTtl',\n url: `api/admin/approvals/clusters/${clusterId}/ttl-expiry`,\n normalizedUrl: 'api/admin/approvals/clusters/:clusterId/ttl-expiry',\n type: 'delete',\n },\n source: params.config.metrics?.source || 'unset',\n target: { name: 'console', type: 'internal' },\n }\n\n const response = await request<ClusterTtlDeletionResult>({\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.callApprovalRoute<CustomClusterPlanThroughApprovalResult>(\n {\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 /**\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.callApprovalRoute<CustomClusterPlanThroughApprovalResult>(\n {\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\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.callApprovalRoute<CustomClusterPlanThroughApprovalResult>(\n {\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\n /** Creates a bespoke generation for a Camundi, with the uuid that the caller gives. */\n public static async createCustomGeneration(\n params: CreateCustomGenerationThroughApprovalRequest,\n ): Promise<CustomGenerationThroughApprovalResult> {\n return ConsoleApprovalsM2MService.callApprovalRoute<CustomGenerationThroughApprovalResult>(\n {\n config: params.config,\n name: 'ConsoleApprovalsM2MService.createCustomGeneration',\n url: 'api/admin/approvals/generations',\n normalizedUrl: 'api/admin/approvals/generations',\n type: 'post',\n body: params.body,\n },\n )\n }\n\n /**\n * Asks whether a Camundi may remove a generation. Console answers 404 for a\n * generation of another person, or a generation that is not bespoke, and 409\n * for a delete that it refuses. A bespoke generation that the Camundi\n * created in the admin tool counts as theirs.\n */\n public static async checkCustomGenerationRemoval(\n params: CheckCustomGenerationRemovalRequest,\n ): Promise<CustomGenerationThroughApprovalResult> {\n const { generationId } = params.params\n return ConsoleApprovalsM2MService.callApprovalRoute<CustomGenerationThroughApprovalResult>(\n {\n config: params.config,\n name: 'ConsoleApprovalsM2MService.checkCustomGenerationRemoval',\n url: `api/admin/approvals/generations/${generationId}/removal-check`,\n normalizedUrl:\n 'api/admin/approvals/generations/:generationId/removal-check',\n type: 'post',\n body: params.body,\n },\n )\n }\n\n /** Deletes a custom generation that the Camundi created. It cannot be undone. */\n public static async deleteCustomGeneration(\n params: DeleteCustomGenerationThroughApprovalRequest,\n ): Promise<CustomGenerationThroughApprovalResult> {\n const { generationId } = params.params\n return ConsoleApprovalsM2MService.callApprovalRoute<CustomGenerationThroughApprovalResult>(\n {\n config: params.config,\n name: 'ConsoleApprovalsM2MService.deleteCustomGeneration',\n url: `api/admin/approvals/generations/${generationId}`,\n normalizedUrl: 'api/admin/approvals/generations/:generationId',\n type: 'delete',\n body: params.body,\n },\n )\n }\n\n /**\n * The corpses of one kind now, for the request that deletes them. Console\n * reads them from its watch of Kubernetes and from its rows, as the\n * \"Corpses\" tab does.\n */\n public static async readClusterCorpses(\n params: ReadClusterCorpsesRequest,\n ): Promise<ClusterCorpsesDto> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'ConsoleApprovalsM2MService.readClusterCorpses',\n url: `api/admin/approvals/cluster-corpses/${params.params.kind}`,\n normalizedUrl: 'api/admin/approvals/cluster-corpses/:kind',\n type: 'get',\n },\n source: params.config.metrics?.source || 'unset',\n target: { name: 'console', type: 'internal' },\n }\n\n const response = await request<ClusterCorpsesDto>({\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 })\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 * Deletes one corpse of a request. It cannot be undone.\n *\n * Console reads the live source again first, and deletes nothing when the\n * cluster is not a corpse any more (`not-a-corpse`) or when there is nothing\n * to delete (`gone`). It throws when it cannot read the live source.\n */\n public static async deleteClusterCorpse(\n params: DeleteClusterCorpseThroughApprovalRequest,\n ): Promise<DeleteClusterCorpseResult> {\n const { kind, clusterId } = params.params\n return ConsoleApprovalsM2MService.callApprovalRoute<DeleteClusterCorpseResult>(\n {\n config: params.config,\n name: 'ConsoleApprovalsM2MService.deleteClusterCorpse',\n url: `api/admin/approvals/cluster-corpses/${kind}/${clusterId}`,\n normalizedUrl: 'api/admin/approvals/cluster-corpses/:kind/:clusterId',\n type: 'delete',\n body: params.body,\n },\n )\n }\n\n /**\n * The clusters of a plan type now, for the request that force deletes it.\n * Console answers 404 when the plan type does not exist.\n */\n public static async readClusterPlanTypeClusters(\n params: ReadClusterPlanTypeClustersRequest,\n ): Promise<ClusterPlanTypeClustersDto> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'ConsoleApprovalsM2MService.readClusterPlanTypeClusters',\n url: `api/admin/approvals/cluster-plan-types/${params.params.planTypeId}/clusters`,\n normalizedUrl:\n 'api/admin/approvals/cluster-plan-types/:planTypeId/clusters',\n type: 'get',\n },\n source: params.config.metrics?.source || 'unset',\n target: { name: 'console', type: 'internal' },\n }\n\n const response = await request<ClusterPlanTypeClustersDto>({\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 })\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 * Deletes one cluster of a plan type, for a force delete request. It cannot\n * be undone. Console answers `gone` for a cluster that does not exist or\n * that is on another plan type now, and deletes nothing then.\n */\n public static async deleteClusterOfPlanType(\n params: DeleteClusterOfPlanTypeThroughApprovalRequest,\n ): Promise<ForceDeleteClusterPlanTypeStepResult> {\n const { planTypeId, clusterId } = params.params\n return ConsoleApprovalsM2MService.callApprovalRoute<ForceDeleteClusterPlanTypeStepResult>(\n {\n config: params.config,\n name: 'ConsoleApprovalsM2MService.deleteClusterOfPlanType',\n url: `api/admin/approvals/cluster-plan-types/${planTypeId}/clusters/${clusterId}`,\n normalizedUrl:\n 'api/admin/approvals/cluster-plan-types/:planTypeId/clusters/:clusterId',\n type: 'delete',\n body: params.body,\n },\n )\n }\n\n /**\n * Deletes a plan type that no cluster uses, for a force delete request. It\n * cannot be undone. Console answers 409 while a cluster still uses the\n * type, and `gone` when the type does not exist.\n */\n public static async deleteClusterPlanType(\n params: DeleteClusterPlanTypeThroughApprovalRequest,\n ): Promise<ForceDeleteClusterPlanTypeStepResult> {\n const { planTypeId } = params.params\n return ConsoleApprovalsM2MService.callApprovalRoute<ForceDeleteClusterPlanTypeStepResult>(\n {\n config: params.config,\n name: 'ConsoleApprovalsM2MService.deleteClusterPlanType',\n url: `api/admin/approvals/cluster-plan-types/${planTypeId}`,\n normalizedUrl: 'api/admin/approvals/cluster-plan-types/:planTypeId',\n type: 'delete',\n body: params.body,\n },\n )\n }\n\n /** Reads what a publish would change. It changes nothing. */\n public static async previewReleaseTrainPublish(\n params: PreviewReleaseTrainPublishRequest,\n ): Promise<ReleaseTrainPreview> {\n return ConsoleApprovalsM2MService.callApprovalRoute<ReleaseTrainPreview>({\n config: params.config,\n name: 'ConsoleApprovalsM2MService.previewReleaseTrainPublish',\n url: 'api/admin/approvals/release-train/publish/preview',\n normalizedUrl: 'api/admin/approvals/release-train/publish/preview',\n type: 'post',\n body: params.body,\n })\n }\n\n /** Publishes a release train generation. */\n public static async publishReleaseTrain(\n params: PublishReleaseTrainThroughApprovalRequest,\n ): Promise<PublishReleaseTrainThroughApprovalResult> {\n return ConsoleApprovalsM2MService.callApprovalRoute<PublishReleaseTrainThroughApprovalResult>(\n {\n config: params.config,\n name: 'ConsoleApprovalsM2MService.publishReleaseTrain',\n url: 'api/admin/approvals/release-train/publish',\n normalizedUrl: 'api/admin/approvals/release-train/publish',\n type: 'post',\n body: params.body,\n },\n )\n }\n\n /** Reads what a rollback would change. It changes nothing. */\n public static async previewReleaseTrainRollback(\n params: PreviewReleaseTrainRollbackRequest,\n ): Promise<ReleaseTrainPreview> {\n return ConsoleApprovalsM2MService.callApprovalRoute<ReleaseTrainPreview>({\n config: params.config,\n name: 'ConsoleApprovalsM2MService.previewReleaseTrainRollback',\n url: 'api/admin/approvals/release-train/rollback/preview',\n normalizedUrl: 'api/admin/approvals/release-train/rollback/preview',\n type: 'post',\n body: params.body,\n })\n }\n\n /** Rolls back a release train generation. */\n public static async rollbackReleaseTrain(\n params: RollbackReleaseTrainThroughApprovalRequest,\n ): Promise<RollbackReleaseTrainThroughApprovalResult> {\n return ConsoleApprovalsM2MService.callApprovalRoute<RollbackReleaseTrainThroughApprovalResult>(\n {\n config: params.config,\n name: 'ConsoleApprovalsM2MService.rollbackReleaseTrain',\n url: 'api/admin/approvals/release-train/rollback',\n normalizedUrl: 'api/admin/approvals/release-train/rollback',\n type: 'post',\n body: params.body,\n },\n )\n }\n\n /**\n * Applies a cluster modification for the owner of the cluster, with no\n * approval. Console answers the new config.\n */\n public static async applySelfServiceModification(\n params: ApplySelfServiceModificationRequest,\n ): Promise<ClusterModificationConfigDto> {\n const { clusterUuid } = params.params\n return ConsoleApprovalsM2MService.callApprovalRoute<ClusterModificationConfigDto>(\n {\n config: params.config,\n name: 'ConsoleApprovalsM2MService.applySelfServiceModification',\n url: `api/admin/approvals/clusters/${clusterUuid}/self-service-modification`,\n normalizedUrl:\n 'api/admin/approvals/clusters/:clusterUuid/self-service-modification',\n type: 'post',\n body: params.body,\n },\n )\n }\n\n /** Deactivates the active config of a cluster for its owner. */\n public static async deactivateSelfServiceModification(\n params: DeactivateSelfServiceModificationRequest,\n ): Promise<ClusterModificationConfigDto> {\n const { clusterUuid } = params.params\n return ConsoleApprovalsM2MService.callApprovalRoute<ClusterModificationConfigDto>(\n {\n config: params.config,\n name: 'ConsoleApprovalsM2MService.deactivateSelfServiceModification',\n url: `api/admin/approvals/clusters/${clusterUuid}/self-service-modification/deactivate`,\n normalizedUrl:\n 'api/admin/approvals/clusters/:clusterUuid/self-service-modification/deactivate',\n type: 'post',\n body: params.body,\n },\n )\n }\n\n private static async callApprovalRoute<T>(args: {\n config: RequestBaseParams['config']\n name: string\n url: string\n normalizedUrl: string\n type: 'post' | 'delete'\n body: unknown\n }): Promise<T> {\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<T>({\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 ChangeGenerationVersionsResult,\n ClusterBulkStepRequestDto,\n ClusterBulkStepResultDto,\n ClusterCorpseKind,\n ClusterCorpsesDto,\n ClusterModificationConfigDto,\n ClusterPlanModificationConfig,\n ClusterPlanTypeClustersDto,\n ClusterPlanTypeStateDto,\n ClusterTtlDeletionResult,\n DeleteClusterCorpseResult,\n EditGenerationResult,\n ForceDeleteClusterPlanTypeStepResult,\n GenerationEnvVarsDto,\n GenerationImageVersionsDto,\n MoveClusterOwnerResult,\n ReleaseTrainPreview,\n ReleaseTrainPublishPayload,\n ReleaseTrainRollbackPayload,\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'\nimport type { GenerationService } from './generation.service.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 * Whether the active modification config stays on the cluster. Absent\n * reads as false: the change removes it.\n */\n keepModification?: boolean\n }\n}\n\nexport interface ReadClusterCorpsesRequest extends RequestBaseParams {\n params: { kind: ClusterCorpseKind }\n}\n\nexport interface DeleteClusterCorpseThroughApprovalRequest\n extends RequestBaseParams {\n params: { kind: ClusterCorpseKind; clusterId: string }\n body: {\n actor: ApprovalM2mActor\n /** The context of a `k8s` corpse, where console deletes the resource. */\n k8sContextUuid?: string\n /** The uid of the resource of a `k8s` corpse. See `ClusterCorpseDto.resourceUid`. */\n resourceUid?: string\n }\n}\n\nexport interface ReadClusterPlanTypeClustersRequest extends RequestBaseParams {\n params: { planTypeId: string }\n}\n\nexport interface DeleteClusterOfPlanTypeThroughApprovalRequest\n extends RequestBaseParams {\n params: { planTypeId: string; clusterId: string }\n body: { actor: ApprovalM2mActor }\n}\n\nexport interface DeleteClusterPlanTypeThroughApprovalRequest\n extends RequestBaseParams {\n params: { planTypeId: string }\n body: { actor: ApprovalM2mActor }\n}\n\nexport interface ReadClusterPlanTypeStateRequest extends RequestBaseParams {\n params: { clusterId: string }\n query: {\n /** The organization that owns the cluster. Console refuses another one. */\n orgId: string\n /** The plan type of the question: its active plan is in the answer. */\n toPlanTypeUuid: string\n }\n}\n\nexport interface ChangeGenerationVersionsThroughApprovalRequest\n extends RequestBaseParams {\n params: { generationId: string }\n body: {\n actor: ApprovalM2mActor\n /**\n * The image versions to write. A key that is absent keeps its value.\n * An empty string clears an optional one. The env var fields are not\n * accepted: see `GENERATION_IMAGE_VERSION_KEYS`.\n */\n versions: GenerationImageVersionsDto\n /**\n * The values that the person who asked READ, one for each key of\n * `versions`. Console compares them with the generation when the action\n * runs, and changes nothing when one differs.\n */\n expectedVersions: GenerationImageVersionsDto\n }\n}\n\nexport interface EditGenerationThroughApprovalRequest\n extends RequestBaseParams {\n params: { generationId: string }\n body: {\n actor: ApprovalM2mActor\n /** The new name. Absent keeps the name. */\n name?: string\n /** The name that the person who asked READ. Necessary with `name`. */\n expectedName?: string\n /**\n * The env var text to write, by key. A key that is absent keeps its\n * value. An empty string clears the field.\n */\n envVars: GenerationEnvVarsDto\n /**\n * The text that the person who asked READ, one for each key of\n * `envVars`. Console compares it with the generation when the action\n * runs, and changes nothing when one differs.\n */\n expectedEnvVars: GenerationEnvVarsDto\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 DeleteApiClientThroughApprovalRequest\n extends RequestBaseParams {\n /** `clientUuid` is the `uuid` of the client, not its OAuth `clientId`. */\n params: { orgId: string; clientUuid: string }\n body: { actor: ApprovalM2mActor }\n}\n\nexport interface ReadApiClientThroughApprovalRequest extends RequestBaseParams {\n /** `clientUuid` is the `uuid` of the client, not its OAuth `clientId`. */\n params: { orgId: string; clientUuid: string }\n}\n\n/** The names of a Console API client, as console holds them. */\nexport interface ApprovalApiClientDto {\n uuid: string\n name: string\n /** The OAuth client id, which the customer knows. */\n clientId: string\n}\n\nexport interface DeleteClusterPastTtlThroughApprovalRequest\n extends RequestBaseParams {\n params: { clusterId: string }\n body: {\n actor: ApprovalM2mActor\n /** The owner that the request names. Console keeps a cluster with another. */\n orgId: string\n }\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/** The publish and rollback requests carry no `preview`. Console reads it. */\nexport type ReleaseTrainPublishRequest = Omit<\n ReleaseTrainPublishPayload,\n 'preview'\n>\nexport type ReleaseTrainRollbackRequest = Omit<\n ReleaseTrainRollbackPayload,\n 'preview'\n>\n\n/** The answer of `GenerationService.publishReleaseTrain`. */\nexport type PublishReleaseTrainThroughApprovalResult = NonNullable<\n Awaited<ReturnType<typeof GenerationService.publishReleaseTrain>>\n>\n\n/** The answer of `GenerationService.rollbackReleaseTrain`. */\nexport type RollbackReleaseTrainThroughApprovalResult = NonNullable<\n Awaited<ReturnType<typeof GenerationService.rollbackReleaseTrain>>\n>\n\nexport interface PreviewReleaseTrainPublishRequest extends RequestBaseParams {\n body: { request: ReleaseTrainPublishRequest }\n}\n\nexport interface PublishReleaseTrainThroughApprovalRequest\n extends RequestBaseParams {\n body: { actor: ApprovalM2mActor; request: ReleaseTrainPublishRequest }\n}\n\nexport interface PreviewReleaseTrainRollbackRequest extends RequestBaseParams {\n body: { request: ReleaseTrainRollbackRequest }\n}\n\nexport interface RollbackReleaseTrainThroughApprovalRequest\n extends RequestBaseParams {\n body: { actor: ApprovalM2mActor; request: ReleaseTrainRollbackRequest }\n}\n\n/** What console answers for a custom cluster plan call. */\nexport interface CustomClusterPlanThroughApprovalResult {\n clusterPlanId: string\n}\n\nexport interface CreateCustomGenerationThroughApprovalRequest\n extends RequestBaseParams {\n body: {\n actor: ApprovalM2mActor\n generationId: string\n name: string\n versions: Record<string, string>\n upgradeableFrom?: string[]\n }\n}\n\nexport interface CheckCustomGenerationRemovalRequest extends RequestBaseParams {\n params: { generationId: string }\n body: { actor: ApprovalM2mActor; forDelete: boolean }\n}\n\nexport interface DeleteCustomGenerationThroughApprovalRequest\n extends RequestBaseParams {\n params: { generationId: string }\n body: { actor: ApprovalM2mActor }\n}\n\n/** What console answers for a custom generation call. */\nexport interface CustomGenerationThroughApprovalResult {\n generationId: string\n}\n\nexport interface ApplySelfServiceModificationRequest extends RequestBaseParams {\n params: { clusterUuid: string }\n body: {\n actor: ApprovalM2mActor\n /** The organization that owns the cluster. Console refuses another one. */\n orgId: string\n description: string\n planModifications: ClusterPlanModificationConfig[]\n /**\n * An ISO date, today to 30 days ahead. With no date, the config does not\n * expire.\n */\n expiresAt?: string\n }\n}\n\nexport interface DeactivateSelfServiceModificationRequest\n extends RequestBaseParams {\n params: { clusterUuid: string }\n body: {\n actor: ApprovalM2mActor\n orgId: string\n configId: string\n }\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 * The cluster as a plan type change reads it: the fields of the stale\n * guard of `changeClusterPlanType`, for a comparison before a request\n * opens. See `ClusterPlanTypeStateDto`.\n */\n public static async readClusterPlanTypeState(\n params: ReadClusterPlanTypeStateRequest,\n ): Promise<ClusterPlanTypeStateDto> {\n const query = new URLSearchParams({\n orgId: params.query.orgId,\n toPlanTypeUuid: params.query.toPlanTypeUuid,\n })\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'ConsoleApprovalsM2MService.readClusterPlanTypeState',\n url: `api/admin/approvals/clusters/${params.params.clusterId}/plan-type-state?${query.toString()}`,\n normalizedUrl:\n 'api/admin/approvals/clusters/:clusterId/plan-type-state',\n type: 'get',\n },\n source: params.config.metrics?.source || 'unset',\n target: { name: 'console', type: 'internal' },\n }\n\n const response = await request<ClusterPlanTypeStateDto>({\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 })\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 * Changes the mutable versions of one generation, and restarts its clusters.\n *\n * Console answers 409 when a value that the request expected is not the\n * value of the generation any more.\n */\n public static async changeGenerationVersions(\n params: ChangeGenerationVersionsThroughApprovalRequest,\n ): Promise<ChangeGenerationVersionsResult> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'ConsoleApprovalsM2MService.changeGenerationVersions',\n url: `api/admin/approvals/generations/${params.params.generationId}/versions`,\n normalizedUrl: 'api/admin/approvals/generations/:generationId/versions',\n type: 'patch',\n },\n source: params.config.metrics?.source || 'unset',\n target: { name: 'console', type: 'internal' },\n }\n\n const response = await request<ChangeGenerationVersionsResult>({\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 * Changes the name and the env vars of one generation, and sends the new\n * spec to its clusters.\n *\n * Console answers 409 when a value that the request expected is not the\n * value of the generation any more, and is not the requested value either.\n * When the generation already holds the requested value, console writes\n * nothing, sends the spec again and answers `reapplied: true`. The body\n * holds env var text, so no log line of this call carries a value of the\n * body.\n */\n public static async editGeneration(\n params: EditGenerationThroughApprovalRequest,\n ): Promise<EditGenerationResult> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'ConsoleApprovalsM2MService.editGeneration',\n url: `api/admin/approvals/generations/${params.params.generationId}/edit`,\n normalizedUrl: 'api/admin/approvals/generations/:generationId/edit',\n type: 'patch',\n },\n source: params.config.metrics?.source || 'unset',\n target: { name: 'console', type: 'internal' },\n }\n\n const response = await request<EditGenerationResult>({\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 redactBody: true,\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 * 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 /**\n * Deletes a Console API client of an organization. Console answers 404 for\n * a client that is gone, and 403 for a client of another organization.\n */\n public static async deleteApiClient(\n params: DeleteApiClientThroughApprovalRequest,\n ): Promise<void> {\n const { orgId, clientUuid } = params.params\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'ConsoleApprovalsM2MService.deleteApiClient',\n url: `api/admin/approvals/orgs/${orgId}/api-clients/${clientUuid}`,\n normalizedUrl:\n 'api/admin/approvals/orgs/:orgId/api-clients/:clientUuid',\n type: 'delete',\n },\n source: params.config.metrics?.source || 'unset',\n target: { name: 'console', type: 'internal' },\n }\n\n const response = await request({\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 /**\n * Deletes a cluster whose TTL ran out. Console tests the TTL and the owner\n * again first, and answers `kept` when the cluster stays.\n */\n public static async deleteClusterPastTtl(\n params: DeleteClusterPastTtlThroughApprovalRequest,\n ): Promise<ClusterTtlDeletionResult> {\n const { clusterId } = params.params\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'ConsoleApprovalsM2MService.deleteClusterPastTtl',\n url: `api/admin/approvals/clusters/${clusterId}/ttl-expiry`,\n normalizedUrl: 'api/admin/approvals/clusters/:clusterId/ttl-expiry',\n type: 'delete',\n },\n source: params.config.metrics?.source || 'unset',\n target: { name: 'console', type: 'internal' },\n }\n\n const response = await request<ClusterTtlDeletionResult>({\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.callApprovalRoute<CustomClusterPlanThroughApprovalResult>(\n {\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 /**\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.callApprovalRoute<CustomClusterPlanThroughApprovalResult>(\n {\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\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.callApprovalRoute<CustomClusterPlanThroughApprovalResult>(\n {\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\n /** Creates a bespoke generation for a Camundi, with the uuid that the caller gives. */\n public static async createCustomGeneration(\n params: CreateCustomGenerationThroughApprovalRequest,\n ): Promise<CustomGenerationThroughApprovalResult> {\n return ConsoleApprovalsM2MService.callApprovalRoute<CustomGenerationThroughApprovalResult>(\n {\n config: params.config,\n name: 'ConsoleApprovalsM2MService.createCustomGeneration',\n url: 'api/admin/approvals/generations',\n normalizedUrl: 'api/admin/approvals/generations',\n type: 'post',\n body: params.body,\n },\n )\n }\n\n /**\n * Asks whether a Camundi may remove a generation. Console answers 404 for a\n * generation of another person, or a generation that is not bespoke, and 409\n * for a delete that it refuses. A bespoke generation that the Camundi\n * created in the admin tool counts as theirs.\n */\n public static async checkCustomGenerationRemoval(\n params: CheckCustomGenerationRemovalRequest,\n ): Promise<CustomGenerationThroughApprovalResult> {\n const { generationId } = params.params\n return ConsoleApprovalsM2MService.callApprovalRoute<CustomGenerationThroughApprovalResult>(\n {\n config: params.config,\n name: 'ConsoleApprovalsM2MService.checkCustomGenerationRemoval',\n url: `api/admin/approvals/generations/${generationId}/removal-check`,\n normalizedUrl:\n 'api/admin/approvals/generations/:generationId/removal-check',\n type: 'post',\n body: params.body,\n },\n )\n }\n\n /** Deletes a custom generation that the Camundi created. It cannot be undone. */\n public static async deleteCustomGeneration(\n params: DeleteCustomGenerationThroughApprovalRequest,\n ): Promise<CustomGenerationThroughApprovalResult> {\n const { generationId } = params.params\n return ConsoleApprovalsM2MService.callApprovalRoute<CustomGenerationThroughApprovalResult>(\n {\n config: params.config,\n name: 'ConsoleApprovalsM2MService.deleteCustomGeneration',\n url: `api/admin/approvals/generations/${generationId}`,\n normalizedUrl: 'api/admin/approvals/generations/:generationId',\n type: 'delete',\n body: params.body,\n },\n )\n }\n\n /**\n * The names of a Console API client of an organization, for a\n * delete-api-client request when it opens. Console answers 404 for a client\n * that is not in the organization, and 403 when the caller lacks the\n * permission.\n */\n public static async readApiClient(\n params: ReadApiClientThroughApprovalRequest,\n ): Promise<ApprovalApiClientDto> {\n const { orgId, clientUuid } = params.params\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'ConsoleApprovalsM2MService.readApiClient',\n url: `api/admin/approvals/orgs/${orgId}/api-clients/${clientUuid}`,\n normalizedUrl:\n 'api/admin/approvals/orgs/:orgId/api-clients/:clientUuid',\n type: 'get',\n },\n source: params.config.metrics?.source || 'unset',\n target: { name: 'console', type: 'internal' },\n }\n\n const response = await request<ApprovalApiClientDto>({\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 })\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 * The corpses of one kind now, for the request that deletes them. Console\n * reads them from its watch of Kubernetes and from its rows, as the\n * \"Corpses\" tab does.\n */\n public static async readClusterCorpses(\n params: ReadClusterCorpsesRequest,\n ): Promise<ClusterCorpsesDto> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'ConsoleApprovalsM2MService.readClusterCorpses',\n url: `api/admin/approvals/cluster-corpses/${params.params.kind}`,\n normalizedUrl: 'api/admin/approvals/cluster-corpses/:kind',\n type: 'get',\n },\n source: params.config.metrics?.source || 'unset',\n target: { name: 'console', type: 'internal' },\n }\n\n const response = await request<ClusterCorpsesDto>({\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 })\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 * Deletes one corpse of a request. It cannot be undone.\n *\n * Console reads the live source again first, and deletes nothing when the\n * cluster is not a corpse any more (`not-a-corpse`) or when there is nothing\n * to delete (`gone`). It throws when it cannot read the live source.\n */\n public static async deleteClusterCorpse(\n params: DeleteClusterCorpseThroughApprovalRequest,\n ): Promise<DeleteClusterCorpseResult> {\n const { kind, clusterId } = params.params\n return ConsoleApprovalsM2MService.callApprovalRoute<DeleteClusterCorpseResult>(\n {\n config: params.config,\n name: 'ConsoleApprovalsM2MService.deleteClusterCorpse',\n url: `api/admin/approvals/cluster-corpses/${kind}/${clusterId}`,\n normalizedUrl: 'api/admin/approvals/cluster-corpses/:kind/:clusterId',\n type: 'delete',\n body: params.body,\n },\n )\n }\n\n /**\n * The clusters of a plan type now, for the request that force deletes it.\n * Console answers 404 when the plan type does not exist.\n */\n public static async readClusterPlanTypeClusters(\n params: ReadClusterPlanTypeClustersRequest,\n ): Promise<ClusterPlanTypeClustersDto> {\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'ConsoleApprovalsM2MService.readClusterPlanTypeClusters',\n url: `api/admin/approvals/cluster-plan-types/${params.params.planTypeId}/clusters`,\n normalizedUrl:\n 'api/admin/approvals/cluster-plan-types/:planTypeId/clusters',\n type: 'get',\n },\n source: params.config.metrics?.source || 'unset',\n target: { name: 'console', type: 'internal' },\n }\n\n const response = await request<ClusterPlanTypeClustersDto>({\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 })\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 * Deletes one cluster of a plan type, for a force delete request. It cannot\n * be undone. Console answers `gone` for a cluster that does not exist or\n * that is on another plan type now, and deletes nothing then.\n */\n public static async deleteClusterOfPlanType(\n params: DeleteClusterOfPlanTypeThroughApprovalRequest,\n ): Promise<ForceDeleteClusterPlanTypeStepResult> {\n const { planTypeId, clusterId } = params.params\n return ConsoleApprovalsM2MService.callApprovalRoute<ForceDeleteClusterPlanTypeStepResult>(\n {\n config: params.config,\n name: 'ConsoleApprovalsM2MService.deleteClusterOfPlanType',\n url: `api/admin/approvals/cluster-plan-types/${planTypeId}/clusters/${clusterId}`,\n normalizedUrl:\n 'api/admin/approvals/cluster-plan-types/:planTypeId/clusters/:clusterId',\n type: 'delete',\n body: params.body,\n },\n )\n }\n\n /**\n * Deletes a plan type that no cluster uses, for a force delete request. It\n * cannot be undone. Console answers 409 while a cluster still uses the\n * type, and `gone` when the type does not exist.\n */\n public static async deleteClusterPlanType(\n params: DeleteClusterPlanTypeThroughApprovalRequest,\n ): Promise<ForceDeleteClusterPlanTypeStepResult> {\n const { planTypeId } = params.params\n return ConsoleApprovalsM2MService.callApprovalRoute<ForceDeleteClusterPlanTypeStepResult>(\n {\n config: params.config,\n name: 'ConsoleApprovalsM2MService.deleteClusterPlanType',\n url: `api/admin/approvals/cluster-plan-types/${planTypeId}`,\n normalizedUrl: 'api/admin/approvals/cluster-plan-types/:planTypeId',\n type: 'delete',\n body: params.body,\n },\n )\n }\n\n /** Reads what a publish would change. It changes nothing. */\n public static async previewReleaseTrainPublish(\n params: PreviewReleaseTrainPublishRequest,\n ): Promise<ReleaseTrainPreview> {\n return ConsoleApprovalsM2MService.callApprovalRoute<ReleaseTrainPreview>({\n config: params.config,\n name: 'ConsoleApprovalsM2MService.previewReleaseTrainPublish',\n url: 'api/admin/approvals/release-train/publish/preview',\n normalizedUrl: 'api/admin/approvals/release-train/publish/preview',\n type: 'post',\n body: params.body,\n })\n }\n\n /** Publishes a release train generation. */\n public static async publishReleaseTrain(\n params: PublishReleaseTrainThroughApprovalRequest,\n ): Promise<PublishReleaseTrainThroughApprovalResult> {\n return ConsoleApprovalsM2MService.callApprovalRoute<PublishReleaseTrainThroughApprovalResult>(\n {\n config: params.config,\n name: 'ConsoleApprovalsM2MService.publishReleaseTrain',\n url: 'api/admin/approvals/release-train/publish',\n normalizedUrl: 'api/admin/approvals/release-train/publish',\n type: 'post',\n body: params.body,\n },\n )\n }\n\n /** Reads what a rollback would change. It changes nothing. */\n public static async previewReleaseTrainRollback(\n params: PreviewReleaseTrainRollbackRequest,\n ): Promise<ReleaseTrainPreview> {\n return ConsoleApprovalsM2MService.callApprovalRoute<ReleaseTrainPreview>({\n config: params.config,\n name: 'ConsoleApprovalsM2MService.previewReleaseTrainRollback',\n url: 'api/admin/approvals/release-train/rollback/preview',\n normalizedUrl: 'api/admin/approvals/release-train/rollback/preview',\n type: 'post',\n body: params.body,\n })\n }\n\n /** Rolls back a release train generation. */\n public static async rollbackReleaseTrain(\n params: RollbackReleaseTrainThroughApprovalRequest,\n ): Promise<RollbackReleaseTrainThroughApprovalResult> {\n return ConsoleApprovalsM2MService.callApprovalRoute<RollbackReleaseTrainThroughApprovalResult>(\n {\n config: params.config,\n name: 'ConsoleApprovalsM2MService.rollbackReleaseTrain',\n url: 'api/admin/approvals/release-train/rollback',\n normalizedUrl: 'api/admin/approvals/release-train/rollback',\n type: 'post',\n body: params.body,\n },\n )\n }\n\n /**\n * Applies a cluster modification for the owner of the cluster, with no\n * approval. Console answers the new config.\n */\n public static async applySelfServiceModification(\n params: ApplySelfServiceModificationRequest,\n ): Promise<ClusterModificationConfigDto> {\n const { clusterUuid } = params.params\n return ConsoleApprovalsM2MService.callApprovalRoute<ClusterModificationConfigDto>(\n {\n config: params.config,\n name: 'ConsoleApprovalsM2MService.applySelfServiceModification',\n url: `api/admin/approvals/clusters/${clusterUuid}/self-service-modification`,\n normalizedUrl:\n 'api/admin/approvals/clusters/:clusterUuid/self-service-modification',\n type: 'post',\n body: params.body,\n },\n )\n }\n\n /** Deactivates the active config of a cluster for its owner. */\n public static async deactivateSelfServiceModification(\n params: DeactivateSelfServiceModificationRequest,\n ): Promise<ClusterModificationConfigDto> {\n const { clusterUuid } = params.params\n return ConsoleApprovalsM2MService.callApprovalRoute<ClusterModificationConfigDto>(\n {\n config: params.config,\n name: 'ConsoleApprovalsM2MService.deactivateSelfServiceModification',\n url: `api/admin/approvals/clusters/${clusterUuid}/self-service-modification/deactivate`,\n normalizedUrl:\n 'api/admin/approvals/clusters/:clusterUuid/self-service-modification/deactivate',\n type: 'post',\n body: params.body,\n },\n )\n }\n\n private static async callApprovalRoute<T>(args: {\n config: RequestBaseParams['config']\n name: string\n url: string\n normalizedUrl: string\n type: 'post' | 'delete'\n body: unknown\n }): Promise<T> {\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<T>({\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
|
}
|
|
@@ -488,6 +488,22 @@ export interface ChangeClusterPlanTypePayloadDto {
|
|
|
488
488
|
*/
|
|
489
489
|
keepModification?: boolean;
|
|
490
490
|
}
|
|
491
|
+
export interface RequestInNegotiationPayloadDto {
|
|
492
|
+
orgId: string;
|
|
493
|
+
/** A copy, so a list shows a name that a person knows. Nothing reads it. */
|
|
494
|
+
orgName?: string;
|
|
495
|
+
/** The in-negotiation plan to move to. */
|
|
496
|
+
salesPlanId: string;
|
|
497
|
+
/** A copy of the name of the new plan, for the approver to read. */
|
|
498
|
+
salesPlanName?: string;
|
|
499
|
+
/**
|
|
500
|
+
* The trial plan that the person who asked READ. Accounts switches nothing
|
|
501
|
+
* when the plan differs when the action runs.
|
|
502
|
+
*/
|
|
503
|
+
expectedSalesPlanId: string;
|
|
504
|
+
/** A copy of the name of the current plan, for the approver to read. */
|
|
505
|
+
expectedSalesPlanName?: string;
|
|
506
|
+
}
|
|
491
507
|
export interface ChangeSalesPlanPayloadDto {
|
|
492
508
|
orgId: string;
|
|
493
509
|
/** A copy, so a list shows a name that a person knows. Nothing reads it. */
|
|
@@ -622,6 +638,12 @@ export interface DeleteInternalBackupPayloadDto {
|
|
|
622
638
|
/** A copy of the Slack link of the incident, for the approver to read. */
|
|
623
639
|
incidentLink?: string;
|
|
624
640
|
}
|
|
641
|
+
/** See `deleteApiClientPayloadSchema` in control-backend. */
|
|
642
|
+
export interface DeleteApiClientPayloadDto {
|
|
643
|
+
orgId: string;
|
|
644
|
+
/** The `uuid` of the client, not its OAuth `clientId`. */
|
|
645
|
+
clientUuid: string;
|
|
646
|
+
}
|
|
625
647
|
export declare class ControlApprovalsService {
|
|
626
648
|
/**
|
|
627
649
|
* The registered privileged actions, with the rules that guard each one.
|
|
@@ -693,6 +715,17 @@ export declare class ControlApprovalsService {
|
|
|
693
715
|
approval: ApprovalJobDto;
|
|
694
716
|
created: boolean;
|
|
695
717
|
}>;
|
|
718
|
+
/**
|
|
719
|
+
* Opens a delete-api-client request.
|
|
720
|
+
*
|
|
721
|
+
* Opening one needs `console:apiClient:delete`, the same permission that
|
|
722
|
+
* approving needs. A 200 means that a request for the same client is
|
|
723
|
+
* already open.
|
|
724
|
+
*/
|
|
725
|
+
static createDeleteApiClient(params: CreateApprovalRequest<DeleteApiClientPayloadDto>): Promise<{
|
|
726
|
+
approval: ApprovalJobDto;
|
|
727
|
+
created: boolean;
|
|
728
|
+
}>;
|
|
696
729
|
/**
|
|
697
730
|
* Opens a change-org-limits request.
|
|
698
731
|
*
|
|
@@ -738,6 +771,17 @@ export declare class ControlApprovalsService {
|
|
|
738
771
|
approval: ApprovalJobDto;
|
|
739
772
|
created: boolean;
|
|
740
773
|
}>;
|
|
774
|
+
/**
|
|
775
|
+
* Opens a request to move a trial organization to an in-negotiation plan.
|
|
776
|
+
*
|
|
777
|
+
* Opening one needs `AccountsPermissions.READ_ALL`.
|
|
778
|
+
* A holder of `SALES_PLAN_SWITCH` approves it, and the last approval runs
|
|
779
|
+
* it. The route answers 404 while `control.approvalInNegotiation` is off.
|
|
780
|
+
*/
|
|
781
|
+
static createRequestInNegotiation(params: CreateApprovalRequest<RequestInNegotiationPayloadDto>): Promise<{
|
|
782
|
+
approval: ApprovalJobDto;
|
|
783
|
+
created: boolean;
|
|
784
|
+
}>;
|
|
741
785
|
/**
|
|
742
786
|
* Opens a change-generation-versions request.
|
|
743
787
|
*
|
|
@@ -187,6 +187,20 @@ class ControlApprovalsService {
|
|
|
187
187
|
"api/approvals/delete-internal-backup"
|
|
188
188
|
);
|
|
189
189
|
}
|
|
190
|
+
/**
|
|
191
|
+
* Opens a delete-api-client request.
|
|
192
|
+
*
|
|
193
|
+
* Opening one needs `console:apiClient:delete`, the same permission that
|
|
194
|
+
* approving needs. A 200 means that a request for the same client is
|
|
195
|
+
* already open.
|
|
196
|
+
*/
|
|
197
|
+
static async createDeleteApiClient(params) {
|
|
198
|
+
return ControlApprovalsService.create(
|
|
199
|
+
params,
|
|
200
|
+
"createDeleteApiClient",
|
|
201
|
+
"api/approvals/delete-api-client"
|
|
202
|
+
);
|
|
203
|
+
}
|
|
190
204
|
/**
|
|
191
205
|
* Opens a change-org-limits request.
|
|
192
206
|
*
|
|
@@ -244,6 +258,20 @@ class ControlApprovalsService {
|
|
|
244
258
|
"api/approvals/change-sales-plan"
|
|
245
259
|
);
|
|
246
260
|
}
|
|
261
|
+
/**
|
|
262
|
+
* Opens a request to move a trial organization to an in-negotiation plan.
|
|
263
|
+
*
|
|
264
|
+
* Opening one needs `AccountsPermissions.READ_ALL`.
|
|
265
|
+
* A holder of `SALES_PLAN_SWITCH` approves it, and the last approval runs
|
|
266
|
+
* it. The route answers 404 while `control.approvalInNegotiation` is off.
|
|
267
|
+
*/
|
|
268
|
+
static async createRequestInNegotiation(params) {
|
|
269
|
+
return ControlApprovalsService.create(
|
|
270
|
+
params,
|
|
271
|
+
"createRequestInNegotiation",
|
|
272
|
+
"api/approvals/request-in-negotiation"
|
|
273
|
+
);
|
|
274
|
+
}
|
|
247
275
|
/**
|
|
248
276
|
* Opens a change-generation-versions request.
|
|
249
277
|
*
|