@forgecart/cli 1.0.0 → 1.0.1

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 (169) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +7 -7
  3. package/bin/forgecart.js +1 -1
  4. package/dist/package.json +49 -0
  5. package/dist/src/cli.d.ts.map +1 -0
  6. package/dist/{cli.js → src/cli.js} +8 -6
  7. package/dist/src/cli.js.map +1 -0
  8. package/dist/src/commands/delete.d.ts.map +1 -0
  9. package/dist/{commands → src/commands}/delete.js +6 -3
  10. package/dist/src/commands/delete.js.map +1 -0
  11. package/dist/src/commands/deploy.d.ts.map +1 -0
  12. package/dist/src/commands/deploy.js +235 -0
  13. package/dist/src/commands/deploy.js.map +1 -0
  14. package/dist/src/commands/env.d.ts.map +1 -0
  15. package/dist/{commands → src/commands}/env.js +60 -9
  16. package/dist/src/commands/env.js.map +1 -0
  17. package/dist/src/commands/init.d.ts.map +1 -0
  18. package/dist/{commands → src/commands}/init.js +51 -17
  19. package/dist/src/commands/init.js.map +1 -0
  20. package/dist/src/commands/list.d.ts.map +1 -0
  21. package/dist/{commands → src/commands}/list.js +4 -2
  22. package/dist/src/commands/list.js.map +1 -0
  23. package/dist/src/commands/login.d.ts +3 -0
  24. package/dist/src/commands/login.d.ts.map +1 -0
  25. package/dist/src/commands/login.js +120 -0
  26. package/dist/src/commands/login.js.map +1 -0
  27. package/dist/src/commands/logs.d.ts.map +1 -0
  28. package/dist/src/commands/logs.js +88 -0
  29. package/dist/src/commands/logs.js.map +1 -0
  30. package/dist/src/commands/scale.d.ts.map +1 -0
  31. package/dist/{commands → src/commands}/scale.js +6 -3
  32. package/dist/src/commands/scale.js.map +1 -0
  33. package/dist/src/commands/status.d.ts.map +1 -0
  34. package/dist/{commands → src/commands}/status.js +4 -2
  35. package/dist/src/commands/status.js.map +1 -0
  36. package/dist/src/commands/whoami.d.ts.map +1 -0
  37. package/dist/{commands → src/commands}/whoami.js +18 -7
  38. package/dist/src/commands/whoami.js.map +1 -0
  39. package/dist/{index.d.ts.map → src/index.d.ts.map} +1 -1
  40. package/dist/src/index.js.map +1 -0
  41. package/dist/{lib → src/lib}/api-client.d.ts +11 -4
  42. package/dist/src/lib/api-client.d.ts.map +1 -0
  43. package/dist/src/lib/api-client.js +137 -0
  44. package/dist/src/lib/api-client.js.map +1 -0
  45. package/dist/{lib → src/lib}/archive.d.ts +2 -1
  46. package/dist/src/lib/archive.d.ts.map +1 -0
  47. package/dist/{lib → src/lib}/archive.js +27 -5
  48. package/dist/src/lib/archive.js.map +1 -0
  49. package/dist/src/lib/config-updater.d.ts +10 -0
  50. package/dist/src/lib/config-updater.d.ts.map +1 -0
  51. package/dist/src/lib/config-updater.js +34 -0
  52. package/dist/src/lib/config-updater.js.map +1 -0
  53. package/dist/src/lib/config.d.ts +53 -0
  54. package/dist/src/lib/config.d.ts.map +1 -0
  55. package/dist/src/lib/config.js +162 -0
  56. package/dist/src/lib/config.js.map +1 -0
  57. package/dist/src/lib/env-sync.d.ts +36 -0
  58. package/dist/src/lib/env-sync.d.ts.map +1 -0
  59. package/dist/src/lib/env-sync.js +118 -0
  60. package/dist/src/lib/env-sync.js.map +1 -0
  61. package/dist/src/lib/logger.d.ts.map +1 -0
  62. package/dist/src/lib/logger.js.map +1 -0
  63. package/dist/src/lib/nx-generator.d.ts +20 -0
  64. package/dist/src/lib/nx-generator.d.ts.map +1 -0
  65. package/dist/src/lib/nx-generator.js +338 -0
  66. package/dist/src/lib/nx-generator.js.map +1 -0
  67. package/dist/src/lib/standalone.d.ts +28 -0
  68. package/dist/src/lib/standalone.d.ts.map +1 -0
  69. package/dist/src/lib/standalone.js +107 -0
  70. package/dist/src/lib/standalone.js.map +1 -0
  71. package/dist/{types → src/types}/index.d.ts +10 -0
  72. package/dist/src/types/index.d.ts.map +1 -0
  73. package/dist/src/types/index.js.map +1 -0
  74. package/dist/src/utils/spinner.d.ts.map +1 -0
  75. package/dist/src/utils/spinner.js.map +1 -0
  76. package/dist/src/utils/validation.d.ts.map +1 -0
  77. package/dist/{utils → src/utils}/validation.js +18 -2
  78. package/dist/src/utils/validation.js.map +1 -0
  79. package/dist/templates/application-additions/.forgecartignore +1 -1
  80. package/dist/templates/application-additions/Procfile +1 -1
  81. package/dist/templates/application-additions/env.example +7 -0
  82. package/dist/templates/application-additions/src/app/app.module.ts +16 -0
  83. package/dist/templates/application-additions/src/services/forgecart.service.ts +62 -0
  84. package/dist/templates/application-additions/src/services/index.ts +2 -0
  85. package/dist/templates/application-additions/src/services/price-fetcher.service.ts +22 -23
  86. package/dist/templates/storefront-additions/.forgecartignore +30 -6
  87. package/dist/templates/storefront-additions/Procfile +1 -1
  88. package/dist/templates/storefront-additions/env.example +3 -0
  89. package/dist/templates/storefront-additions/package.json +11 -0
  90. package/dist/templates/storefront-additions/src/app/products/page.tsx +16 -28
  91. package/dist/templates/storefront-additions/src/lib/forgecart.ts +19 -8
  92. package/dist/templates/workspace/.nxignore +2 -0
  93. package/package.json +6 -28
  94. package/templates/application-additions/.forgecartignore +1 -1
  95. package/templates/application-additions/Procfile +1 -1
  96. package/templates/application-additions/env.example +7 -0
  97. package/templates/application-additions/src/app/app.module.ts +16 -0
  98. package/templates/application-additions/src/services/forgecart.service.ts +62 -0
  99. package/templates/application-additions/src/services/index.ts +2 -0
  100. package/templates/application-additions/src/services/price-fetcher.service.ts +22 -23
  101. package/templates/storefront-additions/.forgecartignore +30 -6
  102. package/templates/storefront-additions/Procfile +1 -1
  103. package/templates/storefront-additions/env.example +3 -0
  104. package/templates/storefront-additions/package.json +11 -0
  105. package/templates/storefront-additions/src/app/products/page.tsx +16 -28
  106. package/templates/storefront-additions/src/lib/forgecart.ts +19 -8
  107. package/templates/workspace/.nxignore +2 -0
  108. package/dist/cli.d.ts.map +0 -1
  109. package/dist/cli.js.map +0 -1
  110. package/dist/commands/delete.d.ts.map +0 -1
  111. package/dist/commands/delete.js.map +0 -1
  112. package/dist/commands/deploy.d.ts.map +0 -1
  113. package/dist/commands/deploy.js +0 -128
  114. package/dist/commands/deploy.js.map +0 -1
  115. package/dist/commands/env.d.ts.map +0 -1
  116. package/dist/commands/env.js.map +0 -1
  117. package/dist/commands/init.d.ts.map +0 -1
  118. package/dist/commands/init.js.map +0 -1
  119. package/dist/commands/list.d.ts.map +0 -1
  120. package/dist/commands/list.js.map +0 -1
  121. package/dist/commands/logs.d.ts.map +0 -1
  122. package/dist/commands/logs.js +0 -105
  123. package/dist/commands/logs.js.map +0 -1
  124. package/dist/commands/scale.d.ts.map +0 -1
  125. package/dist/commands/scale.js.map +0 -1
  126. package/dist/commands/status.d.ts.map +0 -1
  127. package/dist/commands/status.js.map +0 -1
  128. package/dist/commands/whoami.d.ts.map +0 -1
  129. package/dist/commands/whoami.js.map +0 -1
  130. package/dist/index.js.map +0 -1
  131. package/dist/lib/api-client.d.ts.map +0 -1
  132. package/dist/lib/api-client.js +0 -220
  133. package/dist/lib/api-client.js.map +0 -1
  134. package/dist/lib/archive.d.ts.map +0 -1
  135. package/dist/lib/archive.js.map +0 -1
  136. package/dist/lib/config.d.ts +0 -12
  137. package/dist/lib/config.d.ts.map +0 -1
  138. package/dist/lib/config.js +0 -79
  139. package/dist/lib/config.js.map +0 -1
  140. package/dist/lib/logger.d.ts.map +0 -1
  141. package/dist/lib/logger.js.map +0 -1
  142. package/dist/lib/nx-generator.d.ts +0 -8
  143. package/dist/lib/nx-generator.d.ts.map +0 -1
  144. package/dist/lib/nx-generator.js +0 -146
  145. package/dist/lib/nx-generator.js.map +0 -1
  146. package/dist/types/index.d.ts.map +0 -1
  147. package/dist/types/index.js.map +0 -1
  148. package/dist/utils/spinner.d.ts.map +0 -1
  149. package/dist/utils/spinner.js.map +0 -1
  150. package/dist/utils/validation.d.ts.map +0 -1
  151. package/dist/utils/validation.js.map +0 -1
  152. /package/dist/{cli.d.ts → src/cli.d.ts} +0 -0
  153. /package/dist/{commands → src/commands}/delete.d.ts +0 -0
  154. /package/dist/{commands → src/commands}/deploy.d.ts +0 -0
  155. /package/dist/{commands → src/commands}/env.d.ts +0 -0
  156. /package/dist/{commands → src/commands}/init.d.ts +0 -0
  157. /package/dist/{commands → src/commands}/list.d.ts +0 -0
  158. /package/dist/{commands → src/commands}/logs.d.ts +0 -0
  159. /package/dist/{commands → src/commands}/scale.d.ts +0 -0
  160. /package/dist/{commands → src/commands}/status.d.ts +0 -0
  161. /package/dist/{commands → src/commands}/whoami.d.ts +0 -0
  162. /package/dist/{index.d.ts → src/index.d.ts} +0 -0
  163. /package/dist/{index.js → src/index.js} +0 -0
  164. /package/dist/{lib → src/lib}/logger.d.ts +0 -0
  165. /package/dist/{lib → src/lib}/logger.js +0 -0
  166. /package/dist/{types → src/types}/index.js +0 -0
  167. /package/dist/{utils → src/utils}/spinner.d.ts +0 -0
  168. /package/dist/{utils → src/utils}/spinner.js +0 -0
  169. /package/dist/{utils → src/utils}/validation.d.ts +0 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2022 Vendure
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @forgecart/cli
2
2
 
