@forge/cli 9.3.0 → 10.0.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/CHANGELOG.md +206 -0
- package/npm-shrinkwrap.json +50 -43
- package/out/analytics-client/analytics-client.js +39 -12
- package/out/analytics-client/analytics-message-handler.js +28 -27
- package/out/autocomplete/index.js +1 -2
- package/out/autocomplete/util.js +1 -1
- package/out/bin/postinstall.js +1 -1
- package/out/command-line/command.js +132 -116
- package/out/command-line/controller/autocomplete-controller.js +1 -0
- package/out/command-line/controller/default-environment-controller.js +8 -0
- package/out/command-line/controller/deploy-controller.js +25 -9
- package/out/command-line/controller/feedback-controller.js +2 -0
- package/out/command-line/controller/install-controller.js +11 -5
- package/out/command-line/controller/lint-controller.js +3 -1
- package/out/command-line/controller/pre-command-controller.js +6 -0
- package/out/command-line/controller/prerequisites-controller.js +3 -0
- package/out/command-line/controller/settings-controller.js +60 -57
- package/out/command-line/controller/tunnel-controller.js +8 -3
- package/out/command-line/dependency-injection.js +2 -2
- package/out/command-line/errors.js +1 -0
- package/out/command-line/register-authentication-command.js +1 -1
- package/out/command-line/register-environment-variables-commands.js +6 -8
- package/out/command-line/register-installation-commands.js +5 -7
- package/out/command-line/register-log-commands.js +1 -1
- package/out/command-line/register-settings-commands.js +3 -5
- package/out/command-line/register-storage-commands.js +1 -2
- package/out/command-line/sentry.js +4 -1
- package/out/command-line/version-info.js +1 -1
- package/out/command-line/view/analytics-settings-view.js +1 -0
- package/out/command-line/view/deploy-view.js +1 -0
- package/out/command-line/view/install-view.js +1 -0
- package/out/command-line/view/lint-view.js +2 -0
- package/out/command-line/view/lite-lint-view.js +2 -0
- package/out/command-line/view/settings-view.js +1 -0
- package/out/command-line/view/tunnel-view.js +4 -4
- package/out/deploy/deployer/deploy-monitor-graphql-client.js +2 -1
- package/out/deploy/deployer/deployer.js +11 -4
- package/out/deploy/deployer/trigger-deploy-graphql-client.js +1 -0
- package/out/deploy/package-upload-deploy.js +4 -0
- package/out/deploy/packager/archiver.js +19 -15
- package/out/deploy/packager/nativeui-bundler.js +6 -1
- package/out/deploy/packager/packager.js +7 -1
- package/out/deploy/packager/runtime-bundler.d.ts +3 -2
- package/out/deploy/packager/runtime-bundler.d.ts.map +1 -1
- package/out/deploy/packager/runtime-bundler.js +14 -5
- package/out/deploy/uploader/artifact-graphql-client.js +1 -0
- package/out/deploy/uploader/uploader.js +5 -0
- package/out/entities/graphql-client.js +2 -2
- package/out/entities/list-indexes.js +1 -0
- package/out/environment/create-environment.js +6 -1
- package/out/environment/delete-environment.js +6 -1
- package/out/environment/graphql-client.js +6 -3
- package/out/environment/list-environment.js +2 -0
- package/out/environment-variables/delete-environment-variable.js +6 -1
- package/out/environment-variables/graphql-client.js +1 -0
- package/out/environment-variables/list-environment-variables.js +6 -1
- package/out/environment-variables/set-environment-variable.js +6 -1
- package/out/installations/graphql-client.d.ts +1 -0
- package/out/installations/graphql-client.d.ts.map +1 -1
- package/out/installations/graphql-client.js +43 -25
- package/out/installations/install-app-site.js +2 -0
- package/out/installations/site-translation/cloudid-products.js +1 -0
- package/out/installations/uninstall-app.js +2 -0
- package/out/migration-keys/graphql-client.js +4 -4
- package/out/providers/configure-provider.js +6 -1
- package/out/providers/graphql-client.js +1 -0
- package/out/service/cached-config-service.js +1 -0
- package/out/service/custom-entities-service.js +4 -2
- package/out/service/docker-service.js +5 -1
- package/out/service/installation-service.js +7 -4
- package/out/service/lint-service.js +2 -0
- package/out/service/lite-lint-service.js +2 -0
- package/out/service/migration-keys-service.js +2 -0
- package/out/service/port-finding-service.js +1 -0
- package/out/service/resource-packaging-service.js +5 -0
- package/out/service/resources-uploader-service.js +2 -0
- package/out/service/tunnel-analytics-service.js +10 -3
- package/out/service/tunnel-service.js +19 -10
- package/out/storage/local-file-storage.js +2 -2
- package/out/webtrigger/get-webtrigger-url.js +4 -0
- package/out/webtrigger/graphql-client.js +2 -1
- package/out/workers/analytics-message-worker.js +3 -0
- package/out/workers/version-check-worker.js +1 -0
- 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;
|
|
@@ -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
|
-
|
|
20
|
-
|
|
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 =
|
|
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 (
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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": "
|
|
3
|
+
"version": "10.0.0",
|
|
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.
|
|
22
|
-
"@forge/cli-shared": "
|
|
21
|
+
"@forge/bundler": "4.16.2",
|
|
22
|
+
"@forge/cli-shared": "5.0.0",
|
|
23
23
|
"@forge/egress": "1.2.13",
|
|
24
|
-
"@forge/lint": "5.1.
|
|
25
|
-
"@forge/manifest": "7.
|
|
24
|
+
"@forge/lint": "5.1.1",
|
|
25
|
+
"@forge/manifest": "7.3.0",
|
|
26
26
|
"@forge/runtime": "5.8.0",
|
|
27
|
-
"@forge/tunnel": "5.2.
|
|
27
|
+
"@forge/tunnel": "5.2.1",
|
|
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",
|