@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.
Files changed (165) hide show
  1. package/CHANGELOG.md +3781 -7
  2. package/README.md +18 -19
  3. package/npm-shrinkwrap.json +2709 -3555
  4. package/out/analytics-client/analytics-client.d.ts +3 -1
  5. package/out/analytics-client/analytics-client.d.ts.map +1 -1
  6. package/out/analytics-client/analytics-client.js +5 -1
  7. package/out/autocomplete/autocomplete-config.json +24 -20
  8. package/out/autocomplete/isSupportedShell.d.ts +2 -0
  9. package/out/autocomplete/isSupportedShell.d.ts.map +1 -0
  10. package/out/autocomplete/isSupportedShell.js +11 -0
  11. package/out/bin/cli.js +0 -2
  12. package/out/bin/postinstall.js +9 -2
  13. package/out/command-line/anon-user-id.js +6 -10
  14. package/out/command-line/command.d.ts +27 -8
  15. package/out/command-line/command.d.ts.map +1 -1
  16. package/out/command-line/command.js +188 -50
  17. package/out/command-line/controller/autocomplete-controller.d.ts +1 -0
  18. package/out/command-line/controller/autocomplete-controller.d.ts.map +1 -1
  19. package/out/command-line/controller/autocomplete-controller.js +11 -1
  20. package/out/command-line/controller/deploy-controller.d.ts +13 -2
  21. package/out/command-line/controller/deploy-controller.d.ts.map +1 -1
  22. package/out/command-line/controller/deploy-controller.js +79 -5
  23. package/out/command-line/controller/getNodeVersion.d.ts +2 -0
  24. package/out/command-line/controller/getNodeVersion.d.ts.map +1 -0
  25. package/out/command-line/controller/getNodeVersion.js +7 -0
  26. package/out/command-line/controller/install-controller.d.ts +5 -4
  27. package/out/command-line/controller/install-controller.d.ts.map +1 -1
  28. package/out/command-line/controller/install-controller.js +31 -56
  29. package/out/command-line/controller/lint-controller.js +1 -1
  30. package/out/command-line/controller/pre-command-controller.d.ts +8 -1
  31. package/out/command-line/controller/pre-command-controller.d.ts.map +1 -1
  32. package/out/command-line/controller/pre-command-controller.js +22 -2
  33. package/out/command-line/controller/prerequisites-controller.d.ts +11 -0
  34. package/out/command-line/controller/prerequisites-controller.d.ts.map +1 -0
  35. package/out/command-line/controller/prerequisites-controller.js +34 -0
  36. package/out/command-line/controller/settings-controller.d.ts +19 -0
  37. package/out/command-line/controller/settings-controller.d.ts.map +1 -0
  38. package/out/command-line/controller/settings-controller.js +48 -0
  39. package/out/command-line/controller/stubController.d.ts +9 -0
  40. package/out/command-line/controller/stubController.d.ts.map +1 -0
  41. package/out/command-line/controller/stubController.js +15 -0
  42. package/out/command-line/dependency-injection.d.ts +13 -3
  43. package/out/command-line/dependency-injection.d.ts.map +1 -1
  44. package/out/command-line/dependency-injection.js +52 -22
  45. package/out/command-line/index.d.ts.map +1 -1
  46. package/out/command-line/index.js +10 -30
  47. package/out/command-line/register-app-commands.d.ts.map +1 -1
  48. package/out/command-line/register-app-commands.js +2 -12
  49. package/out/command-line/register-authentication-command.d.ts.map +1 -1
  50. package/out/command-line/register-authentication-command.js +1 -16
  51. package/out/command-line/register-deployment-commands.d.ts +8 -0
  52. package/out/command-line/register-deployment-commands.d.ts.map +1 -1
  53. package/out/command-line/register-deployment-commands.js +1 -0
  54. package/out/command-line/register-environment-variables-commands.d.ts +1 -1
  55. package/out/command-line/register-environment-variables-commands.d.ts.map +1 -1
  56. package/out/command-line/register-environment-variables-commands.js +22 -7
  57. package/out/command-line/register-installation-commands.d.ts +4 -1
  58. package/out/command-line/register-installation-commands.d.ts.map +1 -1
  59. package/out/command-line/register-installation-commands.js +39 -23
  60. package/out/command-line/register-providers-commands.d.ts +3 -0
  61. package/out/command-line/register-providers-commands.d.ts.map +1 -0
  62. package/out/command-line/register-providers-commands.js +43 -0
  63. package/out/command-line/register-settings-commands.d.ts +3 -0
  64. package/out/command-line/register-settings-commands.d.ts.map +1 -0
  65. package/out/command-line/register-settings-commands.js +37 -0
  66. package/out/command-line/register-webtrigger-commands.d.ts.map +1 -1
  67. package/out/command-line/register-webtrigger-commands.js +9 -11
  68. package/out/command-line/unique-machine-id.d.ts +1 -0
  69. package/out/command-line/unique-machine-id.d.ts.map +1 -1
  70. package/out/command-line/unique-machine-id.js +3 -12
  71. package/out/command-line/version-info.d.ts +1 -0
  72. package/out/command-line/version-info.d.ts.map +1 -1
  73. package/out/command-line/version-info.js +3 -2
  74. package/out/command-line/view/analytics-settings-view.d.ts +7 -0
  75. package/out/command-line/view/analytics-settings-view.d.ts.map +1 -0
  76. package/out/command-line/view/analytics-settings-view.js +18 -0
  77. package/out/command-line/view/deploy-view.d.ts +7 -1
  78. package/out/command-line/view/deploy-view.d.ts.map +1 -1
  79. package/out/command-line/view/deploy-view.js +25 -3
  80. package/out/command-line/view/install-view.d.ts +5 -3
  81. package/out/command-line/view/install-view.d.ts.map +1 -1
  82. package/out/command-line/view/install-view.js +19 -10
  83. package/out/command-line/view/lint-view.d.ts +3 -2
  84. package/out/command-line/view/lint-view.d.ts.map +1 -1
  85. package/out/command-line/view/lint-view.js +3 -0
  86. package/out/command-line/view/lite-lint-view.d.ts +3 -2
  87. package/out/command-line/view/lite-lint-view.d.ts.map +1 -1
  88. package/out/command-line/view/lite-lint-view.js +3 -0
  89. package/out/command-line/view/settings-view.d.ts +8 -0
  90. package/out/command-line/view/settings-view.d.ts.map +1 -0
  91. package/out/command-line/view/settings-view.js +21 -0
  92. package/out/deploy/deployer/deploy-monitor-graphql-client.js +1 -1
  93. package/out/deploy/deployer/deployer.d.ts.map +1 -1
  94. package/out/deploy/deployer/deployer.js +17 -1
  95. package/out/deploy/deployer/trigger-deploy-graphql-client.d.ts.map +1 -1
  96. package/out/deploy/deployer/trigger-deploy-graphql-client.js +9 -6
  97. package/out/deploy/packager/archiver.d.ts +3 -2
  98. package/out/deploy/packager/archiver.d.ts.map +1 -1
  99. package/out/deploy/packager/archiver.js +10 -2
  100. package/out/deploy/packager/packager.d.ts.map +1 -1
  101. package/out/deploy/packager/packager.js +20 -20
  102. package/out/deploy/uploader/artifact-graphql-client.d.ts.map +1 -1
  103. package/out/deploy/uploader/artifact-graphql-client.js +12 -9
  104. package/out/environment-variables/graphql-client.d.ts +1 -1
  105. package/out/environment-variables/graphql-client.d.ts.map +1 -1
  106. package/out/environment-variables/graphql-client.js +19 -13
  107. package/out/installations/graphql-client.d.ts +19 -13
  108. package/out/installations/graphql-client.d.ts.map +1 -1
  109. package/out/installations/graphql-client.js +161 -56
  110. package/out/installations/install-app-site.d.ts +2 -12
  111. package/out/installations/install-app-site.d.ts.map +1 -1
  112. package/out/installations/install-app-site.js +3 -14
  113. package/out/installations/uninstall-app.d.ts +5 -3
  114. package/out/installations/uninstall-app.d.ts.map +1 -1
  115. package/out/installations/uninstall-app.js +7 -7
  116. package/out/migration-keys/graphql-client.d.ts +8 -0
  117. package/out/migration-keys/graphql-client.d.ts.map +1 -0
  118. package/out/migration-keys/graphql-client.js +55 -0
  119. package/out/providers/configure-provider.d.ts +19 -0
  120. package/out/providers/configure-provider.d.ts.map +1 -0
  121. package/out/providers/configure-provider.js +14 -0
  122. package/out/providers/graphql-client.d.ts +12 -0
  123. package/out/providers/graphql-client.d.ts.map +1 -0
  124. package/out/providers/graphql-client.js +47 -0
  125. package/out/service/cached-config-service.d.ts +8 -0
  126. package/out/service/cached-config-service.d.ts.map +1 -0
  127. package/out/service/cached-config-service.js +16 -0
  128. package/out/service/installation-service.d.ts +13 -13
  129. package/out/service/installation-service.d.ts.map +1 -1
  130. package/out/service/installation-service.js +38 -23
  131. package/out/service/lint-service.d.ts +2 -2
  132. package/out/service/lint-service.d.ts.map +1 -1
  133. package/out/service/lint-service.js +3 -3
  134. package/out/service/lite-lint-service.d.ts +3 -3
  135. package/out/service/lite-lint-service.d.ts.map +1 -1
  136. package/out/service/lite-lint-service.js +2 -2
  137. package/out/service/migration-keys-service.d.ts +19 -0
  138. package/out/service/migration-keys-service.d.ts.map +1 -0
  139. package/out/service/migration-keys-service.js +14 -0
  140. package/out/service/port-finding-service.d.ts +12 -0
  141. package/out/service/port-finding-service.d.ts.map +1 -0
  142. package/out/service/port-finding-service.js +34 -0
  143. package/out/service/resource-packaging-service.d.ts +3 -2
  144. package/out/service/resource-packaging-service.d.ts.map +1 -1
  145. package/out/service/resource-packaging-service.js +6 -2
  146. package/out/service/tunnel-service.d.ts +6 -2
  147. package/out/service/tunnel-service.d.ts.map +1 -1
  148. package/out/service/tunnel-service.js +53 -12
  149. package/out/webtrigger/get-webtrigger-url.d.ts +10 -4
  150. package/out/webtrigger/get-webtrigger-url.d.ts.map +1 -1
  151. package/out/webtrigger/get-webtrigger-url.js +11 -18
  152. package/out/webtrigger/graphql-client.d.ts +14 -0
  153. package/out/webtrigger/graphql-client.d.ts.map +1 -0
  154. package/out/webtrigger/graphql-client.js +52 -0
  155. package/out/workers/analytics-message-worker.d.ts +3 -1
  156. package/out/workers/analytics-message-worker.d.ts.map +1 -1
  157. package/out/workers/analytics-message-worker.js +9 -2
  158. package/out/workers/forge-cli-workers.js +6 -1
  159. package/package.json +17 -17
  160. package/out/bin/preinstall.d.ts +0 -3
  161. package/out/bin/preinstall.d.ts.map +0 -1
  162. package/out/bin/preinstall.js +0 -9
  163. package/out/command-line/cli-prerequisites.d.ts +0 -3
  164. package/out/command-line/cli-prerequisites.d.ts.map +0 -1
  165. 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
