@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.
Files changed (319) hide show
  1. package/CHANGELOG.md +1110 -2
  2. package/npm-shrinkwrap.json +13212 -223
  3. package/out/analytics-client/analytics-client.d.ts +36 -0
  4. package/out/analytics-client/analytics-client.d.ts.map +1 -0
  5. package/out/analytics-client/analytics-client.js +140 -0
  6. package/out/analytics-client/analytics-message-handler.d.ts +21 -0
  7. package/out/analytics-client/analytics-message-handler.d.ts.map +1 -0
  8. package/out/analytics-client/analytics-message-handler.js +43 -0
  9. package/out/autocomplete/autocomplete-config.json +243 -0
  10. package/out/autocomplete/index.d.ts +5 -0
  11. package/out/autocomplete/index.d.ts.map +1 -0
  12. package/out/autocomplete/index.js +41 -0
  13. package/out/autocomplete/isSupportedShell.d.ts +2 -0
  14. package/out/autocomplete/isSupportedShell.d.ts.map +1 -0
  15. package/out/autocomplete/isSupportedShell.js +11 -0
  16. package/out/autocomplete/types.d.ts +14 -0
  17. package/out/autocomplete/types.d.ts.map +1 -0
  18. package/out/autocomplete/types.js +2 -0
  19. package/out/autocomplete/util.d.ts +6 -0
  20. package/out/autocomplete/util.d.ts.map +1 -0
  21. package/out/autocomplete/util.js +15 -0
  22. package/out/bin/cli.d.ts +1 -0
  23. package/out/bin/cli.d.ts.map +1 -1
  24. package/out/bin/cli.js +4 -1
  25. package/out/bin/postinstall.d.ts +2 -0
  26. package/out/bin/postinstall.d.ts.map +1 -0
  27. package/out/bin/postinstall.js +23 -0
  28. package/out/command-line/anon-user-id.d.ts +3 -0
  29. package/out/command-line/anon-user-id.d.ts.map +1 -0
  30. package/out/command-line/anon-user-id.js +17 -0
  31. package/out/command-line/command.d.ts +80 -0
  32. package/out/command-line/command.d.ts.map +1 -0
  33. package/out/command-line/command.js +408 -0
  34. package/out/command-line/controller/assertUnreachable.d.ts +2 -0
  35. package/out/command-line/controller/assertUnreachable.d.ts.map +1 -0
  36. package/out/command-line/controller/assertUnreachable.js +7 -0
  37. package/out/command-line/controller/autocomplete-controller.d.ts +12 -0
  38. package/out/command-line/controller/autocomplete-controller.d.ts.map +1 -0
  39. package/out/command-line/controller/autocomplete-controller.js +54 -0
  40. package/out/command-line/controller/deploy-controller.d.ts +42 -0
  41. package/out/command-line/controller/deploy-controller.d.ts.map +1 -0
  42. package/out/command-line/controller/deploy-controller.js +139 -0
  43. package/out/command-line/controller/feedback-controller.d.ts +9 -0
  44. package/out/command-line/controller/feedback-controller.d.ts.map +1 -0
  45. package/out/command-line/controller/feedback-controller.js +19 -0
  46. package/out/command-line/controller/getNodeVersion.d.ts +2 -0
  47. package/out/command-line/controller/getNodeVersion.d.ts.map +1 -0
  48. package/out/command-line/controller/getNodeVersion.js +7 -0
  49. package/out/command-line/controller/install-controller.d.ts +35 -0
  50. package/out/command-line/controller/install-controller.d.ts.map +1 -0
  51. package/out/command-line/controller/install-controller.js +157 -0
  52. package/out/command-line/controller/lint-controller.d.ts +9 -0
  53. package/out/command-line/controller/lint-controller.d.ts.map +1 -0
  54. package/out/command-line/controller/lint-controller.js +20 -0
  55. package/out/command-line/controller/pre-command-controller.d.ts +25 -0
  56. package/out/command-line/controller/pre-command-controller.d.ts.map +1 -0
  57. package/out/command-line/controller/pre-command-controller.js +57 -0
  58. package/out/command-line/controller/prerequisites-controller.d.ts +15 -0
  59. package/out/command-line/controller/prerequisites-controller.d.ts.map +1 -0
  60. package/out/command-line/controller/prerequisites-controller.js +41 -0
  61. package/out/command-line/controller/settings-controller.d.ts +19 -0
  62. package/out/command-line/controller/settings-controller.d.ts.map +1 -0
  63. package/out/command-line/controller/settings-controller.js +48 -0
  64. package/out/command-line/controller/stubController.d.ts +9 -0
  65. package/out/command-line/controller/stubController.d.ts.map +1 -0
  66. package/out/command-line/controller/stubController.js +15 -0
  67. package/out/command-line/controller/tunnel-controller.d.ts +14 -0
  68. package/out/command-line/controller/tunnel-controller.d.ts.map +1 -0
  69. package/out/command-line/controller/tunnel-controller.js +43 -0
  70. package/out/command-line/dependency-injection.d.ts +76 -0
  71. package/out/command-line/dependency-injection.d.ts.map +1 -0
  72. package/out/command-line/dependency-injection.js +211 -0
  73. package/out/command-line/environment.d.ts +2 -0
  74. package/out/command-line/environment.d.ts.map +1 -0
  75. package/out/command-line/environment.js +16 -0
  76. package/out/command-line/errors.d.ts +6 -0
  77. package/out/command-line/errors.d.ts.map +1 -0
  78. package/out/command-line/errors.js +12 -0
  79. package/out/command-line/index.d.ts +5 -0
  80. package/out/command-line/index.d.ts.map +1 -0
  81. package/out/command-line/index.js +73 -0
  82. package/out/command-line/register-app-commands.d.ts +10 -0
  83. package/out/command-line/register-app-commands.d.ts.map +1 -0
  84. package/out/command-line/register-app-commands.js +128 -0
  85. package/out/command-line/register-authentication-command.d.ts +16 -0
  86. package/out/command-line/register-authentication-command.d.ts.map +1 -0
  87. package/out/command-line/register-authentication-command.js +94 -0
  88. package/out/command-line/register-autocomplete-commands.d.ts +3 -0
  89. package/out/command-line/register-autocomplete-commands.d.ts.map +1 -0
  90. package/out/command-line/register-autocomplete-commands.js +14 -0
  91. package/out/command-line/register-contributors-commands.d.ts +3 -0
  92. package/out/command-line/register-contributors-commands.d.ts.map +1 -0
  93. package/out/command-line/register-contributors-commands.js +134 -0
  94. package/out/command-line/register-deployment-commands.d.ts +22 -0
  95. package/out/command-line/register-deployment-commands.d.ts.map +1 -0
  96. package/out/command-line/register-deployment-commands.js +16 -0
  97. package/out/command-line/register-environment-variables-commands.d.ts +3 -0
  98. package/out/command-line/register-environment-variables-commands.d.ts.map +1 -0
  99. package/out/command-line/register-environment-variables-commands.js +103 -0
  100. package/out/command-line/register-feedback-commands.d.ts +3 -0
  101. package/out/command-line/register-feedback-commands.d.ts.map +1 -0
  102. package/out/command-line/register-feedback-commands.js +32 -0
  103. package/out/command-line/register-installation-commands.d.ts +6 -0
  104. package/out/command-line/register-installation-commands.d.ts.map +1 -0
  105. package/out/command-line/register-installation-commands.js +143 -0
  106. package/out/command-line/register-lint-command.d.ts +8 -0
  107. package/out/command-line/register-lint-command.d.ts.map +1 -0
  108. package/out/command-line/register-lint-command.js +16 -0
  109. package/out/command-line/register-log-commands.d.ts +4 -0
  110. package/out/command-line/register-log-commands.d.ts.map +1 -0
  111. package/out/command-line/register-log-commands.js +139 -0
  112. package/out/command-line/register-providers-commands.d.ts +3 -0
  113. package/out/command-line/register-providers-commands.d.ts.map +1 -0
  114. package/out/command-line/register-providers-commands.js +44 -0
  115. package/out/command-line/register-settings-commands.d.ts +3 -0
  116. package/out/command-line/register-settings-commands.d.ts.map +1 -0
  117. package/out/command-line/register-settings-commands.js +39 -0
  118. package/out/command-line/register-tunnel-commands.d.ts +3 -0
  119. package/out/command-line/register-tunnel-commands.d.ts.map +1 -0
  120. package/out/command-line/register-tunnel-commands.js +15 -0
  121. package/out/command-line/register-webtrigger-commands.d.ts +3 -0
  122. package/out/command-line/register-webtrigger-commands.d.ts.map +1 -0
  123. package/out/command-line/register-webtrigger-commands.js +56 -0
  124. package/out/command-line/sentry.d.ts +4 -0
  125. package/out/command-line/sentry.d.ts.map +1 -0
  126. package/out/command-line/sentry.js +16 -0
  127. package/out/command-line/unique-machine-id.d.ts +3 -0
  128. package/out/command-line/unique-machine-id.d.ts.map +1 -0
  129. package/out/command-line/unique-machine-id.js +19 -0
  130. package/out/command-line/version-info.d.ts +9 -0
  131. package/out/command-line/version-info.d.ts.map +1 -0
  132. package/out/command-line/version-info.js +42 -0
  133. package/out/command-line/view/analytics-settings-view.d.ts +7 -0
  134. package/out/command-line/view/analytics-settings-view.d.ts.map +1 -0
  135. package/out/command-line/view/analytics-settings-view.js +18 -0
  136. package/out/command-line/view/deploy-view.d.ts +21 -0
  137. package/out/command-line/view/deploy-view.d.ts.map +1 -0
  138. package/out/command-line/view/deploy-view.js +58 -0
  139. package/out/command-line/view/install-view.d.ts +18 -0
  140. package/out/command-line/view/install-view.d.ts.map +1 -0
  141. package/out/command-line/view/install-view.js +56 -0
  142. package/out/command-line/view/lint-view.d.ts +12 -0
  143. package/out/command-line/view/lint-view.d.ts.map +1 -0
  144. package/out/command-line/view/lint-view.js +31 -0
  145. package/out/command-line/view/lite-lint-view.d.ts +10 -0
  146. package/out/command-line/view/lite-lint-view.d.ts.map +1 -0
  147. package/out/command-line/view/lite-lint-view.js +18 -0
  148. package/out/command-line/view/settings-view.d.ts +10 -0
  149. package/out/command-line/view/settings-view.d.ts.map +1 -0
  150. package/out/command-line/view/settings-view.js +26 -0
  151. package/out/command-line/view/tunnel-view.d.ts +20 -0
  152. package/out/command-line/view/tunnel-view.d.ts.map +1 -0
  153. package/out/command-line/view/tunnel-view.js +92 -0
  154. package/out/contributors/add-contributor.d.ts +17 -0
  155. package/out/contributors/add-contributor.d.ts.map +1 -0
  156. package/out/contributors/add-contributor.js +14 -0
  157. package/out/contributors/graphql-client.d.ts +14 -0
  158. package/out/contributors/graphql-client.d.ts.map +1 -0
  159. package/out/contributors/graphql-client.js +113 -0
  160. package/out/contributors/list-contributors.d.ts +18 -0
  161. package/out/contributors/list-contributors.d.ts.map +1 -0
  162. package/out/contributors/list-contributors.js +14 -0
  163. package/out/contributors/remove-contributors.d.ts +18 -0
  164. package/out/contributors/remove-contributors.d.ts.map +1 -0
  165. package/out/contributors/remove-contributors.js +14 -0
  166. package/out/deploy/deployer/deploy-monitor-graphql-client.d.ts +24 -0
  167. package/out/deploy/deployer/deploy-monitor-graphql-client.d.ts.map +1 -0
  168. package/out/deploy/deployer/deploy-monitor-graphql-client.js +57 -0
  169. package/out/deploy/deployer/deployer.d.ts +40 -0
  170. package/out/deploy/deployer/deployer.d.ts.map +1 -0
  171. package/out/deploy/deployer/deployer.js +187 -0
  172. package/out/deploy/deployer/index.d.ts +4 -0
  173. package/out/deploy/deployer/index.d.ts.map +1 -0
  174. package/out/deploy/deployer/index.js +6 -0
  175. package/out/deploy/deployer/trigger-deploy-graphql-client.d.ts +19 -0
  176. package/out/deploy/deployer/trigger-deploy-graphql-client.d.ts.map +1 -0
  177. package/out/deploy/deployer/trigger-deploy-graphql-client.js +49 -0
  178. package/out/deploy/index.d.ts +5 -0
  179. package/out/deploy/index.d.ts.map +1 -0
  180. package/out/deploy/index.js +7 -0
  181. package/out/deploy/package-upload-deploy.d.ts +20 -0
  182. package/out/deploy/package-upload-deploy.d.ts.map +1 -0
  183. package/out/deploy/package-upload-deploy.js +37 -0
  184. package/out/deploy/packager/archiver.d.ts +27 -0
  185. package/out/deploy/packager/archiver.d.ts.map +1 -0
  186. package/out/deploy/packager/archiver.js +76 -0
  187. package/out/deploy/packager/index.d.ts +3 -0
  188. package/out/deploy/packager/index.d.ts.map +1 -0
  189. package/out/deploy/packager/index.js +5 -0
  190. package/out/deploy/packager/nativeui-bundler.d.ts +12 -0
  191. package/out/deploy/packager/nativeui-bundler.d.ts.map +1 -0
  192. package/out/deploy/packager/nativeui-bundler.js +34 -0
  193. package/out/deploy/packager/packager.d.ts +32 -0
  194. package/out/deploy/packager/packager.d.ts.map +1 -0
  195. package/out/deploy/packager/packager.js +21 -0
  196. package/out/deploy/packager/runtime-bundler.d.ts +15 -0
  197. package/out/deploy/packager/runtime-bundler.d.ts.map +1 -0
  198. package/out/deploy/packager/runtime-bundler.js +53 -0
  199. package/out/deploy/uploader/artifact-graphql-client.d.ts +26 -0
  200. package/out/deploy/uploader/artifact-graphql-client.d.ts.map +1 -0
  201. package/out/deploy/uploader/artifact-graphql-client.js +100 -0
  202. package/out/deploy/uploader/index.d.ts +3 -0
  203. package/out/deploy/uploader/index.d.ts.map +1 -0
  204. package/out/deploy/uploader/index.js +5 -0
  205. package/out/deploy/uploader/uploader.d.ts +19 -0
  206. package/out/deploy/uploader/uploader.d.ts.map +1 -0
  207. package/out/deploy/uploader/uploader.js +43 -0
  208. package/out/environment-variables/delete-environment-variable.d.ts +18 -0
  209. package/out/environment-variables/delete-environment-variable.d.ts.map +1 -0
  210. package/out/environment-variables/delete-environment-variable.js +14 -0
  211. package/out/environment-variables/graphql-client.d.ts +16 -0
  212. package/out/environment-variables/graphql-client.d.ts.map +1 -0
  213. package/out/environment-variables/graphql-client.js +113 -0
  214. package/out/environment-variables/list-environment-variables.d.ts +22 -0
  215. package/out/environment-variables/list-environment-variables.d.ts.map +1 -0
  216. package/out/environment-variables/list-environment-variables.js +14 -0
  217. package/out/environment-variables/set-environment-variable.d.ts +20 -0
  218. package/out/environment-variables/set-environment-variable.d.ts.map +1 -0
  219. package/out/environment-variables/set-environment-variable.js +14 -0
  220. package/out/installations/graphql-client.d.ts +75 -0
  221. package/out/installations/graphql-client.d.ts.map +1 -0
  222. package/out/installations/graphql-client.js +423 -0
  223. package/out/installations/install-app-site.d.ts +21 -0
  224. package/out/installations/install-app-site.d.ts.map +1 -0
  225. package/out/installations/install-app-site.js +19 -0
  226. package/out/installations/shared.d.ts +5 -0
  227. package/out/installations/shared.d.ts.map +1 -0
  228. package/out/installations/shared.js +20 -0
  229. package/out/installations/site-translation/bitbucket.d.ts +24 -0
  230. package/out/installations/site-translation/bitbucket.d.ts.map +1 -0
  231. package/out/installations/site-translation/bitbucket.js +113 -0
  232. package/out/installations/site-translation/cloudid-products.d.ts +17 -0
  233. package/out/installations/site-translation/cloudid-products.d.ts.map +1 -0
  234. package/out/installations/site-translation/cloudid-products.js +89 -0
  235. package/out/installations/site-translation/index.d.ts +4 -0
  236. package/out/installations/site-translation/index.d.ts.map +1 -0
  237. package/out/installations/site-translation/index.js +6 -0
  238. package/out/installations/site-translation/site-translation.d.ts +12 -0
  239. package/out/installations/site-translation/site-translation.d.ts.map +1 -0
  240. package/out/installations/site-translation/site-translation.js +2 -0
  241. package/out/installations/uninstall-app.d.ts +25 -0
  242. package/out/installations/uninstall-app.d.ts.map +1 -0
  243. package/out/installations/uninstall-app.js +43 -0
  244. package/out/migration-keys/graphql-client.d.ts +8 -0
  245. package/out/migration-keys/graphql-client.d.ts.map +1 -0
  246. package/out/migration-keys/graphql-client.js +55 -0
  247. package/out/providers/configure-provider.d.ts +19 -0
  248. package/out/providers/configure-provider.d.ts.map +1 -0
  249. package/out/providers/configure-provider.js +14 -0
  250. package/out/providers/graphql-client.d.ts +8 -0
  251. package/out/providers/graphql-client.d.ts.map +1 -0
  252. package/out/providers/graphql-client.js +45 -0
  253. package/out/service/cached-config-service.d.ts +8 -0
  254. package/out/service/cached-config-service.d.ts.map +1 -0
  255. package/out/service/cached-config-service.js +16 -0
  256. package/out/service/command-suggestion-service.d.ts +4 -0
  257. package/out/service/command-suggestion-service.d.ts.map +1 -0
  258. package/out/service/command-suggestion-service.js +17 -0
  259. package/out/service/docker-service.d.ts +24 -0
  260. package/out/service/docker-service.d.ts.map +1 -0
  261. package/out/service/docker-service.js +71 -0
  262. package/out/service/installation-service.d.ts +51 -0
  263. package/out/service/installation-service.d.ts.map +1 -0
  264. package/out/service/installation-service.js +91 -0
  265. package/out/service/lint-service.d.ts +23 -0
  266. package/out/service/lint-service.d.ts.map +1 -0
  267. package/out/service/lint-service.js +39 -0
  268. package/out/service/lite-lint-service.d.ts +10 -0
  269. package/out/service/lite-lint-service.d.ts.map +1 -0
  270. package/out/service/lite-lint-service.js +27 -0
  271. package/out/service/migration-keys-service.d.ts +19 -0
  272. package/out/service/migration-keys-service.d.ts.map +1 -0
  273. package/out/service/migration-keys-service.js +14 -0
  274. package/out/service/port-finding-service.d.ts +12 -0
  275. package/out/service/port-finding-service.d.ts.map +1 -0
  276. package/out/service/port-finding-service.js +34 -0
  277. package/out/service/resource-packaging-service.d.ts +46 -0
  278. package/out/service/resource-packaging-service.d.ts.map +1 -0
  279. package/out/service/resource-packaging-service.js +132 -0
  280. package/out/service/resources-uploader-service.d.ts +16 -0
  281. package/out/service/resources-uploader-service.d.ts.map +1 -0
  282. package/out/service/resources-uploader-service.js +39 -0
  283. package/out/service/tunnel-analytics-service.d.ts +11 -0
  284. package/out/service/tunnel-analytics-service.d.ts.map +1 -0
  285. package/out/service/tunnel-analytics-service.js +24 -0
  286. package/out/service/tunnel-service.d.ts +41 -0
  287. package/out/service/tunnel-service.d.ts.map +1 -0
  288. package/out/service/tunnel-service.js +196 -0
  289. package/out/storage/local-file-storage.d.ts +17 -0
  290. package/out/storage/local-file-storage.d.ts.map +1 -0
  291. package/out/storage/local-file-storage.js +53 -0
  292. package/out/webtrigger/get-webtrigger-url.d.ts +27 -0
  293. package/out/webtrigger/get-webtrigger-url.d.ts.map +1 -0
  294. package/out/webtrigger/get-webtrigger-url.js +26 -0
  295. package/out/webtrigger/graphql-client.d.ts +14 -0
  296. package/out/webtrigger/graphql-client.d.ts.map +1 -0
  297. package/out/webtrigger/graphql-client.js +52 -0
  298. package/out/workers/analytics-message-worker.d.ts +12 -0
  299. package/out/workers/analytics-message-worker.d.ts.map +1 -0
  300. package/out/workers/analytics-message-worker.js +29 -0
  301. package/out/workers/forge-cli-workers.d.ts +2 -0
  302. package/out/workers/forge-cli-workers.d.ts.map +1 -0
  303. package/out/workers/forge-cli-workers.js +21 -0
  304. package/out/workers/tunnel-clean-up-worker.d.ts +8 -0
  305. package/out/workers/tunnel-clean-up-worker.d.ts.map +1 -0
  306. package/out/workers/tunnel-clean-up-worker.js +31 -0
  307. package/out/workers/version-check-worker.d.ts +8 -0
  308. package/out/workers/version-check-worker.d.ts.map +1 -0
  309. package/out/workers/version-check-worker.js +20 -0
  310. package/out/workers/worker-info.d.ts +8 -0
  311. package/out/workers/worker-info.d.ts.map +1 -0
  312. package/out/workers/worker-info.js +15 -0
  313. package/out/workers/worker.d.ts +6 -0
  314. package/out/workers/worker.d.ts.map +1 -0
  315. package/out/workers/worker.js +9 -0
  316. package/out/workers/workers-starter.d.ts +5 -0
  317. package/out/workers/workers-starter.d.ts.map +1 -0
  318. package/out/workers/workers-starter.js +22 -0
  319. package/package.json +60 -5
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DockerService = exports.DockerErrorCode = exports.DOCKER_DOWNLOAD_LINK = exports.DockerError = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const cli_shared_1 = require("@forge/cli-shared");
6
+ const command_exists_1 = tslib_1.__importDefault(require("command-exists"));
7
+ const child_process_1 = require("child_process");
8
+ const cross_spawn_1 = require("cross-spawn");
9
+ const path_1 = tslib_1.__importDefault(require("path"));
10
+ class DockerError extends Error {
11
+ constructor(message, code) {
12
+ super(message);
13
+ this.code = code;
14
+ }
15
+ }
16
+ exports.DockerError = DockerError;
17
+ exports.DOCKER_DOWNLOAD_LINK = 'https://docs.docker.com/get-docker/';
18
+ var DockerErrorCode;
19
+ (function (DockerErrorCode) {
20
+ DockerErrorCode[DockerErrorCode["DAEMON_NOT_RUNNING"] = 0] = "DAEMON_NOT_RUNNING";
21
+ DockerErrorCode[DockerErrorCode["NOT_INSTALLED"] = 1] = "NOT_INSTALLED";
22
+ })(DockerErrorCode = exports.DockerErrorCode || (exports.DockerErrorCode = {}));
23
+ class DockerService {
24
+ runContainer(args) {
25
+ return (0, cross_spawn_1.spawn)('docker', ['run', ...args], { stdio: 'inherit' });
26
+ }
27
+ async getDockerVersion(debugEnabled) {
28
+ if (!command_exists_1.default.sync('docker')) {
29
+ throw new DockerError(cli_shared_1.Text.tunnel.error.dockerNotInstalled(exports.DOCKER_DOWNLOAD_LINK), DockerErrorCode.NOT_INSTALLED);
30
+ }
31
+ const { err, stdout } = await this.execPromise('docker version --format "{{.Server.Version}}"');
32
+ if (err) {
33
+ throw new DockerError(cli_shared_1.Text.tunnel.error.dockerDaemonNotRunning(err.message, debugEnabled), DockerErrorCode.DAEMON_NOT_RUNNING);
34
+ }
35
+ const dockerVersion = stdout.trim();
36
+ const dockerVersionArr = dockerVersion.split('.');
37
+ const dockerMajorVersion = parseInt(dockerVersionArr[0], 10);
38
+ const dockerMinorVersion = parseInt(dockerVersionArr[1], 10);
39
+ return {
40
+ full: dockerVersion,
41
+ major: dockerMajorVersion,
42
+ minor: dockerMinorVersion
43
+ };
44
+ }
45
+ async removeContainer(containerName) {
46
+ await this.execPromise(`docker rm -f ${containerName}`);
47
+ }
48
+ downloadImage(imageName) {
49
+ return (0, cross_spawn_1.spawn)('docker', ['pull', imageName]);
50
+ }
51
+ startCleanupWorker(pids, containerName) {
52
+ const dockerCleanUp = (0, cross_spawn_1.spawn)(process.env.NODE_ENV === 'development' ? 'ts-node' : 'node', [path_1.default.join(__dirname, '../workers/tunnel-cleanup-worker')], { stdio: ['ignore', 'ignore', 'ignore', 'ipc'] });
53
+ const message = {
54
+ pids,
55
+ containers: [containerName]
56
+ };
57
+ dockerCleanUp.send(message);
58
+ }
59
+ execPromise(cmd) {
60
+ return new Promise((resolve) => {
61
+ (0, child_process_1.exec)(cmd, (err, stdout, stderr) => {
62
+ resolve({
63
+ err: err,
64
+ stdout: stdout,
65
+ stderr: stderr
66
+ });
67
+ });
68
+ });
69
+ }
70
+ }
71
+ exports.DockerService = DockerService;
@@ -0,0 +1,51 @@
1
+ /// <reference types="node" />
2
+ import { AppConfigProvider, AppEnvironment } from '@forge/cli-shared';
3
+ import { URL } from 'url';
4
+ import { AppInstallSiteDetails } from '../installations/install-app-site';
5
+ export interface Installation {
6
+ id: string;
7
+ product: string;
8
+ site: string;
9
+ environmentKey: string;
10
+ context: string;
11
+ version: {
12
+ isLatest: boolean;
13
+ };
14
+ }
15
+ export interface AppInstallation {
16
+ installations: Installation[];
17
+ }
18
+ export interface AppEnvironmentVersionPermissions {
19
+ scopes: string[];
20
+ egressAddresses: string[];
21
+ }
22
+ export interface AppEnvironmentPermissions extends AppEnvironmentVersionPermissions {
23
+ addedScopes: string[];
24
+ }
25
+ interface InstallationFilterOptions {
26
+ site?: string;
27
+ product?: 'Jira' | 'Confluence';
28
+ environment?: string;
29
+ }
30
+ export interface ListAppInstallationsClient {
31
+ listInstallations(appId: string): Promise<Installation[]>;
32
+ getVersions(appId: string, environmentKey: string, firstN: number): Promise<AppEnvironment['versions']>;
33
+ }
34
+ export interface UpgradeAppInstallationsClient {
35
+ upgradeInstallation({ site, product, environmentKey, appId }: AppInstallSiteDetails): Promise<void>;
36
+ }
37
+ export declare class InstallationService {
38
+ private readonly getAppConfig;
39
+ private readonly listInstallationsClient;
40
+ private readonly upgradeAppInstallationsClient;
41
+ constructor(getAppConfig: AppConfigProvider, listInstallationsClient: ListAppInstallationsClient, upgradeAppInstallationsClient: UpgradeAppInstallationsClient);
42
+ private filterInstallations;
43
+ listAppInstallations(filter?: InstallationFilterOptions): Promise<AppInstallation>;
44
+ listNonTechnicalAppInstallations(filter?: InstallationFilterOptions): Promise<AppInstallation>;
45
+ hasOutdatedProductInstallation(environment: string): Promise<boolean>;
46
+ upgradeInstallation(site: URL, product: string, environmentKey: string, appId: string): Promise<boolean>;
47
+ private getPermissionsFromAppEnvironmentVersion;
48
+ getAppEnvironmentPermissions(appId: string, environmentKey: string): Promise<AppEnvironmentPermissions | undefined>;
49
+ }
50
+ export {};
51
+ //# sourceMappingURL=installation-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installation-service.d.ts","sourceRoot":"","sources":["../../src/service/installation-service.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,iBAAiB,EACjB,cAAc,EAQf,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAG1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE;QACP,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,YAAY,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,gCAAgC;IAC/C,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,yBAA0B,SAAQ,gCAAgC;IACjF,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,UAAU,yBAAyB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,0BAA0B;IACzC,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC1D,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;CACzG;AAED,MAAM,WAAW,6BAA6B;IAC5C,mBAAmB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrG;AAKD,qBAAa,mBAAmB;IAE5B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,uBAAuB;IACxC,OAAO,CAAC,QAAQ,CAAC,6BAA6B;gBAF7B,YAAY,EAAE,iBAAiB,EAC/B,uBAAuB,EAAE,0BAA0B,EACnD,6BAA6B,EAAE,6BAA6B;IAG/E,OAAO,CAAC,mBAAmB;IAiBd,oBAAoB,CAAC,MAAM,CAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,eAAe,CAAC;IAOlF,gCAAgC,CAAC,MAAM,CAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,eAAe,CAAC;IAU9F,8BAA8B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAOrE,mBAAmB,CAC9B,IAAI,EAAE,GAAG,EACT,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,OAAO,CAAC;IAkBnB,OAAO,CAAC,uCAAuC;IAgBlC,4BAA4B,CACvC,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,yBAAyB,GAAG,SAAS,CAAC;CA2BlD"}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InstallationService = void 0;
4
+ const cli_shared_1 = require("@forge/cli-shared");
5
+ const egress_1 = require("@forge/egress");
6
+ const lodash_1 = require("lodash");
7
+ const graphql_client_1 = require("../installations/graphql-client");
8
+ const IDENTITY_PRODUCT_NAME = 'identity';
9
+ const JIRA_SERVICE_DESK_PRODUCT_NAME = 'jira-servicedesk';
10
+ class InstallationService {
11
+ constructor(getAppConfig, listInstallationsClient, upgradeAppInstallationsClient) {
12
+ this.getAppConfig = getAppConfig;
13
+ this.listInstallationsClient = listInstallationsClient;
14
+ this.upgradeAppInstallationsClient = upgradeAppInstallationsClient;
15
+ }
16
+ filterInstallations(installations, { site: filterSite, product: filterProduct, environment: filterEnvironment }) {
17
+ const isDefaultEnvironment = (env) => env === (0, cli_shared_1.optionToEnvironment)(cli_shared_1.DEFAULT_ENVIRONMENT_OPTION);
18
+ return installations.filter(({ product, site, environmentKey }) => {
19
+ const matchProduct = !filterProduct || filterProduct === (0, cli_shared_1.capitalizeProduct)(product);
20
+ const matchSite = !filterSite || filterSite === site;
21
+ const matchEnvironment = filterEnvironment
22
+ ? isDefaultEnvironment(filterEnvironment) || filterEnvironment === (0, cli_shared_1.environmentToOption)(environmentKey)
23
+ : true;
24
+ return matchProduct && matchSite && matchEnvironment;
25
+ });
26
+ }
27
+ async listAppInstallations(filter) {
28
+ const { id: appId } = await this.getAppConfig();
29
+ const installations = await this.listInstallationsClient.listInstallations(appId);
30
+ return { installations: this.filterInstallations(installations, Object.assign({}, filter)) };
31
+ }
32
+ async listNonTechnicalAppInstallations(filter) {
33
+ const { installations } = await this.listAppInstallations(filter);
34
+ return {
35
+ installations: installations.filter(({ product }) => product !== IDENTITY_PRODUCT_NAME && product !== JIRA_SERVICE_DESK_PRODUCT_NAME)
36
+ };
37
+ }
38
+ async hasOutdatedProductInstallation(environment) {
39
+ const { installations } = await this.listNonTechnicalAppInstallations({
40
+ environment
41
+ });
42
+ return installations.some((installation) => !installation.version.isLatest);
43
+ }
44
+ async upgradeInstallation(site, product, environmentKey, appId) {
45
+ try {
46
+ await this.upgradeAppInstallationsClient.upgradeInstallation({
47
+ site,
48
+ product,
49
+ environmentKey,
50
+ appId
51
+ });
52
+ return false;
53
+ }
54
+ catch (e) {
55
+ if (e.code === graphql_client_1.ALREADY_UPGRADED_CODE) {
56
+ return true;
57
+ }
58
+ else {
59
+ throw e;
60
+ }
61
+ }
62
+ }
63
+ getPermissionsFromAppEnvironmentVersion(appEnvironmentVersion) {
64
+ const permissions = appEnvironmentVersion === null || appEnvironmentVersion === void 0 ? void 0 : appEnvironmentVersion.permissions[0];
65
+ if (!permissions) {
66
+ return { scopes: [], egressAddresses: [] };
67
+ }
68
+ const scopes = permissions.scopes.map((s) => s.key);
69
+ const egressAddresses = (permissions === null || permissions === void 0 ? void 0 : permissions.egress) ? (0, cli_shared_1.flatMap)(permissions.egress, ({ addresses }) => addresses !== null && addresses !== void 0 ? addresses : []) : [];
70
+ return { scopes, egressAddresses };
71
+ }
72
+ async getAppEnvironmentPermissions(appId, environmentKey) {
73
+ const versionDetails = await this.listInstallationsClient.getVersions(appId, environmentKey, 2);
74
+ const versions = versionDetails === null || versionDetails === void 0 ? void 0 : versionDetails.nodes;
75
+ if (!versions || versions.length === 0)
76
+ return;
77
+ const [{ scopes, egressAddresses }, oldVersion] = versions.map((appEnvironmentVersion) => this.getPermissionsFromAppEnvironmentVersion(appEnvironmentVersion));
78
+ const groupedEgressAddresses = (0, egress_1.sortAndGroupEgressPermissionsByDomain)(egressAddresses);
79
+ if (!oldVersion) {
80
+ return {
81
+ scopes,
82
+ egressAddresses: groupedEgressAddresses,
83
+ addedScopes: scopes
84
+ };
85
+ }
86
+ const { scopes: oldScopes } = oldVersion;
87
+ const addedScopes = (0, lodash_1.difference)(scopes, oldScopes);
88
+ return { scopes, egressAddresses: groupedEgressAddresses, addedScopes };
89
+ }
90
+ }
91
+ exports.InstallationService = InstallationService;
@@ -0,0 +1,23 @@
1
+ /// <reference types="node" />
2
+ import { ConfigFile, FileSystemReader } from '@forge/cli-shared';
3
+ import { LintFixState, LintResult, LintLogger, ProblemCount } from '@forge/lint';
4
+ interface LintOptions {
5
+ fix?: boolean;
6
+ }
7
+ interface RunResult {
8
+ lintResults: LintResult[];
9
+ fixResults?: LintFixState;
10
+ }
11
+ export declare const DEFAULT_DIRECTORY = "./src";
12
+ export declare class LintService {
13
+ private readonly configFile;
14
+ private readonly fileSystemReader;
15
+ constructor(configFile: ConfigFile, fileSystemReader: FileSystemReader);
16
+ run(environment: string, { fix }: LintOptions, logger: LintLogger, directory?: string, lintFunction?: (filesToLint: string[], manifest: import("@forge/manifest").ManifestSchema, environment: string, logger: LintLogger, parseFunction?: ((filepath: string, parser: (code: string, filepath: string, parseOptions?: Partial<import("@forge/lint").ParseOptions> | undefined) => Promise<import("@forge/lint").ASTParseResult>, readFilePromise?: typeof import("fs").readFile.__promisify__ | undefined) => Promise<import("@forge/lint").LintInput>) | undefined, linters?: import("@forge/lint").LinterInterface[] | undefined) => Promise<LintResult[]>): Promise<RunResult>;
17
+ private fix;
18
+ problemCount(lintResults: LintResult[]): ProblemCount;
19
+ private failedScopesFromLintResult;
20
+ failedScopes(lintResults: LintResult[]): string[];
21
+ }
22
+ export {};
23
+ //# sourceMappingURL=lint-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lint-service.d.ts","sourceRoot":"","sources":["../../src/service/lint-service.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAsB,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrF,OAAO,EAEL,YAAY,EACZ,UAAU,EAGV,UAAU,EACV,YAAY,EACb,MAAM,aAAa,CAAC;AAErB,UAAU,WAAW;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,UAAU,SAAS;IACjB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,YAAY,CAAC;CAC3B;AAED,eAAO,MAAM,iBAAiB,UAAU,CAAC;AAEzC,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,UAAU;IAAc,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAAzD,UAAU,EAAE,UAAU,EAAmB,gBAAgB,EAAE,gBAAgB;IAE3F,GAAG,CACd,WAAW,EAAE,MAAM,EACnB,EAAE,GAAG,EAAE,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,EAClB,SAAS,SAAoB,EAC7B,YAAY,0hBAAO,GAClB,OAAO,CAAC,SAAS,CAAC;YAYP,GAAG;IASV,YAAY,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,YAAY;IAI5D,OAAO,CAAC,0BAA0B;IAI3B,YAAY,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE;CAOzD"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LintService = exports.DEFAULT_DIRECTORY = void 0;
4
+ const cli_shared_1 = require("@forge/cli-shared");
5
+ const lint_1 = require("@forge/lint");
6
+ exports.DEFAULT_DIRECTORY = './src';
7
+ class LintService {
8
+ constructor(configFile, fileSystemReader) {
9
+ this.configFile = configFile;
10
+ this.fileSystemReader = fileSystemReader;
11
+ }
12
+ async run(environment, { fix }, logger, directory = exports.DEFAULT_DIRECTORY, lintFunction = lint_1.lint) {
13
+ const exclude = [...(await (0, cli_shared_1.listGitIgnoreFiles)(this.fileSystemReader)), '.git', 'node_modules'];
14
+ const filesToLint = await this.fileSystemReader.recursiveReadDir(directory, exclude);
15
+ const lintResults = await lintFunction(filesToLint, await this.configFile.readConfig(), environment, logger);
16
+ if (fix) {
17
+ return { lintResults, fixResults: await this.fix(lintResults) };
18
+ }
19
+ return { lintResults };
20
+ }
21
+ async fix(lintResults) {
22
+ const initialState = { errorsFixed: 0, warningsFixed: 0, configFile: this.configFile };
23
+ return lintResults.reduce((promiseChain, nextResult) => promiseChain.then((state) => nextResult.runFixer(state)), Promise.resolve(initialState));
24
+ }
25
+ problemCount(lintResults) {
26
+ return (0, lint_1.problemCount)(lintResults);
27
+ }
28
+ failedScopesFromLintResult({ errors, warnings }) {
29
+ return Array.from((0, lint_1.findMissingPermissions)(errors, warnings, 'missingPermission'));
30
+ }
31
+ failedScopes(lintResults) {
32
+ return lintResults.reduce((acc, lintResult) => {
33
+ const failedScopes = this.failedScopesFromLintResult(lintResult);
34
+ acc.push(...failedScopes);
35
+ return acc;
36
+ }, []);
37
+ }
38
+ }
39
+ exports.LintService = LintService;
@@ -0,0 +1,10 @@
1
+ import { LintLogger, LintResult } from '@forge/lint';
2
+ export declare class LiteLintService {
3
+ private readonly lintService;
4
+ private readonly problemCounter;
5
+ constructor(lintService?: (logger: LintLogger, linter?: import("@forge/lint").LinterInterface | undefined) => Promise<LintResult[]>, problemCounter?: (lintResults: LintResult[]) => import("@forge/lint").ProblemCount);
6
+ run(checkSchema: boolean, logger: LintLogger): Promise<LintResult[]>;
7
+ private filterResults;
8
+ hasErrors(report: LintResult[]): boolean;
9
+ }
10
+ //# sourceMappingURL=lite-lint-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lite-lint-service.d.ts","sourceRoot":"","sources":["../../src/service/lite-lint-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,UAAU,EAAgB,UAAU,EAAE,MAAM,aAAa,CAAC;AAG7E,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,WAAW;IAAa,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAAvD,WAAW,4GAAW,EAAmB,cAAc,oEAAe;IAEtF,GAAG,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAKjF,OAAO,CAAC,aAAa;IASd,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO;CAGhD"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LiteLintService = void 0;
4
+ const lint_1 = require("@forge/lint");
5
+ const manifest_1 = require("@forge/manifest");
6
+ class LiteLintService {
7
+ constructor(lintService = lint_1.litelint, problemCounter = lint_1.problemCount) {
8
+ this.lintService = lintService;
9
+ this.problemCounter = problemCounter;
10
+ }
11
+ async run(checkSchema, logger) {
12
+ const report = await this.lintService(logger);
13
+ return this.filterResults(report, checkSchema);
14
+ }
15
+ filterResults(report, checkSchema) {
16
+ return checkSchema
17
+ ? report
18
+ : report.map((r) => {
19
+ r.errors = r.errors.filter((e) => e.reference !== manifest_1.References.SchemaError);
20
+ return r;
21
+ });
22
+ }
23
+ hasErrors(report) {
24
+ return this.problemCounter(report).errors > 0;
25
+ }
26
+ }
27
+ exports.LiteLintService = LiteLintService;
@@ -0,0 +1,19 @@
1
+ import { AppConfigProvider } from '@forge/cli-shared';
2
+ export declare type MigrationKeys = {
3
+ jira?: string;
4
+ confluence?: string;
5
+ };
6
+ export interface AppEnvironmentMigrationKeys {
7
+ migrationKeys?: MigrationKeys | null;
8
+ mpacAppKey?: string | null;
9
+ }
10
+ export interface GetMigrationKeysClient {
11
+ getLatestMigrationKeys(appId: string, environmentKey: string): Promise<AppEnvironmentMigrationKeys>;
12
+ }
13
+ export declare class MigrationKeysService {
14
+ private readonly migrationKeysClient;
15
+ private readonly getAppConfig;
16
+ constructor(migrationKeysClient: GetMigrationKeysClient, getAppConfig: AppConfigProvider);
17
+ getMigrationKeysForAppEnvironment(environmentKey: string): Promise<AppEnvironmentMigrationKeys>;
18
+ }
19
+ //# sourceMappingURL=migration-keys-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-keys-service.d.ts","sourceRoot":"","sources":["../../src/service/migration-keys-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,oBAAY,aAAa,GAAG;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AACF,MAAM,WAAW,2BAA2B;IAC1C,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AACD,MAAM,WAAW,sBAAsB;IACrC,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;CACrG;AAED,qBAAa,oBAAoB;IAE7B,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,YAAY;gBADZ,mBAAmB,EAAE,sBAAsB,EAC3C,YAAY,EAAE,iBAAiB;IAGrC,iCAAiC,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,CAAC;CAI7G"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MigrationKeysService = void 0;
4
+ class MigrationKeysService {
5
+ constructor(migrationKeysClient, getAppConfig) {
6
+ this.migrationKeysClient = migrationKeysClient;
7
+ this.getAppConfig = getAppConfig;
8
+ }
9
+ async getMigrationKeysForAppEnvironment(environmentKey) {
10
+ const { id: appId } = await this.getAppConfig();
11
+ return await this.migrationKeysClient.getLatestMigrationKeys(appId, environmentKey);
12
+ }
13
+ }
14
+ exports.MigrationKeysService = MigrationKeysService;
@@ -0,0 +1,12 @@
1
+ import { ConfigFile } from '@forge/cli-shared';
2
+ export interface PortFindingService {
3
+ findPorts(minPort?: number): Promise<Record<string, number>>;
4
+ findPortAfter(portsTaken: number[]): Promise<number | undefined>;
5
+ }
6
+ export declare class ConfigFilePortFindingService implements PortFindingService {
7
+ private readonly configFile;
8
+ constructor(configFile: ConfigFile);
9
+ findPorts(minPort?: number): Promise<Record<string, number>>;
10
+ findPortAfter(portsTaken: number[]): Promise<number | undefined>;
11
+ }
12
+ //# sourceMappingURL=port-finding-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"port-finding-service.d.ts","sourceRoot":"","sources":["../../src/service/port-finding-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAM/C,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7D,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CAClE;AAED,qBAAa,4BAA6B,YAAW,kBAAkB;IACzD,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,UAAU;IAEtC,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAuB5D,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAM9E"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConfigFilePortFindingService = void 0;
4
+ const portfinder_1 = require("portfinder");
5
+ const util_1 = require("util");
6
+ const getPortsPromise = (0, util_1.promisify)(portfinder_1.getPorts);
7
+ class ConfigFilePortFindingService {
8
+ constructor(configFile) {
9
+ this.configFile = configFile;
10
+ }
11
+ async findPorts(minPort) {
12
+ const resources = await this.configFile.getResources();
13
+ const resourceKeys = resources.map((resource) => resource.key);
14
+ if (!resourceKeys.length)
15
+ return {};
16
+ const portOptions = {};
17
+ if (minPort) {
18
+ portOptions['port'] = minPort + 1;
19
+ }
20
+ const ports = await getPortsPromise(resourceKeys.length, portOptions);
21
+ const portMap = {};
22
+ resourceKeys.forEach((resourceKey, idx) => {
23
+ portMap[resourceKey] = ports[idx];
24
+ });
25
+ return portMap;
26
+ }
27
+ async findPortAfter(portsTaken) {
28
+ if (!portsTaken.length)
29
+ return undefined;
30
+ const max = Math.max(...portsTaken);
31
+ return (await getPortsPromise(1, { port: max + 1 }))[0];
32
+ }
33
+ }
34
+ exports.ConfigFilePortFindingService = ConfigFilePortFindingService;
@@ -0,0 +1,46 @@
1
+ import { Modules } from '@forge/manifest';
2
+ import { FileSystemReader, ResourceDetails, BridgeScriptService, IframeResizerScriptService, UserError } from '@forge/cli-shared';
3
+ import { Archiver } from '../deploy';
4
+ export declare class ResourceDirectoryMissingError extends UserError {
5
+ constructor(key: string, dir: string);
6
+ }
7
+ export declare class ResourceDirectoryEmptyError extends UserError {
8
+ constructor(key: string, dir: string);
9
+ }
10
+ export interface ResourceArchives {
11
+ [key: string]: {
12
+ zipPath: string;
13
+ extensions: string[];
14
+ rawSize: string;
15
+ zipSize: string;
16
+ fileCount: number;
17
+ };
18
+ }
19
+ export declare class MalformedHtmlEntrypointError extends UserError {
20
+ constructor();
21
+ }
22
+ export declare class MissingHtmlEntrypointError extends UserError {
23
+ constructor();
24
+ }
25
+ export declare class DetailedMissingHtmlEntrypointError extends UserError {
26
+ constructor(resourceKey: string, directory: string);
27
+ }
28
+ export declare class DetailedMalformedHtmlEntrypointError extends UserError {
29
+ constructor(resourceKey: string);
30
+ }
31
+ export declare class ResourcePackagingService {
32
+ private readonly archiverFactory;
33
+ private readonly fileSystemReader;
34
+ private readonly appDir;
35
+ private readonly bridgeScriptService;
36
+ private readonly iframeResizerScriptService;
37
+ constructor(archiverFactory: () => Archiver, fileSystemReader: FileSystemReader, appDir: string, bridgeScriptService: BridgeScriptService, iframeResizerScriptService: IframeResizerScriptService);
38
+ private getResourcesInformation;
39
+ private transformRelativeResourcePathsToAbsolute;
40
+ private processFile;
41
+ private validateResourceContents;
42
+ private assertDirectoryIncludesEntrypoint;
43
+ private createResourceArchive;
44
+ zipResources(resources: ResourceDetails[], modules?: Modules): Promise<ResourceArchives>;
45
+ }
46
+ //# sourceMappingURL=resource-packaging-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-packaging-service.d.ts","sourceRoot":"","sources":["../../src/service/resource-packaging-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EACL,gBAAgB,EAChB,eAAe,EAGf,mBAAmB,EACnB,0BAA0B,EAC1B,SAAS,EACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAKrC,qBAAa,6BAA8B,SAAQ,SAAS;gBAC9C,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;CAGrC;AAED,qBAAa,2BAA4B,SAAQ,SAAS;gBAC5C,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;CAGrC;AAeD,MAAM,WAAW,gBAAgB;IAC/B,CAAC,GAAG,EAAE,MAAM,GAAG;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,qBAAa,4BAA6B,SAAQ,SAAS;;CAI1D;AAED,qBAAa,0BAA2B,SAAQ,SAAS;;CAIxD;AAED,qBAAa,kCAAmC,SAAQ,SAAS;gBACnD,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAGnD;AAED,qBAAa,oCAAqC,SAAQ,SAAS;gBACrD,WAAW,EAAE,MAAM;CAGhC;AAED,qBAAa,wBAAwB;IAEjC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,0BAA0B;gBAJ1B,eAAe,EAAE,MAAM,QAAQ,EAC/B,gBAAgB,EAAE,gBAAgB,EAClC,MAAM,EAAE,MAAM,EACd,mBAAmB,EAAE,mBAAmB,EACxC,0BAA0B,EAAE,0BAA0B;YAG3D,uBAAuB;IAerC,OAAO,CAAC,wCAAwC;IAQhD,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,wBAAwB;IAMhC,OAAO,CAAC,iCAAiC;YAM3B,qBAAqB;IAatB,YAAY,CAAC,SAAS,EAAE,eAAe,EAAE,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAiCtG"}
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ResourcePackagingService = exports.DetailedMalformedHtmlEntrypointError = exports.DetailedMissingHtmlEntrypointError = exports.MissingHtmlEntrypointError = exports.MalformedHtmlEntrypointError = exports.ResourceDirectoryEmptyError = exports.ResourceDirectoryMissingError = void 0;
4
+ const cli_shared_1 = require("@forge/cli-shared");
5
+ const path_1 = require("path");
6
+ const hidefile_1 = require("hidefile");
7
+ const CUSTOM_UI_ENTRYPOINT = 'index.html';
8
+ class ResourceDirectoryMissingError extends cli_shared_1.UserError {
9
+ constructor(key, dir) {
10
+ super(cli_shared_1.Text.error.resourceDirectoryMissing(key, dir));
11
+ }
12
+ }
13
+ exports.ResourceDirectoryMissingError = ResourceDirectoryMissingError;
14
+ class ResourceDirectoryEmptyError extends cli_shared_1.UserError {
15
+ constructor(key, dir) {
16
+ super(cli_shared_1.Text.error.resourceDirectoryEmpty(key, dir));
17
+ }
18
+ }
19
+ exports.ResourceDirectoryEmptyError = ResourceDirectoryEmptyError;
20
+ class MalformedHtmlEntrypointError extends cli_shared_1.UserError {
21
+ constructor() {
22
+ super(cli_shared_1.Text.hostedResources.malformedEntrypoint);
23
+ }
24
+ }
25
+ exports.MalformedHtmlEntrypointError = MalformedHtmlEntrypointError;
26
+ class MissingHtmlEntrypointError extends cli_shared_1.UserError {
27
+ constructor() {
28
+ super(cli_shared_1.Text.hostedResources.missingEntrypoint);
29
+ }
30
+ }
31
+ exports.MissingHtmlEntrypointError = MissingHtmlEntrypointError;
32
+ class DetailedMissingHtmlEntrypointError extends cli_shared_1.UserError {
33
+ constructor(resourceKey, directory) {
34
+ super(cli_shared_1.Text.hostedResources.missingEntrypointWithResourceDetails(resourceKey, directory));
35
+ }
36
+ }
37
+ exports.DetailedMissingHtmlEntrypointError = DetailedMissingHtmlEntrypointError;
38
+ class DetailedMalformedHtmlEntrypointError extends cli_shared_1.UserError {
39
+ constructor(resourceKey) {
40
+ super(cli_shared_1.Text.hostedResources.malformedEntrypointWithKey(resourceKey));
41
+ }
42
+ }
43
+ exports.DetailedMalformedHtmlEntrypointError = DetailedMalformedHtmlEntrypointError;
44
+ class ResourcePackagingService {
45
+ constructor(archiverFactory, fileSystemReader, appDir, bridgeScriptService, iframeResizerScriptService) {
46
+ this.archiverFactory = archiverFactory;
47
+ this.fileSystemReader = fileSystemReader;
48
+ this.appDir = appDir;
49
+ this.bridgeScriptService = bridgeScriptService;
50
+ this.iframeResizerScriptService = iframeResizerScriptService;
51
+ }
52
+ async getResourcesInformation(resources) {
53
+ return await Promise.all(resources.map(async ({ key, directory, resourceType }) => {
54
+ if (!this.fileSystemReader.fileExists(directory)) {
55
+ throw new ResourceDirectoryMissingError(key, directory);
56
+ }
57
+ const filePaths = await this.fileSystemReader.recursiveReadDir(directory, [hidefile_1.isHiddenSync]);
58
+ if (filePaths.length === 0) {
59
+ throw new ResourceDirectoryEmptyError(key, directory);
60
+ }
61
+ return { key, filePaths, directory, resourceType };
62
+ }));
63
+ }
64
+ transformRelativeResourcePathsToAbsolute(appDir, resources) {
65
+ return resources.map(({ key, path, resourceType }) => ({
66
+ key,
67
+ directory: resourceType === 'nativeUI' ? path : (0, path_1.join)(appDir, path),
68
+ resourceType
69
+ }));
70
+ }
71
+ processFile(filePath, content) {
72
+ if (filePath === CUSTOM_UI_ENTRYPOINT) {
73
+ const contentWithIframeResizerScript = this.iframeResizerScriptService.injectIframeResizer(content, () => {
74
+ throw new MalformedHtmlEntrypointError();
75
+ });
76
+ return this.bridgeScriptService.injectBridgeCore(contentWithIframeResizerScript, () => {
77
+ throw new MalformedHtmlEntrypointError();
78
+ });
79
+ }
80
+ return content;
81
+ }
82
+ validateResourceContents({ directory, filePaths, resourceType }) {
83
+ if (resourceType === 'customUI' || resourceType === 'nativeUI') {
84
+ this.assertDirectoryIncludesEntrypoint(directory, filePaths);
85
+ }
86
+ }
87
+ assertDirectoryIncludesEntrypoint(directory, filePaths) {
88
+ if (!filePaths.map((path) => (0, path_1.relative)(directory, path)).includes(CUSTOM_UI_ENTRYPOINT)) {
89
+ throw new MissingHtmlEntrypointError();
90
+ }
91
+ }
92
+ async createResourceArchive(archiver, filePaths, directory) {
93
+ await Promise.all(filePaths.map(async (filePath) => {
94
+ const file = await this.fileSystemReader.readBinaryFileAsync(filePath);
95
+ if (file) {
96
+ const relativePathToArchiveRoot = (0, path_1.relative)(directory, filePath);
97
+ archiver.addFile(relativePathToArchiveRoot, this.processFile(relativePathToArchiveRoot, file));
98
+ }
99
+ }));
100
+ return archiver.finalise();
101
+ }
102
+ async zipResources(resources, modules) {
103
+ const transformedResources = this.transformRelativeResourcePathsToAbsolute(this.appDir, resources);
104
+ const resourcesInformation = await this.getResourcesInformation(transformedResources);
105
+ const archives = {};
106
+ await Promise.all(resourcesInformation.map(async ({ key, filePaths, directory, resourceType }) => {
107
+ try {
108
+ this.validateResourceContents({ key, directory, filePaths, resourceType });
109
+ const archiver = this.archiverFactory();
110
+ const archivePath = await this.createResourceArchive(archiver, filePaths, directory);
111
+ archives[key] = {
112
+ zipPath: archivePath,
113
+ rawSize: this.fileSystemReader.bytesToMb(await this.fileSystemReader.getFolderSizeAsync(directory)),
114
+ zipSize: this.fileSystemReader.bytesToMb(this.fileSystemReader.getSize(archivePath)),
115
+ extensions: [...new Set(filePaths.map((file) => (0, path_1.extname)(file)))],
116
+ fileCount: filePaths.length
117
+ };
118
+ }
119
+ catch (err) {
120
+ if (err instanceof MalformedHtmlEntrypointError) {
121
+ throw new DetailedMalformedHtmlEntrypointError(key);
122
+ }
123
+ if (err instanceof MissingHtmlEntrypointError) {
124
+ throw new DetailedMissingHtmlEntrypointError(key, directory);
125
+ }
126
+ throw err;
127
+ }
128
+ }));
129
+ return archives;
130
+ }
131
+ }
132
+ exports.ResourcePackagingService = ResourcePackagingService;
@@ -0,0 +1,16 @@
1
+ import { FileSystemReader, HostedResourcePreSignedUrl } from '@forge/cli-shared';
2
+ export interface UploaderService {
3
+ upload(details: {
4
+ archive: string;
5
+ preSignedUrl: HostedResourcePreSignedUrl;
6
+ }): Promise<void>;
7
+ }
8
+ export declare class ResourcesUploaderService implements UploaderService {
9
+ private readonly fileSystemReader;
10
+ constructor(fileSystemReader: FileSystemReader);
11
+ upload({ archive, preSignedUrl }: {
12
+ archive: string;
13
+ preSignedUrl: HostedResourcePreSignedUrl;
14
+ }): Promise<void>;
15
+ }
16
+ //# sourceMappingURL=resources-uploader-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources-uploader-service.d.ts","sourceRoot":"","sources":["../../src/service/resources-uploader-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAI5F,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,0BAA0B,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/F;AAWD,qBAAa,wBAAyB,YAAW,eAAe;IAClD,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAAhB,gBAAgB,EAAE,gBAAgB;IAClD,MAAM,CAAC,EAClB,OAAO,EACP,YAAY,EACb,EAAE;QACD,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,0BAA0B,CAAC;KAC1C,GAAG,OAAO,CAAC,IAAI,CAAC;CAsBlB"}