@forge/cli 9.3.0 → 10.0.0-next.11

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 (84) hide show
  1. package/CHANGELOG.md +149 -0
  2. package/npm-shrinkwrap.json +50 -43
  3. package/out/analytics-client/analytics-client.js +39 -12
  4. package/out/analytics-client/analytics-message-handler.js +28 -27
  5. package/out/autocomplete/index.js +1 -2
  6. package/out/autocomplete/util.js +1 -1
  7. package/out/bin/postinstall.js +1 -1
  8. package/out/command-line/command.js +132 -116
  9. package/out/command-line/controller/autocomplete-controller.js +1 -0
  10. package/out/command-line/controller/default-environment-controller.js +8 -0
  11. package/out/command-line/controller/deploy-controller.js +25 -9
  12. package/out/command-line/controller/feedback-controller.js +2 -0
  13. package/out/command-line/controller/install-controller.js +11 -5
  14. package/out/command-line/controller/lint-controller.js +3 -1
  15. package/out/command-line/controller/pre-command-controller.js +6 -0
  16. package/out/command-line/controller/prerequisites-controller.js +3 -0
  17. package/out/command-line/controller/settings-controller.js +60 -57
  18. package/out/command-line/controller/tunnel-controller.js +8 -3
  19. package/out/command-line/dependency-injection.js +2 -2
  20. package/out/command-line/errors.js +1 -0
  21. package/out/command-line/register-authentication-command.js +1 -1
  22. package/out/command-line/register-environment-variables-commands.js +6 -8
  23. package/out/command-line/register-installation-commands.js +5 -7
  24. package/out/command-line/register-log-commands.js +1 -1
  25. package/out/command-line/register-settings-commands.js +3 -5
  26. package/out/command-line/register-storage-commands.js +1 -2
  27. package/out/command-line/sentry.js +4 -1
  28. package/out/command-line/version-info.js +1 -1
  29. package/out/command-line/view/analytics-settings-view.js +1 -0
  30. package/out/command-line/view/deploy-view.js +1 -0
  31. package/out/command-line/view/install-view.js +1 -0
  32. package/out/command-line/view/lint-view.js +2 -0
  33. package/out/command-line/view/lite-lint-view.js +2 -0
  34. package/out/command-line/view/settings-view.js +1 -0
  35. package/out/command-line/view/tunnel-view.js +4 -4
  36. package/out/deploy/deployer/deploy-monitor-graphql-client.js +2 -1
  37. package/out/deploy/deployer/deployer.js +11 -4
  38. package/out/deploy/deployer/trigger-deploy-graphql-client.js +1 -0
  39. package/out/deploy/package-upload-deploy.js +4 -0
  40. package/out/deploy/packager/archiver.js +19 -15
  41. package/out/deploy/packager/nativeui-bundler.js +6 -1
  42. package/out/deploy/packager/packager.js +7 -1
  43. package/out/deploy/packager/runtime-bundler.d.ts +3 -2
  44. package/out/deploy/packager/runtime-bundler.d.ts.map +1 -1
  45. package/out/deploy/packager/runtime-bundler.js +14 -5
  46. package/out/deploy/uploader/artifact-graphql-client.js +1 -0
  47. package/out/deploy/uploader/uploader.js +5 -0
  48. package/out/entities/graphql-client.js +2 -2
  49. package/out/entities/list-indexes.js +1 -0
  50. package/out/environment/create-environment.js +6 -1
  51. package/out/environment/delete-environment.js +6 -1
  52. package/out/environment/graphql-client.js +6 -3
  53. package/out/environment/list-environment.js +2 -0
  54. package/out/environment-variables/delete-environment-variable.js +6 -1
  55. package/out/environment-variables/graphql-client.js +1 -0
  56. package/out/environment-variables/list-environment-variables.js +6 -1
  57. package/out/environment-variables/set-environment-variable.js +6 -1
  58. package/out/installations/graphql-client.d.ts +1 -0
  59. package/out/installations/graphql-client.d.ts.map +1 -1
  60. package/out/installations/graphql-client.js +43 -25
  61. package/out/installations/install-app-site.js +2 -0
  62. package/out/installations/site-translation/cloudid-products.js +1 -0
  63. package/out/installations/uninstall-app.js +2 -0
  64. package/out/migration-keys/graphql-client.js +4 -4
  65. package/out/providers/configure-provider.js +6 -1
  66. package/out/providers/graphql-client.js +1 -0
  67. package/out/service/cached-config-service.js +1 -0
  68. package/out/service/custom-entities-service.js +4 -2
  69. package/out/service/docker-service.js +5 -1
  70. package/out/service/installation-service.js +7 -4
  71. package/out/service/lint-service.js +2 -0
  72. package/out/service/lite-lint-service.js +2 -0
  73. package/out/service/migration-keys-service.js +2 -0
  74. package/out/service/port-finding-service.js +1 -0
  75. package/out/service/resource-packaging-service.js +5 -0
  76. package/out/service/resources-uploader-service.js +2 -0
  77. package/out/service/tunnel-analytics-service.js +10 -3
  78. package/out/service/tunnel-service.js +19 -10
  79. package/out/storage/local-file-storage.js +2 -2
  80. package/out/webtrigger/get-webtrigger-url.js +4 -0
  81. package/out/webtrigger/graphql-client.js +2 -1
  82. package/out/workers/analytics-message-worker.js +3 -0
  83. package/out/workers/version-check-worker.js +1 -0
  84. package/package.json +7 -6
