From dd854f46e2d7d48dd2ee3060622059baf339efd4 Mon Sep 17 00:00:00 2001 From: csehatt741 <77381875+csehatt741@users.noreply.github.com> Date: Tue, 21 Jan 2025 14:30:49 +0100 Subject: [PATCH] feat(cli): Api health probe (#645) Co-authored-by: Rajdip Bhattacharya --- apps/cli/CHANGELOG.md | 1 + apps/cli/src/commands/base.command.ts | 20 +++++++++++++++---- .../environment/create.environment.ts | 4 ++++ .../environment/delete.environment.ts | 4 ++++ .../commands/environment/get.environment.ts | 4 ++++ .../commands/environment/list.environment.ts | 4 ++++ .../environment/update.environment.ts | 4 ++++ .../src/commands/project/create.project.ts | 4 ++++ .../src/commands/project/delete.project.ts | 4 ++++ apps/cli/src/commands/project/fork.project.ts | 4 ++++ apps/cli/src/commands/project/get.project.ts | 4 ++++ .../commands/project/list-forks.project.ts | 4 ++++ apps/cli/src/commands/project/list.project.ts | 4 ++++ apps/cli/src/commands/project/sync.project.ts | 4 ++++ .../src/commands/project/unlink.project.ts | 4 ++++ .../src/commands/project/update.project.ts | 4 ++++ apps/cli/src/commands/secret/create.secret.ts | 4 ++++ apps/cli/src/commands/secret/delete.secret.ts | 4 ++++ apps/cli/src/commands/secret/get.secret.ts | 4 ++++ apps/cli/src/commands/secret/list.secret.ts | 4 ++++ .../src/commands/secret/revisions.secret.ts | 4 ++++ .../src/commands/secret/rollback.secret.ts | 4 ++++ apps/cli/src/commands/secret/update.secret.ts | 4 ++++ .../src/commands/variable/create.variable.ts | 4 ++++ .../src/commands/variable/delete.variable.ts | 4 ++++ .../src/commands/variable/list.variable.ts | 4 ++++ .../commands/variable/revisions.variable.ts | 4 ++++ .../commands/variable/rollback.variable.ts | 4 ++++ .../src/commands/variable/update.variable.ts | 4 ++++ .../commands/workspace/create.workspace.ts | 4 ++++ .../commands/workspace/delete.workspace.ts | 4 ++++ .../commands/workspace/export.workspace.ts | 4 ++++ .../src/commands/workspace/get.workspace.ts | 4 ++++ .../src/commands/workspace/list.workspace.ts | 4 ++++ .../membership/get-all-members.membership.ts | 4 ++++ .../commands/workspace/role/create.role.ts | 4 ++++ .../commands/workspace/role/delete.role.ts | 4 ++++ .../src/commands/workspace/role/get.role.ts | 4 ++++ .../src/commands/workspace/role/list.role.ts | 4 ++++ .../commands/workspace/role/update.role.ts | 4 ++++ .../commands/workspace/search.workspace.ts | 4 ++++ .../commands/workspace/update.workspace.ts | 4 ++++ apps/cli/src/util/controller-instance.ts | 11 ++++++++++ packages/api-client/src/controllers/app.ts | 14 +++++++++++++ packages/api-client/src/index.ts | 2 ++ 45 files changed, 204 insertions(+), 4 deletions(-) create mode 100644 packages/api-client/src/controllers/app.ts diff --git a/apps/cli/CHANGELOG.md b/apps/cli/CHANGELOG.md index f601383c9..6f911ba58 100644 --- a/apps/cli/CHANGELOG.md +++ b/apps/cli/CHANGELOG.md @@ -57,6 +57,7 @@ - Polished the README file - Support to specify environment name and description while creating a project - Profile creation prompts users for all values if no option is set and shows default values +- Commands invoking API endpoints first check if the backend is reachable before executing the command ## Patches diff --git a/apps/cli/src/commands/base.command.ts b/apps/cli/src/commands/base.command.ts index 2f4a70b23..50b397b68 100644 --- a/apps/cli/src/commands/base.command.ts +++ b/apps/cli/src/commands/base.command.ts @@ -41,10 +41,22 @@ export default abstract class BaseCommand { const globalOptions = program.optsWithGlobals() await this.setGlobalContextFields(globalOptions) - if (this.canMakeHttpRequests() && !this.apiKey) { - throw new Error( - 'API key is missing. This command requires an API key. Either specify it using --api-key, or send in a profile using --profile, or set a default profile' - ) + if (this.canMakeHttpRequests()) { + if (!this.apiKey) { + throw new Error( + 'API key is missing. This command requires an API key. Either specify it using --api-key, or send in a profile using --profile, or set a default profile' + ) + } + + try { + await ControllerInstance.getInstance().appController.health( + this.headers + ) + } catch { + throw new Error( + `Could not connect to the server: ${this.baseUrl}.` + ) + } } const commandOptions = data[argsCount] diff --git a/apps/cli/src/commands/environment/create.environment.ts b/apps/cli/src/commands/environment/create.environment.ts index 87a4a97cf..d83ab4df0 100644 --- a/apps/cli/src/commands/environment/create.environment.ts +++ b/apps/cli/src/commands/environment/create.environment.ts @@ -41,6 +41,10 @@ export class CreateEnvironment extends BaseCommand { ] } + canMakeHttpRequests(): boolean { + return true + } + async action({ options, args }: CommandActionData): Promise { const [projectSlug] = args const { name, description } = await this.parseInput(options) diff --git a/apps/cli/src/commands/environment/delete.environment.ts b/apps/cli/src/commands/environment/delete.environment.ts index ef3248d4c..5133dc6ff 100644 --- a/apps/cli/src/commands/environment/delete.environment.ts +++ b/apps/cli/src/commands/environment/delete.environment.ts @@ -24,6 +24,10 @@ export class DeleteEnvironment extends BaseCommand { ] } + canMakeHttpRequests(): boolean { + return true + } + async action({ args }: CommandActionData): Promise { const [environmentSlug] = args diff --git a/apps/cli/src/commands/environment/get.environment.ts b/apps/cli/src/commands/environment/get.environment.ts index 96a0fbaa8..d2532bf9f 100644 --- a/apps/cli/src/commands/environment/get.environment.ts +++ b/apps/cli/src/commands/environment/get.environment.ts @@ -24,6 +24,10 @@ export class GetEnvironment extends BaseCommand { ] } + canMakeHttpRequests(): boolean { + return true + } + async action({ args }: CommandActionData): Promise { const [environmentSlug] = args diff --git a/apps/cli/src/commands/environment/list.environment.ts b/apps/cli/src/commands/environment/list.environment.ts index 4bc14c3e0..c83e12b17 100644 --- a/apps/cli/src/commands/environment/list.environment.ts +++ b/apps/cli/src/commands/environment/list.environment.ts @@ -30,6 +30,10 @@ export class ListEnvironment extends BaseCommand { return PAGINATION_OPTION } + canMakeHttpRequests(): boolean { + return true + } + async action({ args, options }: CommandActionData): Promise { const [projectSlug] = args diff --git a/apps/cli/src/commands/environment/update.environment.ts b/apps/cli/src/commands/environment/update.environment.ts index 185e52795..63654b618 100644 --- a/apps/cli/src/commands/environment/update.environment.ts +++ b/apps/cli/src/commands/environment/update.environment.ts @@ -40,6 +40,10 @@ export class UpdateEnvironment extends BaseCommand { ] } + canMakeHttpRequests(): boolean { + return true + } + async action({ options, args }: CommandActionData): Promise { const [environmentSlug] = args const { name, description } = options diff --git a/apps/cli/src/commands/project/create.project.ts b/apps/cli/src/commands/project/create.project.ts index 08af35816..263025eab 100644 --- a/apps/cli/src/commands/project/create.project.ts +++ b/apps/cli/src/commands/project/create.project.ts @@ -73,6 +73,10 @@ Examples: ] } + canMakeHttpRequests(): boolean { + return true + } + async action({ args, options }: CommandActionData): Promise { const [workspaceSlug] = args diff --git a/apps/cli/src/commands/project/delete.project.ts b/apps/cli/src/commands/project/delete.project.ts index 6afd3d5cf..f10e8b5f1 100644 --- a/apps/cli/src/commands/project/delete.project.ts +++ b/apps/cli/src/commands/project/delete.project.ts @@ -24,6 +24,10 @@ export default class DeleteProject extends BaseCommand { ] } + canMakeHttpRequests(): boolean { + return true + } + async action({ args }: CommandActionData): Promise { const [projectSlug] = args diff --git a/apps/cli/src/commands/project/fork.project.ts b/apps/cli/src/commands/project/fork.project.ts index 70fb7b9a6..056d818e2 100644 --- a/apps/cli/src/commands/project/fork.project.ts +++ b/apps/cli/src/commands/project/fork.project.ts @@ -46,6 +46,10 @@ export default class ForkProject extends BaseCommand { ] } + canMakeHttpRequests(): boolean { + return true + } + async action({ options, args }: CommandActionData): Promise { const [projectSlug] = args diff --git a/apps/cli/src/commands/project/get.project.ts b/apps/cli/src/commands/project/get.project.ts index 04c629c2f..18b1db281 100644 --- a/apps/cli/src/commands/project/get.project.ts +++ b/apps/cli/src/commands/project/get.project.ts @@ -24,6 +24,10 @@ export default class GetProject extends BaseCommand { ] } + canMakeHttpRequests(): boolean { + return true + } + async action({ args }: CommandActionData): Promise { const [projectSlug] = args diff --git a/apps/cli/src/commands/project/list-forks.project.ts b/apps/cli/src/commands/project/list-forks.project.ts index 243dc052a..8e7c7049b 100644 --- a/apps/cli/src/commands/project/list-forks.project.ts +++ b/apps/cli/src/commands/project/list-forks.project.ts @@ -24,6 +24,10 @@ export default class ListProjectForks extends BaseCommand { ] } + canMakeHttpRequests(): boolean { + return true + } + async action({ args }: CommandActionData): Promise { const [projectSlug] = args diff --git a/apps/cli/src/commands/project/list.project.ts b/apps/cli/src/commands/project/list.project.ts index ede89b2a5..22ac00f1b 100644 --- a/apps/cli/src/commands/project/list.project.ts +++ b/apps/cli/src/commands/project/list.project.ts @@ -24,6 +24,10 @@ export default class ListProject extends BaseCommand { ] } + canMakeHttpRequests(): boolean { + return true + } + async action({ args }: CommandActionData): Promise { const [workspaceSlug] = args diff --git a/apps/cli/src/commands/project/sync.project.ts b/apps/cli/src/commands/project/sync.project.ts index 262da1b20..083ee21a2 100644 --- a/apps/cli/src/commands/project/sync.project.ts +++ b/apps/cli/src/commands/project/sync.project.ts @@ -37,6 +37,10 @@ export default class SyncProject extends BaseCommand { ] } + canMakeHttpRequests(): boolean { + return true + } + async action({ args, options }: CommandActionData): Promise { const [projectSlug] = args diff --git a/apps/cli/src/commands/project/unlink.project.ts b/apps/cli/src/commands/project/unlink.project.ts index 9aae21ec9..d3291d13e 100644 --- a/apps/cli/src/commands/project/unlink.project.ts +++ b/apps/cli/src/commands/project/unlink.project.ts @@ -25,6 +25,10 @@ export default class UnlinkProject extends BaseCommand { ] } + canMakeHttpRequests(): boolean { + return true + } + async action({ args }: CommandActionData): Promise { const [projectSlug] = args diff --git a/apps/cli/src/commands/project/update.project.ts b/apps/cli/src/commands/project/update.project.ts index 352b6916d..c7cb6221d 100644 --- a/apps/cli/src/commands/project/update.project.ts +++ b/apps/cli/src/commands/project/update.project.ts @@ -53,6 +53,10 @@ export default class UpdateProject extends BaseCommand { ] } + canMakeHttpRequests(): boolean { + return true + } + async action({ args, options }: CommandActionData): Promise { const [projectSlug] = args diff --git a/apps/cli/src/commands/secret/create.secret.ts b/apps/cli/src/commands/secret/create.secret.ts index 74ceba079..63a65acaf 100644 --- a/apps/cli/src/commands/secret/create.secret.ts +++ b/apps/cli/src/commands/secret/create.secret.ts @@ -53,6 +53,10 @@ export default class CreateSecret extends BaseCommand { ] } + canMakeHttpRequests(): boolean { + return true + } + async action({ args, options }: CommandActionData): Promise { const { name, note, rotateAfter, entries } = await this.parseInput(options) const [projectSlug] = args diff --git a/apps/cli/src/commands/secret/delete.secret.ts b/apps/cli/src/commands/secret/delete.secret.ts index 1e709e008..d77a59479 100644 --- a/apps/cli/src/commands/secret/delete.secret.ts +++ b/apps/cli/src/commands/secret/delete.secret.ts @@ -24,6 +24,10 @@ export default class DeleteSecret extends BaseCommand { ] } + canMakeHttpRequests(): boolean { + return true + } + async action({ args }: CommandActionData): Promise { const [secretSlug] = args diff --git a/apps/cli/src/commands/secret/get.secret.ts b/apps/cli/src/commands/secret/get.secret.ts index b015ed236..94df3d861 100644 --- a/apps/cli/src/commands/secret/get.secret.ts +++ b/apps/cli/src/commands/secret/get.secret.ts @@ -36,6 +36,10 @@ export default class GetSecret extends BaseCommand { ] } + canMakeHttpRequests(): boolean { + return true + } + async action({ args, options }: CommandActionData): Promise { const [projectSlug] = args const { decryptValue } = await this.parseInput(options) diff --git a/apps/cli/src/commands/secret/list.secret.ts b/apps/cli/src/commands/secret/list.secret.ts index 340ad9517..9d6520723 100644 --- a/apps/cli/src/commands/secret/list.secret.ts +++ b/apps/cli/src/commands/secret/list.secret.ts @@ -24,6 +24,10 @@ export default class ListSecret extends BaseCommand { ] } + canMakeHttpRequests(): boolean { + return true + } + async action({ args }: CommandActionData): Promise { const [projectSlug] = args diff --git a/apps/cli/src/commands/secret/revisions.secret.ts b/apps/cli/src/commands/secret/revisions.secret.ts index 025497887..a810cc2c9 100644 --- a/apps/cli/src/commands/secret/revisions.secret.ts +++ b/apps/cli/src/commands/secret/revisions.secret.ts @@ -35,6 +35,10 @@ export default class FetchSecretRevisions extends BaseCommand { ] } + canMakeHttpRequests(): boolean { + return true + } + async action({ args, options }: CommandActionData): Promise { const [secretSlug] = args const { environment } = options diff --git a/apps/cli/src/commands/secret/rollback.secret.ts b/apps/cli/src/commands/secret/rollback.secret.ts index 966b446f7..9e507ae99 100644 --- a/apps/cli/src/commands/secret/rollback.secret.ts +++ b/apps/cli/src/commands/secret/rollback.secret.ts @@ -41,6 +41,10 @@ export default class RollbackSecret extends BaseCommand { ] } + canMakeHttpRequests(): boolean { + return true + } + async action({ args, options }: CommandActionData): Promise { const [secretSlug] = args const { environment, version } = await this.parseInput(options) diff --git a/apps/cli/src/commands/secret/update.secret.ts b/apps/cli/src/commands/secret/update.secret.ts index 281c3d930..dc72b0830 100644 --- a/apps/cli/src/commands/secret/update.secret.ts +++ b/apps/cli/src/commands/secret/update.secret.ts @@ -52,6 +52,10 @@ export default class UpdateSecret extends BaseCommand { ] } + canMakeHttpRequests(): boolean { + return true + } + async action({ args, options }: CommandActionData): Promise { const [secretSlug] = args diff --git a/apps/cli/src/commands/variable/create.variable.ts b/apps/cli/src/commands/variable/create.variable.ts index 7bfdb8b14..6934b97bc 100644 --- a/apps/cli/src/commands/variable/create.variable.ts +++ b/apps/cli/src/commands/variable/create.variable.ts @@ -48,6 +48,10 @@ export default class CreateVariable extends BaseCommand { ] } + canMakeHttpRequests(): boolean { + return true + } + async action({ args, options }: CommandActionData): Promise { const { name, note, entries } = await this.parseInput(options) const [projectSlug] = args diff --git a/apps/cli/src/commands/variable/delete.variable.ts b/apps/cli/src/commands/variable/delete.variable.ts index 1ac432d66..231b1bdd2 100644 --- a/apps/cli/src/commands/variable/delete.variable.ts +++ b/apps/cli/src/commands/variable/delete.variable.ts @@ -24,6 +24,10 @@ export default class DeleteVariable extends BaseCommand { ] } + canMakeHttpRequests(): boolean { + return true + } + async action({ args }: CommandActionData): Promise { const [variableSlug] = args diff --git a/apps/cli/src/commands/variable/list.variable.ts b/apps/cli/src/commands/variable/list.variable.ts index d718883b4..8795ac7d0 100644 --- a/apps/cli/src/commands/variable/list.variable.ts +++ b/apps/cli/src/commands/variable/list.variable.ts @@ -24,6 +24,10 @@ export default class ListVariable extends BaseCommand { ] } + canMakeHttpRequests(): boolean { + return true + } + async action({ args }: CommandActionData): Promise { const [projectSlug] = args const { data, error, success } = diff --git a/apps/cli/src/commands/variable/revisions.variable.ts b/apps/cli/src/commands/variable/revisions.variable.ts index 8f2f753a1..44f90ba96 100644 --- a/apps/cli/src/commands/variable/revisions.variable.ts +++ b/apps/cli/src/commands/variable/revisions.variable.ts @@ -41,6 +41,10 @@ export default class FetchVariableRevisions extends BaseCommand { ] } + canMakeHttpRequests(): boolean { + return true + } + async action({ args, options }: CommandActionData): Promise { const [variableSlug] = args const { environment } = options diff --git a/apps/cli/src/commands/variable/rollback.variable.ts b/apps/cli/src/commands/variable/rollback.variable.ts index fbf92640e..250f77234 100644 --- a/apps/cli/src/commands/variable/rollback.variable.ts +++ b/apps/cli/src/commands/variable/rollback.variable.ts @@ -41,6 +41,10 @@ export default class RollbackVariable extends BaseCommand { ] } + canMakeHttpRequests(): boolean { + return true + } + async action({ args, options }: CommandActionData): Promise { const [variableSlug] = args const { environment, version } = await this.parseInput(options) diff --git a/apps/cli/src/commands/variable/update.variable.ts b/apps/cli/src/commands/variable/update.variable.ts index b50fc150a..4e290ebcc 100644 --- a/apps/cli/src/commands/variable/update.variable.ts +++ b/apps/cli/src/commands/variable/update.variable.ts @@ -45,6 +45,10 @@ export default class UpdateVariable extends BaseCommand { ] } + canMakeHttpRequests(): boolean { + return true + } + async action({ args, options }: CommandActionData): Promise { const [variableSlug] = args diff --git a/apps/cli/src/commands/workspace/create.workspace.ts b/apps/cli/src/commands/workspace/create.workspace.ts index 00c48cd24..ef3e6982f 100644 --- a/apps/cli/src/commands/workspace/create.workspace.ts +++ b/apps/cli/src/commands/workspace/create.workspace.ts @@ -31,6 +31,10 @@ export default class CreateWorkspace extends BaseCommand { ] } + canMakeHttpRequests(): boolean { + return true + } + async action({ options }: CommandActionData): Promise { const { name, icon } = await this.parseInput(options) diff --git a/apps/cli/src/commands/workspace/delete.workspace.ts b/apps/cli/src/commands/workspace/delete.workspace.ts index 4a44044a4..6337c8341 100644 --- a/apps/cli/src/commands/workspace/delete.workspace.ts +++ b/apps/cli/src/commands/workspace/delete.workspace.ts @@ -24,6 +24,10 @@ export default class DeleteWorkspace extends BaseCommand { ] } + canMakeHttpRequests(): boolean { + return true + } + async action({ args }: CommandActionData): Promise { const [workspaceSlug] = args diff --git a/apps/cli/src/commands/workspace/export.workspace.ts b/apps/cli/src/commands/workspace/export.workspace.ts index ae4763db8..7711a1c92 100644 --- a/apps/cli/src/commands/workspace/export.workspace.ts +++ b/apps/cli/src/commands/workspace/export.workspace.ts @@ -36,6 +36,10 @@ export default class ExportWorkspace extends BaseCommand { ] } + canMakeHttpRequests(): boolean { + return true + } + async action({ args, options }: CommandActionData): Promise { const [workspaceSlug] = args const { saveToFile } = options as { saveToFile: string } diff --git a/apps/cli/src/commands/workspace/get.workspace.ts b/apps/cli/src/commands/workspace/get.workspace.ts index d13aa6398..75d52f76d 100644 --- a/apps/cli/src/commands/workspace/get.workspace.ts +++ b/apps/cli/src/commands/workspace/get.workspace.ts @@ -24,6 +24,10 @@ export default class GetWorkspace extends BaseCommand { ] } + canMakeHttpRequests(): boolean { + return true + } + async action({ args }: CommandActionData): Promise { const [workspaceSlug] = args diff --git a/apps/cli/src/commands/workspace/list.workspace.ts b/apps/cli/src/commands/workspace/list.workspace.ts index 20c8cab3d..b2221653a 100644 --- a/apps/cli/src/commands/workspace/list.workspace.ts +++ b/apps/cli/src/commands/workspace/list.workspace.ts @@ -20,6 +20,10 @@ export default class ListWorkspace extends BaseCommand { return PAGINATION_OPTION } + canMakeHttpRequests(): boolean { + return true + } + async action({ options }: CommandActionData): Promise { Logger.info('Fetching all workspaces...') diff --git a/apps/cli/src/commands/workspace/membership/get-all-members.membership.ts b/apps/cli/src/commands/workspace/membership/get-all-members.membership.ts index 2d1f97538..fd0bce312 100644 --- a/apps/cli/src/commands/workspace/membership/get-all-members.membership.ts +++ b/apps/cli/src/commands/workspace/membership/get-all-members.membership.ts @@ -30,6 +30,10 @@ export default class GetAllMembersOfWorkspaceCommand extends BaseCommand { return PAGINATION_OPTION } + canMakeHttpRequests(): boolean { + return true + } + async action({ args, options }: CommandActionData): Promise { Logger.info("Fetching workspace's members...") diff --git a/apps/cli/src/commands/workspace/role/create.role.ts b/apps/cli/src/commands/workspace/role/create.role.ts index c1695c3cc..6a6f0aeb5 100644 --- a/apps/cli/src/commands/workspace/role/create.role.ts +++ b/apps/cli/src/commands/workspace/role/create.role.ts @@ -61,6 +61,10 @@ export default class CreateRoleCommand extends BaseCommand { ] } + canMakeHttpRequests(): boolean { + return true + } + async action({ args, options }: CommandActionData): Promise { const [workspaceSlug] = args const { diff --git a/apps/cli/src/commands/workspace/role/delete.role.ts b/apps/cli/src/commands/workspace/role/delete.role.ts index 0127b8bb1..12057f0da 100644 --- a/apps/cli/src/commands/workspace/role/delete.role.ts +++ b/apps/cli/src/commands/workspace/role/delete.role.ts @@ -24,6 +24,10 @@ export default class DeleteRoleCommand extends BaseCommand { ] } + canMakeHttpRequests(): boolean { + return true + } + async action({ args }: CommandActionData): Promise { const [workspaceRoleSlug] = args diff --git a/apps/cli/src/commands/workspace/role/get.role.ts b/apps/cli/src/commands/workspace/role/get.role.ts index 8c8ce3729..42f006e55 100644 --- a/apps/cli/src/commands/workspace/role/get.role.ts +++ b/apps/cli/src/commands/workspace/role/get.role.ts @@ -24,6 +24,10 @@ export default class GetRoleCommand extends BaseCommand { ] } + canMakeHttpRequests(): boolean { + return true + } + async action({ args }: CommandActionData): Promise { const [workspaceRoleSlug] = args diff --git a/apps/cli/src/commands/workspace/role/list.role.ts b/apps/cli/src/commands/workspace/role/list.role.ts index 8d28d199e..11a595fb5 100644 --- a/apps/cli/src/commands/workspace/role/list.role.ts +++ b/apps/cli/src/commands/workspace/role/list.role.ts @@ -30,6 +30,10 @@ export default class ListRoleCommand extends BaseCommand { return PAGINATION_OPTION } + canMakeHttpRequests(): boolean { + return true + } + async action({ args, options }: CommandActionData): Promise { Logger.info("Fetching workspace's roles...") diff --git a/apps/cli/src/commands/workspace/role/update.role.ts b/apps/cli/src/commands/workspace/role/update.role.ts index 91dc679e4..e692f2b5a 100644 --- a/apps/cli/src/commands/workspace/role/update.role.ts +++ b/apps/cli/src/commands/workspace/role/update.role.ts @@ -61,6 +61,10 @@ export default class UpdateRoleCommand extends BaseCommand { ] } + canMakeHttpRequests(): boolean { + return true + } + async action({ args, options }: CommandActionData): Promise { const [workspaceRoleSlug] = args const { diff --git a/apps/cli/src/commands/workspace/search.workspace.ts b/apps/cli/src/commands/workspace/search.workspace.ts index 2d4e287b5..4844ac9aa 100644 --- a/apps/cli/src/commands/workspace/search.workspace.ts +++ b/apps/cli/src/commands/workspace/search.workspace.ts @@ -28,6 +28,10 @@ export default class SearchWorkspace extends BaseCommand { ] } + canMakeHttpRequests(): boolean { + return true + } + async action({ args }: CommandActionData): Promise { const [workspaceSlug, searchTerm] = args diff --git a/apps/cli/src/commands/workspace/update.workspace.ts b/apps/cli/src/commands/workspace/update.workspace.ts index cb707e1a0..535ec3741 100644 --- a/apps/cli/src/commands/workspace/update.workspace.ts +++ b/apps/cli/src/commands/workspace/update.workspace.ts @@ -40,6 +40,10 @@ export default class UpdateWorkspace extends BaseCommand { ] } + canMakeHttpRequests(): boolean { + return true + } + async action({ args, options }: CommandActionData): Promise { const [workspaceSlug] = args const { name, icon } = options diff --git a/apps/cli/src/util/controller-instance.ts b/apps/cli/src/util/controller-instance.ts index 0fd5d37b4..1fe6221b1 100644 --- a/apps/cli/src/util/controller-instance.ts +++ b/apps/cli/src/util/controller-instance.ts @@ -1,4 +1,5 @@ import { + AppController, EnvironmentController, EventController, IntegrationController, @@ -13,6 +14,15 @@ import { export default class ControllerInstance { private static instance: ControllerInstance | null + private _appController: AppController | null = null + + get appController(): AppController { + if (!this._appController) { + throw new Error('ControllerInstance not initialized') + } + return this._appController + } + private _environmentController: EnvironmentController | null = null get environmentController(): EnvironmentController { @@ -99,6 +109,7 @@ export default class ControllerInstance { if (!ControllerInstance.instance) { const instance = new ControllerInstance() + instance._appController = new AppController(baseUrl) instance._environmentController = new EnvironmentController(baseUrl) instance._eventController = new EventController(baseUrl) instance._integrationController = new IntegrationController(baseUrl) diff --git a/packages/api-client/src/controllers/app.ts b/packages/api-client/src/controllers/app.ts new file mode 100644 index 000000000..20d317180 --- /dev/null +++ b/packages/api-client/src/controllers/app.ts @@ -0,0 +1,14 @@ +import { APIClient } from '@api-client/core/client' + +export default class AppController { + private apiClient: APIClient + + constructor(private readonly backendURL: string) { + this.apiClient = new APIClient(this.backendURL) + } + + async health(headers?: Record): Promise { + const response = await this.apiClient.get(`/api/health`, headers) + return response.text() + } +} diff --git a/packages/api-client/src/index.ts b/packages/api-client/src/index.ts index edd344fb2..1390c3f62 100644 --- a/packages/api-client/src/index.ts +++ b/packages/api-client/src/index.ts @@ -1,3 +1,4 @@ +import AppController from '@api-client/controllers/app' import EnvironmentController from '@api-client/controllers/environment' import SecretController from '@api-client/controllers/secret' import EventController from '@api-client/controllers/event' @@ -10,6 +11,7 @@ import WorkspaceMembershipController from '@api-client/controllers/workspace-mem import AuthController from '@api-client/controllers/auth' import UserController from '@api-client/controllers/user' export { + AppController, EnvironmentController, SecretController, EventController,