@forge/cli 6.8.3-next.9 → 6.9.0-next.22

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.
Files changed (27) hide show
  1. package/CHANGELOG.md +128 -0
  2. package/npm-shrinkwrap.json +153 -153
  3. package/out/command-line/dependency-injection.d.ts +2 -0
  4. package/out/command-line/dependency-injection.d.ts.map +1 -1
  5. package/out/command-line/dependency-injection.js +3 -0
  6. package/out/command-line/register-environment-commands.d.ts +7 -0
  7. package/out/command-line/register-environment-commands.d.ts.map +1 -1
  8. package/out/command-line/register-environment-commands.js +105 -4
  9. package/out/command-line/register-environment-variables-commands.d.ts +3 -0
  10. package/out/command-line/register-environment-variables-commands.d.ts.map +1 -1
  11. package/out/command-line/register-environment-variables-commands.js +25 -22
  12. package/out/command-line/view/tunnel-view.d.ts.map +1 -1
  13. package/out/command-line/view/tunnel-view.js +1 -1
  14. package/out/deploy/deployer/deployer.d.ts +4 -6
  15. package/out/deploy/deployer/deployer.d.ts.map +1 -1
  16. package/out/deploy/deployer/deployer.js +12 -16
  17. package/out/environment/delete-environment.d.ts +27 -0
  18. package/out/environment/delete-environment.d.ts.map +1 -0
  19. package/out/environment/delete-environment.js +14 -0
  20. package/out/environment/graphql-client.d.ts +5 -1
  21. package/out/environment/graphql-client.d.ts.map +1 -1
  22. package/out/environment/graphql-client.js +58 -1
  23. package/out/installations/graphql-client.d.ts +1 -1
  24. package/out/installations/graphql-client.d.ts.map +1 -1
  25. package/out/installations/graphql-client.js +11 -10
  26. package/out/service/resources-uploader-service.js +3 -3
  27. package/package.json +9 -9
@@ -2,7 +2,14 @@ import { UI } from '@forge/cli-shared';
2
2
  import { Dependencies } from './dependency-injection';
3
3
  import { CreateEnvironmentCommand } from '../environment/create-environment';
4
4
  import { ListEnvironmentCommand } from '../environment/list-environment';
5
+ import { DeleteEnvironmentCommand } from '../environment/delete-environment';
6
+ interface RemoveEnvironmentArgs {
7
+ environment?: string[];
8
+ nonInteractive?: boolean;
9
+ }
5
10
  export declare const createEnvironmentHandler: (ui: UI, createEnvironmentCommand: CreateEnvironmentCommand, environmentKey?: string) => Promise<void>;
6
11
  export declare const listEnvironmentHandler: (ui: UI, listEnvironmentCommand: ListEnvironmentCommand) => Promise<void>;
12
+ export declare const deleteEnvironmentHandler: (ui: UI, options: RemoveEnvironmentArgs, listEnvironmentCommand: ListEnvironmentCommand, deleteEnvironmentCommand: DeleteEnvironmentCommand) => Promise<void>;
7
13
  export declare const registerCommands: (deps: Dependencies) => void;
14
+ export {};
8
15
  //# sourceMappingURL=register-environment-commands.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"register-environment-commands.d.ts","sourceRoot":"","sources":["../../src/command-line/register-environment-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAkD,MAAM,mBAAmB,CAAC;AAEvF,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAIzE,eAAO,MAAM,wBAAwB,OAC/B,EAAE,4BACoB,wBAAwB,mBACjC,MAAM,kBAqBxB,CAAC;AAEF,eAAO,MAAM,sBAAsB,OAAc,EAAE,0BAA0B,sBAAsB,kBAiClG,CAAC;AA8BF,eAAO,MAAM,gBAAgB,SAAU,YAAY,KAAG,IAMrD,CAAC"}
1
+ {"version":3,"file":"register-environment-commands.d.ts","sourceRoot":"","sources":["../../src/command-line/register-environment-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,EAAE,EAMH,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,wBAAwB,EAA2B,MAAM,mCAAmC,CAAC;AAMtG,UAAU,qBAAqB;IAC7B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,eAAO,MAAM,wBAAwB,OAC/B,EAAE,4BACoB,wBAAwB,mBACjC,MAAM,kBAoBxB,CAAC;AAEF,eAAO,MAAM,sBAAsB,OAAc,EAAE,0BAA0B,sBAAsB,kBAiClG,CAAC;AAEF,eAAO,MAAM,wBAAwB,OAC/B,EAAE,WACG,qBAAqB,0BACN,sBAAsB,4BACpB,wBAAwB,kBAmCnD,CAAC;AA+IF,eAAO,MAAM,gBAAgB,SAAU,YAAY,KAAG,IAOrD,CAAC"}
@@ -1,19 +1,22 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.registerCommands = exports.listEnvironmentHandler = exports.createEnvironmentHandler = void 0;
3
+ exports.registerCommands = exports.deleteEnvironmentHandler = exports.listEnvironmentHandler = exports.createEnvironmentHandler = void 0;
4
+ const tslib_1 = require("tslib");
4
5
  const cli_shared_1 = require("@forge/cli-shared");
6
+ const chalk_1 = tslib_1.__importDefault(require("chalk"));
7
+ const errors_1 = require("./errors");
5
8
  const COMMAND_NAME = 'environment';
6
9
  const createEnvironmentHandler = async (ui, createEnvironmentCommand, environmentKey) => {
7
- ui.info(cli_shared_1.Text.createEnvironment.overview);
8
- ui.emptyLine();
9
10
  if (!environmentKey) {
11
+ ui.info(cli_shared_1.Text.createEnvironment.overview);
12
+ ui.emptyLine();
10
13
  environmentKey = await ui.promptForText(cli_shared_1.Text.createEnvironment.promptEnvironmentKey);
11
14
  ui.emptyLine();
12
15
  }
13
16
  const args = {
14
17
  environmentKey: (0, cli_shared_1.optionToEnvironment)(environmentKey)
15
18
  };
16
- await ui.displayProgress(() => createEnvironmentCommand.execute(args), cli_shared_1.Text.createEnvironment.cmd.start, cli_shared_1.Text.createEnvironment.cmd.success(environmentKey));
19
+ await ui.displayProgress(() => createEnvironmentCommand.execute(args), cli_shared_1.Text.createEnvironment.cmd.start, cli_shared_1.Text.createEnvironment.cmd.success(environmentKey, cli_shared_1.AppEnvironmentType.Development, cli_shared_1.environmentToOption));
17
20
  ui.emptyLine();
18
21
  ui.info(cli_shared_1.Text.createEnvironment.successMessage);
19
22
  };
@@ -46,6 +49,92 @@ const listEnvironmentHandler = async (ui, listEnvironmentCommand) => {
46
49
  });