@@ -4,6 +4,8 @@ exports.LiteLintService = void 0;
4
4
  const lint_1 = require("@forge/lint");
5
5
  const manifest_1 = require("@forge/manifest");
6
6
  class LiteLintService {
7
+ lintService;
8
+ problemCounter;
7
9
  constructor(lintService = lint_1.litelint, problemCounter = lint_1.problemCount) {
8
10
  this.lintService = lintService;
9
11
  this.problemCounter = problemCounter;
@@ -2,6 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MigrationKeysService = void 0;
4
4
  class MigrationKeysService {
5
+ migrationKeysClient;
6
+ getAppConfig;
5
7
  constructor(migrationKeysClient, getAppConfig) {
6
8
  this.migrationKeysClient = migrationKeysClient;
7
9
  this.getAppConfig = getAppConfig;
@@ -5,6 +5,7 @@ const portfinder_1 = require("portfinder");
5
5
  const util_1 = require("util");
6
6
  const getPortsPromise = (0, util_1.promisify)(portfinder_1.getPorts);
7
7
  class ConfigFilePortFindingService {
8
+ configFile;
8
9
  constructor(configFile) {
9
10
  this.configFile = configFile;
10
11
  }
@@ -42,6 +42,11 @@ class DetailedMalformedHtmlEntrypointError extends cli_shared_1.UserError {
42
42
  }
43
43
  exports.DetailedMalformedHtmlEntrypointError = DetailedMalformedHtmlEntrypointError;
44
44
  class ResourcePackagingService {
45
+ archiverFactory;
46
+ fileSystemReader;
47
+ appDir;
48
+ bridgeScriptService;
49
+ iframeResizerScriptService;
45
50
  constructor(archiverFactory, fileSystemReader, appDir, bridgeScriptService, iframeResizerScriptService) {
46
51
  this.archiverFactory = archiverFactory;
47
52
  this.fileSystemReader = fileSystemReader;
@@ -6,6 +6,7 @@ const cli_shared_1 = require("@forge/cli-shared");
6
6
  const form_data_1 = tslib_1.__importDefault(require("form-data"));
7
7
  const node_fetch_1 = tslib_1.__importDefault(require("node-fetch"));
8
8
  class ResourceUploadError extends cli_shared_1.BaseError {
9
+ userError;
9
10
  constructor(userError = false, requestId) {
10
11
  super(requestId, 'Failed to upload resource to S3');
11
12
  this.userError = userError;
@@ -15,6 +16,7 @@ class ResourceUploadError extends cli_shared_1.BaseError {
15
16
  }
16
17
  }
17
18
  class ResourcesUploaderService {
19
+ fileSystemReader;
18
20
  constructor(fileSystemReader) {
19
21
  this.fileSystemReader = fileSystemReader;
20
22
  }
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TunnelAnalyticsService = void 0;
4
4
  const cli_shared_1 = require("@forge/cli-shared");
5
5
  class TunnelAnalyticsService {
6
+ analyticsClientReporter;
7
+ cliDetails;
6
8
  constructor(analyticsClientReporter, cliDetails) {
7
9
  this.analyticsClientReporter = analyticsClientReporter;
8
10
  this.cliDetails = cliDetails;
@@ -16,10 +18,15 @@ class TunnelAnalyticsService {
16
18
  this.analyticsClientReporter.reportSuccess('close tunnel', creds, {});
17
19
  }
18
20
  reportTunnelFailure(creds, errorName, attributes) {
19
- var _a, _b;
20
- attributes = Object.assign({ error: errorName, version: (_a = this.cliDetails) === null || _a === void 0 ? void 0 : _a.version, latest: (_b = this.cliDetails) === null || _b === void 0 ? void 0 : _b.latest, isLatest: (0, cli_shared_1.isLatestCLIVersion)(this.cliDetails) }, attributes);
21
+ attributes = {
22
+ error: errorName,
23
+ version: this.cliDetails?.version,
24
+ latest: this.cliDetails?.latest,
25
+ isLatest: (0, cli_shared_1.isLatestCLIVersion)(this.cliDetails),
26
+ ...attributes
27
+ };
21
28
  if (attributes.isUserError === undefined) {
22
- attributes = Object.assign(Object.assign({}, attributes), { isUserError: false });
29
+ attributes = { ...attributes, isUserError: false };
23
30
  }
24
31
  this.analyticsClientReporter.reportInvokeFailure('tunnel', creds, attributes);
25
32
  }
@@ -14,7 +14,7 @@ exports.CONTAINER_NAME = `forge-tunnel-docker-${process.pid}`;
14
14
  const PATH_DOCKER_NGROK_CONFIG = '/opt/provided-ngrok-config.yml';
15
15
  const cliDetails = (0, version_info_1.getCLIDetails)();
16
16
  let versionTags;
17
- if ((cliDetails === null || cliDetails === void 0 ? void 0 : cliDetails.version) !== undefined) {
17
+ if (cliDetails?.version !== undefined) {
18
18
  if (process.env.FORGE_IN_LOCAL_E2E === 'true') {
19
19
  versionTags = ['e2e'];
20
20
  }
@@ -41,6 +41,7 @@ class InvalidDebugStartingPortNumber extends cli_shared_1.UserError {
41
41
  }
42
42
  exports.InvalidDebugStartingPortNumber = InvalidDebugStartingPortNumber;
43
43
  class TunnelServiceBase {
44
+ cachedConfigService;
44
45
  constructor(cachedConfigService) {
45
46
  this.cachedConfigService = cachedConfigService;
46
47
  }
@@ -53,6 +54,11 @@ class TunnelServiceBase {
53
54
  }
54
55
  }
55
56
  class InProcessTunnelService extends TunnelServiceBase {
57
+ ui;
58
+ startTunnelCommand;
59
+ tunnelInteractor;
60
+ configFilePortFindingService;
61
+ analyticsService;
56
62
  constructor(ui, startTunnelCommand, tunnelInteractor, configFilePortFindingService, cachedConfigService, analyticsService) {
57
63
  super(cachedConfigService);
58
64
  this.ui = ui;
@@ -86,19 +92,20 @@ class InProcessTunnelService extends TunnelServiceBase {
86
92
  }
87
93
  exports.InProcessTunnelService = InProcessTunnelService;
88
94
  class SandboxTunnelServiceBase extends TunnelServiceBase {
95
+ configFilePortFindingService;
96
+ cachedConfigService;
89
97
  constructor(configFilePortFindingService, cachedConfigService) {
90
98
  super(cachedConfigService);
91
99
  this.configFilePortFindingService = configFilePortFindingService;
92
100
  this.cachedConfigService = cachedConfigService;
93
101
  }
94
102
  async getTunnelProcessEnvironment(tunnelOptions, debugEnabled, { email, token }, port, cspReporterPort, resourcePorts) {
95
- var _a;
96
103
  const graphqlGateway = (0, cli_shared_1.getGraphqlGateway)();
97
104
  return [
98
105
  { key: 'APP_FOLDER', value: '/app' },
99
106
  { key: 'FORGE_EMAIL', value: email },
100
107
  { key: 'FORGE_API_TOKEN', value: token },
101
- { key: 'ENVIRONMENT_KEY', value: (_a = tunnelOptions.environment) !== null && _a !== void 0 ? _a : 'default' },
108
+ { key: 'ENVIRONMENT_KEY', value: tunnelOptions.environment ?? 'default' },
102
109
  { key: 'TUNNEL_INSPECTOR_ENABLED', value: (!!tunnelOptions.debug).toString() },
103
110
  { key: 'FORGE_GRAPHQL_GATEWAY', value: graphqlGateway },
104
111
  { key: 'VERBOSE_MODE', value: `${debugEnabled}` },
@@ -130,8 +137,7 @@ class SandboxTunnelServiceBase extends TunnelServiceBase {
130
137
  Object.keys(process.env)
131
138
  .filter((variable) => variable.startsWith('FORGE_USER_VAR_'))
132
139
  .forEach((name) => {
133
- var _a;
134
- vars.push({ key: name, value: (_a = process.env[name]) !== null && _a !== void 0 ? _a : 'undefined' });
140
+ vars.push({ key: name, value: process.env[name] ?? 'undefined' });
135
141
  });
136
142
  return vars;
137
143
  }
@@ -145,7 +151,10 @@ class LocalTunnelService extends SandboxTunnelServiceBase {
145
151
  const env = this.formatEnvForLocalTunnel(environment);
146
152
  const process = (0, cross_spawn_1.spawn)('forge-tunnel', [], {
147
153
  stdio: 'inherit',
148
- env: Object.assign(Object.assign({}, env), { FORGE_DEV_TUNNEL: 'true' })
154
+ env: {
155
+ ...env,
156
+ FORGE_DEV_TUNNEL: 'true'
157
+ }
149
158
  });
150
159
  if (onError) {
151
160
  process.on('error', onError);
@@ -160,13 +169,14 @@ class LocalTunnelService extends SandboxTunnelServiceBase {
160
169
  }
161
170
  exports.LocalTunnelService = LocalTunnelService;
162
171
  class DockerTunnelService extends SandboxTunnelServiceBase {
172
+ dockerService;
173
+ analyticsService;
163
174
  constructor(configFilePortFindingService, cachedConfigService, dockerService, analyticsService) {
164
175
  super(configFilePortFindingService, cachedConfigService);
165
176
  this.dockerService = dockerService;
166
177
  this.analyticsService = analyticsService;
167
178
  }
168
179
  async run(tunnelOptions, creds, debugEnabled) {
169
- var _a;
170
180
  await this.validateDockerVersion(creds, debugEnabled);
171
181
  const startPort = 8000 + Math.round(Math.random() * 100);
172
182
  const port = await (0, portfinder_1.getPortPromise)({ port: startPort });
@@ -187,8 +197,7 @@ class DockerTunnelService extends SandboxTunnelServiceBase {
187
197
  exports.IMAGE_NAME
188
198
  ]);
189
199
  docker.on('exit', () => this.analyticsService.reportTunnelClosed(creds));
190
- (_a = docker.stderr) === null || _a === void 0 ? void 0 : _a.on('data', (error) => {
191
- var _a;
200
+ docker.stderr?.on('data', (error) => {
192
201
  const errorMessage = error;
193
202
  let errorJson;
194
203
  try {
@@ -201,7 +210,7 @@ class DockerTunnelService extends SandboxTunnelServiceBase {
201
210
  this.analyticsService.reportTunnelFailure(creds, tunnelErrorDetails.name, tunnelErrorDetails.attributes);
202
211
  }
203
212
  else {
204
- (_a = process.stderr) === null || _a === void 0 ? void 0 : _a.write(errorMessage);
213
+ process.stderr?.write(errorMessage);
205
214
  }
206
215
  });
207
216
  this.dockerService.startCleanupWorker([docker.pid], exports.CONTAINER_NAME);
@@ -7,6 +7,8 @@ const fs = tslib_1.__importStar(require("fs"));
7
7
  const env_paths_1 = tslib_1.__importDefault(require("env-paths"));
8
8
  const fs_extra_1 = require("fs-extra");
9
9
  class LocalFileStorage {
10
+ static STORAGE_PATHS = (0, env_paths_1.default)('forge-cli');
11
+ static FOLDER = LocalFileStorage.STORAGE_PATHS.data;
10
12
  constructor() {
11
13
  if (!fs.existsSync(LocalFileStorage.FOLDER)) {
12
14
  (0, fs_extra_1.mkdirpSync)(LocalFileStorage.FOLDER);
@@ -49,5 +51,3 @@ class LocalFileStorage {
49
51
  }
50
52
  }
51
53
  exports.LocalFileStorage = LocalFileStorage;
52
- LocalFileStorage.STORAGE_PATHS = (0, env_paths_1.default)('forge-cli');
53
- LocalFileStorage.FOLDER = LocalFileStorage.STORAGE_PATHS.data;
@@ -3,6 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.GetWebTriggerURLCommand = void 0;
4
4
  const ari_1 = require("@forge/util/packages/ari");
5
5
  class GetWebTriggerURLCommand {
6
+ getAppConfig;
7
+ webTriggerClient;
8
+ appEnvironmentClient;
9
+ webTriggerGraphqlClient;
6
10
  constructor(getAppConfig, webTriggerClient, appEnvironmentClient, webTriggerGraphqlClient) {
7
11
  this.getAppConfig = getAppConfig;
8
12
  this.webTriggerClient = webTriggerClient;
@@ -10,11 +10,12 @@ class WebTriggerCreationError extends cli_shared_1.GraphQlMutationError {
10
10
  exports.WebTriggerCreationError = WebTriggerCreationError;
11
11
  class MissingWebTriggerUrlError extends cli_shared_1.GraphQlMutationError {
12
12
  constructor(requestId) {
13
- super(cli_shared_1.Text.webtrigger.error.creationError(`Web Trigger URL not found after successful creation, requestId: ${requestId !== null && requestId !== void 0 ? requestId : 'N/A'}`), { requestId });
13
+ super(cli_shared_1.Text.webtrigger.error.creationError(`Web Trigger URL not found after successful creation, requestId: ${requestId ?? 'N/A'}`), { requestId });
14
14
  }
15
15
  }
16
16
  exports.MissingWebTriggerUrlError = MissingWebTriggerUrlError;
17
17
  class WebTriggerGraphQLClient {
18
+ graphQLClient;
18
19
  constructor(graphQLClient) {
19
20
  this.graphQLClient = graphQLClient;
20
21
  }
@@ -2,6 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AnalyticsMessageWorker = void 0;
4
4
  class AnalyticsMessageWorker {
5
+ storage;
6
+ messageHandler;
7
+ cachedConfigService;
5
8
  constructor(storage, messageHandler, cachedConfigService) {
6
9
  this.storage = storage;
7
10
  this.messageHandler = messageHandler;
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VersionCheckWorker = void 0;
4
4
  const version_info_1 = require("../command-line/version-info");
5
5
  class VersionCheckWorker {
6
+ workerInfo;
6
7
  constructor(workerInfo) {
7
8
  this.workerInfo = workerInfo;
8
9
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forge/cli",
3
- "version": "9.3.0",
3
+ "version": "10.0.0-next.11",
4
4
  "description": "A command line interface for managing Atlassian-hosted apps",
5
5
  "author": "Atlassian",
6
6
  "license": "UNLICENSED",
@@ -18,13 +18,13 @@
18
18
  "postinstall": "node -e \"fs.existsSync('./out/bin/postinstall.js') && require('./out/bin/postinstall.js')\""
19
19
  },
20
20
  "dependencies": {
21
- "@forge/bundler": "4.16.1",
22
- "@forge/cli-shared": "4.2.0",
21
+ "@forge/bundler": "4.16.2-next.8",
22
+ "@forge/cli-shared": "5.0.0-next.7",
23
23
  "@forge/egress": "1.2.13",
24
- "@forge/lint": "5.1.0",
25
- "@forge/manifest": "7.2.2",
24
+ "@forge/lint": "5.1.1-next.7",
25
+ "@forge/manifest": "7.3.0-next.6",
26
26
  "@forge/runtime": "5.8.0",
27
- "@forge/tunnel": "5.2.0",
27
+ "@forge/tunnel": "5.2.1-next.9",
28
28
  "@forge/util": "1.4.3",
29
29
  "@sentry/node": "7.100.1",
30
30
  "ajv": "^8.12.0",
@@ -39,6 +39,7 @@
39
39
  "dayjs": "^1.11.10",
40
40
  "didyoumean": "^1.2.2",
41
41
  "env-paths": "^2.2.1",
42
+ "exponential-backoff": "^3.1.1",
42
43
  "form-data": "^4.0.0",
43
44
  "fs-extra": "^11.2.0",
44
45
  "hidefile": "^3.0.0",