3
- CLI tool for deploying applications to ForgéCart's PaaS platform.
3
+ CLI tool for deploying applications to ForgeCart's PaaS platform.
4
4
 
5
5
  ## Installation
6
6
 
@@ -25,12 +25,12 @@ npm install -g @forgecart/cli
25
25
 
26
26
  ### `forgecart init [name]`
27
27
 
28
- Create a new ForgéCart project.
28
+ Create a new ForgeCart project.
29
29
 
30
30
  Options:
31
- - `-t, --token <token>` - ForgéCart channel token
31
+ - `-t, --token <token>` - ForgeCart channel token
32
32
  - `-a, --application` - Include NestJS backend application
33
- - `--api-url <url>` - ForgéCart API URL (default: https://api.forgecart.com)
33
+ - `--api-url <url>` - ForgeCart API URL (default: https://api.forgecart.com)
34
34
 
35
35
  ### `forgecart init:application`
36
36
 
@@ -103,7 +103,7 @@ After running `forgecart init`, your project will have the following structure:
103
103
  ```
104
104
  my-store/
105
105
  ├── .forgecart/
106
- │ └── config.json # ForgéCart configuration
106
+ │ └── config.json # ForgeCart configuration
107
107
  ├── nx.json # NX workspace configuration
108
108
  ├── package.json # Root package.json
109
109
  ├── tsconfig.base.json # TypeScript configuration
@@ -164,7 +164,7 @@ forgecart env unset storefront MY_VAR
164
164
  3. The CLI will:
165
165
  - Build your application using NX
166
166
  - Create a deployment archive
167
- - Upload and deploy to ForgéCart
167
+ - Upload and deploy to ForgeCart
168
168
  - Wait for the deployment to be ready
169
169
  4. View your live application at the provided URL
170
170
 
@@ -172,7 +172,7 @@ forgecart env unset storefront MY_VAR
172
172
 
173
173
  - Node.js >= 18.0.0
174
174
  - npm or yarn
175
- - A ForgéCart account with a valid channel token
175
+ - A ForgeCart account with a valid channel token
176
176
 
177
177
  ## License
178
178
 
package/bin/forgecart.js CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import('../dist/index.js');
3
+ import('../dist/src/index.js')
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "@forgecart/cli",
3
+ "version": "1.0.1",
4
+ "type": "module",
5
+ "description": "CLI tool for deploying applications to ForgeCart",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "forgecart": "./bin/forgecart.js"
9
+ },
10
+ "dependencies": {
11
+ "@forgecart/sdk": "workspace:*",
12
+ "@nestjs/common": "11.1.6",
13
+ "archiver": "7.0.1",
14
+ "chalk": "5.6.2",
15
+ "change-case-all": "2.1.0",
16
+ "cli-table3": "0.6.5",
17
+ "commander": "12.1.0",
18
+ "form-data": "4.0.4",
19
+ "graphql": "16.11.0",
20
+ "graphql-request": "6.1.0",
21
+ "inquirer": "9.3.8",
22
+ "open": "10.2.0",
23
+ "ora": "8.2.0",
24
+ "rxjs": "7.8.2",
25
+ "shiki": "3.20.0",
26
+ "ws": "8.18.3",
27
+ "@jest/globals": "30.1.2",
28
+ "tslib": "2.4.1"
29
+ },
30
+ "files": [
31
+ "dist",
32
+ "bin",
33
+ "templates"
34
+ ],
35
+ "engines": {
36
+ "node": ">=18.0.0"
37
+ },
38
+ "keywords": [
39
+ "forgecart",
40
+ "cli",
41
+ "deploy",
42
+ "paas",
43
+ "nodejs"
44
+ ],
45
+ "author": "ForgeCart",
46
+ "license": "MIT",
47
+ "types": "./src/index.d.ts",
48
+ "module": "./src/index.js"
49
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAgBnC,wBAAgB,aAAa,IAAI,OAAO,CAsBvC"}
@@ -1,20 +1,22 @@
1
1
  import { Command } from 'commander';
2
- import { createInitCommand, createInitApplicationCommand } from './commands/init.js';
3
- import { createDeployCommand } from './commands/deploy.js';
4
- import { createListCommand } from './commands/list.js';
5
- import { createStatusCommand } from './commands/status.js';
6
2
  import { createDeleteCommand } from './commands/delete.js';
7
- import { createScaleCommand } from './commands/scale.js';
3
+ import { createDeployCommand } from './commands/deploy.js';
8
4
  import { createEnvCommand } from './commands/env.js';
5
+ import { createInitApplicationCommand, createInitCommand, } from './commands/init.js';
6
+ import { createListCommand } from './commands/list.js';
7
+ import { createLoginCommand } from './commands/login.js';
9
8
  import { createLogsCommand } from './commands/logs.js';
9
+ import { createScaleCommand } from './commands/scale.js';
10
+ import { createStatusCommand } from './commands/status.js';
10
11
  import { createWhoamiCommand } from './commands/whoami.js';
11
12
  export function createProgram() {
12
13
  const program = new Command();
13
14
  program
14
15
  .name('forgecart')
15
- .description('CLI tool for deploying applications to ForgéCart')
16
+ .description('CLI tool for deploying applications to ForgeCart')
16
17
  .version('1.0.0');
17
18
  // Add commands
19
+ program.addCommand(createLoginCommand());
18
20
  program.addCommand(createInitCommand());
19
21
  program.addCommand(createInitApplicationCommand());
20
22
  program.addCommand(createDeployCommand());
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EACL,4BAA4B,EAC5B,iBAAiB,GAClB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAE1D,MAAM,UAAU,aAAa;IAC3B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;IAE7B,OAAO;SACJ,IAAI,CAAC,WAAW,CAAC;SACjB,WAAW,CAAC,kDAAkD,CAAC;SAC/D,OAAO,CAAC,OAAO,CAAC,CAAA;IAEnB,eAAe;IACf,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAA;IACxC,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAA;IACvC,OAAO,CAAC,UAAU,CAAC,4BAA4B,EAAE,CAAC,CAAA;IAClD,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAA;IACzC,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAA;IACvC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAA;IACzC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAA;IACzC,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAA;IACxC,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAA;IACtC,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAA;IACvC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAA;IAEzC,OAAO,OAAO,CAAA;AAChB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/delete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAQnC,wBAAgB,mBAAmB,IAAI,OAAO,CAU7C"}
@@ -1,7 +1,7 @@
1
1
  import { Command } from 'commander';
2
2
  import inquirer from 'inquirer';
3
3
  import logger from '../lib/logger.js';
4
- import { requireConfig } from '../lib/config.js';
4
+ import { requireConfig, requireAuth } from '../lib/config.js';
5
5
  import { ForgecartApiClient } from '../lib/api-client.js';
6
6
  import { DeploymentType } from '../types/index.js';
7
7
  import { withSpinner } from '../utils/spinner.js';
@@ -17,12 +17,15 @@ export function createDeleteCommand() {
17
17
  }
18
18
  async function deleteDeployment(type, options) {
19
19
  // Validate type
20
- if (type !== DeploymentType.STOREFRONT && type !== DeploymentType.APPLICATION) {
20
+ if (type !== DeploymentType.STOREFRONT &&
21
+ type !== DeploymentType.APPLICATION) {
21
22
  logger.error('Invalid deployment type. Use "storefront" or "application".');
22
23
  process.exit(1);
23
24
  }
25
+ // Check authentication first
26
+ const authToken = requireAuth();
24
27
  const config = requireConfig();
25
- const apiClient = new ForgecartApiClient(config.apiUrl, config.channelToken);
28
+ const apiClient = new ForgecartApiClient(config.apiUrl, config.channelToken, authToken);
26
29
  // Check if deployment exists
27
30
  const deployment = await apiClient.getDeployment(type);
28
31
  if (!deployment) {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/delete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,QAAQ,MAAM,UAAU,CAAA;AAC/B,OAAO,MAAM,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEjD,MAAM,UAAU,mBAAmB;IACjC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;SAC9B,WAAW,CAAC,qBAAqB,CAAC;SAClC,QAAQ,CAAC,QAAQ,EAAE,6CAA6C,CAAC;SACjE,MAAM,CAAC,aAAa,EAAE,0BAA0B,CAAC;SACjD,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAA4B,EAAE,EAAE;QAC3D,MAAM,gBAAgB,CAAC,IAAsB,EAAE,OAAO,CAAC,CAAA;IACzD,CAAC,CAAC,CAAA;IAEJ,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,IAAoB,EACpB,OAA4B;IAE5B,gBAAgB;IAChB,IACE,IAAI,KAAK,cAAc,CAAC,UAAU;QAClC,IAAI,KAAK,cAAc,CAAC,WAAW,EACnC,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAA;QAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,6BAA6B;IAC7B,MAAM,SAAS,GAAG,WAAW,EAAE,CAAA;IAE/B,MAAM,MAAM,GAAG,aAAa,EAAE,CAAA;IAC9B,MAAM,SAAS,GAAG,IAAI,kBAAkB,CACtC,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,YAAY,EACnB,SAAS,CACV,CAAA;IAED,6BAA6B;IAC7B,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;IACtD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,mBAAmB,CAAC,CAAA;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,mBAAmB;IACnB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YACxC;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,uCAAuC,IAAI,4CAA4C;gBAChG,OAAO,EAAE,KAAK;aACf;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;YACjC,OAAM;QACR,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,MAAM,WAAW,CACf,YAAY,IAAI,gBAAgB,EAChC,GAAG,IAAI,qBAAqB,EAC5B,oBAAoB,IAAI,aAAa,EACrC,KAAK,IAAI,EAAE;QACT,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;QACtD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAA;QACpC,CAAC;IACH,CAAC,CACF,CAAA;AACH,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../src/commands/deploy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAoBnC,wBAAgB,mBAAmB,IAAI,OAAO,CAU7C"}
@@ -0,0 +1,235 @@
1
+ import * as path from 'path';
2
+ import * as fs from 'fs';
3
+ import { Command } from 'commander';
4
+ import logger from '../lib/logger.js';
5
+ import { requireConfig, getProjectRoot, requireAuth } from '../lib/config.js';
6
+ import { ForgecartApiClient } from '../lib/api-client.js';
7
+ import { createArchive, getIgnoreFileForType } from '../lib/archive.js';
8
+ import { runNxBuild, runNxBuildMany } from '../lib/nx-generator.js';
9
+ import { prepareStandaloneDeployment, prepareApplicationDeployment, } from '../lib/standalone.js';
10
+ import { getCurrentAppDir } from '../utils/validation.js';
11
+ import { withSpinner } from '../utils/spinner.js';
12
+ import { DeploymentType } from '../types/index.js';
13
+ import { syncAllEnvToDeployments } from '../lib/env-sync.js';
14
+ export function createDeployCommand() {
15
+ const cmd = new Command('deploy')
16
+ .description('Deploy the current application')
17
+ .option('--skip-build', 'Skip the build step')
18
+ .option('--skip-env-sync', 'Skip syncing environment variables from .env files')
19
+ .action(async (options) => {
20
+ await deploy(options);
21
+ });
22
+ return cmd;
23
+ }
24
+ /**
25
+ * Gets all deployable applications based on config.
26
+ */
27
+ function getDeployableApps(projectRoot, config) {
28
+ const apps = [];
29
+ // Storefront is always deployable if path is configured
30
+ const storefrontPath = path.join(projectRoot, config.storefrontPath || 'apps/storefront');
31
+ apps.push({ type: DeploymentType.STOREFRONT, appDir: storefrontPath });
32
+ // Application is deployable if hasApplication is true in config
33
+ if (config.hasApplication) {
34
+ const applicationPath = path.join(projectRoot, config.applicationPath || 'apps/application');
35
+ apps.push({ type: DeploymentType.APPLICATION, appDir: applicationPath });
36
+ }
37
+ return apps;
38
+ }
39
+ /**
40
+ * Deploys a single application.
41
+ */
42
+ async function deploySingleApp(apiClient, deployType, appDir, projectRoot, skipBuild) {
43
+ const prefix = `[${deployType}]`;
44
+ // Check/create deployment
45
+ let deployment = await withSpinner(`${prefix} Checking deployment status...`, `${prefix} Deployment ready`, `${prefix} Failed to check deployment`, async () => {
46
+ let dep = await apiClient.getDeployment(deployType);
47
+ if (!dep) {
48
+ logger.info(`${prefix} Creating new deployment...`);
49
+ dep = await apiClient.createDeployment(deployType);
50
+ }
51
+ return dep;
52
+ });
53
+ // Clean up old .deploy directory if exists (legacy cleanup)
54
+ const oldDeployDir = path.join(appDir, '.deploy');
55
+ if (fs.existsSync(oldDeployDir)) {
56
+ fs.rmSync(oldDeployDir, { recursive: true });
57
+ }
58
+ // Build the app
59
+ if (!skipBuild) {
60
+ await withSpinner(`${prefix} Building...`, `${prefix} Build completed`, `${prefix} Build failed`, async () => {
61
+ const success = await runNxBuild(deployType, projectRoot);
62
+ if (!success) {
63
+ throw new Error('Build failed');
64
+ }
65
+ });
66
+ }
67
+ else {
68
+ logger.info(`${prefix} Skipping build step`);
69
+ }
70
+ // Prepare deployment based on type
71
+ let archiveSourceDir = appDir;
72
+ let includeEnvFile = false;
73
+ if (deployType === DeploymentType.STOREFRONT) {
74
+ await withSpinner(`${prefix} Preparing standalone deployment...`, `${prefix} Standalone prepared`, `${prefix} Failed to prepare standalone`, async () => {
75
+ await prepareStandaloneDeployment(appDir);
76
+ });
77
+ }
78
+ else if (deployType === DeploymentType.APPLICATION) {
79
+ archiveSourceDir = await withSpinner(`${prefix} Preparing application deployment...`, `${prefix} Application prepared`, `${prefix} Failed to prepare application`, async () => {
80
+ return prepareApplicationDeployment(appDir, projectRoot);
81
+ });
82
+ // Do not include .env file in archive - use CLI env sync instead
83
+ includeEnvFile = false;
84
+ }
85
+ // Create archive
86
+ const zipBuffer = await withSpinner(`${prefix} Creating deployment archive...`, `${prefix} Archive created`, `${prefix} Failed to create archive`, async () => {
87
+ const ignoreFile = getIgnoreFileForType();
88
+ return createArchive({
89
+ sourceDir: archiveSourceDir,
90
+ ignoreFile,
91
+ includeEnvFile,
92
+ });
93
+ });
94
+ logger.info(`${prefix} Archive size: ${(zipBuffer.length / 1024 / 1024).toFixed(2)} MB`);
95
+ // Upload and deploy
96
+ deployment = await withSpinner(`${prefix} Uploading and deploying...`, `${prefix} Deployment successful`, `${prefix} Deployment failed`, async () => {
97
+ return apiClient.uploadAndDeploy(deployType, zipBuffer);
98
+ });
99
+ // Wait for deployment to be ready
100
+ await withSpinner(`${prefix} Waiting for deployment to be ready...`, `${prefix} Deployment is live`, `${prefix} Deployment check failed`, async () => {
101
+ let attempts = 0;
102
+ const maxAttempts = 60; // 5 minutes max
103
+ while (attempts < maxAttempts) {
104
+ const status = await apiClient.refreshDeploymentStatus(deployType);
105
+ if (status?.status === 'RUNNING') {
106
+ deployment = status;
107
+ return;
108
+ }
109
+ if (status?.status === 'ERROR') {
110
+ throw new Error(status.errorMessage || 'Deployment failed');
111
+ }
112
+ await new Promise((resolve) => setTimeout(resolve, 5000));
113
+ attempts++;
114
+ }
115
+ throw new Error('Deployment timed out');
116
+ });
117
+ return deployment;
118
+ }
119
+ async function deploy(options) {
120
+ logger.title('ForgeCart Deployment');
121
+ // Check authentication first
122
+ const authToken = requireAuth();
123
+ // Get config and validate
124
+ const config = requireConfig();
125
+ const projectRoot = getProjectRoot();
126
+ // Initialize API client
127
+ const apiClient = new ForgecartApiClient(config.apiUrl, config.channelToken, authToken);
128
+ // Validate token
129
+ await withSpinner('Validating channel token...', 'Channel token validated', 'Invalid channel token', async () => {
130
+ const isValid = await apiClient.validateChannelToken();
131
+ if (!isValid) {
132
+ throw new Error('Invalid channel token');
133
+ }
134
+ });
135
+ // Sync environment variables from .env files (unless skipped)
136
+ if (!options.skipEnvSync) {
137
+ logger.info('Syncing environment variables from .env files...');
138
+ const results = await syncAllEnvToDeployments(apiClient);
139
+ const totalSynced = results.storefront.synced + results.application.synced;
140
+ if (totalSynced > 0) {
141
+ logger.success(`Synced ${totalSynced} environment variable(s)`);
142
+ }
143
+ else {
144
+ logger.info('No .env files found or no variables to sync');
145
+ }
146
+ }
147
+ else {
148
+ logger.info('Skipping environment variable sync');
149
+ }
150
+ // Check if we're in a specific app directory
151
+ const currentApp = getCurrentAppDir(projectRoot);
152
+ if (currentApp) {
153
+ // Deploy single app from its directory
154
+ const appDir = path.join(projectRoot, `apps/${currentApp.type}`);
155
+ logger.info(`Detected ${currentApp.type} application`);
156
+ const deployment = await deploySingleApp(apiClient, currentApp.type, appDir, projectRoot, options.skipBuild ?? false);
157
+ // Success message
158
+ logger.newline();
159
+ logger.box(`Deployment successful!
160
+
161
+ Type: ${deployment.type}
162
+ Status: ${deployment.status}
163
+ URL: ${deployment.url}
164
+
165
+ View logs with:
166
+ forgecart logs ${deployment.type}`);
167
+ return;
168
+ }
169
+ // In project root - find all deployable apps
170
+ const apps = getDeployableApps(projectRoot, config);
171
+ if (apps.length === 0) {
172
+ logger.error('No deployable applications found. Please run from apps/storefront or apps/application directory.');
173
+ process.exit(1);
174
+ }
175
+ if (apps.length === 1) {
176
+ // Single app found - deploy it
177
+ const app = apps[0];
178
+ logger.info(`Deploying ${app.type}`);
179
+ const deployment = await deploySingleApp(apiClient, app.type, app.appDir, projectRoot, options.skipBuild ?? false);
180
+ // Success message
181
+ logger.newline();
182
+ logger.box(`Deployment successful!
183
+
184
+ Type: ${deployment.type}
185
+ Status: ${deployment.status}
186
+ URL: ${deployment.url}
187
+
188
+ View logs with:
189
+ forgecart logs ${deployment.type}`);
190
+ }
191
+ else {
192
+ // Multiple apps found
193
+ logger.info(`Found ${apps.length} applications to deploy: ${apps.map((a) => a.type).join(', ')}`);
194
+ logger.newline();
195
+ // Clean up ALL staging directories before any builds start
196
+ for (const app of apps) {
197
+ const oldDeployDir = path.join(app.appDir, '.deploy');
198
+ if (fs.existsSync(oldDeployDir)) {
199
+ fs.rmSync(oldDeployDir, { recursive: true });
200
+ }
201
+ }
202
+ // Only delete the staging subdirectory, not the entire .forgecart (which contains config.json)
203
+ const stagingDir = path.join(projectRoot, '.forgecart', 'application-deploy');
204
+ if (fs.existsSync(stagingDir)) {
205
+ fs.rmSync(stagingDir, { recursive: true });
206
+ }
207
+ // Build all apps at once using nx run-many
208
+ if (!options.skipBuild) {
209
+ await withSpinner('Building all applications...', 'All builds completed', 'Build failed', async () => {
210
+ const success = await runNxBuildMany(apps.map((a) => a.type), projectRoot);
211
+ if (!success) {
212
+ throw new Error('Build failed');
213
+ }
214
+ });
215
+ }
216
+ // Deploy apps in PARALLEL (prepare, archive, upload)
217
+ const results = await Promise.all(apps.map((app) => deploySingleApp(apiClient, app.type, app.appDir, projectRoot, true // skipBuild - already built above
218
+ )));
219
+ // Success message for all deployments
220
+ logger.newline();
221
+ const summaryLines = results
222
+ .map((dep) => `${dep.type}:
223
+ Status: ${dep.status}
224
+ URL: ${dep.url}`)
225
+ .join('\n\n');
226
+ logger.box(`All deployments successful!
227
+
228
+ ${summaryLines}
229
+
230
+ View logs with:
231
+ forgecart logs storefront
232
+ forgecart logs application`);
233
+ }
234
+ }
235
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../../src/commands/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,MAAM,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AACvE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACnE,OAAO,EACL,2BAA2B,EAC3B,4BAA4B,GAC7B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,cAAc,EAA+B,MAAM,mBAAmB,CAAA;AAC/E,OAAO,EAAuB,uBAAuB,EAAE,MAAM,oBAAoB,CAAA;AAOjF,MAAM,UAAU,mBAAmB;IACjC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;SAC9B,WAAW,CAAC,gCAAgC,CAAC;SAC7C,MAAM,CAAC,cAAc,EAAE,qBAAqB,CAAC;SAC7C,MAAM,CAAC,iBAAiB,EAAE,oDAAoD,CAAC;SAC/E,MAAM,CAAC,KAAK,EAAE,OAAuD,EAAE,EAAE;QACxE,MAAM,MAAM,CAAC,OAAO,CAAC,CAAA;IACvB,CAAC,CAAC,CAAA;IAEJ,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CACxB,WAAmB,EACnB,MAAuB;IAEvB,MAAM,IAAI,GAAoB,EAAE,CAAA;IAEhC,wDAAwD;IACxD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAC9B,WAAW,EACX,MAAM,CAAC,cAAc,IAAI,iBAAiB,CAC3C,CAAA;IACD,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAA;IAEtE,gEAAgE;IAChE,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QAC1B,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAC/B,WAAW,EACX,MAAM,CAAC,eAAe,IAAI,kBAAkB,CAC7C,CAAA;QACD,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAA;IAC1E,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,eAAe,CAC5B,SAA6B,EAC7B,UAA0B,EAC1B,MAAc,EACd,WAAmB,EACnB,SAAkB;IAElB,MAAM,MAAM,GAAG,IAAI,UAAU,GAAG,CAAA;IAEhC,0BAA0B;IAC1B,IAAI,UAAU,GAAG,MAAM,WAAW,CAChC,GAAG,MAAM,gCAAgC,EACzC,GAAG,MAAM,mBAAmB,EAC5B,GAAG,MAAM,6BAA6B,EACtC,KAAK,IAAI,EAAE;QACT,IAAI,GAAG,GAAG,MAAM,SAAS,CAAC,aAAa,CAAC,UAAU,CAAC,CAAA;QAEnD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,6BAA6B,CAAC,CAAA;YACnD,GAAG,GAAG,MAAM,SAAS,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAA;QACpD,CAAC;QAED,OAAO,GAAG,CAAA;IACZ,CAAC,CACF,CAAA;IAED,4DAA4D;IAC5D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IACjD,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,EAAE,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC9C,CAAC;IAED,gBAAgB;IAChB,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,WAAW,CACf,GAAG,MAAM,cAAc,EACvB,GAAG,MAAM,kBAAkB,EAC3B,GAAG,MAAM,eAAe,EACxB,KAAK,IAAI,EAAE;YACT,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA;YACzD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;YACjC,CAAC;QACH,CAAC,CACF,CAAA;IACH,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,sBAAsB,CAAC,CAAA;IAC9C,CAAC;IAED,mCAAmC;IACnC,IAAI,gBAAgB,GAAG,MAAM,CAAA;IAC7B,IAAI,cAAc,GAAG,KAAK,CAAA;IAE1B,IAAI,UAAU,KAAK,cAAc,CAAC,UAAU,EAAE,CAAC;QAC7C,MAAM,WAAW,CACf,GAAG,MAAM,qCAAqC,EAC9C,GAAG,MAAM,sBAAsB,EAC/B,GAAG,MAAM,+BAA+B,EACxC,KAAK,IAAI,EAAE;YACT,MAAM,2BAA2B,CAAC,MAAM,CAAC,CAAA;QAC3C,CAAC,CACF,CAAA;IACH,CAAC;SAAM,IAAI,UAAU,KAAK,cAAc,CAAC,WAAW,EAAE,CAAC;QACrD,gBAAgB,GAAG,MAAM,WAAW,CAClC,GAAG,MAAM,sCAAsC,EAC/C,GAAG,MAAM,uBAAuB,EAChC,GAAG,MAAM,gCAAgC,EACzC,KAAK,IAAI,EAAE;YACT,OAAO,4BAA4B,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;QAC1D,CAAC,CACF,CAAA;QACD,iEAAiE;QACjE,cAAc,GAAG,KAAK,CAAA;IACxB,CAAC;IAED,iBAAiB;IACjB,MAAM,SAAS,GAAG,MAAM,WAAW,CACjC,GAAG,MAAM,iCAAiC,EAC1C,GAAG,MAAM,kBAAkB,EAC3B,GAAG,MAAM,2BAA2B,EACpC,KAAK,IAAI,EAAE;QACT,MAAM,UAAU,GAAG,oBAAoB,EAAE,CAAA;QACzC,OAAO,aAAa,CAAC;YACnB,SAAS,EAAE,gBAAgB;YAC3B,UAAU;YACV,cAAc;SACf,CAAC,CAAA;IACJ,CAAC,CACF,CAAA;IAED,MAAM,CAAC,IAAI,CACT,GAAG,MAAM,kBAAkB,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAC5E,CAAA;IAED,oBAAoB;IACpB,UAAU,GAAG,MAAM,WAAW,CAC5B,GAAG,MAAM,6BAA6B,EACtC,GAAG,MAAM,wBAAwB,EACjC,GAAG,MAAM,oBAAoB,EAC7B,KAAK,IAAI,EAAE;QACT,OAAO,SAAS,CAAC,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;IACzD,CAAC,CACF,CAAA;IAED,kCAAkC;IAClC,MAAM,WAAW,CACf,GAAG,MAAM,wCAAwC,EACjD,GAAG,MAAM,qBAAqB,EAC9B,GAAG,MAAM,0BAA0B,EACnC,KAAK,IAAI,EAAE;QACT,IAAI,QAAQ,GAAG,CAAC,CAAA;QAChB,MAAM,WAAW,GAAG,EAAE,CAAA,CAAC,gBAAgB;QAEvC,OAAO,QAAQ,GAAG,WAAW,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAA;YAElE,IAAI,MAAM,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;gBACjC,UAAU,GAAG,MAAM,CAAA;gBACnB,OAAM;YACR,CAAC;YAED,IAAI,MAAM,EAAE,MAAM,KAAK,OAAO,EAAE,CAAC;gBAC/B,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,YAAY,IAAI,mBAAmB,CAAC,CAAA;YAC7D,CAAC;YAED,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAA;YACzD,QAAQ,EAAE,CAAA;QACZ,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACzC,CAAC,CACF,CAAA;IAED,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,OAAuD;IAC3E,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAA;IAEpC,6BAA6B;IAC7B,MAAM,SAAS,GAAG,WAAW,EAAE,CAAA;IAE/B,0BAA0B;IAC1B,MAAM,MAAM,GAAG,aAAa,EAAE,CAAA;IAC9B,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IAEpC,wBAAwB;IACxB,MAAM,SAAS,GAAG,IAAI,kBAAkB,CACtC,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,YAAY,EACnB,SAAS,CACV,CAAA;IAED,iBAAiB;IACjB,MAAM,WAAW,CACf,6BAA6B,EAC7B,yBAAyB,EACzB,uBAAuB,EACvB,KAAK,IAAI,EAAE;QACT,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,oBAAoB,EAAE,CAAA;QACtD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;QAC1C,CAAC;IACH,CAAC,CACF,CAAA;IAED,8DAA8D;IAC9D,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAA;QAC/D,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC,SAAS,CAAC,CAAA;QACxD,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAA;QAC1E,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,CAAC,OAAO,CAAC,UAAU,WAAW,0BAA0B,CAAC,CAAA;QACjE,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAA;QAC5D,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAA;IACnD,CAAC;IAED,6CAA6C;IAC7C,MAAM,UAAU,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAA;IAEhD,IAAI,UAAU,EAAE,CAAC;QACf,uCAAuC;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC,CAAA;QAChE,MAAM,CAAC,IAAI,CAAC,YAAY,UAAU,CAAC,IAAI,cAAc,CAAC,CAAA;QAEtD,MAAM,UAAU,GAAG,MAAM,eAAe,CACtC,SAAS,EACT,UAAU,CAAC,IAAI,EACf,MAAM,EACN,WAAW,EACX,OAAO,CAAC,SAAS,IAAI,KAAK,CAC3B,CAAA;QAED,kBAAkB;QAClB,MAAM,CAAC,OAAO,EAAE,CAAA;QAChB,MAAM,CAAC,GAAG,CACR;;QAEE,UAAU,CAAC,IAAI;UACb,UAAU,CAAC,MAAM;OACpB,UAAU,CAAC,GAAG;;;mBAGF,UAAU,CAAC,IAAI,EAAE,CAC/B,CAAA;QACD,OAAM;IACR,CAAC;IAED,6CAA6C;IAC7C,MAAM,IAAI,GAAG,iBAAiB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;IAEnD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,CAAC,KAAK,CACV,kGAAkG,CACnG,CAAA;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,+BAA+B;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QACnB,MAAM,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;QAEpC,MAAM,UAAU,GAAG,MAAM,eAAe,CACtC,SAAS,EACT,GAAG,CAAC,IAAI,EACR,GAAG,CAAC,MAAM,EACV,WAAW,EACX,OAAO,CAAC,SAAS,IAAI,KAAK,CAC3B,CAAA;QAED,kBAAkB;QAClB,MAAM,CAAC,OAAO,EAAE,CAAA;QAChB,MAAM,CAAC,GAAG,CACR;;QAEE,UAAU,CAAC,IAAI;UACb,UAAU,CAAC,MAAM;OACpB,UAAU,CAAC,GAAG;;;mBAGF,UAAU,CAAC,IAAI,EAAE,CAC/B,CAAA;IACH,CAAC;SAAM,CAAC;QACN,sBAAsB;QACtB,MAAM,CAAC,IAAI,CACT,SAAS,IAAI,CAAC,MAAM,4BAA4B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACrF,CAAA;QACD,MAAM,CAAC,OAAO,EAAE,CAAA;QAEhB,2DAA2D;QAC3D,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;YACrD,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBAChC,EAAE,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YAC9C,CAAC;QACH,CAAC;QACD,+FAA+F;QAC/F,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAC1B,WAAW,EACX,YAAY,EACZ,oBAAoB,CACrB,CAAA;QACD,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC5C,CAAC;QAED,2CAA2C;QAC3C,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACvB,MAAM,WAAW,CACf,8BAA8B,EAC9B,sBAAsB,EACtB,cAAc,EACd,KAAK,IAAI,EAAE;gBACT,MAAM,OAAO,GAAG,MAAM,cAAc,CAClC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EACvB,WAAW,CACZ,CAAA;gBACD,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;gBACjC,CAAC;YACH,CAAC,CACF,CAAA;QACH,CAAC;QAED,qDAAqD;QACrD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACf,eAAe,CACb,SAAS,EACT,GAAG,CAAC,IAAI,EACR,GAAG,CAAC,MAAM,EACV,WAAW,EACX,IAAI,CAAC,kCAAkC;SACxC,CACF,CACF,CAAA;QAED,sCAAsC;QACtC,MAAM,CAAC,OAAO,EAAE,CAAA;QAChB,MAAM,YAAY,GAAG,OAAO;aACzB,GAAG,CACF,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI;YAChB,GAAG,CAAC,MAAM;SACb,GAAG,CAAC,GAAG,EAAE,CACX;aACA,IAAI,CAAC,MAAM,CAAC,CAAA;QAEf,MAAM,CAAC,GAAG,CACR;;EAEJ,YAAY;;;;6BAIe,CACxB,CAAA;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../src/commands/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAanC,wBAAgB,gBAAgB,IAAI,OAAO,CAkC1C"}
@@ -1,13 +1,13 @@
1
1
  import { Command } from 'commander';
2
2
  import Table from 'cli-table3';
3
3
  import logger from '../lib/logger.js';
4
- import { requireConfig } from '../lib/config.js';
4
+ import { requireConfig, requireAuth } from '../lib/config.js';
5
5
  import { ForgecartApiClient } from '../lib/api-client.js';
6
6
  import { DeploymentType } from '../types/index.js';
7
7
  import { withSpinner } from '../utils/spinner.js';
8
+ import { syncEnvToDeployment, syncAllEnvToDeployments, getEnvFilePath, } from '../lib/env-sync.js';
8
9
  export function createEnvCommand() {
9
- const cmd = new Command('env')
10
- .description('Manage environment variables');
10
+ const cmd = new Command('env').description('Manage environment variables');
11
11
  cmd
12
12
  .command('get <type>')
13
13
  .description('Get environment variables for a deployment')
@@ -26,16 +26,23 @@ export function createEnvCommand() {
26
26
  .action(async (type, key) => {
27
27
  await unsetEnv(type, key);
28
28
  });
29
+ cmd
30
+ .command('push [type]')
31
+ .description('Push environment variables from .env file to deployment. If no type specified, pushes for all apps.')
32
+ .action(async (type) => {
33
+ await pushEnv(type);
34
+ });
29
35
  return cmd;
30
36
  }
31
37
  async function getEnv(type) {
32
38
  // Validate type
33
- if (type !== DeploymentType.STOREFRONT && type !== DeploymentType.APPLICATION) {
39
+ if (type !== DeploymentType.STOREFRONT &&
40
+ type !== DeploymentType.APPLICATION) {
34
41
  logger.error('Invalid deployment type. Use "storefront" or "application".');
35
42
  process.exit(1);
36
43
  }
37
44
  const config = requireConfig();
38
- const apiClient = new ForgecartApiClient(config.apiUrl, config.channelToken);
45
+ const apiClient = new ForgecartApiClient(config.apiUrl, config.channelToken, requireAuth());
39
46
  const env = await withSpinner(`Fetching environment variables for ${type}...`, 'Environment variables retrieved', 'Failed to fetch environment variables', async () => {
40
47
  return apiClient.getDeploymentEnv(type);
41
48
  });
@@ -62,7 +69,8 @@ async function getEnv(type) {
62
69
  }
63
70
  async function setEnv(type, key, value) {
64
71
  // Validate type
65
- if (type !== DeploymentType.STOREFRONT && type !== DeploymentType.APPLICATION) {
72
+ if (type !== DeploymentType.STOREFRONT &&
73
+ type !== DeploymentType.APPLICATION) {
66
74
  logger.error('Invalid deployment type. Use "storefront" or "application".');
67
75
  process.exit(1);
68
76
  }
@@ -72,7 +80,7 @@ async function setEnv(type, key, value) {
72
80
  process.exit(1);
73
81
  }
74
82
  const config = requireConfig();
75
- const apiClient = new ForgecartApiClient(config.apiUrl, config.channelToken);
83
+ const apiClient = new ForgecartApiClient(config.apiUrl, config.channelToken, requireAuth());
76
84
  await withSpinner(`Setting ${key} for ${type}...`, `${key} set successfully`, `Failed to set ${key}`, async () => {
77
85
  const success = await apiClient.setDeploymentEnv(type, key, value);
78
86
  if (!success) {
@@ -83,12 +91,13 @@ async function setEnv(type, key, value) {
83
91
  }
84
92
  async function unsetEnv(type, key) {
85
93
  // Validate type
86
- if (type !== DeploymentType.STOREFRONT && type !== DeploymentType.APPLICATION) {
94
+ if (type !== DeploymentType.STOREFRONT &&
95
+ type !== DeploymentType.APPLICATION) {
87
96
  logger.error('Invalid deployment type. Use "storefront" or "application".');
88
97
  process.exit(1);
89
98
  }
90
99
  const config = requireConfig();
91
- const apiClient = new ForgecartApiClient(config.apiUrl, config.channelToken);
100
+ const apiClient = new ForgecartApiClient(config.apiUrl, config.channelToken, requireAuth());
92
101
  await withSpinner(`Removing ${key} from ${type}...`, `${key} removed successfully`, `Failed to remove ${key}`, async () => {
93
102
  const success = await apiClient.unsetDeploymentEnv(type, key);
94
103
  if (!success) {
@@ -97,4 +106,46 @@ async function unsetEnv(type, key) {
97
106
  });
98
107
  logger.info('Note: The deployment may need to be restarted for changes to take effect.');
99
108
  }
109
+ async function pushEnv(type) {
110
+ // Validate type if provided
111
+ if (type &&
112
+ type !== DeploymentType.STOREFRONT &&
113
+ type !== DeploymentType.APPLICATION) {
114
+ logger.error('Invalid deployment type. Use "storefront" or "application".');
115
+ process.exit(1);
116
+ }
117
+ const config = requireConfig();
118
+ const apiClient = new ForgecartApiClient(config.apiUrl, config.channelToken, requireAuth());
119
+ if (type) {
120
+ // Push for specific type
121
+ const envFilePath = getEnvFilePath(type);
122
+ if (!envFilePath) {
123
+ logger.error(`Could not find .env file path for ${type}`);
124
+ process.exit(1);
125
+ }
126
+ logger.info(`Pushing environment variables from ${envFilePath}`);
127
+ const result = await withSpinner(`Syncing environment variables for ${type}...`, `Environment variables synced`, `Failed to sync environment variables`, async () => {
128
+ return syncEnvToDeployment(apiClient, type);
129
+ });
130
+ logger.info(`Synced ${result.synced} variable(s)${result.errors > 0 ? `, ${result.errors} error(s)` : ''}`);
131
+ }
132
+ else {
133
+ // Push for all types
134
+ logger.info('Pushing environment variables for all deployments');
135
+ const results = await withSpinner('Syncing environment variables...', 'Environment variables synced', 'Failed to sync environment variables', async () => {
136
+ return syncAllEnvToDeployments(apiClient);
137
+ });
138
+ if (results.storefront.synced > 0 || results.storefront.errors > 0) {
139
+ logger.info(`Storefront: ${results.storefront.synced} synced${results.storefront.errors > 0 ? `, ${results.storefront.errors} errors` : ''}`);
140
+ }
141
+ if (results.application.synced > 0 || results.application.errors > 0) {
142
+ logger.info(`Application: ${results.application.synced} synced${results.application.errors > 0 ? `, ${results.application.errors} errors` : ''}`);
143
+ }
144
+ const totalSynced = results.storefront.synced + results.application.synced;
145
+ if (totalSynced === 0) {
146
+ logger.info('No .env files found or no variables to sync');
147
+ }
148
+ }
149
+ logger.info('Note: The deployment may need to be restarted for changes to take effect.');
150
+ }
100
151
  //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/commands/env.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA6BnC,wBAAgB,iBAAiB,IAAI,OAAO,CAa3C;AAED,wBAAgB,4BAA4B,IAAI,OAAO,CAQtD"}