@forge/cli 0.0.0-experimental-deeb8f6 → 0.0.0-experimental-c8e9749
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 +1110 -2
- package/npm-shrinkwrap.json +13212 -223
- package/out/analytics-client/analytics-client.d.ts +36 -0
- package/out/analytics-client/analytics-client.d.ts.map +1 -0
- package/out/analytics-client/analytics-client.js +140 -0
- package/out/analytics-client/analytics-message-handler.d.ts +21 -0
- package/out/analytics-client/analytics-message-handler.d.ts.map +1 -0
- package/out/analytics-client/analytics-message-handler.js +43 -0
- package/out/autocomplete/autocomplete-config.json +243 -0
- package/out/autocomplete/index.d.ts +5 -0
- package/out/autocomplete/index.d.ts.map +1 -0
- package/out/autocomplete/index.js +41 -0
- package/out/autocomplete/isSupportedShell.d.ts +2 -0
- package/out/autocomplete/isSupportedShell.d.ts.map +1 -0
- package/out/autocomplete/isSupportedShell.js +11 -0
- package/out/autocomplete/types.d.ts +14 -0
- package/out/autocomplete/types.d.ts.map +1 -0
- package/out/autocomplete/types.js +2 -0
- package/out/autocomplete/util.d.ts +6 -0
- package/out/autocomplete/util.d.ts.map +1 -0
- package/out/autocomplete/util.js +15 -0
- package/out/bin/cli.d.ts +1 -0
- package/out/bin/cli.d.ts.map +1 -1
- package/out/bin/cli.js +4 -1
- package/out/bin/postinstall.d.ts +2 -0
- package/out/bin/postinstall.d.ts.map +1 -0
- package/out/bin/postinstall.js +23 -0
- package/out/command-line/anon-user-id.d.ts +3 -0
- package/out/command-line/anon-user-id.d.ts.map +1 -0
- package/out/command-line/anon-user-id.js +17 -0
- package/out/command-line/command.d.ts +80 -0
- package/out/command-line/command.d.ts.map +1 -0
- package/out/command-line/command.js +408 -0
- package/out/command-line/controller/assertUnreachable.d.ts +2 -0
- package/out/command-line/controller/assertUnreachable.d.ts.map +1 -0
- package/out/command-line/controller/assertUnreachable.js +7 -0
- package/out/command-line/controller/autocomplete-controller.d.ts +12 -0
- package/out/command-line/controller/autocomplete-controller.d.ts.map +1 -0
- package/out/command-line/controller/autocomplete-controller.js +54 -0
- package/out/command-line/controller/deploy-controller.d.ts +42 -0
- package/out/command-line/controller/deploy-controller.d.ts.map +1 -0
- package/out/command-line/controller/deploy-controller.js +139 -0
- package/out/command-line/controller/feedback-controller.d.ts +9 -0
- package/out/command-line/controller/feedback-controller.d.ts.map +1 -0
- package/out/command-line/controller/feedback-controller.js +19 -0
- package/out/command-line/controller/getNodeVersion.d.ts +2 -0
- package/out/command-line/controller/getNodeVersion.d.ts.map +1 -0
- package/out/command-line/controller/getNodeVersion.js +7 -0
- package/out/command-line/controller/install-controller.d.ts +35 -0
- package/out/command-line/controller/install-controller.d.ts.map +1 -0
- package/out/command-line/controller/install-controller.js +157 -0
- package/out/command-line/controller/lint-controller.d.ts +9 -0
- package/out/command-line/controller/lint-controller.d.ts.map +1 -0
- package/out/command-line/controller/lint-controller.js +20 -0
- package/out/command-line/controller/pre-command-controller.d.ts +25 -0
- package/out/command-line/controller/pre-command-controller.d.ts.map +1 -0
- package/out/command-line/controller/pre-command-controller.js +57 -0
- package/out/command-line/controller/prerequisites-controller.d.ts +15 -0
- package/out/command-line/controller/prerequisites-controller.d.ts.map +1 -0
- package/out/command-line/controller/prerequisites-controller.js +41 -0
- package/out/command-line/controller/settings-controller.d.ts +19 -0
- package/out/command-line/controller/settings-controller.d.ts.map +1 -0
- package/out/command-line/controller/settings-controller.js +48 -0
- package/out/command-line/controller/stubController.d.ts +9 -0
- package/out/command-line/controller/stubController.d.ts.map +1 -0
- package/out/command-line/controller/stubController.js +15 -0
- package/out/command-line/controller/tunnel-controller.d.ts +14 -0
- package/out/command-line/controller/tunnel-controller.d.ts.map +1 -0
- package/out/command-line/controller/tunnel-controller.js +43 -0
- package/out/command-line/dependency-injection.d.ts +76 -0
- package/out/command-line/dependency-injection.d.ts.map +1 -0
- package/out/command-line/dependency-injection.js +211 -0
- package/out/command-line/environment.d.ts +2 -0
- package/out/command-line/environment.d.ts.map +1 -0
- package/out/command-line/environment.js +16 -0
- package/out/command-line/errors.d.ts +6 -0
- package/out/command-line/errors.d.ts.map +1 -0
- package/out/command-line/errors.js +12 -0
- package/out/command-line/index.d.ts +5 -0
- package/out/command-line/index.d.ts.map +1 -0
- package/out/command-line/index.js +73 -0
- package/out/command-line/register-app-commands.d.ts +10 -0
- package/out/command-line/register-app-commands.d.ts.map +1 -0
- package/out/command-line/register-app-commands.js +128 -0
- package/out/command-line/register-authentication-command.d.ts +16 -0
- package/out/command-line/register-authentication-command.d.ts.map +1 -0
- package/out/command-line/register-authentication-command.js +94 -0
- package/out/command-line/register-autocomplete-commands.d.ts +3 -0
- package/out/command-line/register-autocomplete-commands.d.ts.map +1 -0
- package/out/command-line/register-autocomplete-commands.js +14 -0
- package/out/command-line/register-contributors-commands.d.ts +3 -0
- package/out/command-line/register-contributors-commands.d.ts.map +1 -0
- package/out/command-line/register-contributors-commands.js +134 -0
- package/out/command-line/register-deployment-commands.d.ts +22 -0
- package/out/command-line/register-deployment-commands.d.ts.map +1 -0
- package/out/command-line/register-deployment-commands.js +16 -0
- package/out/command-line/register-environment-variables-commands.d.ts +3 -0
- package/out/command-line/register-environment-variables-commands.d.ts.map +1 -0
- package/out/command-line/register-environment-variables-commands.js +103 -0
- package/out/command-line/register-feedback-commands.d.ts +3 -0
- package/out/command-line/register-feedback-commands.d.ts.map +1 -0
- package/out/command-line/register-feedback-commands.js +32 -0
- package/out/command-line/register-installation-commands.d.ts +6 -0
- package/out/command-line/register-installation-commands.d.ts.map +1 -0
- package/out/command-line/register-installation-commands.js +143 -0
- package/out/command-line/register-lint-command.d.ts +8 -0
- package/out/command-line/register-lint-command.d.ts.map +1 -0
- package/out/command-line/register-lint-command.js +16 -0
- package/out/command-line/register-log-commands.d.ts +4 -0
- package/out/command-line/register-log-commands.d.ts.map +1 -0
- package/out/command-line/register-log-commands.js +139 -0
- package/out/command-line/register-providers-commands.d.ts +3 -0
- package/out/command-line/register-providers-commands.d.ts.map +1 -0
- package/out/command-line/register-providers-commands.js +44 -0
- package/out/command-line/register-settings-commands.d.ts +3 -0
- package/out/command-line/register-settings-commands.d.ts.map +1 -0
- package/out/command-line/register-settings-commands.js +39 -0
- package/out/command-line/register-tunnel-commands.d.ts +3 -0
- package/out/command-line/register-tunnel-commands.d.ts.map +1 -0
- package/out/command-line/register-tunnel-commands.js +15 -0
- package/out/command-line/register-webtrigger-commands.d.ts +3 -0
- package/out/command-line/register-webtrigger-commands.d.ts.map +1 -0
- package/out/command-line/register-webtrigger-commands.js +56 -0
- package/out/command-line/sentry.d.ts +4 -0
- package/out/command-line/sentry.d.ts.map +1 -0
- package/out/command-line/sentry.js +16 -0
- package/out/command-line/unique-machine-id.d.ts +3 -0
- package/out/command-line/unique-machine-id.d.ts.map +1 -0
- package/out/command-line/unique-machine-id.js +19 -0
- package/out/command-line/version-info.d.ts +9 -0
- package/out/command-line/version-info.d.ts.map +1 -0
- package/out/command-line/version-info.js +42 -0
- package/out/command-line/view/analytics-settings-view.d.ts +7 -0
- package/out/command-line/view/analytics-settings-view.d.ts.map +1 -0
- package/out/command-line/view/analytics-settings-view.js +18 -0
- package/out/command-line/view/deploy-view.d.ts +21 -0
- package/out/command-line/view/deploy-view.d.ts.map +1 -0
- package/out/command-line/view/deploy-view.js +58 -0
- package/out/command-line/view/install-view.d.ts +18 -0
- package/out/command-line/view/install-view.d.ts.map +1 -0
- package/out/command-line/view/install-view.js +56 -0
- package/out/command-line/view/lint-view.d.ts +12 -0
- package/out/command-line/view/lint-view.d.ts.map +1 -0
- package/out/command-line/view/lint-view.js +31 -0
- package/out/command-line/view/lite-lint-view.d.ts +10 -0
- package/out/command-line/view/lite-lint-view.d.ts.map +1 -0
- package/out/command-line/view/lite-lint-view.js +18 -0
- package/out/command-line/view/settings-view.d.ts +10 -0
- package/out/command-line/view/settings-view.d.ts.map +1 -0
- package/out/command-line/view/settings-view.js +26 -0
- package/out/command-line/view/tunnel-view.d.ts +20 -0
- package/out/command-line/view/tunnel-view.d.ts.map +1 -0
- package/out/command-line/view/tunnel-view.js +92 -0
- package/out/contributors/add-contributor.d.ts +17 -0
- package/out/contributors/add-contributor.d.ts.map +1 -0
- package/out/contributors/add-contributor.js +14 -0
- package/out/contributors/graphql-client.d.ts +14 -0
- package/out/contributors/graphql-client.d.ts.map +1 -0
- package/out/contributors/graphql-client.js +113 -0
- package/out/contributors/list-contributors.d.ts +18 -0
- package/out/contributors/list-contributors.d.ts.map +1 -0
- package/out/contributors/list-contributors.js +14 -0
- package/out/contributors/remove-contributors.d.ts +18 -0
- package/out/contributors/remove-contributors.d.ts.map +1 -0
- package/out/contributors/remove-contributors.js +14 -0
- package/out/deploy/deployer/deploy-monitor-graphql-client.d.ts +24 -0
- package/out/deploy/deployer/deploy-monitor-graphql-client.d.ts.map +1 -0
- package/out/deploy/deployer/deploy-monitor-graphql-client.js +57 -0
- package/out/deploy/deployer/deployer.d.ts +40 -0
- package/out/deploy/deployer/deployer.d.ts.map +1 -0
- package/out/deploy/deployer/deployer.js +187 -0
- package/out/deploy/deployer/index.d.ts +4 -0
- package/out/deploy/deployer/index.d.ts.map +1 -0
- package/out/deploy/deployer/index.js +6 -0
- package/out/deploy/deployer/trigger-deploy-graphql-client.d.ts +19 -0
- package/out/deploy/deployer/trigger-deploy-graphql-client.d.ts.map +1 -0
- package/out/deploy/deployer/trigger-deploy-graphql-client.js +49 -0
- package/out/deploy/index.d.ts +5 -0
- package/out/deploy/index.d.ts.map +1 -0
- package/out/deploy/index.js +7 -0
- package/out/deploy/package-upload-deploy.d.ts +20 -0
- package/out/deploy/package-upload-deploy.d.ts.map +1 -0
- package/out/deploy/package-upload-deploy.js +37 -0
- package/out/deploy/packager/archiver.d.ts +27 -0
- package/out/deploy/packager/archiver.d.ts.map +1 -0
- package/out/deploy/packager/archiver.js +76 -0
- package/out/deploy/packager/index.d.ts +3 -0
- package/out/deploy/packager/index.d.ts.map +1 -0
- package/out/deploy/packager/index.js +5 -0
- package/out/deploy/packager/nativeui-bundler.d.ts +12 -0
- package/out/deploy/packager/nativeui-bundler.d.ts.map +1 -0
- package/out/deploy/packager/nativeui-bundler.js +34 -0
- package/out/deploy/packager/packager.d.ts +32 -0
- package/out/deploy/packager/packager.d.ts.map +1 -0
- package/out/deploy/packager/packager.js +21 -0
- package/out/deploy/packager/runtime-bundler.d.ts +15 -0
- package/out/deploy/packager/runtime-bundler.d.ts.map +1 -0
- package/out/deploy/packager/runtime-bundler.js +53 -0
- package/out/deploy/uploader/artifact-graphql-client.d.ts +26 -0
- package/out/deploy/uploader/artifact-graphql-client.d.ts.map +1 -0
- package/out/deploy/uploader/artifact-graphql-client.js +100 -0
- package/out/deploy/uploader/index.d.ts +3 -0
- package/out/deploy/uploader/index.d.ts.map +1 -0
- package/out/deploy/uploader/index.js +5 -0
- package/out/deploy/uploader/uploader.d.ts +19 -0
- package/out/deploy/uploader/uploader.d.ts.map +1 -0
- package/out/deploy/uploader/uploader.js +43 -0
- package/out/environment-variables/delete-environment-variable.d.ts +18 -0
- package/out/environment-variables/delete-environment-variable.d.ts.map +1 -0
- package/out/environment-variables/delete-environment-variable.js +14 -0
- package/out/environment-variables/graphql-client.d.ts +16 -0
- package/out/environment-variables/graphql-client.d.ts.map +1 -0
- package/out/environment-variables/graphql-client.js +113 -0
- package/out/environment-variables/list-environment-variables.d.ts +22 -0
- package/out/environment-variables/list-environment-variables.d.ts.map +1 -0
- package/out/environment-variables/list-environment-variables.js +14 -0
- package/out/environment-variables/set-environment-variable.d.ts +20 -0
- package/out/environment-variables/set-environment-variable.d.ts.map +1 -0
- package/out/environment-variables/set-environment-variable.js +14 -0
- package/out/installations/graphql-client.d.ts +75 -0
- package/out/installations/graphql-client.d.ts.map +1 -0
- package/out/installations/graphql-client.js +423 -0
- package/out/installations/install-app-site.d.ts +21 -0
- package/out/installations/install-app-site.d.ts.map +1 -0
- package/out/installations/install-app-site.js +19 -0
- package/out/installations/shared.d.ts +5 -0
- package/out/installations/shared.d.ts.map +1 -0
- package/out/installations/shared.js +20 -0
- package/out/installations/site-translation/bitbucket.d.ts +24 -0
- package/out/installations/site-translation/bitbucket.d.ts.map +1 -0
- package/out/installations/site-translation/bitbucket.js +113 -0
- package/out/installations/site-translation/cloudid-products.d.ts +17 -0
- package/out/installations/site-translation/cloudid-products.d.ts.map +1 -0
- package/out/installations/site-translation/cloudid-products.js +89 -0
- package/out/installations/site-translation/index.d.ts +4 -0
- package/out/installations/site-translation/index.d.ts.map +1 -0
- package/out/installations/site-translation/index.js +6 -0
- package/out/installations/site-translation/site-translation.d.ts +12 -0
- package/out/installations/site-translation/site-translation.d.ts.map +1 -0
- package/out/installations/site-translation/site-translation.js +2 -0
- package/out/installations/uninstall-app.d.ts +25 -0
- package/out/installations/uninstall-app.d.ts.map +1 -0
- package/out/installations/uninstall-app.js +43 -0
- package/out/migration-keys/graphql-client.d.ts +8 -0
- package/out/migration-keys/graphql-client.d.ts.map +1 -0
- package/out/migration-keys/graphql-client.js +55 -0
- package/out/providers/configure-provider.d.ts +19 -0
- package/out/providers/configure-provider.d.ts.map +1 -0
- package/out/providers/configure-provider.js +14 -0
- package/out/providers/graphql-client.d.ts +8 -0
- package/out/providers/graphql-client.d.ts.map +1 -0
- package/out/providers/graphql-client.js +45 -0
- package/out/service/cached-config-service.d.ts +8 -0
- package/out/service/cached-config-service.d.ts.map +1 -0
- package/out/service/cached-config-service.js +16 -0
- package/out/service/command-suggestion-service.d.ts +4 -0
- package/out/service/command-suggestion-service.d.ts.map +1 -0
- package/out/service/command-suggestion-service.js +17 -0
- package/out/service/docker-service.d.ts +24 -0
- package/out/service/docker-service.d.ts.map +1 -0
- package/out/service/docker-service.js +71 -0
- package/out/service/installation-service.d.ts +51 -0
- package/out/service/installation-service.d.ts.map +1 -0
- package/out/service/installation-service.js +91 -0
- package/out/service/lint-service.d.ts +23 -0
- package/out/service/lint-service.d.ts.map +1 -0
- package/out/service/lint-service.js +39 -0
- package/out/service/lite-lint-service.d.ts +10 -0
- package/out/service/lite-lint-service.d.ts.map +1 -0
- package/out/service/lite-lint-service.js +27 -0
- package/out/service/migration-keys-service.d.ts +19 -0
- package/out/service/migration-keys-service.d.ts.map +1 -0
- package/out/service/migration-keys-service.js +14 -0
- package/out/service/port-finding-service.d.ts +12 -0
- package/out/service/port-finding-service.d.ts.map +1 -0
- package/out/service/port-finding-service.js +34 -0
- package/out/service/resource-packaging-service.d.ts +46 -0
- package/out/service/resource-packaging-service.d.ts.map +1 -0
- package/out/service/resource-packaging-service.js +132 -0
- package/out/service/resources-uploader-service.d.ts +16 -0
- package/out/service/resources-uploader-service.d.ts.map +1 -0
- package/out/service/resources-uploader-service.js +39 -0
- package/out/service/tunnel-analytics-service.d.ts +11 -0
- package/out/service/tunnel-analytics-service.d.ts.map +1 -0
- package/out/service/tunnel-analytics-service.js +24 -0
- package/out/service/tunnel-service.d.ts +41 -0
- package/out/service/tunnel-service.d.ts.map +1 -0
- package/out/service/tunnel-service.js +196 -0
- package/out/storage/local-file-storage.d.ts +17 -0
- package/out/storage/local-file-storage.d.ts.map +1 -0
- package/out/storage/local-file-storage.js +53 -0
- package/out/webtrigger/get-webtrigger-url.d.ts +27 -0
- package/out/webtrigger/get-webtrigger-url.d.ts.map +1 -0
- package/out/webtrigger/get-webtrigger-url.js +26 -0
- package/out/webtrigger/graphql-client.d.ts +14 -0
- package/out/webtrigger/graphql-client.d.ts.map +1 -0
- package/out/webtrigger/graphql-client.js +52 -0
- package/out/workers/analytics-message-worker.d.ts +12 -0
- package/out/workers/analytics-message-worker.d.ts.map +1 -0
- package/out/workers/analytics-message-worker.js +29 -0
- package/out/workers/forge-cli-workers.d.ts +2 -0
- package/out/workers/forge-cli-workers.d.ts.map +1 -0
- package/out/workers/forge-cli-workers.js +21 -0
- package/out/workers/tunnel-clean-up-worker.d.ts +8 -0
- package/out/workers/tunnel-clean-up-worker.d.ts.map +1 -0
- package/out/workers/tunnel-clean-up-worker.js +31 -0
- package/out/workers/version-check-worker.d.ts +8 -0
- package/out/workers/version-check-worker.d.ts.map +1 -0
- package/out/workers/version-check-worker.js +20 -0
- package/out/workers/worker-info.d.ts +8 -0
- package/out/workers/worker-info.d.ts.map +1 -0
- package/out/workers/worker-info.js +15 -0
- package/out/workers/worker.d.ts +6 -0
- package/out/workers/worker.d.ts.map +1 -0
- package/out/workers/worker.js +9 -0
- package/out/workers/workers-starter.d.ts +5 -0
- package/out/workers/workers-starter.d.ts.map +1 -0
- package/out/workers/workers-starter.js +22 -0
- package/package.json +60 -5
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ResourcesUploaderService = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const cli_shared_1 = require("@forge/cli-shared");
|
|
6
|
+
const form_data_1 = tslib_1.__importDefault(require("form-data"));
|
|
7
|
+
const node_fetch_1 = tslib_1.__importDefault(require("node-fetch"));
|
|
8
|
+
class ResourceUploadError extends cli_shared_1.BaseError {
|
|
9
|
+
constructor(userError) {
|
|
10
|
+
super('Failed to upload resource to S3');
|
|
11
|
+
this.userError = userError;
|
|
12
|
+
}
|
|
13
|
+
isUserError() {
|
|
14
|
+
return Boolean(this.userError);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
class ResourcesUploaderService {
|
|
18
|
+
constructor(fileSystemReader) {
|
|
19
|
+
this.fileSystemReader = fileSystemReader;
|
|
20
|
+
}
|
|
21
|
+
async upload({ archive, preSignedUrl }) {
|
|
22
|
+
const content = this.fileSystemReader.readBinaryFile(archive);
|
|
23
|
+
const formData = new form_data_1.default();
|
|
24
|
+
formData.append('Content-Type', 'application/zip');
|
|
25
|
+
formData.append('acl', 'bucket-owner-full-control');
|
|
26
|
+
Object.entries(preSignedUrl.uploadFormData).forEach(([k, v]) => {
|
|
27
|
+
formData.append(k, v);
|
|
28
|
+
});
|
|
29
|
+
formData.append('file', content);
|
|
30
|
+
const response = await (0, node_fetch_1.default)(preSignedUrl.uploadUrl, {
|
|
31
|
+
method: 'POST',
|
|
32
|
+
body: formData
|
|
33
|
+
});
|
|
34
|
+
if (!response.ok) {
|
|
35
|
+
throw new ResourceUploadError(response.status >= 400 && response.status < 500);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.ResourcesUploaderService = ResourcesUploaderService;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { PersonalApiCredentialsValidated } from '@forge/cli-shared';
|
|
2
|
+
import { AnalyticsClientReporter } from '../analytics-client/analytics-client';
|
|
3
|
+
import { DownloadProgressCallbacks } from '../command-line/view/tunnel-view';
|
|
4
|
+
export declare class TunnelAnalyticsService {
|
|
5
|
+
private readonly analyticsClientReporter;
|
|
6
|
+
constructor(analyticsClientReporter: AnalyticsClientReporter);
|
|
7
|
+
reportDockerVersion(creds: PersonalApiCredentialsValidated, dockerVersion: string | null): void;
|
|
8
|
+
reportTunnelClosed(creds: PersonalApiCredentialsValidated): void;
|
|
9
|
+
getImageDownloadReporters(creds: PersonalApiCredentialsValidated): DownloadProgressCallbacks;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=tunnel-analytics-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tunnel-analytics-service.d.ts","sourceRoot":"","sources":["../../src/service/tunnel-analytics-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAE7E,qBAAa,sBAAsB;IACrB,OAAO,CAAC,QAAQ,CAAC,uBAAuB;gBAAvB,uBAAuB,EAAE,uBAAuB;IAEtE,mBAAmB,CAAC,KAAK,EAAE,+BAA+B,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAM/F,kBAAkB,CAAC,KAAK,EAAE,+BAA+B,GAAG,IAAI;IAIhE,yBAAyB,CAAC,KAAK,EAAE,+BAA+B,GAAG,yBAAyB;CAOpG"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TunnelAnalyticsService = void 0;
|
|
4
|
+
class TunnelAnalyticsService {
|
|
5
|
+
constructor(analyticsClientReporter) {
|
|
6
|
+
this.analyticsClientReporter = analyticsClientReporter;
|
|
7
|
+
}
|
|
8
|
+
reportDockerVersion(creds, dockerVersion) {
|
|
9
|
+
this.analyticsClientReporter.reportSuccess('docker version check', creds, {
|
|
10
|
+
dockerVersion
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
reportTunnelClosed(creds) {
|
|
14
|
+
this.analyticsClientReporter.reportSuccess('close tunnel', creds, {});
|
|
15
|
+
}
|
|
16
|
+
getImageDownloadReporters(creds) {
|
|
17
|
+
return {
|
|
18
|
+
onStart: () => this.analyticsClientReporter.reportSuccess('image download started', creds, {}),
|
|
19
|
+
onFailure: () => this.analyticsClientReporter.reportSuccess('image download failed', creds, {}),
|
|
20
|
+
onSuccess: () => this.analyticsClientReporter.reportSuccess('image download finished', creds, {})
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.TunnelAnalyticsService = TunnelAnalyticsService;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { HiddenError, PersonalApiCredentials, PersonalApiCredentialsValidated } from '@forge/cli-shared';
|
|
2
|
+
import { spawn } from 'cross-spawn';
|
|
3
|
+
import { DockerService } from './docker-service';
|
|
4
|
+
import { ConfigFilePortFindingService } from './port-finding-service';
|
|
5
|
+
import { TunnelAnalyticsService } from './tunnel-analytics-service';
|
|
6
|
+
export interface TunnelOptions {
|
|
7
|
+
debug?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare const CONTAINER_NAME = "forge-tunnel-docker";
|
|
10
|
+
export declare const IMAGE_NAME: string;
|
|
11
|
+
export declare class HiddenDockerTunnelError extends HiddenError {
|
|
12
|
+
}
|
|
13
|
+
export declare abstract class TunnelService {
|
|
14
|
+
protected readonly configFilePortFindingService: ConfigFilePortFindingService;
|
|
15
|
+
constructor(configFilePortFindingService: ConfigFilePortFindingService);
|
|
16
|
+
abstract run(tunnelOptions: TunnelOptions, creds: PersonalApiCredentialsValidated, debugEnabled: boolean, onError?: (err: Error) => Promise<void>): Promise<void>;
|
|
17
|
+
protected getDockerOptions(tunnelOptions: TunnelOptions, debugEnabled: boolean, { email, token }: PersonalApiCredentials): Promise<string[]>;
|
|
18
|
+
protected getPortOptions(port: number, resourcePorts: Record<string, number>, cspReporterPort: number | undefined): string[];
|
|
19
|
+
protected getResourcePortEnvVarOption(resourcePorts: Record<string, number>): string[];
|
|
20
|
+
protected getUserEnvironmentVariablesOptions(): string[];
|
|
21
|
+
protected addEnvVarsForLocalTunnel(env: {
|
|
22
|
+
[key: string]: string;
|
|
23
|
+
}): Record<string, string>;
|
|
24
|
+
protected transformDockerOptionsToEnvVars(options: string[]): {
|
|
25
|
+
[key: string]: string;
|
|
26
|
+
};
|
|
27
|
+
protected getInteractiveOptions(): string[];
|
|
28
|
+
protected getVolumeOptions(): string[];
|
|
29
|
+
}
|
|
30
|
+
export declare class LocalTunnelService extends TunnelService {
|
|
31
|
+
run(tunnelOptions: TunnelOptions, creds: PersonalApiCredentials, debugEnabled: boolean, onError: (err: Error) => Promise<void>): Promise<void>;
|
|
32
|
+
}
|
|
33
|
+
export declare class DockerTunnelService extends TunnelService {
|
|
34
|
+
private readonly dockerService;
|
|
35
|
+
private readonly analyticsService;
|
|
36
|
+
constructor(configFilePortFindingService: ConfigFilePortFindingService, dockerService: DockerService, analyticsService: TunnelAnalyticsService);
|
|
37
|
+
run(tunnelOptions: TunnelOptions, creds: PersonalApiCredentialsValidated, debugEnabled: boolean): Promise<void>;
|
|
38
|
+
bootstrapDocker(): Promise<ReturnType<typeof spawn>>;
|
|
39
|
+
private validateDockerVersion;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=tunnel-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tunnel-service.d.ts","sourceRoot":"","sources":["../../src/service/tunnel-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,WAAW,EACX,sBAAsB,EACtB,+BAA+B,EAChC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAOpC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAKD,eAAO,MAAM,cAAc,wBAAwB,CAAC;AAcpD,eAAO,MAAM,UAAU,QAEuB,CAAC;AAE/C,qBAAa,uBAAwB,SAAQ,WAAW;CAAG;AAE3D,8BAAsB,aAAa;IACrB,SAAS,CAAC,QAAQ,CAAC,4BAA4B,EAAE,4BAA4B;gBAA1D,4BAA4B,EAAE,4BAA4B;aAEzE,GAAG,CACjB,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,+BAA+B,EACtC,YAAY,EAAE,OAAO,EACrB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,GACtC,OAAO,CAAC,IAAI,CAAC;cAEA,gBAAgB,CAC9B,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,OAAO,EACrB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,sBAAsB,GACvC,OAAO,CAAC,MAAM,EAAE,CAAC;IA+BpB,SAAS,CAAC,cAAc,CACtB,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACrC,eAAe,EAAE,MAAM,GAAG,SAAS,GAClC,MAAM,EAAE;IAwBX,SAAS,CAAC,2BAA2B,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE;IAItF,SAAS,CAAC,kCAAkC,IAAI,MAAM,EAAE;IAUxD,SAAS,CAAC,wBAAwB,CAAC,GAAG,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAQ1F,SAAS,CAAC,+BAA+B,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE;IAYvF,SAAS,CAAC,qBAAqB,IAAI,MAAM,EAAE;IAQ3C,SAAS,CAAC,gBAAgB,IAAI,MAAM,EAAE;CAgBvC;AAED,qBAAa,kBAAmB,SAAQ,aAAa;IACtC,GAAG,CACd,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,sBAAsB,EAC7B,YAAY,EAAE,OAAO,EACrB,OAAO,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,GACrC,OAAO,CAAC,IAAI,CAAC;CA0BjB;AAED,qBAAa,mBAAoB,SAAQ,aAAa;IAGlD,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAFjC,4BAA4B,EAAE,4BAA4B,EACzC,aAAa,EAAE,aAAa,EAC5B,gBAAgB,EAAE,sBAAsB;IAK9C,GAAG,CACd,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,+BAA+B,EACtC,YAAY,EAAE,OAAO,GACpB,OAAO,CAAC,IAAI,CAAC;IA2BH,eAAe,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC;YAKnD,qBAAqB;CASpC"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DockerTunnelService = exports.LocalTunnelService = exports.TunnelService = exports.HiddenDockerTunnelError = exports.IMAGE_NAME = exports.CONTAINER_NAME = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const cli_shared_1 = require("@forge/cli-shared");
|
|
6
|
+
const cross_spawn_1 = require("cross-spawn");
|
|
7
|
+
const os_1 = tslib_1.__importDefault(require("os"));
|
|
8
|
+
const path_1 = require("path");
|
|
9
|
+
const portfinder_1 = require("portfinder");
|
|
10
|
+
const semver_1 = require("semver");
|
|
11
|
+
const version_info_1 = require("../command-line/version-info");
|
|
12
|
+
const DISABLE_TTY = process.env.DISABLE_TTY === 'true';
|
|
13
|
+
const CUR_WORK_APP_DIR = process.env.CUR_WORK_APP_DIR;
|
|
14
|
+
exports.CONTAINER_NAME = 'forge-tunnel-docker';
|
|
15
|
+
const cliDetails = (0, version_info_1.getCLIDetails)();
|
|
16
|
+
let versionTags;
|
|
17
|
+
if ((cliDetails === null || cliDetails === void 0 ? void 0 : cliDetails.version) !== undefined) {
|
|
18
|
+
if (process.env.FORGE_IN_LOCAL_E2E === 'true') {
|
|
19
|
+
versionTags = ['e2e'];
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
versionTags = (0, semver_1.prerelease)(cliDetails.version) || ['latest'];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
versionTags = ['latest'];
|
|
27
|
+
}
|
|
28
|
+
exports.IMAGE_NAME = process.env.FORGE_DEV_DOCKER_TUNNEL
|
|
29
|
+
? 'local/forge-tunnel:test'
|
|
30
|
+
: `atlassian/forge-tunnel:${versionTags[0]}`;
|
|
31
|
+
class HiddenDockerTunnelError extends cli_shared_1.HiddenError {
|
|
32
|
+
}
|
|
33
|
+
exports.HiddenDockerTunnelError = HiddenDockerTunnelError;
|
|
34
|
+
class TunnelService {
|
|
35
|
+
constructor(configFilePortFindingService) {
|
|
36
|
+
this.configFilePortFindingService = configFilePortFindingService;
|
|
37
|
+
}
|
|
38
|
+
async getDockerOptions(tunnelOptions, debugEnabled, { email, token }) {
|
|
39
|
+
try {
|
|
40
|
+
const graphqlGateway = (0, cli_shared_1.getGraphqlGateway)();
|
|
41
|
+
return [
|
|
42
|
+
'--rm',
|
|
43
|
+
`--name`,
|
|
44
|
+
exports.CONTAINER_NAME,
|
|
45
|
+
`--env`,
|
|
46
|
+
`APP_FOLDER=/app`,
|
|
47
|
+
`--env`,
|
|
48
|
+
`FORGE_EMAIL=${email}`,
|
|
49
|
+
`--env`,
|
|
50
|
+
`FORGE_API_TOKEN=${token}`,
|
|
51
|
+
`--env`,
|
|
52
|
+
`ENVIRONMENT_KEY=default`,
|
|
53
|
+
`--env`,
|
|
54
|
+
`TUNNEL_INSPECTOR_ENABLED=${!!tunnelOptions.debug}`,
|
|
55
|
+
`--env`,
|
|
56
|
+
`FORGE_GRAPHQL_GATEWAY=${graphqlGateway}`,
|
|
57
|
+
`--env`,
|
|
58
|
+
`VERBOSE_MODE=${debugEnabled}`,
|
|
59
|
+
`--env`,
|
|
60
|
+
`CLI_DETAILS=${JSON.stringify(cliDetails)}`,
|
|
61
|
+
`${exports.IMAGE_NAME}`
|
|
62
|
+
];
|
|
63
|
+
}
|
|
64
|
+
catch (e) {
|
|
65
|
+
throw new HiddenDockerTunnelError("Couldn't populate docker options for tunneling");
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
getPortOptions(port, resourcePorts, cspReporterPort) {
|
|
69
|
+
const resourcePortOptions = (0, cli_shared_1.flatMap)(Object.values(resourcePorts), (resourcePort) => [
|
|
70
|
+
'-p',
|
|
71
|
+
`${resourcePort}:${resourcePort}`
|
|
72
|
+
]);
|
|
73
|
+
const cspReporterPortOption = cspReporterPort
|
|
74
|
+
? ['-p', `${cspReporterPort}:${cspReporterPort}`, '--env', `CSP_REPORTER_PORT=${cspReporterPort}`]
|
|
75
|
+
: [];
|
|
76
|
+
const addHostOption = os_1.default.platform() === 'linux' ? ['--add-host', 'host.docker.internal:host-gateway'] : [];
|
|
77
|
+
return [
|
|
78
|
+
`-p`,
|
|
79
|
+
`${port}:${port}`,
|
|
80
|
+
...resourcePortOptions,
|
|
81
|
+
...addHostOption,
|
|
82
|
+
...cspReporterPortOption,
|
|
83
|
+
`--env`,
|
|
84
|
+
`TUNNEL_INSPECTOR_PORT=${port}`
|
|
85
|
+
];
|
|
86
|
+
}
|
|
87
|
+
getResourcePortEnvVarOption(resourcePorts) {
|
|
88
|
+
return ['--env', `RESOURCE_PORT_MAP=${JSON.stringify(resourcePorts)}`];
|
|
89
|
+
}
|
|
90
|
+
getUserEnvironmentVariablesOptions() {
|
|
91
|
+
const options = [];
|
|
92
|
+
Object.keys(process.env)
|
|
93
|
+
.filter((variable) => variable.startsWith('FORGE_USER_VAR_'))
|
|
94
|
+
.forEach((name) => {
|
|
95
|
+
options.push('--env', `${name}=${process.env[name]}`);
|
|
96
|
+
});
|
|
97
|
+
return options;
|
|
98
|
+
}
|
|
99
|
+
addEnvVarsForLocalTunnel(env) {
|
|
100
|
+
return Object.assign(Object.assign({}, env), { PATH: process.env.PATH || '', FORCE_COLOR: '1' });
|
|
101
|
+
}
|
|
102
|
+
transformDockerOptionsToEnvVars(options) {
|
|
103
|
+
const envVarRegex = new RegExp('^(\\w+)=(.+)$', 'g');
|
|
104
|
+
const envVars = options.filter((opt) => envVarRegex.test(opt));
|
|
105
|
+
const envVarObj = {};
|
|
106
|
+
envVars.forEach((envVar) => {
|
|
107
|
+
envVarRegex.lastIndex = 0;
|
|
108
|
+
const [, key, val] = envVarRegex.exec(envVar);
|
|
109
|
+
envVarObj[key] = val;
|
|
110
|
+
});
|
|
111
|
+
return envVarObj;
|
|
112
|
+
}
|
|
113
|
+
getInteractiveOptions() {
|
|
114
|
+
if (DISABLE_TTY) {
|
|
115
|
+
return [`-i`];
|
|
116
|
+
}
|
|
117
|
+
return [`-it`];
|
|
118
|
+
}
|
|
119
|
+
getVolumeOptions() {
|
|
120
|
+
const options = [`-v=${CUR_WORK_APP_DIR || process.cwd()}:/app:cached`];
|
|
121
|
+
if (process.env.FORGE_DEV_DOCKER_TUNNEL) {
|
|
122
|
+
options.push(`-v=${(0, path_1.join)(__dirname, '../../../..')}:/monorepo:cached`);
|
|
123
|
+
}
|
|
124
|
+
if (process.env.FORGE_TUNNEL_MOUNT_DIRECTORIES) {
|
|
125
|
+
const mounts = process.env.FORGE_TUNNEL_MOUNT_DIRECTORIES.split(',');
|
|
126
|
+
mounts.forEach((mount) => {
|
|
127
|
+
options.push(`-v=${mount}:cached`);
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
return options;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
exports.TunnelService = TunnelService;
|
|
134
|
+
class LocalTunnelService extends TunnelService {
|
|
135
|
+
async run(tunnelOptions, creds, debugEnabled, onError) {
|
|
136
|
+
const dockerOptions = await this.getDockerOptions(tunnelOptions, debugEnabled, creds);
|
|
137
|
+
const port = await (0, portfinder_1.getPortPromise)();
|
|
138
|
+
const resourcePorts = await this.configFilePortFindingService.findPorts();
|
|
139
|
+
const cspReporterPort = await this.configFilePortFindingService.findPortAfter(Object.values(resourcePorts));
|
|
140
|
+
const portOptions = this.getPortOptions(port, resourcePorts, cspReporterPort);
|
|
141
|
+
const envVariablesOptions = this.getUserEnvironmentVariablesOptions();
|
|
142
|
+
const resourcePortEnvVarOption = this.getResourcePortEnvVarOption(resourcePorts);
|
|
143
|
+
const env = this.addEnvVarsForLocalTunnel(this.transformDockerOptionsToEnvVars([
|
|
144
|
+
...dockerOptions,
|
|
145
|
+
...portOptions,
|
|
146
|
+
...envVariablesOptions,
|
|
147
|
+
...resourcePortEnvVarOption
|
|
148
|
+
]));
|
|
149
|
+
(0, cross_spawn_1.spawn)('forge-tunnel', [], {
|
|
150
|
+
stdio: 'inherit',
|
|
151
|
+
env: Object.assign(Object.assign({}, env), { FORGE_DEV_TUNNEL: 'true' })
|
|
152
|
+
}).on('error', onError);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
exports.LocalTunnelService = LocalTunnelService;
|
|
156
|
+
class DockerTunnelService extends TunnelService {
|
|
157
|
+
constructor(configFilePortFindingService, dockerService, analyticsService) {
|
|
158
|
+
super(configFilePortFindingService);
|
|
159
|
+
this.dockerService = dockerService;
|
|
160
|
+
this.analyticsService = analyticsService;
|
|
161
|
+
}
|
|
162
|
+
async run(tunnelOptions, creds, debugEnabled) {
|
|
163
|
+
await this.validateDockerVersion(creds, debugEnabled);
|
|
164
|
+
const dockerOptions = await this.getDockerOptions(tunnelOptions, debugEnabled, creds);
|
|
165
|
+
const port = await (0, portfinder_1.getPortPromise)();
|
|
166
|
+
const resourcePorts = await this.configFilePortFindingService.findPorts(port);
|
|
167
|
+
const cspReporterPort = await this.configFilePortFindingService.findPortAfter(Object.values(resourcePorts));
|
|
168
|
+
const portOptions = this.getPortOptions(port, resourcePorts, cspReporterPort);
|
|
169
|
+
const interactiveOptions = this.getInteractiveOptions();
|
|
170
|
+
const volumeOptions = this.getVolumeOptions();
|
|
171
|
+
const envVariablesOptions = this.getUserEnvironmentVariablesOptions();
|
|
172
|
+
const resourcePortEnvVarOption = this.getResourcePortEnvVarOption(resourcePorts);
|
|
173
|
+
const docker = this.dockerService.runContainer([
|
|
174
|
+
...interactiveOptions,
|
|
175
|
+
...volumeOptions,
|
|
176
|
+
...portOptions,
|
|
177
|
+
...envVariablesOptions,
|
|
178
|
+
...resourcePortEnvVarOption,
|
|
179
|
+
...dockerOptions
|
|
180
|
+
]);
|
|
181
|
+
docker.on('exit', () => this.analyticsService.reportTunnelClosed(creds));
|
|
182
|
+
this.dockerService.startCleanupWorker([docker.pid], exports.CONTAINER_NAME);
|
|
183
|
+
}
|
|
184
|
+
async bootstrapDocker() {
|
|
185
|
+
await this.dockerService.removeContainer(exports.CONTAINER_NAME);
|
|
186
|
+
return this.dockerService.downloadImage(exports.IMAGE_NAME);
|
|
187
|
+
}
|
|
188
|
+
async validateDockerVersion(creds, debugEnabled) {
|
|
189
|
+
const { major, minor, full } = await this.dockerService.getDockerVersion(debugEnabled);
|
|
190
|
+
this.analyticsService.reportDockerVersion(creds, full);
|
|
191
|
+
if (major < 17 || (major === 17 && minor < 3)) {
|
|
192
|
+
throw new HiddenDockerTunnelError();
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
exports.DockerTunnelService = DockerTunnelService;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { AnalyticsMessage } from '../analytics-client/analytics-message-handler';
|
|
2
|
+
export interface Storage {
|
|
3
|
+
addAnalyticsEvent(message: AnalyticsMessage): void;
|
|
4
|
+
deleteAnalyticsEvent(file: string): Promise<void>;
|
|
5
|
+
getAnalytics(): string[];
|
|
6
|
+
getAnalyticsEvent(file: string): Promise<AnalyticsMessage | undefined>;
|
|
7
|
+
}
|
|
8
|
+
export declare class LocalFileStorage implements Storage {
|
|
9
|
+
private static STORAGE_PATHS;
|
|
10
|
+
private static FOLDER;
|
|
11
|
+
constructor();
|
|
12
|
+
addAnalyticsEvent(message: AnalyticsMessage): void;
|
|
13
|
+
getAnalyticsEvent(file: string): Promise<AnalyticsMessage | undefined>;
|
|
14
|
+
getAnalytics(): string[];
|
|
15
|
+
deleteAnalyticsEvent(file: string): Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=local-file-storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-file-storage.d.ts","sourceRoot":"","sources":["../../src/storage/local-file-storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,+CAA+C,CAAC;AAMjF,MAAM,WAAW,OAAO;IACtB,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACnD,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,YAAY,IAAI,MAAM,EAAE,CAAC;IACzB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAC;CACxE;AAGD,qBAAa,gBAAiB,YAAW,OAAO;IAC9C,OAAO,CAAC,MAAM,CAAC,aAAa,CAAyB;IACrD,OAAO,CAAC,MAAM,CAAC,MAAM,CAAuC;;IAQ5D,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAQ5C,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAgB5E,YAAY,IAAI,MAAM,EAAE;IASlB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAOxD"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LocalFileStorage = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const path_1 = tslib_1.__importDefault(require("path"));
|
|
6
|
+
const fs = tslib_1.__importStar(require("fs"));
|
|
7
|
+
const env_paths_1 = tslib_1.__importDefault(require("env-paths"));
|
|
8
|
+
const mkdirp_1 = tslib_1.__importDefault(require("mkdirp"));
|
|
9
|
+
class LocalFileStorage {
|
|
10
|
+
constructor() {
|
|
11
|
+
if (!fs.existsSync(LocalFileStorage.FOLDER)) {
|
|
12
|
+
mkdirp_1.default.sync(LocalFileStorage.FOLDER);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
addAnalyticsEvent(message) {
|
|
16
|
+
try {
|
|
17
|
+
fs.writeFileSync(path_1.default.join(LocalFileStorage.FOLDER, `${message.id}.json`), JSON.stringify(message));
|
|
18
|
+
}
|
|
19
|
+
catch (e) {
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
async getAnalyticsEvent(file) {
|
|
23
|
+
try {
|
|
24
|
+
const content = await fs.promises.readFile(path_1.default.join(LocalFileStorage.FOLDER, file), {
|
|
25
|
+
encoding: 'utf8'
|
|
26
|
+
});
|
|
27
|
+
const parsedContent = JSON.parse(content);
|
|
28
|
+
parsedContent.event.timestamp = new Date(parsedContent.event.timestamp);
|
|
29
|
+
return parsedContent;
|
|
30
|
+
}
|
|
31
|
+
catch (e) {
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
getAnalytics() {
|
|
36
|
+
try {
|
|
37
|
+
return fs.readdirSync(LocalFileStorage.FOLDER).filter((f) => f.endsWith('.json'));
|
|
38
|
+
}
|
|
39
|
+
catch (e) {
|
|
40
|
+
return [];
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
async deleteAnalyticsEvent(file) {
|
|
44
|
+
try {
|
|
45
|
+
await fs.promises.unlink(path_1.default.join(LocalFileStorage.FOLDER, file));
|
|
46
|
+
}
|
|
47
|
+
catch (e) {
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
exports.LocalFileStorage = LocalFileStorage;
|
|
52
|
+
LocalFileStorage.STORAGE_PATHS = (0, env_paths_1.default)('forge-cli');
|
|
53
|
+
LocalFileStorage.FOLDER = LocalFileStorage.STORAGE_PATHS.data;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { AppConfigProvider } from '@forge/cli-shared';
|
|
2
|
+
import { AppEnvironmentClient } from '@forge/cli-shared';
|
|
3
|
+
import { Installation } from '../service/installation-service';
|
|
4
|
+
import { WebTriggerGraphQLClient } from './graphql-client';
|
|
5
|
+
export interface Context {
|
|
6
|
+
contextId: string;
|
|
7
|
+
environmentARI: string;
|
|
8
|
+
extensionKey: string;
|
|
9
|
+
}
|
|
10
|
+
export interface WebTriggerUrlDetails {
|
|
11
|
+
appId: string;
|
|
12
|
+
contextId: string;
|
|
13
|
+
environmentId: string;
|
|
14
|
+
triggerKey: string;
|
|
15
|
+
}
|
|
16
|
+
export interface WebTriggerClient {
|
|
17
|
+
getInstallation(appId: string, installationId: string): Promise<Installation>;
|
|
18
|
+
}
|
|
19
|
+
export declare class GetWebTriggerURLCommand {
|
|
20
|
+
private readonly getAppConfig;
|
|
21
|
+
private readonly webTriggerClient;
|
|
22
|
+
private readonly appEnvironmentClient;
|
|
23
|
+
private readonly webTriggerGraphqlClient;
|
|
24
|
+
constructor(getAppConfig: AppConfigProvider, webTriggerClient: WebTriggerClient, appEnvironmentClient: AppEnvironmentClient, webTriggerGraphqlClient: WebTriggerGraphQLClient);
|
|
25
|
+
execute(installationId: string, functionKey: string): Promise<string>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=get-webtrigger-url.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-webtrigger-url.d.ts","sourceRoot":"","sources":["../../src/webtrigger/get-webtrigger-url.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAC/E;AACD,qBAAa,uBAAuB;IAEhC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,uBAAuB;gBAHvB,YAAY,EAAE,iBAAiB,EAC/B,gBAAgB,EAAE,gBAAgB,EAClC,oBAAoB,EAAE,oBAAoB,EAC1C,uBAAuB,EAAE,uBAAuB;IAGtD,OAAO,CAAC,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAgBnF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GetWebTriggerURLCommand = void 0;
|
|
4
|
+
const cs_ari_1 = require("@forge/util/packages/cs-ari");
|
|
5
|
+
class GetWebTriggerURLCommand {
|
|
6
|
+
constructor(getAppConfig, webTriggerClient, appEnvironmentClient, webTriggerGraphqlClient) {
|
|
7
|
+
this.getAppConfig = getAppConfig;
|
|
8
|
+
this.webTriggerClient = webTriggerClient;
|
|
9
|
+
this.appEnvironmentClient = appEnvironmentClient;
|
|
10
|
+
this.webTriggerGraphqlClient = webTriggerGraphqlClient;
|
|
11
|
+
}
|
|
12
|
+
async execute(installationId, functionKey) {
|
|
13
|
+
const { id: appId } = await this.getAppConfig();
|
|
14
|
+
const { environmentKey, context } = await this.webTriggerClient.getInstallation(appId, installationId);
|
|
15
|
+
const environmentId = await this.appEnvironmentClient.getAppEnvironmentId(appId, environmentKey);
|
|
16
|
+
const ari = (0, cs_ari_1.parse)(appId);
|
|
17
|
+
const appAri = (0, cs_ari_1.parseAppAri)(ari);
|
|
18
|
+
return await this.webTriggerGraphqlClient.createWebTriggerUrl({
|
|
19
|
+
appId: appAri.appId,
|
|
20
|
+
contextId: context,
|
|
21
|
+
environmentId: environmentId,
|
|
22
|
+
triggerKey: functionKey
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.GetWebTriggerURLCommand = GetWebTriggerURLCommand;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { GraphQLClient, GraphQlMutationError } from '@forge/cli-shared';
|
|
2
|
+
import { WebTriggerUrlDetails } from './get-webtrigger-url';
|
|
3
|
+
export declare class WebTriggerCreationError extends GraphQlMutationError {
|
|
4
|
+
constructor(message: string, requestId: string | undefined, code: string | undefined);
|
|
5
|
+
}
|
|
6
|
+
export declare class MissingWebTriggerUrlError extends GraphQlMutationError {
|
|
7
|
+
constructor(requestId: string | undefined);
|
|
8
|
+
}
|
|
9
|
+
export declare class WebTriggerGraphQLClient {
|
|
10
|
+
private readonly graphQLClient;
|
|
11
|
+
constructor(graphQLClient: GraphQLClient);
|
|
12
|
+
createWebTriggerUrl({ appId, contextId, environmentId, triggerKey }: WebTriggerUrlDetails): Promise<string>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=graphql-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphql-client.d.ts","sourceRoot":"","sources":["../../src/webtrigger/graphql-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAyC,MAAM,mBAAmB,CAAC;AAC/G,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,qBAAa,uBAAwB,SAAQ,oBAAoB;gBACnD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS;CAGrF;AAED,qBAAa,yBAA0B,SAAQ,oBAAoB;gBACrD,SAAS,EAAE,MAAM,GAAG,SAAS;CAQ1C;AAED,qBAAa,uBAAuB;IACtB,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,EAAE,aAAa;IAE5C,mBAAmB,CAAC,EAC/B,KAAK,EACL,SAAS,EACT,aAAa,EACb,UAAU,EACX,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC;CAoC1C"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WebTriggerGraphQLClient = exports.MissingWebTriggerUrlError = exports.WebTriggerCreationError = void 0;
|
|
4
|
+
const cli_shared_1 = require("@forge/cli-shared");
|
|
5
|
+
class WebTriggerCreationError extends cli_shared_1.GraphQlMutationError {
|
|
6
|
+
constructor(message, requestId, code) {
|
|
7
|
+
super(cli_shared_1.Text.webtrigger.error.creationError(message), { requestId, code });
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
exports.WebTriggerCreationError = WebTriggerCreationError;
|
|
11
|
+
class MissingWebTriggerUrlError extends cli_shared_1.GraphQlMutationError {
|
|
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 });
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.MissingWebTriggerUrlError = MissingWebTriggerUrlError;
|
|
17
|
+
class WebTriggerGraphQLClient {
|
|
18
|
+
constructor(graphQLClient) {
|
|
19
|
+
this.graphQLClient = graphQLClient;
|
|
20
|
+
}
|
|
21
|
+
async createWebTriggerUrl({ appId, contextId, environmentId, triggerKey }) {
|
|
22
|
+
const query = `
|
|
23
|
+
mutation forge_cli_createWebTriggerUrl($input: WebTriggerUrlInput!) {
|
|
24
|
+
createWebTriggerUrl(input: $input) {
|
|
25
|
+
statusCode
|
|
26
|
+
success
|
|
27
|
+
message
|
|
28
|
+
url
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
`;
|
|
32
|
+
const variables = {
|
|
33
|
+
input: {
|
|
34
|
+
appId,
|
|
35
|
+
contextId,
|
|
36
|
+
envId: environmentId,
|
|
37
|
+
triggerKey
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
const { response: { createWebTriggerUrl: { success, statusCode, message, url } }, requestId } = await this.graphQLClient.mutate(query, variables);
|
|
41
|
+
if (!success) {
|
|
42
|
+
throw new WebTriggerCreationError(message, requestId, statusCode.toString());
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
if (url) {
|
|
46
|
+
return url;
|
|
47
|
+
}
|
|
48
|
+
throw new MissingWebTriggerUrlError(requestId);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.WebTriggerGraphQLClient = WebTriggerGraphQLClient;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AnalyticsMessage, MessageHandler } from '../analytics-client/analytics-message-handler';
|
|
2
|
+
import { CachedConfigService } from '../service/cached-config-service';
|
|
3
|
+
import { Storage } from '../storage/local-file-storage';
|
|
4
|
+
import { Worker } from './worker';
|
|
5
|
+
export declare class AnalyticsMessageWorker implements Worker {
|
|
6
|
+
private readonly storage;
|
|
7
|
+
private readonly messageHandler;
|
|
8
|
+
private readonly cachedConfigService;
|
|
9
|
+
constructor(storage: Storage, messageHandler: MessageHandler<AnalyticsMessage | undefined>, cachedConfigService: CachedConfigService);
|
|
10
|
+
doWork(): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=analytics-message-worker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics-message-worker.d.ts","sourceRoot":"","sources":["../../src/workers/analytics-message-worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,+CAA+C,CAAC;AACjG,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAKlC,qBAAa,sBAAuB,YAAW,MAAM;IAEjD,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,mBAAmB;gBAFnB,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,cAAc,CAAC,gBAAgB,GAAG,SAAS,CAAC,EAC5D,mBAAmB,EAAE,mBAAmB;IAGrD,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAoB9B"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AnalyticsMessageWorker = void 0;
|
|
4
|
+
class AnalyticsMessageWorker {
|
|
5
|
+
constructor(storage, messageHandler, cachedConfigService) {
|
|
6
|
+
this.storage = storage;
|
|
7
|
+
this.messageHandler = messageHandler;
|
|
8
|
+
this.cachedConfigService = cachedConfigService;
|
|
9
|
+
}
|
|
10
|
+
async doWork() {
|
|
11
|
+
const analyticsSetting = this.cachedConfigService.getAnalyticsPreferences();
|
|
12
|
+
if (analyticsSetting === undefined) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
try {
|
|
16
|
+
const events = this.storage.getAnalytics();
|
|
17
|
+
await Promise.all(events.map(async (event) => {
|
|
18
|
+
const payload = await this.storage.getAnalyticsEvent(event);
|
|
19
|
+
if (analyticsSetting) {
|
|
20
|
+
await this.messageHandler.handleMessage(payload);
|
|
21
|
+
}
|
|
22
|
+
await this.storage.deleteAnalyticsEvent(event);
|
|
23
|
+
}));
|
|
24
|
+
}
|
|
25
|
+
catch (e) {
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.AnalyticsMessageWorker = AnalyticsMessageWorker;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forge-cli-workers.d.ts","sourceRoot":"","sources":["../../src/workers/forge-cli-workers.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const analytics_message_handler_1 = require("../analytics-client/analytics-message-handler");
|
|
4
|
+
const local_file_storage_1 = require("../storage/local-file-storage");
|
|
5
|
+
const analytics_message_worker_1 = require("./analytics-message-worker");
|
|
6
|
+
const worker_1 = require("./worker");
|
|
7
|
+
const version_check_worker_1 = require("./version-check-worker");
|
|
8
|
+
const cached_config_service_1 = require("../service/cached-config-service");
|
|
9
|
+
const cli_shared_1 = require("@forge/cli-shared");
|
|
10
|
+
const unique_machine_id_1 = require("../command-line/unique-machine-id");
|
|
11
|
+
const workerInfo = JSON.parse(process.argv[2]);
|
|
12
|
+
const cachedConf = cli_shared_1.CachedConf.getCache(unique_machine_id_1.FORGE_CLI_PACKAGE);
|
|
13
|
+
const cachedConfigService = new cached_config_service_1.CachedConfigService(cachedConf);
|
|
14
|
+
const ALL_WORKERS = [
|
|
15
|
+
new analytics_message_worker_1.AnalyticsMessageWorker(new local_file_storage_1.LocalFileStorage(), new analytics_message_handler_1.AnalyticsMessageHandler(workerInfo ? workerInfo.environment : undefined), cachedConfigService),
|
|
16
|
+
new version_check_worker_1.VersionCheckWorker(workerInfo)
|
|
17
|
+
];
|
|
18
|
+
const TIMEOUT = 10 * 1000;
|
|
19
|
+
(0, worker_1.handleWithTimeout)(() => Promise.all(ALL_WORKERS.map((worker) => worker.doWork())), TIMEOUT)
|
|
20
|
+
.finally(() => process.exit(0))
|
|
21
|
+
.catch((e) => process.exit(1));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tunnel-clean-up-worker.d.ts","sourceRoot":"","sources":["../../src/workers/tunnel-clean-up-worker.ts"],"names":[],"mappings":"AAGA,oBAAY,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAEF,qBAAa,mBAAmB;IACvB,MAAM,IAAI,IAAI;CAwBtB"}
|