@forge/cli 0.0.0-experimental-e8bfa83 → 0.0.0-experimental-c3effe3
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 +3781 -7
- package/README.md +18 -19
- package/npm-shrinkwrap.json +2709 -3555
- package/out/analytics-client/analytics-client.d.ts +3 -1
- package/out/analytics-client/analytics-client.d.ts.map +1 -1
- package/out/analytics-client/analytics-client.js +5 -1
- package/out/autocomplete/autocomplete-config.json +24 -20
- 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/bin/cli.js +0 -2
- package/out/bin/postinstall.js +9 -2
- package/out/command-line/anon-user-id.js +6 -10
- package/out/command-line/command.d.ts +27 -8
- package/out/command-line/command.d.ts.map +1 -1
- package/out/command-line/command.js +188 -50
- package/out/command-line/controller/autocomplete-controller.d.ts +1 -0
- package/out/command-line/controller/autocomplete-controller.d.ts.map +1 -1
- package/out/command-line/controller/autocomplete-controller.js +11 -1
- package/out/command-line/controller/deploy-controller.d.ts +13 -2
- package/out/command-line/controller/deploy-controller.d.ts.map +1 -1
- package/out/command-line/controller/deploy-controller.js +79 -5
- 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 +5 -4
- package/out/command-line/controller/install-controller.d.ts.map +1 -1
- package/out/command-line/controller/install-controller.js +31 -56
- package/out/command-line/controller/lint-controller.js +1 -1
- package/out/command-line/controller/pre-command-controller.d.ts +8 -1
- package/out/command-line/controller/pre-command-controller.d.ts.map +1 -1
- package/out/command-line/controller/pre-command-controller.js +22 -2
- package/out/command-line/controller/prerequisites-controller.d.ts +11 -0
- package/out/command-line/controller/prerequisites-controller.d.ts.map +1 -0
- package/out/command-line/controller/prerequisites-controller.js +34 -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/dependency-injection.d.ts +13 -3
- package/out/command-line/dependency-injection.d.ts.map +1 -1
- package/out/command-line/dependency-injection.js +52 -22
- package/out/command-line/index.d.ts.map +1 -1
- package/out/command-line/index.js +10 -30
- package/out/command-line/register-app-commands.d.ts.map +1 -1
- package/out/command-line/register-app-commands.js +2 -12
- package/out/command-line/register-authentication-command.d.ts.map +1 -1
- package/out/command-line/register-authentication-command.js +1 -16
- package/out/command-line/register-deployment-commands.d.ts +8 -0
- package/out/command-line/register-deployment-commands.d.ts.map +1 -1
- package/out/command-line/register-deployment-commands.js +1 -0
- package/out/command-line/register-environment-variables-commands.d.ts +1 -1
- package/out/command-line/register-environment-variables-commands.d.ts.map +1 -1
- package/out/command-line/register-environment-variables-commands.js +22 -7
- package/out/command-line/register-installation-commands.d.ts +4 -1
- package/out/command-line/register-installation-commands.d.ts.map +1 -1
- package/out/command-line/register-installation-commands.js +39 -23
- 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 +43 -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 +37 -0
- package/out/command-line/register-webtrigger-commands.d.ts.map +1 -1
- package/out/command-line/register-webtrigger-commands.js +9 -11
- package/out/command-line/unique-machine-id.d.ts +1 -0
- package/out/command-line/unique-machine-id.d.ts.map +1 -1
- package/out/command-line/unique-machine-id.js +3 -12
- package/out/command-line/version-info.d.ts +1 -0
- package/out/command-line/version-info.d.ts.map +1 -1
- package/out/command-line/version-info.js +3 -2
- 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 +7 -1
- package/out/command-line/view/deploy-view.d.ts.map +1 -1
- package/out/command-line/view/deploy-view.js +25 -3
- package/out/command-line/view/install-view.d.ts +5 -3
- package/out/command-line/view/install-view.d.ts.map +1 -1
- package/out/command-line/view/install-view.js +19 -10
- package/out/command-line/view/lint-view.d.ts +3 -2
- package/out/command-line/view/lint-view.d.ts.map +1 -1
- package/out/command-line/view/lint-view.js +3 -0
- package/out/command-line/view/lite-lint-view.d.ts +3 -2
- package/out/command-line/view/lite-lint-view.d.ts.map +1 -1
- package/out/command-line/view/lite-lint-view.js +3 -0
- package/out/command-line/view/settings-view.d.ts +8 -0
- package/out/command-line/view/settings-view.d.ts.map +1 -0
- package/out/command-line/view/settings-view.js +21 -0
- package/out/deploy/deployer/deploy-monitor-graphql-client.js +1 -1
- package/out/deploy/deployer/deployer.d.ts.map +1 -1
- package/out/deploy/deployer/deployer.js +17 -1
- package/out/deploy/deployer/trigger-deploy-graphql-client.d.ts.map +1 -1
- package/out/deploy/deployer/trigger-deploy-graphql-client.js +9 -6
- package/out/deploy/packager/archiver.d.ts +3 -2
- package/out/deploy/packager/archiver.d.ts.map +1 -1
- package/out/deploy/packager/archiver.js +10 -2
- package/out/deploy/packager/packager.d.ts.map +1 -1
- package/out/deploy/packager/packager.js +20 -20
- package/out/deploy/uploader/artifact-graphql-client.d.ts.map +1 -1
- package/out/deploy/uploader/artifact-graphql-client.js +12 -9
- package/out/environment-variables/graphql-client.d.ts +1 -1
- package/out/environment-variables/graphql-client.d.ts.map +1 -1
- package/out/environment-variables/graphql-client.js +19 -13
- package/out/installations/graphql-client.d.ts +19 -13
- package/out/installations/graphql-client.d.ts.map +1 -1
- package/out/installations/graphql-client.js +161 -56
- package/out/installations/install-app-site.d.ts +2 -12
- package/out/installations/install-app-site.d.ts.map +1 -1
- package/out/installations/install-app-site.js +3 -14
- package/out/installations/uninstall-app.d.ts +5 -3
- package/out/installations/uninstall-app.d.ts.map +1 -1
- package/out/installations/uninstall-app.js +7 -7
- 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 +12 -0
- package/out/providers/graphql-client.d.ts.map +1 -0
- package/out/providers/graphql-client.js +47 -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/installation-service.d.ts +13 -13
- package/out/service/installation-service.d.ts.map +1 -1
- package/out/service/installation-service.js +38 -23
- package/out/service/lint-service.d.ts +2 -2
- package/out/service/lint-service.d.ts.map +1 -1
- package/out/service/lint-service.js +3 -3
- package/out/service/lite-lint-service.d.ts +3 -3
- package/out/service/lite-lint-service.d.ts.map +1 -1
- package/out/service/lite-lint-service.js +2 -2
- 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 +3 -2
- package/out/service/resource-packaging-service.d.ts.map +1 -1
- package/out/service/resource-packaging-service.js +6 -2
- package/out/service/tunnel-service.d.ts +6 -2
- package/out/service/tunnel-service.d.ts.map +1 -1
- package/out/service/tunnel-service.js +53 -12
- package/out/webtrigger/get-webtrigger-url.d.ts +10 -4
- package/out/webtrigger/get-webtrigger-url.d.ts.map +1 -1
- package/out/webtrigger/get-webtrigger-url.js +11 -18
- 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 +3 -1
- package/out/workers/analytics-message-worker.d.ts.map +1 -1
- package/out/workers/analytics-message-worker.js +9 -2
- package/out/workers/forge-cli-workers.js +6 -1
- package/package.json +17 -17
- package/out/bin/preinstall.d.ts +0 -3
- package/out/bin/preinstall.d.ts.map +0 -1
- package/out/bin/preinstall.js +0 -9
- package/out/command-line/cli-prerequisites.d.ts +0 -3
- package/out/command-line/cli-prerequisites.d.ts.map +0 -1
- package/out/command-line/cli-prerequisites.js +0 -37
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DockerTunnelService = exports.LocalTunnelService = exports.TunnelService = exports.HiddenDockerTunnelError = exports.IMAGE_NAME = exports.CONTAINER_NAME = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
4
5
|
const cli_shared_1 = require("@forge/cli-shared");
|
|
5
6
|
const cross_spawn_1 = require("cross-spawn");
|
|
7
|
+
const os_1 = tslib_1.__importDefault(require("os"));
|
|
6
8
|
const path_1 = require("path");
|
|
7
9
|
const portfinder_1 = require("portfinder");
|
|
8
10
|
const semver_1 = require("semver");
|
|
@@ -30,10 +32,13 @@ class HiddenDockerTunnelError extends cli_shared_1.HiddenError {
|
|
|
30
32
|
}
|
|
31
33
|
exports.HiddenDockerTunnelError = HiddenDockerTunnelError;
|
|
32
34
|
class TunnelService {
|
|
35
|
+
constructor(configFilePortFindingService) {
|
|
36
|
+
this.configFilePortFindingService = configFilePortFindingService;
|
|
37
|
+
}
|
|
33
38
|
async getDockerOptions(tunnelOptions, debugEnabled, { email, token }) {
|
|
34
39
|
try {
|
|
35
40
|
const graphqlGateway = cli_shared_1.getGraphqlGateway();
|
|
36
|
-
|
|
41
|
+
return [
|
|
37
42
|
'--rm',
|
|
38
43
|
`--name`,
|
|
39
44
|
exports.CONTAINER_NAME,
|
|
@@ -51,16 +56,36 @@ class TunnelService {
|
|
|
51
56
|
`FORGE_GRAPHQL_GATEWAY=${graphqlGateway}`,
|
|
52
57
|
`--env`,
|
|
53
58
|
`VERBOSE_MODE=${debugEnabled}`,
|
|
59
|
+
`--env`,
|
|
60
|
+
`CLI_DETAILS=${JSON.stringify(cliDetails)}`,
|
|
54
61
|
`${exports.IMAGE_NAME}`
|
|
55
62
|
];
|
|
56
|
-
return dockerOptions;
|
|
57
63
|
}
|
|
58
64
|
catch (e) {
|
|
59
65
|
throw new HiddenDockerTunnelError("Couldn't populate docker options for tunneling");
|
|
60
66
|
}
|
|
61
67
|
}
|
|
62
|
-
getPortOptions(port) {
|
|
63
|
-
|
|
68
|
+
getPortOptions(port, resourcePorts, cspReporterPort) {
|
|
69
|
+
const resourcePortOptions = 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)}`];
|
|
64
89
|
}
|
|
65
90
|
getUserEnvironmentVariablesOptions() {
|
|
66
91
|
const options = [];
|
|
@@ -75,11 +100,12 @@ class TunnelService {
|
|
|
75
100
|
return Object.assign(Object.assign({}, env), { PATH: process.env.PATH || '', FORCE_COLOR: '1' });
|
|
76
101
|
}
|
|
77
102
|
transformDockerOptionsToEnvVars(options) {
|
|
78
|
-
const envVarRegex = new RegExp('
|
|
103
|
+
const envVarRegex = new RegExp('^(\\w+)=(.+)$', 'g');
|
|
79
104
|
const envVars = options.filter((opt) => envVarRegex.test(opt));
|
|
80
105
|
const envVarObj = {};
|
|
81
106
|
envVars.forEach((envVar) => {
|
|
82
|
-
|
|
107
|
+
envVarRegex.lastIndex = 0;
|
|
108
|
+
const [, key, val] = envVarRegex.exec(envVar);
|
|
83
109
|
envVarObj[key] = val;
|
|
84
110
|
});
|
|
85
111
|
return envVarObj;
|
|
@@ -103,16 +129,27 @@ class LocalTunnelService extends TunnelService {
|
|
|
103
129
|
async run(tunnelOptions, creds, debugEnabled, onError) {
|
|
104
130
|
const dockerOptions = await this.getDockerOptions(tunnelOptions, debugEnabled, creds);
|
|
105
131
|
const port = await portfinder_1.getPortPromise();
|
|
106
|
-
const
|
|
132
|
+
const resourcePorts = await this.configFilePortFindingService.findPorts();
|
|
133
|
+
const cspReporterPort = await this.configFilePortFindingService.findPortAfter(Object.values(resourcePorts));
|
|
134
|
+
const portOptions = this.getPortOptions(port, resourcePorts, cspReporterPort);
|
|
107
135
|
const envVariablesOptions = this.getUserEnvironmentVariablesOptions();
|
|
108
|
-
const
|
|
109
|
-
|
|
136
|
+
const resourcePortEnvVarOption = this.getResourcePortEnvVarOption(resourcePorts);
|
|
137
|
+
const env = this.addEnvVarsForLocalTunnel(this.transformDockerOptionsToEnvVars([
|
|
138
|
+
...dockerOptions,
|
|
139
|
+
...portOptions,
|
|
140
|
+
...envVariablesOptions,
|
|
141
|
+
...resourcePortEnvVarOption
|
|
142
|
+
]));
|
|
143
|
+
cross_spawn_1.spawn('forge-tunnel', [], {
|
|
144
|
+
stdio: 'inherit',
|
|
145
|
+
env: Object.assign(Object.assign({}, env), { FORGE_DEV_TUNNEL: 'true' })
|
|
146
|
+
}).on('error', onError);
|
|
110
147
|
}
|
|
111
148
|
}
|
|
112
149
|
exports.LocalTunnelService = LocalTunnelService;
|
|
113
150
|
class DockerTunnelService extends TunnelService {
|
|
114
|
-
constructor(dockerService, analyticsService) {
|
|
115
|
-
super();
|
|
151
|
+
constructor(configFilePortFindingService, dockerService, analyticsService) {
|
|
152
|
+
super(configFilePortFindingService);
|
|
116
153
|
this.dockerService = dockerService;
|
|
117
154
|
this.analyticsService = analyticsService;
|
|
118
155
|
}
|
|
@@ -120,15 +157,19 @@ class DockerTunnelService extends TunnelService {
|
|
|
120
157
|
await this.validateDockerVersion(creds, debugEnabled);
|
|
121
158
|
const dockerOptions = await this.getDockerOptions(tunnelOptions, debugEnabled, creds);
|
|
122
159
|
const port = await portfinder_1.getPortPromise();
|
|
123
|
-
const
|
|
160
|
+
const resourcePorts = await this.configFilePortFindingService.findPorts(port);
|
|
161
|
+
const cspReporterPort = await this.configFilePortFindingService.findPortAfter(Object.values(resourcePorts));
|
|
162
|
+
const portOptions = this.getPortOptions(port, resourcePorts, cspReporterPort);
|
|
124
163
|
const interactiveOptions = this.getInteractiveOptions();
|
|
125
164
|
const volumeOptions = this.getVolumeOptions();
|
|
126
165
|
const envVariablesOptions = this.getUserEnvironmentVariablesOptions();
|
|
166
|
+
const resourcePortEnvVarOption = this.getResourcePortEnvVarOption(resourcePorts);
|
|
127
167
|
const docker = this.dockerService.runContainer([
|
|
128
168
|
...interactiveOptions,
|
|
129
169
|
...volumeOptions,
|
|
130
170
|
...portOptions,
|
|
131
171
|
...envVariablesOptions,
|
|
172
|
+
...resourcePortEnvVarOption,
|
|
132
173
|
...dockerOptions
|
|
133
174
|
]);
|
|
134
175
|
docker.on('exit', () => this.analyticsService.reportTunnelClosed(creds));
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
import { AppConfigProvider } from '@forge/cli-shared';
|
|
2
|
-
import { GlobalEdgeClient } from '@forge/cli-shared';
|
|
3
2
|
import { AppEnvironmentClient } from '@forge/cli-shared';
|
|
4
3
|
import { Installation } from '../service/installation-service';
|
|
4
|
+
import { WebTriggerGraphQLClient } from './graphql-client';
|
|
5
5
|
export interface Context {
|
|
6
6
|
contextId: string;
|
|
7
7
|
environmentARI: string;
|
|
8
8
|
extensionKey: string;
|
|
9
9
|
}
|
|
10
|
+
export interface WebTriggerUrlDetails {
|
|
11
|
+
appId: string;
|
|
12
|
+
contextId: string;
|
|
13
|
+
environmentId: string;
|
|
14
|
+
triggerKey: string;
|
|
15
|
+
}
|
|
10
16
|
export interface WebTriggerClient {
|
|
11
17
|
getInstallation(appId: string, installationId: string): Promise<Installation>;
|
|
12
18
|
}
|
|
@@ -14,8 +20,8 @@ export declare class GetWebTriggerURLCommand {
|
|
|
14
20
|
private readonly getAppConfig;
|
|
15
21
|
private readonly webTriggerClient;
|
|
16
22
|
private readonly appEnvironmentClient;
|
|
17
|
-
private readonly
|
|
18
|
-
constructor(getAppConfig: AppConfigProvider, webTriggerClient: WebTriggerClient, appEnvironmentClient: AppEnvironmentClient,
|
|
19
|
-
execute(installationId: string, functionKey: string
|
|
23
|
+
private readonly webTriggerGraphqlClient;
|
|
24
|
+
constructor(getAppConfig: AppConfigProvider, webTriggerClient: WebTriggerClient, appEnvironmentClient: AppEnvironmentClient, webTriggerGraphqlClient: WebTriggerGraphQLClient);
|
|
25
|
+
execute(installationId: string, functionKey: string): Promise<string>;
|
|
20
26
|
}
|
|
21
27
|
//# sourceMappingURL=get-webtrigger-url.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-webtrigger-url.d.ts","sourceRoot":"","sources":["../../src/webtrigger/get-webtrigger-url.ts"],"names":[],"mappings":"
|
|
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"}
|
|
@@ -2,32 +2,25 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.GetWebTriggerURLCommand = void 0;
|
|
4
4
|
const cs_ari_1 = require("@forge/util/packages/cs-ari");
|
|
5
|
-
const url_1 = require("url");
|
|
6
|
-
const cli_shared_1 = require("@forge/cli-shared");
|
|
7
|
-
function buildWebtriggerURL(appId, context, extension, isProduction) {
|
|
8
|
-
const hostname = isProduction ? `${appId}.hello.atlassian-dev.net` : `${appId}.xen.atlassian-dev.net`;
|
|
9
|
-
const urlObj = new url_1.URL(`/x0/${cli_shared_1.encodeContext(context, extension)}`, `https://${hostname}`);
|
|
10
|
-
return urlObj.toString();
|
|
11
|
-
}
|
|
12
5
|
class GetWebTriggerURLCommand {
|
|
13
|
-
constructor(getAppConfig, webTriggerClient, appEnvironmentClient,
|
|
6
|
+
constructor(getAppConfig, webTriggerClient, appEnvironmentClient, webTriggerGraphqlClient) {
|
|
14
7
|
this.getAppConfig = getAppConfig;
|
|
15
8
|
this.webTriggerClient = webTriggerClient;
|
|
16
9
|
this.appEnvironmentClient = appEnvironmentClient;
|
|
17
|
-
this.
|
|
10
|
+
this.webTriggerGraphqlClient = webTriggerGraphqlClient;
|
|
18
11
|
}
|
|
19
|
-
async execute(installationId, functionKey
|
|
12
|
+
async execute(installationId, functionKey) {
|
|
20
13
|
const { id: appId } = await this.getAppConfig();
|
|
21
|
-
const {
|
|
22
|
-
const
|
|
23
|
-
this.appEnvironmentClient.getAppEnvironmentId(appId, environmentKey),
|
|
24
|
-
this.globalEdgeClient.getCloudId(new url_1.URL(`https://${site}`))
|
|
25
|
-
]);
|
|
26
|
-
const context = cli_shared_1.buildContextAri(cloudId, product);
|
|
14
|
+
const { environmentKey, context } = await this.webTriggerClient.getInstallation(appId, installationId);
|
|
15
|
+
const environmentId = await this.appEnvironmentClient.getAppEnvironmentId(appId, environmentKey);
|
|
27
16
|
const ari = cs_ari_1.parse(appId);
|
|
28
17
|
const appAri = cs_ari_1.parseAppAri(ari);
|
|
29
|
-
|
|
30
|
-
|
|
18
|
+
return await this.webTriggerGraphqlClient.createWebTriggerUrl({
|
|
19
|
+
appId: appAri.appId,
|
|
20
|
+
contextId: context,
|
|
21
|
+
environmentId: environmentId,
|
|
22
|
+
triggerKey: functionKey
|
|
23
|
+
});
|
|
31
24
|
}
|
|
32
25
|
}
|
|
33
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, 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,IAAI,EAAE,MAAM,GAAG,SAAS;CAGtD;AAED,qBAAa,yBAA0B,SAAQ,oBAAoB;gBACrD,SAAS,EAAE,MAAM,GAAG,SAAS;CAO1C;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, code) {
|
|
7
|
+
super(cli_shared_1.Text.webtrigger.error.creationError(message), 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'}`));
|
|
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, statusCode.toString());
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
if (url) {
|
|
46
|
+
return url;
|
|
47
|
+
}
|
|
48
|
+
throw new MissingWebTriggerUrlError(requestId);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.WebTriggerGraphQLClient = WebTriggerGraphQLClient;
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { AnalyticsMessage, MessageHandler } from '../analytics-client/analytics-message-handler';
|
|
2
|
+
import { CachedConfigService } from '../service/cached-config-service';
|
|
2
3
|
import { Storage } from '../storage/local-file-storage';
|
|
3
4
|
import { Worker } from './worker';
|
|
4
5
|
export declare class AnalyticsMessageWorker implements Worker {
|
|
5
6
|
private readonly storage;
|
|
6
7
|
private readonly messageHandler;
|
|
7
|
-
|
|
8
|
+
private readonly cachedConfigService;
|
|
9
|
+
constructor(storage: Storage, messageHandler: MessageHandler<AnalyticsMessage | undefined>, cachedConfigService: CachedConfigService);
|
|
8
10
|
doWork(): Promise<void>;
|
|
9
11
|
}
|
|
10
12
|
//# sourceMappingURL=analytics-message-worker.d.ts.map
|
|
@@ -1 +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,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;
|
|
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"}
|
|
@@ -2,16 +2,23 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AnalyticsMessageWorker = void 0;
|
|
4
4
|
class AnalyticsMessageWorker {
|
|
5
|
-
constructor(storage, messageHandler) {
|
|
5
|
+
constructor(storage, messageHandler, cachedConfigService) {
|
|
6
6
|
this.storage = storage;
|
|
7
7
|
this.messageHandler = messageHandler;
|
|
8
|
+
this.cachedConfigService = cachedConfigService;
|
|
8
9
|
}
|
|
9
10
|
async doWork() {
|
|
11
|
+
const analyticsSetting = this.cachedConfigService.getAnalyticsPreferences();
|
|
12
|
+
if (analyticsSetting === undefined) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
10
15
|
try {
|
|
11
16
|
const events = this.storage.getAnalytics();
|
|
12
17
|
await Promise.all(events.map(async (event) => {
|
|
13
18
|
const payload = await this.storage.getAnalyticsEvent(event);
|
|
14
|
-
|
|
19
|
+
if (analyticsSetting) {
|
|
20
|
+
await this.messageHandler.handleMessage(payload);
|
|
21
|
+
}
|
|
15
22
|
await this.storage.deleteAnalyticsEvent(event);
|
|
16
23
|
}));
|
|
17
24
|
}
|
|
@@ -5,9 +5,14 @@ const local_file_storage_1 = require("../storage/local-file-storage");
|
|
|
5
5
|
const analytics_message_worker_1 = require("./analytics-message-worker");
|
|
6
6
|
const worker_1 = require("./worker");
|
|
7
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");
|
|
8
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);
|
|
9
14
|
const ALL_WORKERS = [
|
|
10
|
-
new analytics_message_worker_1.AnalyticsMessageWorker(new local_file_storage_1.LocalFileStorage(), new analytics_message_handler_1.AnalyticsMessageHandler(workerInfo ? workerInfo.environment : undefined)),
|
|
15
|
+
new analytics_message_worker_1.AnalyticsMessageWorker(new local_file_storage_1.LocalFileStorage(), new analytics_message_handler_1.AnalyticsMessageHandler(workerInfo ? workerInfo.environment : undefined), cachedConfigService),
|
|
11
16
|
new version_check_worker_1.VersionCheckWorker(workerInfo)
|
|
12
17
|
];
|
|
13
18
|
const TIMEOUT = 10 * 1000;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forge/cli",
|
|
3
|
-
"version": "0.0.0-experimental-
|
|
3
|
+
"version": "0.0.0-experimental-c3effe3",
|
|
4
4
|
"description": "A command line interface for managing Atlassian-hosted apps",
|
|
5
5
|
"author": "Atlassian",
|
|
6
6
|
"license": "UNLICENSED",
|
|
@@ -18,18 +18,18 @@
|
|
|
18
18
|
"postinstall": "node -e \"process.exitCode = fs.existsSync('./out/bin/postinstall.js')\" || node ./out/bin/postinstall.js"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@forge/bundler": "0.0.0-experimental-
|
|
22
|
-
"@forge/cli-shared": "0.0.0-experimental-
|
|
23
|
-
"@forge/lint": "0.0.0-experimental-
|
|
24
|
-
"@forge/manifest": "0.0.0-experimental-
|
|
25
|
-
"@forge/util": "
|
|
21
|
+
"@forge/bundler": "0.0.0-experimental-c3effe3",
|
|
22
|
+
"@forge/cli-shared": "0.0.0-experimental-c3effe3",
|
|
23
|
+
"@forge/lint": "0.0.0-experimental-c3effe3",
|
|
24
|
+
"@forge/manifest": "0.0.0-experimental-c3effe3",
|
|
25
|
+
"@forge/util": "1.2.0",
|
|
26
26
|
"ajv": "^6.12.5",
|
|
27
|
-
"archiver": "^
|
|
27
|
+
"archiver": "^5.2.0",
|
|
28
28
|
"case": "^1.6.2",
|
|
29
|
-
"cheerio": "^0.
|
|
30
|
-
"cli-table3": "^0.
|
|
29
|
+
"cheerio": "^0.22.0",
|
|
30
|
+
"cli-table3": "^0.6.1",
|
|
31
31
|
"command-exists": "^1.2.8",
|
|
32
|
-
"commander": "^
|
|
32
|
+
"commander": "^7.0.0",
|
|
33
33
|
"cross-spawn": "^7.0.1",
|
|
34
34
|
"dayjs": "^1.9.7",
|
|
35
35
|
"didyoumean": "^1.2.1",
|
|
@@ -37,11 +37,11 @@
|
|
|
37
37
|
"fs-extra": "^8.1.0",
|
|
38
38
|
"hidefile": "^3.0.0",
|
|
39
39
|
"latest-version": "^5.1.0",
|
|
40
|
+
"lodash": "^4.17.20",
|
|
40
41
|
"mkdirp": "^1.0.3",
|
|
41
|
-
"node-fetch": "
|
|
42
|
+
"node-fetch": "2.6.1",
|
|
42
43
|
"node-machine-id": "^1.1.12",
|
|
43
44
|
"omelette": "^0.4.15-1",
|
|
44
|
-
"open": "^6.4.0",
|
|
45
45
|
"ora": "^4.0.3",
|
|
46
46
|
"portfinder": "^1.0.25",
|
|
47
47
|
"sanitize-filename": "^1.6.3",
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"uuid": "^3.4.0"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
|
-
"@types/archiver": "^
|
|
54
|
+
"@types/archiver": "^5.1.0",
|
|
55
55
|
"@types/cheerio": "^0.22.21",
|
|
56
56
|
"@types/command-exists": "^1.2.0",
|
|
57
57
|
"@types/cross-spawn": "^6.0.1",
|
|
@@ -70,14 +70,14 @@
|
|
|
70
70
|
"@types/tmp": "^0.1.0",
|
|
71
71
|
"@types/unzipper": "^0.10.1",
|
|
72
72
|
"@types/uuid": "^3.4.7",
|
|
73
|
-
"@types/webpack": "
|
|
73
|
+
"@types/webpack": "^5.28.0",
|
|
74
74
|
"jest-fixtures": "^0.6.0",
|
|
75
|
-
"memfs": "^
|
|
75
|
+
"memfs": "^3.4.1"
|
|
76
76
|
},
|
|
77
77
|
"optionalDependencies": {
|
|
78
|
-
"keytar": "^
|
|
78
|
+
"keytar": "^7.9.0"
|
|
79
79
|
},
|
|
80
80
|
"engines": {
|
|
81
|
-
"node": ">=
|
|
81
|
+
"node": ">=12.13.1"
|
|
82
82
|
}
|
|
83
83
|
}
|
package/out/bin/preinstall.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"preinstall.d.ts","sourceRoot":"","sources":["../../src/bin/preinstall.ts"],"names":[],"mappings":""}
|
package/out/bin/preinstall.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
"use strict";
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
const cli_prerequisites_1 = require("../command-line/cli-prerequisites");
|
|
5
|
-
async function main() {
|
|
6
|
-
cli_prerequisites_1.checkNodeVersion();
|
|
7
|
-
await cli_prerequisites_1.checkPythonVersion();
|
|
8
|
-
}
|
|
9
|
-
main();
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli-prerequisites.d.ts","sourceRoot":"","sources":["../../src/command-line/cli-prerequisites.ts"],"names":[],"mappings":"AAKA,wBAAgB,gBAAgB,IAAI,IAAI,CAMvC;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAyBlD"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.checkPythonVersion = exports.checkNodeVersion = void 0;
|
|
4
|
-
const child_process_1 = require("child_process");
|
|
5
|
-
const semver_1 = require("semver");
|
|
6
|
-
const version_info_1 = require("./version-info");
|
|
7
|
-
const cli_shared_1 = require("@forge/cli-shared");
|
|
8
|
-
function checkNodeVersion() {
|
|
9
|
-
const cliDetails = version_info_1.getCLIDetails();
|
|
10
|
-
if (cliDetails && !semver_1.satisfies(process.version, cliDetails.supportedNodeVersion)) {
|
|
11
|
-
console.error(cli_shared_1.Text.error.outdatedNodeVersion(cliDetails.supportedNodeVersion));
|
|
12
|
-
process.exit(1);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
exports.checkNodeVersion = checkNodeVersion;
|
|
16
|
-
function checkPythonVersion() {
|
|
17
|
-
return new Promise((resolve) => {
|
|
18
|
-
const opts = `-c "import platform; print(platform.python_version())"`;
|
|
19
|
-
let command = `python ${opts} || python2.7 ${opts}`;
|
|
20
|
-
if (process.env.PYTHON) {
|
|
21
|
-
command = `${process.env.PYTHON} ${opts}`;
|
|
22
|
-
}
|
|
23
|
-
child_process_1.exec(command, (err, stdout) => {
|
|
24
|
-
if (err) {
|
|
25
|
-
console.error(cli_shared_1.Text.error.failedGettingPythonVersion(err));
|
|
26
|
-
process.exit(1);
|
|
27
|
-
}
|
|
28
|
-
const pythonVersion = stdout.trim();
|
|
29
|
-
if (!pythonVersion.startsWith('2.')) {
|
|
30
|
-
console.error(cli_shared_1.Text.error.invalidPythonVersion(pythonVersion));
|
|
31
|
-
process.exit(1);
|
|
32
|
-
}
|
|
33
|
-
resolve();
|
|
34
|
-
});
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
exports.checkPythonVersion = checkPythonVersion;
|