47
50
  };
48
51
  exports.listEnvironmentHandler = listEnvironmentHandler;
52
+ const deleteEnvironmentHandler = async (ui, options, listEnvironmentCommand, deleteEnvironmentCommand) => {
53
+ let confirmDeleteEnvironments = false;
54
+ let environmentKeys = options.environment;
55
+ const nonInteractive = options.nonInteractive;
56
+ if (!environmentKeys) {
57
+ environmentKeys = await getEnvironmentKeysToDelete(ui, listEnvironmentCommand);
58
+ }
59
+ if (!environmentKeys) {
60
+ return;
61
+ }
62
+ environmentKeys = environmentKeys.map(cli_shared_1.optionToEnvironment);
63
+ if (nonInteractive) {
64
+ confirmDeleteEnvironments = true;
65
+ }
66
+ if (!confirmDeleteEnvironments) {
67
+ confirmDeleteEnvironments = await getDeleteConfirmation(ui, environmentKeys);
68
+ }
69
+ if (!confirmDeleteEnvironments) {
70
+ return;
71
+ }
72
+ ui.emptyLine();
73
+ const { deletedEnvironments, successful } = await deleteEnvironments(ui, deleteEnvironmentCommand, environmentKeys);
74
+ ui.emptyLine();
75
+ displayDeleteResult(ui, deletedEnvironments, successful);
76
+ };
77
+ exports.deleteEnvironmentHandler = deleteEnvironmentHandler;
78
+ const getEnvironmentKeysToDelete = async (ui, listEnvironmentCommand) => {
79
+ const environments = (await listEnvironmentCommand.execute())
80
+ .filter((env) => env.type === cli_shared_1.AppEnvironmentType.Development && env.key !== cli_shared_1.DEFAULT_ENVIRONMENT_KEY)
81
+ .sort((a, b) => Number(a.lastDeployedAt) - Number(b.lastDeployedAt));
82
+ if (environments.length === 0) {
83
+ ui.info(cli_shared_1.Text.deleteEnvironment.noEnvironmentMessage);
84
+ return;
85
+ }
86
+ ui.info(cli_shared_1.Text.deleteEnvironment.overview);
87
+ ui.emptyLine();
88
+ const selectedEnvironmentIndexes = await ui.promptForTable(cli_shared_1.Text.deleteEnvironment.prompt, cli_shared_1.Text.deleteEnvironment.info, ['Name', 'Last deployed at'], environments.map(({ key, lastDeployedAt }) => ({
89
+ names: [(0, cli_shared_1.environmentToOption)(key), new Date(Number(lastDeployedAt)).toISOString()]
90
+ })));
91
+ return selectedEnvironmentIndexes.map((index) => environments[index].key);
92
+ };
93
+ const getDeleteConfirmation = async (ui, environmentKeys) => {
94
+ ui.info(cli_shared_1.Text.deleteEnvironment.confirmationInfo);
95
+ ui.emptyLine();
96
+ environmentKeys.forEach((envKey) => {
97
+ ui.info(chalk_1.default.grey((0, cli_shared_1.environmentToOption)(envKey)));
98
+ });
99
+ ui.emptyLine();
100
+ ui.warn(cli_shared_1.Text.deleteEnvironment.warningMessage);
101
+ ui.emptyLine();
102
+ return ui.confirm(cli_shared_1.Text.deleteEnvironment.promptConfirmation);
103
+ };
104
+ const deleteEnvironments = async (ui, deleteEnvironmentCommand, environmentKeys) => {
105
+ let successful = false;
106
+ const args = { environmentKeys };
107
+ const deletedEnvironments = await ui.displayProgress(() => deleteEnvironmentCommand.batchExecute(args), cli_shared_1.Text.deleteEnvironment.cmd.start, (result) => {
108
+ successful = result.every(({ successful }) => successful);
109
+ return {
110
+ successful,
111
+ message: cli_shared_1.Text.deleteEnvironment.cmd.start
112
+ };
113
+ });
114
+ return {
115
+ deletedEnvironments,
116
+ successful
117
+ };
118
+ };
119
+ const displayDeleteResult = (ui, deletedEnvironments, deleteSuccessful) => {
120
+ const deferredErrors = [];
121
+ const successfulDelete = deletedEnvironments.filter((env) => env.successful);
122
+ const failedDelete = deletedEnvironments.filter((env) => !env.successful);
123
+ successfulDelete.forEach(({ environmentKey }) => {
124
+ ui.info(cli_shared_1.Text.deleteEnvironment.individualSuccessMessage(environmentKey, cli_shared_1.AppEnvironmentType.Development, cli_shared_1.environmentToOption));
125
+ });
126
+ failedDelete.forEach(({ error }) => {
127
+ if (error !== undefined) {
128
+ ui.error(error);
129
+ deferredErrors.push(error);
130
+ }
131
+ });
132
+ if (!deleteSuccessful) {
133
+ throw new errors_1.DeferredErrors(deferredErrors);
134
+ }
135
+ ui.emptyLine();
136
+ ui.info(cli_shared_1.Text.deleteEnvironment.successMessage);
137
+ };
49
138
  const registerCreateEnvironmentCommand = (parent, { ui, commands: { createEnvironmentCommand } }) => {
50
139
  parent
51
140
  .command('create')
@@ -66,10 +155,22 @@ const registerListEnvironmentCommand = (parent, { ui, commands: { listEnvironmen
66
155
  await (0, exports.listEnvironmentHandler)(ui, listEnvironmentCommand);
67
156
  });
68
157
  };
158
+ const registerDeleteEnvironmentCommand = (parent, { ui, commands: { listEnvironmentCommand, deleteEnvironmentCommand } }) => {
159
+ parent
160
+ .command('delete')
161
+ .requireAppId()
162
+ .description(cli_shared_1.Text.deleteEnvironment.cmd.desc)
163
+ .option('-e, --environment [environments...]', cli_shared_1.Text.deleteEnvironment.optionEnvironmentKey)
164
+ .nonInteractiveOption('--environment')
165
+ .action(async (options) => {
166
+ await (0, exports.deleteEnvironmentHandler)(ui, options, listEnvironmentCommand, deleteEnvironmentCommand);
167
+ });
168
+ };
69
169
  const registerCommands = (deps) => {
70
170
  const { cmd } = deps;
71
171
  const environment = cmd.command(COMMAND_NAME).description(cli_shared_1.Text.environment.desc);
72
172
  registerCreateEnvironmentCommand(environment, deps);
73
173
  registerListEnvironmentCommand(environment, deps);
174
+ registerDeleteEnvironmentCommand(environment, deps);
74
175
  };
75
176
  exports.registerCommands = registerCommands;
@@ -1,3 +1,6 @@
1
+ import { UI } from '@forge/cli-shared';
1
2
  import { Dependencies } from './dependency-injection';
3
+ import { ListEnvironmentVariablesCommand } from '../environment-variables/list-environment-variables';
4
+ export declare function listEnvironmentVariableCommandHandler(ui: UI, listEnvironmentVariablesCommand: ListEnvironmentVariablesCommand, environment: string, json: boolean): Promise<void>;
2
5
  export declare const registerCommands: ({ cmd, ...deps }: Dependencies) => void;
3
6
  //# sourceMappingURL=register-environment-variables-commands.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"register-environment-variables-commands.d.ts","sourceRoot":"","sources":["../../src/command-line/register-environment-variables-commands.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AA2HtD,eAAO,MAAM,gBAAgB,qBAAsB,YAAY,KAAG,IAOjE,CAAC"}
1
+ {"version":3,"file":"register-environment-variables-commands.d.ts","sourceRoot":"","sources":["../../src/command-line/register-environment-variables-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAmD,MAAM,mBAAmB,CAAC;AAExF,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,+BAA+B,EAAE,MAAM,qDAAqD,CAAC;AA2EtG,wBAAsB,qCAAqC,CACzD,EAAE,EAAE,EAAE,EACN,+BAA+B,EAAE,+BAA+B,EAChE,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,OAAO,iBAwBd;AA4BD,eAAO,MAAM,gBAAgB,qBAAsB,YAAY,KAAG,IAOjE,CAAC"}
@@ -1,9 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.registerCommands = void 0;
3
+ exports.registerCommands = exports.listEnvironmentVariableCommandHandler = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const cli_shared_1 = require("@forge/cli-shared");
6
- const cli_shared_2 = require("@forge/cli-shared");
7
6
  const COMMAND_NAME = 'variables';
8
7
  const SET_COMMAND_NAME = 'set';
9
8
  const registerSetEnvironmentVariableCommand = ({ cmd, ui, commands: { setEnvironmentVariableCommand } }) => {
@@ -14,7 +13,7 @@ const registerSetEnvironmentVariableCommand = ({ cmd, ui, commands: { setEnviron
14
13
  .option('--encrypt', cli_shared_1.Text.varsSet.optionSecret, false)
15
14
  .environmentOption()
16
15
  .action(async (key, value, { environment, encrypt }) => {
17
- ui.info(cli_shared_1.Text.varsSet.overview(environment, cli_shared_2.environmentToOption));
16
+ ui.info(cli_shared_1.Text.varsSet.overview(environment, (0, cli_shared_1.guessEnvironmentType)(environment), cli_shared_1.environmentToOption));
18
17
  ui.info(cli_shared_1.Text.ctrlC);
19
18
  ui.emptyLine();
20
19
  if (!value && !encrypt) {
@@ -48,7 +47,7 @@ const registerDeleteEnvironmentVariableCommand = ({ cmd, ui, commands: { deleteE
48
47
  .description(cli_shared_1.Text.varsUnset.cmd.desc)
49
48
  .environmentOption()
50
49
  .action(async (key, { environment }) => {
51
- ui.info(cli_shared_1.Text.varsUnset.cmd.start(environment, cli_shared_2.environmentToOption));
50
+ ui.info(cli_shared_1.Text.varsUnset.cmd.start(environment, (0, cli_shared_1.guessEnvironmentType)(environment), cli_shared_1.environmentToOption));
52
51
  ui.info(cli_shared_1.Text.ctrlC);
53
52
  await deleteEnvironmentVariableCommand.execute({ environment, key });
54
53
  ui.info(cli_shared_1.Text.varsUnset.cmd.success(key));
@@ -56,6 +55,27 @@ const registerDeleteEnvironmentVariableCommand = ({ cmd, ui, commands: { deleteE
56
55
  });
57
56
  };
58
57
  const LIST_COMMAND_NAME = 'list';
58
+ async function listEnvironmentVariableCommandHandler(ui, listEnvironmentVariablesCommand, environment, json) {
59
+ const variables = await listEnvironmentVariablesCommand.execute({ environment });
60
+ ui.table([
61
+ ['encrypted', 'Encrypted?'],
62
+ ['key', 'Key'],
63
+ ['value', 'Value']
64
+ ], variables === null || variables === void 0 ? void 0 : variables.map(({ encrypt: encrypted, key, value }) => ({
65
+ encrypted,
66
+ key,
67
+ value: encrypted ? cli_shared_1.Text.varsList.encryptedValue : value
68
+ })), {
69
+ json,
70
+ emptyMessage: cli_shared_1.Text.varsList.empty(environment, (0, cli_shared_1.guessEnvironmentType)(environment), cli_shared_1.environmentToOption),
71
+ preMessage: cli_shared_1.Text.varsList.overview(environment, (0, cli_shared_1.guessEnvironmentType)(environment), cli_shared_1.environmentToOption),
72
+ postMessage: cli_shared_1.Text.varsList.postfix,
73
+ format: {
74
+ encrypted: (value) => (value ? '✔' : '')
75
+ }
76
+ });
77
+ }
78
+ exports.listEnvironmentVariableCommandHandler = listEnvironmentVariableCommandHandler;
59
79
  const registerListEnvironmentVariableCommand = ({ cmd, ui, commands: { listEnvironmentVariablesCommand } }) => {
60
80
  cmd
61
81
  .command(LIST_COMMAND_NAME)
@@ -64,24 +84,7 @@ const registerListEnvironmentVariableCommand = ({ cmd, ui, commands: { listEnvir
64
84
  .environmentOption()
65
85
  .jsonOption()
66
86
  .action(async ({ environment, json }) => {
67
- const variables = await listEnvironmentVariablesCommand.execute({ environment });
68
- ui.table([
69
- ['encrypted', 'Encrypted?'],
70
- ['key', 'Key'],
71
- ['value', 'Value']
72
- ], variables === null || variables === void 0 ? void 0 : variables.map(({ encrypt: encrypted, key, value }) => ({
73
- encrypted,
74
- key,
75
- value: encrypted ? cli_shared_1.Text.varsList.encryptedValue : value
76
- })), {
77
- json,
78
- emptyMessage: cli_shared_1.Text.varsList.empty(environment, cli_shared_2.environmentToOption),
79
- preMessage: cli_shared_1.Text.varsList.overview(environment, cli_shared_2.environmentToOption),
80
- postMessage: cli_shared_1.Text.varsList.postfix,
81
- format: {
82
- encrypted: (value) => (value ? '✔' : '')
83
- }
84
- });
87
+ await listEnvironmentVariableCommandHandler(ui, listEnvironmentVariablesCommand, environment, json);
85
88
  });
86
89
  };
87
90
  const DEPRECATED_SET_COMMAND = 'variables:set';
@@ -1 +1 @@
1
- {"version":3,"file":"tunnel-view.d.ts","sourceRoot":"","sources":["../../../src/command-line/view/tunnel-view.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,aAAa,EAGb,WAAW,EAGX,SAAS,EACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,qBAAa,eAAgB,SAAQ,SAAS;CAAG;AAEjD,qBAAa,UAAU;IACT,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,aAAa;IAEvC,cAAc,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI;IAW7C,qBAAqB,CAAC,MAAM,EAAE,OAAO,WAAW,GAAG,CAAC,GAAG,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC;IAQhF,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,MAAM;IA+BxE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAQpG,sBAAsB,CAC3B,yBAAyB,EAAE,UAAU,CAAC,OAAO,KAAK,CAAC,EACnD,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,yBAAyB,GAC3D,OAAO,CAAC,IAAI,CAAC;CAyCjB"}
1
+ {"version":3,"file":"tunnel-view.d.ts","sourceRoot":"","sources":["../../../src/command-line/view/tunnel-view.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,aAAa,EAGb,WAAW,EAIX,SAAS,EACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,qBAAa,eAAgB,SAAQ,SAAS;CAAG;AAEjD,qBAAa,UAAU;IACT,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,aAAa;IAEvC,cAAc,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI;IAa7C,qBAAqB,CAAC,MAAM,EAAE,OAAO,WAAW,GAAG,CAAC,GAAG,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC;IAQhF,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,MAAM;IA+BxE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAQpG,sBAAsB,CAC3B,yBAAyB,EAAE,UAAU,CAAC,OAAO,KAAK,CAAC,EACnD,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,yBAAyB,GAC3D,OAAO,CAAC,IAAI,CAAC;CAyCjB"}
@@ -15,7 +15,7 @@ class TunnelView {
15
15
  this.ui.info(cli_shared_1.Text.tunnel.preamble);
16
16
  if (environmentKey && environmentKey !== cli_shared_1.DEFAULT_ENVIRONMENT_KEY) {
17
17
  this.ui.emptyLine();
18
- this.ui.info(cli_shared_1.Text.tunnel.startingTunnel(environmentKey, cli_shared_1.environmentToOption));
18
+ this.ui.info(cli_shared_1.Text.tunnel.startingTunnel(environmentKey, (0, cli_shared_1.guessEnvironmentType)(environmentKey), cli_shared_1.environmentToOption));
19
19
  this.ui.emptyLine();
20
20
  }
21
21
  this.ui.info(cli_shared_1.Text.ctrlC);
@@ -3,19 +3,17 @@ import { DeployMonitorClient } from './deploy-monitor-graphql-client';
3
3
  import { TriggerDeployClient } from './trigger-deploy-graphql-client';
4
4
  export declare class AppDeploymentFailedError extends BaseError {
5
5
  private readonly userError;
6
- private readonly requestId?;
7
6
  constructor(userError?: boolean, requestId?: string | undefined, message?: string);
8
7
  isUserError(): boolean;
9
- getAttributes(): Record<string, any>;
10
8
  }
11
9
  export declare class AppSnapshotFailedError extends BaseError {
12
- private readonly userError?;
13
- constructor(userError?: boolean | undefined, message?: string);
10
+ private readonly userError;
11
+ constructor(userError?: boolean, requestId?: string | undefined, message?: string);
14
12
  isUserError(): boolean;
15
13
  }
16
14
  export declare class HostedResourceDeploymentFailedError extends BaseError {
17
- private readonly userError?;
18
- constructor(userError?: boolean | undefined, message?: string);
15
+ private readonly userError;
16
+ constructor(userError?: boolean, requestId?: string | undefined, message?: string);
19
17
  isUserError(): boolean;
20
18
  }
21
19
  export interface Deployer {
@@ -1 +1 @@
1
- {"version":3,"file":"deployer.d.ts","sourceRoot":"","sources":["../../../src/deploy/deployer/deployer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EAKjB,mBAAmB,EAGnB,KAAK,EAEL,EAAE,EAEF,SAAS,EACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAsB,MAAM,iCAAiC,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAItE,qBAAa,wBAAyB,SAAQ,SAAS;IAEnD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;gBADV,SAAS,GAAE,OAAe,EAC1B,SAAS,CAAC,oBAAoB,EAC/C,OAAO,CAAC,EAAE,MAAM;IAIX,WAAW,IAAI,OAAO;IAItB,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAM5C;AACD,qBAAa,sBAAuB,SAAQ,SAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAAV,SAAS,CAAC,qBAAS,EAAE,OAAO,CAAC,EAAE,MAAM;IAG3D,WAAW,IAAI,OAAO;CAG9B;AACD,qBAAa,mCAAoC,SAAQ,SAAS;IACpD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAAV,SAAS,CAAC,qBAAS,EAAE,OAAO,CAAC,EAAE,MAAM;IAG3D,WAAW,IAAI,OAAO;CAG9B;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,sBAAsB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrG;AAyBD,qBAAa,gBAAiB,YAAW,QAAQ;IAE7C,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAJF,gBAAgB,EAAE,iBAAiB,EACnC,YAAY,EAAE,mBAAmB,EACjC,mBAAmB,EAAE,mBAAmB,EACxC,KAAK,EAAE,KAAK,EACZ,EAAE,EAAE,EAAE;IAGZ,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,sBAAsB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAMlG,QAAQ;IAcT,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM;;;;YA2BpG,iBAAiB;IAa/B,OAAO,CAAC,gBAAgB;IAsBxB,OAAO,CAAC,0BAA0B;IA6BlC,OAAO,CAAC,gBAAgB;CAqDzB"}
1
+ {"version":3,"file":"deployer.d.ts","sourceRoot":"","sources":["../../../src/deploy/deployer/deployer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EAKjB,mBAAmB,EAGnB,KAAK,EAEL,EAAE,EAEF,SAAS,EACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAsB,MAAM,iCAAiC,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAItE,qBAAa,wBAAyB,SAAQ,SAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,GAAE,OAAe,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM;IAGlG,WAAW,IAAI,OAAO;CAG9B;AACD,qBAAa,sBAAuB,SAAQ,SAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,GAAE,OAAe,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM;IAGlG,WAAW,IAAI,OAAO;CAG9B;AACD,qBAAa,mCAAoC,SAAQ,SAAS;IACpD,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,GAAE,OAAe,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM;IAGlG,WAAW,IAAI,OAAO;CAG9B;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,sBAAsB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrG;AAyBD,qBAAa,gBAAiB,YAAW,QAAQ;IAE7C,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAJF,gBAAgB,EAAE,iBAAiB,EACnC,YAAY,EAAE,mBAAmB,EACjC,mBAAmB,EAAE,mBAAmB,EACxC,KAAK,EAAE,KAAK,EACZ,EAAE,EAAE,EAAE;IAGZ,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,sBAAsB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAMlG,QAAQ;IAcT,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM;;;;YA2BpG,iBAAiB;IAa/B,OAAO,CAAC,gBAAgB;IAsBxB,OAAO,CAAC,0BAA0B;IA6BlC,OAAO,CAAC,gBAAgB;CAsDzB"}
@@ -5,35 +5,31 @@ const cli_shared_1 = require("@forge/cli-shared");
5
5
  const DEPLOYMENT_EVENT_POLL_INTERVAL = 500;
6
6
  class AppDeploymentFailedError extends cli_shared_1.BaseError {
7
7
  constructor(userError = false, requestId, message) {
8
- super(`${message} (requestId: ${requestId || 'unknown'})`);
8
+ super(requestId, `${message} (requestId: ${requestId || 'unknown'})`);
9
9
  this.userError = userError;
10
- this.requestId = requestId;
11
10
  }
12
11
  isUserError() {
13
12
  return this.userError;
14
13
  }
15
- getAttributes() {
16
- return Object.assign(Object.assign({}, super.getAttributes()), { requestId: this.requestId });
17
- }
18
14
  }
19
15
  exports.AppDeploymentFailedError = AppDeploymentFailedError;
20
16
  class AppSnapshotFailedError extends cli_shared_1.BaseError {
21
- constructor(userError, message) {
22
- super(message);
17
+ constructor(userError = false, requestId, message) {
18
+ super(requestId, message);
23
19
  this.userError = userError;
24
20
  }
25
21
  isUserError() {
26
- return Boolean(this.userError);
22
+ return this.userError;
27
23
  }
28
24
  }
29
25
  exports.AppSnapshotFailedError = AppSnapshotFailedError;
30
26
  class HostedResourceDeploymentFailedError extends cli_shared_1.BaseError {
31
- constructor(userError, message) {
32
- super(message);
27
+ constructor(userError = false, requestId, message) {
28
+ super(requestId, message);
33
29
  this.userError = userError;
34
30
  }
35
31
  isUserError() {
36
- return Boolean(this.userError);
32
+ return this.userError;
37
33
  }
38
34
  }
39
35
  exports.HostedResourceDeploymentFailedError = HostedResourceDeploymentFailedError;
@@ -148,10 +144,10 @@ class ArtifactDeployer {
148
144
  if (errorDetails) {
149
145
  const { code, message } = errorDetails;
150
146
  if (code === 'APP_CODE_SNAPSHOT_FAILED') {
151
- throw new AppSnapshotFailedError(true, cli_shared_1.Text.snapshot.error('App code snapshot error', message));
147
+ throw new AppSnapshotFailedError(true, requestId, cli_shared_1.Text.snapshot.error('App code snapshot error', message));
152
148
  }
153
149
  if (code === 'APP_CODE_SNAPSHOT_TIMEOUT') {
154
- throw new AppSnapshotFailedError(false, cli_shared_1.Text.snapshot.timeout);
150
+ throw new AppSnapshotFailedError(false, requestId, cli_shared_1.Text.snapshot.timeout);
155
151
  }
156
152
  if (code === 'ENVIRONMENT_UPDATE_VALIDATION_FAILED') {
157
153
  const causeMessage = (_a = errorDetails === null || errorDetails === void 0 ? void 0 : errorDetails.fields) === null || _a === void 0 ? void 0 : _a.validationResult.message.replace(/Upsert.*Details /, '');
@@ -171,17 +167,17 @@ class ArtifactDeployer {
171
167
  'HOSTED_RESOURCE_FILE_PATH_REFERS_TO_PARENT',
172
168
  'HOSTED_RESOURCE_INVALID_EGRESS_PERMISSIONS'
173
169
  ].includes(code)) {
174
- throw new HostedResourceDeploymentFailedError(true, cli_shared_1.Text.hostedResources.error(message));
170
+ throw new HostedResourceDeploymentFailedError(true, requestId, cli_shared_1.Text.hostedResources.error(message));
175
171
  }
176
172
  if ([
177
173
  'HOSTED_RESOURCE_FAILED_TO_FETCH',
178
174
  'HOSTED_RESOURCE_FAILED_TO_COPY',
179
175
  'HOSTED_RESOURCE_UPLOAD_ID_MISSING'
180
176
  ].includes(code)) {
181
- throw new HostedResourceDeploymentFailedError(false, cli_shared_1.Text.hostedResources.error(message));
177
+ throw new HostedResourceDeploymentFailedError(false, requestId, cli_shared_1.Text.hostedResources.error(message));
182
178
  }
183
179
  if (code === 'HOSTED_RESOURCES_LAMBDA_TIMEOUT') {
184
- throw new HostedResourceDeploymentFailedError(false, cli_shared_1.Text.hostedResources.error(cli_shared_1.Text.hostedResources.lambdaTimeout));
180
+ throw new HostedResourceDeploymentFailedError(false, requestId, cli_shared_1.Text.hostedResources.error(cli_shared_1.Text.hostedResources.lambdaTimeout));
185
181
  }
186
182
  }
187
183
  throw new AppDeploymentFailedError(false, requestId, cli_shared_1.Text.deploy.taskDeploy.serverStepFailed);
@@ -0,0 +1,27 @@
1
+ import { AppConfigProvider } from '@forge/cli-shared';
2
+ export interface DeleteEnvironmentOutput {
3
+ environmentKey: string;
4
+ successful: boolean;
5
+ error?: Error;
6
+ }
7
+ export interface DeleteEnvironmentDetails {
8
+ appId: string;
9
+ environmentKey: string;
10
+ }
11
+ export interface BatchEnvironmentDetails {
12
+ environmentKeys: string[];
13
+ }
14
+ export interface BatchDeleteEnvironmentDetails extends BatchEnvironmentDetails {
15
+ appId: string;
16
+ }
17
+ export interface DeleteEnvironmentClient {
18
+ deleteEnvironment(details: DeleteEnvironmentDetails): Promise<boolean>;
19
+ deleteEnvironments(details: BatchDeleteEnvironmentDetails): Promise<DeleteEnvironmentOutput[]>;
20
+ }
21
+ export declare class DeleteEnvironmentCommand {
22
+ private readonly client;
23
+ private readonly getAppConfig;
24
+ constructor(client: DeleteEnvironmentClient, getAppConfig: AppConfigProvider);
25
+ batchExecute(details: BatchEnvironmentDetails): Promise<DeleteEnvironmentOutput[]>;
26
+ }
27
+ //# sourceMappingURL=delete-environment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-environment.d.ts","sourceRoot":"","sources":["../../src/environment/delete-environment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,uBAAuB;IACtC,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,6BAA8B,SAAQ,uBAAuB;IAC5E,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,uBAAuB;IACtC,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvE,kBAAkB,CAAC,OAAO,EAAE,6BAA6B,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAAC;CAChG;AAED,qBAAa,wBAAwB;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAA2B,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAA9D,MAAM,EAAE,uBAAuB,EAAmB,YAAY,EAAE,iBAAiB;IAEjG,YAAY,CAAC,OAAO,EAAE,uBAAuB;CAO3D"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DeleteEnvironmentCommand = void 0;
4
+ class DeleteEnvironmentCommand {
5
+ constructor(client, getAppConfig) {
6
+ this.client = client;
7
+ this.getAppConfig = getAppConfig;
8
+ }
9
+ async batchExecute(details) {
10
+ const { id: appId } = await this.getAppConfig();
11
+ return this.client.deleteEnvironments(Object.assign(Object.assign({}, details), { appId }));
12
+ }
13
+ }
14
+ exports.DeleteEnvironmentCommand = DeleteEnvironmentCommand;
@@ -1,9 +1,11 @@
1
1
  import { AppEnvironmentType, GraphQLClient, UserError } from '@forge/cli-shared';
2
2
  import { AppEnvironmentDetails, CreateEnvironmentClient } from './create-environment';
3
3
  import { ListEnvironmentClient, ListEnvironmentDetails } from './list-environment';
4
+ import { BatchDeleteEnvironmentDetails, DeleteEnvironmentClient, DeleteEnvironmentDetails, DeleteEnvironmentOutput } from './delete-environment';
5
+ export declare const APP_HAS_INSTALLATIONS_CODE = "APP_HAS_INSTALLATIONS";
4
6
  export declare class MissingAppError extends UserError {
5
7
  }
6
- export declare class GraphqlClient implements CreateEnvironmentClient, ListEnvironmentClient {
8
+ export declare class GraphqlClient implements CreateEnvironmentClient, ListEnvironmentClient, DeleteEnvironmentClient {
7
9
  private readonly graphqlClient;
8
10
  constructor(graphqlClient: GraphQLClient);
9
11
  createEnvironment(details: AppEnvironmentDetails): Promise<void>;
@@ -12,5 +14,7 @@ export declare class GraphqlClient implements CreateEnvironmentClient, ListEnvir
12
14
  key: string;
13
15
  lastDeployedAt: string;
14
16
  }[]>;
17
+ deleteEnvironments(details: BatchDeleteEnvironmentDetails): Promise<DeleteEnvironmentOutput[]>;
18
+ deleteEnvironment(details: DeleteEnvironmentDetails): Promise<true>;
15
19
  }
16
20
  //# sourceMappingURL=graphql-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"graphql-client.d.ts","sourceRoot":"","sources":["../../src/environment/graphql-client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAGlB,aAAa,EAGb,SAAS,EACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEnF,qBAAa,eAAgB,SAAQ,SAAS;CAAG;AAEjD,qBAAa,aAAc,YAAW,uBAAuB,EAAE,qBAAqB;IACtE,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,EAAE,aAAa;IAE5C,iBAAiB,CAAC,OAAO,EAAE,qBAAqB;IAgDhD,eAAe,CAAC,OAAO,EAAE,sBAAsB;;;;;CAkC7D"}
1
+ {"version":3,"file":"graphql-client.d.ts","sourceRoot":"","sources":["../../src/environment/graphql-client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAKlB,aAAa,EAIb,SAAS,EACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EACL,6BAA6B,EAC7B,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACxB,MAAM,sBAAsB,CAAC;AAE9B,eAAO,MAAM,0BAA0B,0BAA0B,CAAC;AAElE,qBAAa,eAAgB,SAAQ,SAAS;CAAG;AAEjD,qBAAa,aAAc,YAAW,uBAAuB,EAAE,qBAAqB,EAAE,uBAAuB;IAC/F,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,EAAE,aAAa;IAE5C,iBAAiB,CAAC,OAAO,EAAE,qBAAqB;IAgDhD,eAAe,CAAC,OAAO,EAAE,sBAAsB;;;;;IAmC/C,kBAAkB,CAAC,OAAO,EAAE,6BAA6B;IAkBzD,iBAAiB,CAAC,OAAO,EAAE,wBAAwB;CAuDjE"}
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.GraphqlClient = exports.MissingAppError = void 0;
3
+ exports.GraphqlClient = exports.MissingAppError = exports.APP_HAS_INSTALLATIONS_CODE = void 0;
4
4
  const cli_shared_1 = require("@forge/cli-shared");
5
+ exports.APP_HAS_INSTALLATIONS_CODE = 'APP_HAS_INSTALLATIONS';
5
6
  class MissingAppError extends cli_shared_1.UserError {
6
7
  }
7
8
  exports.MissingAppError = MissingAppError;
@@ -78,5 +79,61 @@ class GraphqlClient {
78
79
  };
79
80
  });
80
81
  }
82
+ async deleteEnvironments(details) {
83
+ const results = [];
84
+ for (const environmentKey of details.environmentKeys) {
85
+ try {
86
+ const success = await this.deleteEnvironment(Object.assign(Object.assign({}, details), { environmentKey }));
87
+ results.push({ environmentKey, successful: success });
88
+ }
89
+ catch (err) {
90
+ results.push({ environmentKey, successful: false, error: err });
91
+ }
92
+ }
93
+ return results;
94
+ }
95
+ async deleteEnvironment(details) {
96
+ const mutation = `
97
+ mutation forge_cli_deleteEnvironment($input: DeleteAppEnvironmentInput!) {
98
+ ecosystem {
99
+ deleteAppEnvironment(input: $input) {
100
+ success
101
+ errors {
102
+ message
103
+ extensions {
104
+ errorType
105
+ statusCode
106
+ }
107
+ }
108
+ }
109
+ }
110
+ }
111
+ `;
112
+ const { response: { ecosystem: { deleteAppEnvironment } }, requestId } = await this.graphqlClient.mutate(mutation, {
113
+ input: {
114
+ appAri: details.appId,
115
+ environmentKey: details.environmentKey
116
+ }
117
+ });
118
+ if (!deleteAppEnvironment) {
119
+ throw new cli_shared_1.GraphQlMutationError(`Unable to get a response (requestId: ${requestId || 'unknown'})`, {
120
+ requestId
121
+ });
122
+ }
123
+ const { success, errors } = deleteAppEnvironment;
124
+ const error = (0, cli_shared_1.getError)(errors);
125
+ let errorMessage = error.message;
126
+ if (error.code === exports.APP_HAS_INSTALLATIONS_CODE) {
127
+ errorMessage = cli_shared_1.Text.deleteEnvironment.hasInstallationError(details.environmentKey, cli_shared_1.environmentToOption);
128
+ }
129
+ if (!success) {
130
+ throw new cli_shared_1.GraphQlMutationError(`${errorMessage} (requestId: ${requestId || 'unknown'})`, {
131
+ requestId,
132
+ code: error.code,
133
+ statusCode: error.statusCode
134
+ });
135
+ }
136
+ return success;
137
+ }
81
138
  }
82
139
  exports.GraphqlClient = GraphqlClient;
@@ -33,7 +33,7 @@ export declare class MissingTaskIdError extends Error {
33
33
  export declare class InstallationRequestFailedError extends BaseError {
34
34
  private readonly userError;
35
35
  readonly code?: string | undefined;
36
- constructor(userError: boolean, code?: string | undefined, message?: string);
36
+ constructor(userError: boolean, code?: string | undefined, message?: string, requestId?: string | undefined);
37
37
  isUserError(): boolean;
38
38
  }
39
39
  export declare class MissingAppError extends UserError {
@@ -1 +1 @@
1
- {"version":3,"file":"graphql-client.d.ts","sourceRoot":"","sources":["../../src/installations/graphql-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"graphql-client.d.ts","sourceRoot":"","sources":["../../src/installations/graphql-client.ts"],"names":[],"mappings":"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"}
@@ -45,8 +45,8 @@ class MissingTaskIdError extends Error {
45
45
  }
46
46
  exports.MissingTaskIdError = MissingTaskIdError;
47
47
  class InstallationRequestFailedError extends cli_shared_1.BaseError {
48
- constructor(userError, code, message) {
49
- super(message);
48
+ constructor(userError, code, message, requestId) {
49
+ super(requestId, message);
50
50
  this.userError = userError;
51
51
  this.code = code;
52
52
  }
@@ -186,14 +186,14 @@ class InstallationsGraphqlClient {
186
186
  var _a, _b, _c, _d;
187
187
  let status = cli_shared_1.AppTaskState.Pending;
188
188
  while (status !== cli_shared_1.AppTaskState.Complete) {
189
- const { state, errors } = await this.getAppInstallationTask(taskId);
189
+ const { state, errors, requestId } = await this.getAppInstallationTask(taskId);
190
190
  status = state;
191
191
  if (status === cli_shared_1.AppTaskState.Failed) {
192
192
  const error = errors === null || errors === void 0 ? void 0 : errors[0];
193
193
  const statusCode = (_a = error === null || error === void 0 ? void 0 : error.extensions) === null || _a === void 0 ? void 0 : _a.statusCode;
194
194
  const isUserError = statusCode && statusCode >= 400 && statusCode < 500 ? true : false;
195
195
  const code = (_c = (_b = error === null || error === void 0 ? void 0 : error.extensions) === null || _b === void 0 ? void 0 : _b.errorType) !== null && _c !== void 0 ? _c : undefined;
196
- throw new InstallationRequestFailedError(isUserError, code, (_d = error === null || error === void 0 ? void 0 : error.message) !== null && _d !== void 0 ? _d : undefined);
196
+ throw new InstallationRequestFailedError(isUserError, code, (_d = error === null || error === void 0 ? void 0 : error.message) !== null && _d !== void 0 ? _d : undefined, requestId);
197
197
  }
198
198
  if (status !== cli_shared_1.AppTaskState.Complete)
199
199
  await this.pause(exports.UNINSTALLATION_EVENT_POLL_INTERVAL);
@@ -267,7 +267,7 @@ class InstallationsGraphqlClient {
267
267
  }
268
268
  }
269
269
  `;
270
- const { appInstallationTask } = await this.graphqlClient.query(query, {
270
+ const { appInstallationTask, requestId } = await this.graphqlClient.query(query, {
271
271
  id: taskId
272
272
  });
273
273
  if (!appInstallationTask) {
@@ -276,7 +276,8 @@ class InstallationsGraphqlClient {
276
276
  const { state, errors } = appInstallationTask;
277
277
  return {
278
278
  errors,
279
- state
279
+ state,
280
+ requestId
280
281
  };
281
282
  }
282
283
  async monitorUninstallApp(taskId) {
@@ -326,7 +327,7 @@ class InstallationsGraphqlClient {
326
327
  environmentType,
327
328
  context: installation.installationContext,
328
329
  site,
329
- version: installation.version || {
330
+ version: installation.appEnvironmentVersion || {
330
331
  isLatest: false
331
332
  }
332
333
  };
@@ -341,13 +342,13 @@ class InstallationsGraphqlClient {
341
342
  nodes {
342
343
  id
343
344
  installationContext
344
- version {
345
- isLatest
346
- }
347
345
  appEnvironment {
348
346
  key
349
347
  type
350
348
  }
349
+ appEnvironmentVersion {
350
+ isLatest
351
+ }
351
352
  }
352
353
  pageInfo {
353
354
  hasNextPage