- const dockerOptions = [
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
- return [`-p`, `${port}:${port}`, `--env`, `TUNNEL_INSPECTOR_PORT=${port}`];
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('^\\w+=.+$', 'g');
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
- const [key, val] = envVar.split('=');
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 portOptions = this.getPortOptions(port);
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 env = this.addEnvVarsForLocalTunnel(this.transformDockerOptionsToEnvVars([...dockerOptions, ...portOptions, ...envVariablesOptions]));
109
- cross_spawn_1.spawn('forge-tunnel', [], { stdio: 'inherit', env }).on('error', onError);
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 portOptions = this.getPortOptions(port);
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 globalEdgeClient;
18
- constructor(getAppConfig: AppConfigProvider, webTriggerClient: WebTriggerClient, appEnvironmentClient: AppEnvironmentClient, globalEdgeClient: GlobalEdgeClient);
19
- execute(installationId: string, functionKey: string, isProduction: boolean): Promise<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":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE/D,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAC/E;AAQD,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,gBAAgB;gBAHhB,YAAY,EAAE,iBAAiB,EAC/B,gBAAgB,EAAE,gBAAgB,EAClC,oBAAoB,EAAE,oBAAoB,EAC1C,gBAAgB,EAAE,gBAAgB;IAGxC,OAAO,CAAC,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;CAkB1G"}
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, globalEdgeClient) {
6
+ constructor(getAppConfig, webTriggerClient, appEnvironmentClient, webTriggerGraphqlClient) {
14
7
  this.getAppConfig = getAppConfig;
15
8
  this.webTriggerClient = webTriggerClient;
16
9
  this.appEnvironmentClient = appEnvironmentClient;
17
- this.globalEdgeClient = globalEdgeClient;
10
+ this.webTriggerGraphqlClient = webTriggerGraphqlClient;
18
11
  }
19
- async execute(installationId, functionKey, isProduction) {
12
+ async execute(installationId, functionKey) {
20
13
  const { id: appId } = await this.getAppConfig();
21
- const { product, site, environmentKey } = await this.webTriggerClient.getInstallation(appId, installationId);
22
- const [environmentId, cloudId] = await Promise.all([
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
- const extension = cli_shared_1.buildExtensionAri(appAri.appId, environmentId, functionKey);
30
- return buildWebtriggerURL(appAri.appId, context, extension, isProduction);
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
- constructor(storage: Storage, messageHandler: MessageHandler<AnalyticsMessage | undefined>);
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;gBADd,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,cAAc,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAGzE,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAc9B"}
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
- await this.messageHandler.handleMessage(payload);
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-e8bfa83",
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-e8bfa83",
22
- "@forge/cli-shared": "0.0.0-experimental-e8bfa83",
23
- "@forge/lint": "0.0.0-experimental-e8bfa83",
24
- "@forge/manifest": "0.0.0-experimental-e8bfa83",
25
- "@forge/util": "0.0.0-experimental-e8bfa83",
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": "^3.1.1",
27
+ "archiver": "^5.2.0",
28
28
  "case": "^1.6.2",
29
- "cheerio": "^0.20.0",
30
- "cli-table3": "^0.5.1",
29
+ "cheerio": "^0.22.0",
30
+ "cli-table3": "^0.6.1",
31
31
  "command-exists": "^1.2.8",
32
- "commander": "^4.0.1",
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": "^2.6.1",
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": "^3.0.0",
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": "4.39.8",
73
+ "@types/webpack": "^5.28.0",
74
74
  "jest-fixtures": "^0.6.0",
75
- "memfs": "^2.17.1"
75
+ "memfs": "^3.4.1"
76
76
  },
77
77
  "optionalDependencies": {
78
- "keytar": "^5.0.0"
78
+ "keytar": "^7.9.0"
79
79
  },
80
80
  "engines": {
81
- "node": ">=8.3"
81
+ "node": ">=12.13.1"
82
82
  }
83
83
  }
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=preinstall.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"preinstall.d.ts","sourceRoot":"","sources":["../../src/bin/preinstall.ts"],"names":[],"mappings":""}
@@ -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,3 +0,0 @@
1
- export declare function checkNodeVersion(): void;
2
- export declare function checkPythonVersion(): Promise<void>;
3
- //# sourceMappingURL=cli-prerequisites.d.ts.map
@@ -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;