@forgecart/cli 1.0.0 → 1.1.0

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 (202) 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 +50 -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 +8 -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 +243 -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 +70 -12
  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 +103 -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 +6 -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 +7 -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 +7 -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 +20 -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/src/lib/api-client.d.ts +34 -0
  42. package/dist/src/lib/api-client.d.ts.map +1 -0
  43. package/dist/src/lib/api-client.js +141 -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 +44 -0
  58. package/dist/src/lib/env-sync.d.ts.map +1 -0
  59. package/dist/src/lib/env-sync.js +207 -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 +22 -0
  64. package/dist/src/lib/nx-generator.d.ts.map +1 -0
  65. package/dist/src/lib/nx-generator.js +345 -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 +16 -0
  75. package/dist/src/utils/spinner.d.ts.map +1 -0
  76. package/dist/src/utils/spinner.js +88 -0
  77. package/dist/src/utils/spinner.js.map +1 -0
  78. package/dist/src/utils/validation.d.ts.map +1 -0
  79. package/dist/{utils → src/utils}/validation.js +18 -2
  80. package/dist/src/utils/validation.js.map +1 -0
  81. package/dist/templates/application-additions/.forgecartignore +1 -1
  82. package/dist/templates/application-additions/Procfile +1 -1
  83. package/dist/templates/application-additions/src/app/app.module.ts +16 -0
  84. package/dist/templates/application-additions/src/services/forgecart.service.ts +62 -0
  85. package/dist/templates/application-additions/src/services/index.ts +2 -0
  86. package/dist/templates/application-additions/src/services/product-event-listener.service.ts +150 -0
  87. package/dist/templates/application-e2e-additions/src/support/global-setup.ts +16 -0
  88. package/dist/templates/application-e2e-additions/src/support/test-setup.ts +9 -0
  89. package/dist/templates/storefront-additions/.forgecartignore +30 -6
  90. package/dist/templates/storefront-additions/Procfile +1 -1
  91. package/dist/templates/storefront-additions/package.json +11 -0
  92. package/dist/templates/storefront-additions/postcss.config.js +5 -0
  93. package/dist/templates/storefront-additions/src/app/cart/page.tsx +77 -0
  94. package/dist/templates/storefront-additions/src/app/global.css +1 -0
  95. package/dist/templates/storefront-additions/src/app/layout.tsx +25 -0
  96. package/dist/templates/storefront-additions/src/app/page.tsx +43 -0
  97. package/dist/templates/storefront-additions/src/components/AddToCartButton.tsx +29 -0
  98. package/dist/templates/storefront-additions/src/components/CartItem.tsx +82 -0
  99. package/dist/templates/storefront-additions/src/components/Header.tsx +42 -0
  100. package/dist/templates/storefront-additions/src/components/ProductCard.tsx +57 -0
  101. package/dist/templates/storefront-additions/src/components/QuantitySelector.tsx +35 -0
  102. package/dist/templates/storefront-additions/src/context/CartContext.tsx +158 -0
  103. package/dist/templates/storefront-additions/src/lib/forgecart.ts +19 -8
  104. package/dist/templates/storefront-additions/tailwind.config.js +8 -0
  105. package/dist/templates/storefront-e2e-additions/playwright.config.ts +26 -0
  106. package/dist/templates/storefront-e2e-additions/src/example.spec.ts +11 -0
  107. package/dist/templates/workspace/.nxignore +2 -0
  108. package/package.json +6 -28
  109. package/templates/application-additions/.forgecartignore +1 -1
  110. package/templates/application-additions/Procfile +1 -1
  111. package/templates/application-additions/src/app/app.module.ts +16 -0
  112. package/templates/application-additions/src/services/forgecart.service.ts +62 -0
  113. package/templates/application-additions/src/services/index.ts +2 -0
  114. package/templates/application-additions/src/services/product-event-listener.service.ts +150 -0
  115. package/templates/application-e2e-additions/src/support/global-setup.ts +16 -0
  116. package/templates/application-e2e-additions/src/support/test-setup.ts +9 -0
  117. package/templates/storefront-additions/.forgecartignore +30 -6
  118. package/templates/storefront-additions/Procfile +1 -1
  119. package/templates/storefront-additions/package.json +11 -0
  120. package/templates/storefront-additions/postcss.config.js +5 -0
  121. package/templates/storefront-additions/src/app/cart/page.tsx +77 -0
  122. package/templates/storefront-additions/src/app/global.css +1 -0
  123. package/templates/storefront-additions/src/app/layout.tsx +25 -0
  124. package/templates/storefront-additions/src/app/page.tsx +43 -0
  125. package/templates/storefront-additions/src/components/AddToCartButton.tsx +29 -0
  126. package/templates/storefront-additions/src/components/CartItem.tsx +82 -0
  127. package/templates/storefront-additions/src/components/Header.tsx +42 -0
  128. package/templates/storefront-additions/src/components/ProductCard.tsx +57 -0
  129. package/templates/storefront-additions/src/components/QuantitySelector.tsx +35 -0
  130. package/templates/storefront-additions/src/context/CartContext.tsx +158 -0
  131. package/templates/storefront-additions/src/lib/forgecart.ts +19 -8
  132. package/templates/storefront-additions/tailwind.config.js +8 -0
  133. package/templates/storefront-e2e-additions/playwright.config.ts +26 -0
  134. package/templates/storefront-e2e-additions/src/example.spec.ts +11 -0
  135. package/templates/workspace/.nxignore +2 -0
  136. package/dist/cli.d.ts.map +0 -1
  137. package/dist/cli.js.map +0 -1
  138. package/dist/commands/delete.d.ts.map +0 -1
  139. package/dist/commands/delete.js.map +0 -1
  140. package/dist/commands/deploy.d.ts.map +0 -1
  141. package/dist/commands/deploy.js +0 -128
  142. package/dist/commands/deploy.js.map +0 -1
  143. package/dist/commands/env.d.ts.map +0 -1
  144. package/dist/commands/env.js.map +0 -1
  145. package/dist/commands/init.d.ts.map +0 -1
  146. package/dist/commands/init.js.map +0 -1
  147. package/dist/commands/list.d.ts.map +0 -1
  148. package/dist/commands/list.js.map +0 -1
  149. package/dist/commands/logs.d.ts.map +0 -1
  150. package/dist/commands/logs.js +0 -105
  151. package/dist/commands/logs.js.map +0 -1
  152. package/dist/commands/scale.d.ts.map +0 -1
  153. package/dist/commands/scale.js.map +0 -1
  154. package/dist/commands/status.d.ts.map +0 -1
  155. package/dist/commands/status.js.map +0 -1
  156. package/dist/commands/whoami.d.ts.map +0 -1
  157. package/dist/commands/whoami.js.map +0 -1
  158. package/dist/index.js.map +0 -1
  159. package/dist/lib/api-client.d.ts +0 -21
  160. package/dist/lib/api-client.d.ts.map +0 -1
  161. package/dist/lib/api-client.js +0 -220
  162. package/dist/lib/api-client.js.map +0 -1
  163. package/dist/lib/archive.d.ts.map +0 -1
  164. package/dist/lib/archive.js.map +0 -1
  165. package/dist/lib/config.d.ts +0 -12
  166. package/dist/lib/config.d.ts.map +0 -1
  167. package/dist/lib/config.js +0 -79
  168. package/dist/lib/config.js.map +0 -1
  169. package/dist/lib/logger.d.ts.map +0 -1
  170. package/dist/lib/logger.js.map +0 -1
  171. package/dist/lib/nx-generator.d.ts +0 -8
  172. package/dist/lib/nx-generator.d.ts.map +0 -1
  173. package/dist/lib/nx-generator.js +0 -146
  174. package/dist/lib/nx-generator.js.map +0 -1
  175. package/dist/templates/application-additions/src/services/price-fetcher.service.ts +0 -72
  176. package/dist/templates/storefront-additions/src/app/products/page.tsx +0 -78
  177. package/dist/types/index.d.ts.map +0 -1
  178. package/dist/types/index.js.map +0 -1
  179. package/dist/utils/spinner.d.ts +0 -4
  180. package/dist/utils/spinner.d.ts.map +0 -1
  181. package/dist/utils/spinner.js +0 -20
  182. package/dist/utils/spinner.js.map +0 -1
  183. package/dist/utils/validation.d.ts.map +0 -1
  184. package/dist/utils/validation.js.map +0 -1
  185. package/templates/application-additions/src/services/price-fetcher.service.ts +0 -72
  186. package/templates/storefront-additions/src/app/products/page.tsx +0 -78
  187. /package/dist/{cli.d.ts → src/cli.d.ts} +0 -0
  188. /package/dist/{commands → src/commands}/delete.d.ts +0 -0
  189. /package/dist/{commands → src/commands}/deploy.d.ts +0 -0
  190. /package/dist/{commands → src/commands}/env.d.ts +0 -0
  191. /package/dist/{commands → src/commands}/init.d.ts +0 -0
  192. /package/dist/{commands → src/commands}/list.d.ts +0 -0
  193. /package/dist/{commands → src/commands}/logs.d.ts +0 -0
  194. /package/dist/{commands → src/commands}/scale.d.ts +0 -0
  195. /package/dist/{commands → src/commands}/status.d.ts +0 -0
  196. /package/dist/{commands → src/commands}/whoami.d.ts +0 -0
  197. /package/dist/{index.d.ts → src/index.d.ts} +0 -0
  198. /package/dist/{index.js → src/index.js} +0 -0
  199. /package/dist/{lib → src/lib}/logger.d.ts +0 -0
  200. /package/dist/{lib → src/lib}/logger.js +0 -0
  201. /package/dist/{types → src/types}/index.js +0 -0
  202. /package/dist/{utils → src/utils}/validation.d.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAMnC,wBAAgB,mBAAmB,IAAI,OAAO,CAQ7C"}
@@ -1,6 +1,6 @@
1
1
  import { Command } from 'commander';
2
2
  import logger from '../lib/logger.js';
3
- import { readConfig, findProjectRoot } from '../lib/config.js';
3
+ import { readConfig, findProjectRoot, requireAuth } from '../lib/config.js';
4
4
  import { ForgecartApiClient } from '../lib/api-client.js';
5
5
  import { withSpinner } from '../utils/spinner.js';
6
6
  export function createWhoamiCommand() {
@@ -14,33 +14,46 @@ export function createWhoamiCommand() {
14
14
  async function showWhoami() {
15
15
  const projectRoot = findProjectRoot();
16
16
  if (!projectRoot) {
17
- logger.error('Not in a ForgéCart project');
17
+ logger.error('Not in a ForgeCart project');
18
18
  process.exit(1);
19
19
  }
20
20
  const config = readConfig(projectRoot);
21
21
  if (!config) {
22
- logger.error('Invalid ForgéCart configuration');
22
+ logger.error('Invalid ForgeCart configuration');
23
23
  process.exit(1);
24
24
  }
25
- const apiClient = new ForgecartApiClient(config.apiUrl, config.channelToken);
25
+ // Check authentication first
26
+ const authToken = requireAuth();
27
+ const apiClient = new ForgecartApiClient(config.apiUrl, config.channelToken, authToken);
26
28
  const channelInfo = await withSpinner('Fetching channel information...', 'Channel information retrieved', 'Failed to fetch channel information', async () => {
27
29
  return apiClient.getChannelInfo();
28
30
  });
29
31
  if (!channelInfo) {
30
32
  logger.error('Unable to fetch channel information. Your token may be invalid.');
33
+ apiClient.dispose();
31
34
  process.exit(1);
32
35
  }
33
36
  logger.newline();
34
37
  logger.title('Channel Information');
38
+ logger.keyValue('Name', channelInfo.name);
39
+ logger.keyValue('Domain', channelInfo.domain);
35
40
  logger.keyValue('Channel ID', channelInfo.id);
36
- logger.keyValue('Channel Code', channelInfo.code);
37
41
  logger.keyValue('API URL', config.apiUrl);
38
42
  logger.newline();
39
- logger.keyValue('Project Root', projectRoot);
40
- logger.keyValue('Has Application', config.hasApplication ? 'Yes' : 'No');
43
+ logger.title('Application');
44
+ if (channelInfo.hasApplication && channelInfo.applicationName) {
45
+ logger.keyValue('Name', channelInfo.applicationName);
46
+ }
47
+ else {
48
+ logger.info('No application deployed');
49
+ }
50
+ logger.newline();
51
+ logger.title('Project');
52
+ logger.keyValue('Root', projectRoot);
41
53
  logger.keyValue('Storefront Path', config.storefrontPath);
42
54
  if (config.applicationPath) {
43
55
  logger.keyValue('Application Path', config.applicationPath);
44
56
  }
57
+ apiClient.dispose();
45
58
  }
46
59
  //# sourceMappingURL=whoami.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../../src/commands/whoami.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,MAAM,OAAO,GAAG,aAAa,EAAE,CAAA;AAE/B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA"}
@@ -0,0 +1,34 @@
1
+ import { Deployment, DeploymentType, DeploymentEnv, ChannelInfo, DeploymentLogEntry } from '../types/index.js';
2
+ interface DeploymentLogsResult {
3
+ deploymentLogs: DeploymentLogEntry;
4
+ }
5
+ export declare class ForgecartApiClient {
6
+ private sdk;
7
+ private baseUrl;
8
+ private channelToken;
9
+ private authToken?;
10
+ constructor(apiUrl: string, channelToken: string, authToken?: string);
11
+ validateChannelToken(): Promise<boolean>;
12
+ getChannelInfo(): Promise<ChannelInfo | null>;
13
+ getDeployments(): Promise<Deployment[]>;
14
+ getDeployment(type: DeploymentType): Promise<Deployment | null>;
15
+ createDeployment(type: DeploymentType, envVars?: Array<{
16
+ key: string;
17
+ value: string;
18
+ }>): Promise<Deployment>;
19
+ deleteDeployment(type: DeploymentType): Promise<boolean>;
20
+ scaleDeployment(type: DeploymentType, instances: number): Promise<Deployment>;
21
+ getDeploymentEnv(type: DeploymentType): Promise<DeploymentEnv[]>;
22
+ setDeploymentEnv(type: DeploymentType, envVars: Array<{
23
+ key: string;
24
+ value: string;
25
+ }>): Promise<boolean>;
26
+ unsetDeploymentEnv(type: DeploymentType, keys: string[]): Promise<boolean>;
27
+ refreshDeploymentStatus(type: DeploymentType): Promise<Deployment | null>;
28
+ private toSdkType;
29
+ uploadAndDeploy(type: DeploymentType, zipBuffer: Buffer, envVars?: Record<string, string>): Promise<Deployment>;
30
+ subscribeToDeploymentLogs(type: DeploymentType): AsyncIterableIterator<DeploymentLogsResult>;
31
+ dispose(): void;
32
+ }
33
+ export {};
34
+ //# sourceMappingURL=api-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../../src/lib/api-client.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,UAAU,EACV,cAAc,EACd,aAAa,EACb,WAAW,EACX,kBAAkB,EACnB,MAAM,mBAAmB,CAAA;AAE1B,UAAU,oBAAoB;IAC5B,cAAc,EAAE,kBAAkB,CAAA;CACnC;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,SAAS,CAAC,CAAQ;gBAEd,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;IAkB9D,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC;IASxC,cAAc,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAU7C,cAAc,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAKvC,aAAa,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAO/D,gBAAgB,CACpB,IAAI,EAAE,cAAc,EACpB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAC9C,OAAO,CAAC,UAAU,CAAC;IAOhB,gBAAgB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAOxD,eAAe,CACnB,IAAI,EAAE,cAAc,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,UAAU,CAAC;IAOhB,gBAAgB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAOhE,gBAAgB,CACpB,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAC7C,OAAO,CAAC,OAAO,CAAC;IAOb,kBAAkB,CACtB,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE,MAAM,EAAE,GACb,OAAO,CAAC,OAAO,CAAC;IAOb,uBAAuB,CAC3B,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAQ7B,OAAO,CAAC,SAAS;IAKX,eAAe,CACnB,IAAI,EAAE,cAAc,EACpB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,UAAU,CAAC;IA0CtB,yBAAyB,CACvB,IAAI,EAAE,cAAc,GACnB,qBAAqB,CAAC,oBAAoB,CAAC;IAM9C,OAAO,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,141 @@
1
+ import { ForgeCartSDK } from '@forgecart/sdk';
2
+ import FormData from 'form-data';
3
+ import WebSocket from 'ws';
4
+ export class ForgecartApiClient {
5
+ sdk;
6
+ baseUrl;
7
+ channelToken;
8
+ authToken;
9
+ constructor(apiUrl, channelToken, authToken) {
10
+ this.baseUrl = apiUrl;
11
+ this.channelToken = channelToken;
12
+ this.authToken = authToken;
13
+ // Initialize SDK with WebSocket support for Node.js
14
+ this.sdk = new ForgeCartSDK({
15
+ endpoint: apiUrl,
16
+ token: channelToken,
17
+ webSocketImpl: WebSocket,
18
+ });
19
+ // Set auth token if provided
20
+ if (authToken) {
21
+ this.sdk.setAdminAuthToken(authToken);
22
+ }
23
+ }
24
+ async validateChannelToken() {
25
+ try {
26
+ const result = await this.sdk.admin.deployment.validateChannelToken();
27
+ return result.validateChannelToken;
28
+ }
29
+ catch {
30
+ return false;
31
+ }
32
+ }
33
+ async getChannelInfo() {
34
+ try {
35
+ const result = await this.sdk.admin.deployment.channelInfo();
36
+ return result.channelInfo;
37
+ }
38
+ catch (error) {
39
+ console.error('Error fetching channel info:', error);
40
+ return null;
41
+ }
42
+ }
43
+ async getDeployments() {
44
+ const result = await this.sdk.admin.deployment.deployments();
45
+ return result.deployments;
46
+ }
47
+ async getDeployment(type) {
48
+ const result = await this.sdk.admin.deployment.deployment({
49
+ type: this.toSdkType(type),
50
+ });
51
+ return result.deployment;
52
+ }
53
+ async createDeployment(type, envVars) {
54
+ const result = await this.sdk.admin.deployment.createDeployment({
55
+ input: { type: this.toSdkType(type), envVars },
56
+ });
57
+ return result.createDeployment;
58
+ }
59
+ async deleteDeployment(type) {
60
+ const result = await this.sdk.admin.deployment.deleteDeployment({
61
+ type: this.toSdkType(type),
62
+ });
63
+ return result.deleteDeployment;
64
+ }
65
+ async scaleDeployment(type, instances) {
66
+ const result = await this.sdk.admin.deployment.scaleDeployment({
67
+ input: { type: this.toSdkType(type), instances },
68
+ });
69
+ return result.scaleDeployment;
70
+ }
71
+ async getDeploymentEnv(type) {
72
+ const result = await this.sdk.admin.deployment.deploymentEnv({
73
+ type: this.toSdkType(type),
74
+ });
75
+ return result.deploymentEnv;
76
+ }
77
+ async setDeploymentEnv(type, envVars) {
78
+ const result = await this.sdk.admin.deployment.setDeploymentEnv({
79
+ input: { type: this.toSdkType(type), envVars },
80
+ });
81
+ return result.setDeploymentEnv;
82
+ }
83
+ async unsetDeploymentEnv(type, keys) {
84
+ const result = await this.sdk.admin.deployment.unsetDeploymentEnv({
85
+ input: { type: this.toSdkType(type), keys },
86
+ });
87
+ return result.unsetDeploymentEnv;
88
+ }
89
+ async refreshDeploymentStatus(type) {
90
+ const result = await this.sdk.admin.deployment.refreshDeploymentStatus({
91
+ type: this.toSdkType(type),
92
+ });
93
+ return result.refreshDeploymentStatus;
94
+ }
95
+ // Helper to convert CLI enum to SDK type (both use same string values)
96
+ toSdkType(type) {
97
+ return type;
98
+ }
99
+ // File upload uses REST endpoint, not GraphQL
100
+ async uploadAndDeploy(type, zipBuffer, envVars) {
101
+ const formData = new FormData();
102
+ formData.append('file', zipBuffer, {
103
+ filename: 'app.zip',
104
+ contentType: 'application/zip',
105
+ });
106
+ // Add env vars as JSON string if provided
107
+ if (envVars && Object.keys(envVars).length > 0) {
108
+ formData.append('envVars', JSON.stringify(envVars));
109
+ }
110
+ // Build headers - form-data package requires its own headers for multipart boundary
111
+ const headers = {
112
+ 'forge-token': this.channelToken,
113
+ ...formData.getHeaders(),
114
+ };
115
+ if (this.authToken) {
116
+ headers['Authorization'] = `Bearer ${this.authToken}`;
117
+ }
118
+ // Get the complete form data buffer
119
+ const body = formData.getBuffer();
120
+ const response = await fetch(`${this.baseUrl}/deployments/${type}/upload`, {
121
+ method: 'POST',
122
+ headers,
123
+ body: body,
124
+ });
125
+ if (!response.ok) {
126
+ const errorText = await response.text();
127
+ throw new Error(`Deployment failed: ${response.status} - ${errorText}`);
128
+ }
129
+ const result = (await response.json());
130
+ return result.deployment;
131
+ }
132
+ subscribeToDeploymentLogs(type) {
133
+ return this.sdk.admin.deployment.deploymentLogs({
134
+ type: this.toSdkType(type),
135
+ });
136
+ }
137
+ dispose() {
138
+ this.sdk.dispose();
139
+ }
140
+ }
141
+ //# sourceMappingURL=api-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../../src/lib/api-client.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
1
  interface ArchiveOptions {
2
2
  sourceDir: string;
3
3
  ignoreFile?: string;
4
+ includeEnvFile?: boolean;
4
5
  }
5
6
  export declare function createArchive(options: ArchiveOptions): Promise<Buffer>;
6
- export declare function getIgnoreFileForType(type: 'storefront' | 'application'): string;
7
+ export declare function getIgnoreFileForType(): string;
7
8
  export {};
8
9
  //# sourceMappingURL=archive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../../src/lib/archive.ts"],"names":[],"mappings":"AAIA,UAAU,cAAc;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB;AAyGD,wBAAsB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAmC5E;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C"}
@@ -14,11 +14,31 @@ function parseIgnoreFile(ignoreFilePath) {
14
14
  function shouldIgnore(filePath, patterns) {
15
15
  const relativePath = filePath.replace(/\\/g, '/');
16
16
  for (const pattern of patterns) {
17
+ // Handle root-level patterns (starting with /)
18
+ // These only match at the root of the archive, not nested paths
19
+ if (pattern.startsWith('/')) {
20
+ const rootPattern = pattern.slice(1); // Remove leading /
21
+ if (rootPattern.endsWith('/')) {
22
+ // Root-level directory pattern
23
+ const dirPattern = rootPattern.slice(0, -1);
24
+ if (relativePath.startsWith(dirPattern + '/') ||
25
+ relativePath === dirPattern) {
26
+ return true;
27
+ }
28
+ }
29
+ else if (relativePath === rootPattern) {
30
+ // Root-level exact file match
31
+ return true;
32
+ }
33
+ continue;
34
+ }
17
35
  // Handle directory patterns (ending with /)
18
36
  if (pattern.endsWith('/')) {
19
37
  const dirPattern = pattern.slice(0, -1);
20
38
  if (relativePath.startsWith(dirPattern + '/') ||
21
- relativePath === dirPattern) {
39
+ relativePath === dirPattern ||
40
+ relativePath.includes('/' + dirPattern + '/') ||
41
+ relativePath.endsWith('/' + dirPattern)) {
22
42
  return true;
23
43
  }
24
44
  }
@@ -64,9 +84,12 @@ function getAllFiles(dir, baseDir, ignorePatterns) {
64
84
  return files;
65
85
  }
66
86
  export async function createArchive(options) {
67
- const { sourceDir, ignoreFile } = options;
87
+ const { sourceDir, ignoreFile, includeEnvFile } = options;
68
88
  // Parse ignore patterns
69
- const defaultIgnorePatterns = ['node_modules/', '.git/', '.env', '.env.local'];
89
+ // Use leading slash for root-level only patterns (e.g., /node_modules/ won't match .next/standalone/node_modules/)
90
+ const defaultIgnorePatterns = includeEnvFile
91
+ ? ['/node_modules/', '.git/', '.deploy/']
92
+ : ['/node_modules/', '.git/', '.env', '.env.local', '.deploy/'];
70
93
  let ignorePatterns = [...defaultIgnorePatterns];
71
94
  if (ignoreFile) {
72
95
  const customPatterns = parseIgnoreFile(path.join(sourceDir, ignoreFile));
@@ -89,8 +112,7 @@ export async function createArchive(options) {
89
112
  archive.finalize();
90
113
  });
91
114
  }
92
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
93
- export function getIgnoreFileForType(type) {
115
+ export function getIgnoreFileForType() {
94
116
  return '.forgecartignore';
95
117
  }
96
118
  //# sourceMappingURL=archive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../../src/lib/archive.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,QAAQ,MAAM,UAAU,CAAA;AAQ/B,SAAS,eAAe,CAAC,cAAsB;IAC7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QACnC,OAAO,EAAE,CAAA;IACX,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;IACxD,OAAO,OAAO;SACX,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAA;AACpD,CAAC;AAED,SAAS,YAAY,CAAC,QAAgB,EAAE,QAAkB;IACxD,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IAEjD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,+CAA+C;QAC/C,gEAAgE;QAChE,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA,CAAC,mBAAmB;YAExD,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9B,+BAA+B;gBAC/B,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;gBAC3C,IACE,YAAY,CAAC,UAAU,CAAC,UAAU,GAAG,GAAG,CAAC;oBACzC,YAAY,KAAK,UAAU,EAC3B,CAAC;oBACD,OAAO,IAAI,CAAA;gBACb,CAAC;YACH,CAAC;iBAAM,IAAI,YAAY,KAAK,WAAW,EAAE,CAAC;gBACxC,8BAA8B;gBAC9B,OAAO,IAAI,CAAA;YACb,CAAC;YACD,SAAQ;QACV,CAAC;QAED,4CAA4C;QAC5C,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YACvC,IACE,YAAY,CAAC,UAAU,CAAC,UAAU,GAAG,GAAG,CAAC;gBACzC,YAAY,KAAK,UAAU;gBAC3B,YAAY,CAAC,QAAQ,CAAC,GAAG,GAAG,UAAU,GAAG,GAAG,CAAC;gBAC7C,YAAY,CAAC,QAAQ,CAAC,GAAG,GAAG,UAAU,CAAC,EACvC,CAAC;gBACD,OAAO,IAAI,CAAA;YACb,CAAC;QACH,CAAC;QACD,uBAAuB;aAClB,IAAI,YAAY,KAAK,OAAO,IAAI,YAAY,CAAC,QAAQ,CAAC,GAAG,GAAG,OAAO,CAAC,EAAE,CAAC;YAC1E,OAAO,IAAI,CAAA;QACb,CAAC;QACD,8BAA8B;aACzB,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,IAAI,MAAM,CACtB,GAAG;gBACD,OAAO;qBACJ,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;qBACrB,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;qBACtB,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;gBAC1B,GAAG,CACN,CAAA;YACD,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC7B,OAAO,IAAI,CAAA;YACb,CAAC;QACH,CAAC;QACD,qDAAqD;aAChD,IAAI,YAAY,CAAC,QAAQ,CAAC,GAAG,GAAG,OAAO,CAAC,IAAI,YAAY,KAAK,OAAO,EAAE,CAAC;YAC1E,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,WAAW,CAClB,GAAW,EACX,OAAe,EACf,cAAwB;IAExB,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;IAE1D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QAEzE,IAAI,YAAY,CAAC,YAAY,EAAE,cAAc,CAAC,EAAE,CAAC;YAC/C,SAAQ;QACV,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAA;QAC/D,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACtB,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAuB;IACzD,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,OAAO,CAAA;IAEzD,wBAAwB;IACxB,mHAAmH;IACnH,MAAM,qBAAqB,GAAG,cAAc;QAC1C,CAAC,CAAC,CAAC,gBAAgB,EAAE,OAAO,EAAE,UAAU,CAAC;QACzC,CAAC,CAAC,CAAC,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,CAAA;IACjE,IAAI,cAAc,GAAG,CAAC,GAAG,qBAAqB,CAAC,CAAA;IAE/C,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,cAAc,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAA;QACxE,cAAc,GAAG,CAAC,GAAG,cAAc,EAAE,GAAG,cAAc,CAAC,CAAA;IACzD,CAAC;IAED,2BAA2B;IAC3B,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,CAAA;IAE/D,iBAAiB;IACjB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAiB,EAAE,CAAA;QAC/B,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;QAEvD,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAiB,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;QAC7D,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACvD,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;YACnD,4DAA4D;YAC5D,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;QACzD,CAAC;QAED,OAAO,CAAC,QAAQ,EAAE,CAAA;IACpB,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,kBAAkB,CAAA;AAC3B,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Ensures that the Next.js config has standalone output enabled.
3
+ * This is required for ForgeCart deployment because Turbopack (Next.js 16 default)
4
+ * doesn't work with Paketo buildpack's symlinked node_modules.
5
+ *
6
+ * @param storefrontDir - Path to the storefront app directory
7
+ * @returns true if standalone output is configured (either already or newly added), false if config couldn't be updated
8
+ */
9
+ export declare function ensureStandaloneOutput(storefrontDir: string): boolean;
10
+ //# sourceMappingURL=config-updater.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-updater.d.ts","sourceRoot":"","sources":["../../../src/lib/config-updater.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAiCrE"}
@@ -0,0 +1,34 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ /**
4
+ * Ensures that the Next.js config has standalone output enabled.
5
+ * This is required for ForgeCart deployment because Turbopack (Next.js 16 default)
6
+ * doesn't work with Paketo buildpack's symlinked node_modules.
7
+ *
8
+ * @param storefrontDir - Path to the storefront app directory
9
+ * @returns true if standalone output is configured (either already or newly added), false if config couldn't be updated
10
+ */
11
+ export function ensureStandaloneOutput(storefrontDir) {
12
+ const configPath = path.join(storefrontDir, 'next.config.js');
13
+ if (!fs.existsSync(configPath)) {
14
+ return false;
15
+ }
16
+ let content = fs.readFileSync(configPath, 'utf-8');
17
+ // Check if standalone output is already configured
18
+ if (content.includes("output: 'standalone'") ||
19
+ content.includes('output: "standalone"')) {
20
+ return true; // Already configured
21
+ }
22
+ // Find the nextConfig object and add output: 'standalone'
23
+ // Look for patterns like "const nextConfig = {" or "const nextConfig: ... = {"
24
+ const configPattern = /(const\s+nextConfig[^=]*=\s*\{)/;
25
+ const match = content.match(configPattern);
26
+ if (match) {
27
+ // Insert after the opening brace
28
+ content = content.replace(configPattern, `$1\n // Standalone output for deployment - creates self-contained build\n output: 'standalone',\n`);
29
+ fs.writeFileSync(configPath, content);
30
+ return true;
31
+ }
32
+ return false;
33
+ }
34
+ //# sourceMappingURL=config-updater.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-updater.js","sourceRoot":"","sources":["../../../src/lib/config-updater.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAE5B;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CAAC,aAAqB;IAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAA;IAE7D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IAElD,mDAAmD;IACnD,IACE,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QACxC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EACxC,CAAC;QACD,OAAO,IAAI,CAAA,CAAC,qBAAqB;IACnC,CAAC;IAED,0DAA0D;IAC1D,+EAA+E;IAC/E,MAAM,aAAa,GAAG,iCAAiC,CAAA;IACvD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;IAE1C,IAAI,KAAK,EAAE,CAAC;QACV,iCAAiC;QACjC,OAAO,GAAG,OAAO,CAAC,OAAO,CACvB,aAAa,EACb,qGAAqG,CACtG,CAAA;QACD,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QACrC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC"}
@@ -0,0 +1,53 @@
1
+ import { ForgecartConfig } from '../types/index.js';
2
+ /**
3
+ * Global auth config stored in ~/.forgecart/
4
+ */
5
+ export interface GlobalAuthConfig {
6
+ authToken?: string;
7
+ apiUrl?: string;
8
+ }
9
+ /**
10
+ * Gets the global config directory (~/.forgecart/)
11
+ */
12
+ export declare function getGlobalConfigDir(): string;
13
+ /**
14
+ * Gets the global auth file path (~/.forgecart/auth.json)
15
+ */
16
+ export declare function getGlobalConfigPath(): string;
17
+ /**
18
+ * Reads the global auth config from ~/.forgecart/auth.json
19
+ */
20
+ export declare function readGlobalConfig(): GlobalAuthConfig | null;
21
+ /**
22
+ * Writes the global auth config to ~/.forgecart/auth.json
23
+ */
24
+ export declare function writeGlobalConfig(config: GlobalAuthConfig): void;
25
+ /**
26
+ * Updates the global auth config
27
+ */
28
+ export declare function updateGlobalConfig(updates: Partial<GlobalAuthConfig>): GlobalAuthConfig;
29
+ /**
30
+ * Gets the auth token from global config.
31
+ * Throws an error if not authenticated.
32
+ */
33
+ export declare function getAuthToken(): string;
34
+ /**
35
+ * Guard function to check authentication before running a command.
36
+ * Exits with a clear error message if not authenticated.
37
+ */
38
+ export declare function requireAuth(): string;
39
+ /**
40
+ * Gets the API URL from global config, or returns the default.
41
+ */
42
+ export declare function getGlobalApiUrl(): string;
43
+ export declare function getConfigDir(projectRoot: string): string;
44
+ export declare function getConfigPath(projectRoot: string): string;
45
+ export declare function configExists(projectRoot?: string): boolean;
46
+ export declare function readConfig(projectRoot?: string): ForgecartConfig | null;
47
+ export declare function writeConfig(config: ForgecartConfig, projectRoot?: string): void;
48
+ export declare function updateConfig(updates: Partial<ForgecartConfig>, projectRoot?: string): ForgecartConfig;
49
+ export declare function getDefaultConfig(): ForgecartConfig;
50
+ export declare function findProjectRoot(startDir?: string): string | null;
51
+ export declare function requireConfig(): ForgecartConfig;
52
+ export declare function getProjectRoot(): string;
53
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAanD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,gBAAgB,GAAG,IAAI,CAa1D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAShE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,GACjC,gBAAgB,CAKlB;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAMrC;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,MAAM,CASpC;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAGxC;AAED,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,YAAY,CAAC,WAAW,GAAE,MAAsB,GAAG,OAAO,CAEzE;AAED,wBAAgB,UAAU,CACxB,WAAW,GAAE,MAAsB,GAClC,eAAe,GAAG,IAAI,CAaxB;AAED,wBAAgB,WAAW,CACzB,MAAM,EAAE,eAAe,EACvB,WAAW,GAAE,MAAsB,GAClC,IAAI,CASN;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,EACjC,WAAW,GAAE,MAAsB,GAClC,eAAe,CAKjB;AAED,wBAAgB,gBAAgB,IAAI,eAAe,CAElD;AAED,wBAAgB,eAAe,CAC7B,QAAQ,GAAE,MAAsB,GAC/B,MAAM,GAAG,IAAI,CAYf;AAED,wBAAgB,aAAa,IAAI,eAAe,CAgB/C;AAED,wBAAgB,cAAc,IAAI,MAAM,CAQvC"}
@@ -0,0 +1,162 @@
1
+ import * as fs from 'fs';
2
+ import * as os from 'os';
3
+ import * as path from 'path';
4
+ const CONFIG_DIR = '.forgecart';
5
+ const CONFIG_FILE = 'config.json';
6
+ const AUTH_FILE = 'auth.json';
7
+ const DEFAULT_CONFIG = {
8
+ version: '1.0',
9
+ channelToken: '',
10
+ apiUrl: 'https://api.forgecart.com',
11
+ hasApplication: false,
12
+ storefrontPath: 'apps/storefront',
13
+ };
14
+ /**
15
+ * Gets the global config directory (~/.forgecart/)
16
+ */
17
+ export function getGlobalConfigDir() {
18
+ return path.join(os.homedir(), CONFIG_DIR);
19
+ }
20
+ /**
21
+ * Gets the global auth file path (~/.forgecart/auth.json)
22
+ */
23
+ export function getGlobalConfigPath() {
24
+ return path.join(getGlobalConfigDir(), AUTH_FILE);
25
+ }
26
+ /**
27
+ * Reads the global auth config from ~/.forgecart/auth.json
28
+ */
29
+ export function readGlobalConfig() {
30
+ const configPath = getGlobalConfigPath();
31
+ if (!fs.existsSync(configPath)) {
32
+ return null;
33
+ }
34
+ try {
35
+ const content = fs.readFileSync(configPath, 'utf-8');
36
+ return JSON.parse(content);
37
+ }
38
+ catch {
39
+ return null;
40
+ }
41
+ }
42
+ /**
43
+ * Writes the global auth config to ~/.forgecart/auth.json
44
+ */
45
+ export function writeGlobalConfig(config) {
46
+ const configDir = getGlobalConfigDir();
47
+ const configPath = getGlobalConfigPath();
48
+ if (!fs.existsSync(configDir)) {
49
+ fs.mkdirSync(configDir, { recursive: true });
50
+ }
51
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
52
+ }
53
+ /**
54
+ * Updates the global auth config
55
+ */
56
+ export function updateGlobalConfig(updates) {
57
+ const existing = readGlobalConfig() || {};
58
+ const updated = { ...existing, ...updates };
59
+ writeGlobalConfig(updated);
60
+ return updated;
61
+ }
62
+ /**
63
+ * Gets the auth token from global config.
64
+ * Throws an error if not authenticated.
65
+ */
66
+ export function getAuthToken() {
67
+ const globalConfig = readGlobalConfig();
68
+ if (!globalConfig?.authToken) {
69
+ throw new Error('Not authenticated. Run "forgecart login" first.');
70
+ }
71
+ return globalConfig.authToken;
72
+ }
73
+ /**
74
+ * Guard function to check authentication before running a command.
75
+ * Exits with a clear error message if not authenticated.
76
+ */
77
+ export function requireAuth() {
78
+ const globalConfig = readGlobalConfig();
79
+ if (!globalConfig?.authToken) {
80
+ console.error('\x1b[31mError:\x1b[0m Not authenticated.');
81
+ console.error('');
82
+ console.error('Run \x1b[36mforgecart login\x1b[0m to authenticate first.');
83
+ process.exit(1);
84
+ }
85
+ return globalConfig.authToken;
86
+ }
87
+ /**
88
+ * Gets the API URL from global config, or returns the default.
89
+ */
90
+ export function getGlobalApiUrl() {
91
+ const globalConfig = readGlobalConfig();
92
+ return globalConfig?.apiUrl || 'https://api.forgecart.com';
93
+ }
94
+ export function getConfigDir(projectRoot) {
95
+ return path.join(projectRoot, CONFIG_DIR);
96
+ }
97
+ export function getConfigPath(projectRoot) {
98
+ return path.join(getConfigDir(projectRoot), CONFIG_FILE);
99
+ }
100
+ export function configExists(projectRoot = process.cwd()) {
101
+ return fs.existsSync(getConfigPath(projectRoot));
102
+ }
103
+ export function readConfig(projectRoot = process.cwd()) {
104
+ const configPath = getConfigPath(projectRoot);
105
+ if (!fs.existsSync(configPath)) {
106
+ return null;
107
+ }
108
+ try {
109
+ const content = fs.readFileSync(configPath, 'utf-8');
110
+ return JSON.parse(content);
111
+ }
112
+ catch {
113
+ return null;
114
+ }
115
+ }
116
+ export function writeConfig(config, projectRoot = process.cwd()) {
117
+ const configDir = getConfigDir(projectRoot);
118
+ const configPath = getConfigPath(projectRoot);
119
+ if (!fs.existsSync(configDir)) {
120
+ fs.mkdirSync(configDir, { recursive: true });
121
+ }
122
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
123
+ }
124
+ export function updateConfig(updates, projectRoot = process.cwd()) {
125
+ const existing = readConfig(projectRoot) || DEFAULT_CONFIG;
126
+ const updated = { ...existing, ...updates };
127
+ writeConfig(updated, projectRoot);
128
+ return updated;
129
+ }
130
+ export function getDefaultConfig() {
131
+ return { ...DEFAULT_CONFIG };
132
+ }
133
+ export function findProjectRoot(startDir = process.cwd()) {
134
+ let currentDir = startDir;
135
+ while (currentDir !== path.parse(currentDir).root) {
136
+ const configPath = path.join(currentDir, CONFIG_DIR, CONFIG_FILE);
137
+ if (fs.existsSync(configPath)) {
138
+ return currentDir;
139
+ }
140
+ currentDir = path.dirname(currentDir);
141
+ }
142
+ return null;
143
+ }
144
+ export function requireConfig() {
145
+ const projectRoot = findProjectRoot();
146
+ if (!projectRoot) {
147
+ throw new Error('Not in a ForgeCart project. Run "forgecart init" to create a new project.');
148
+ }
149
+ const config = readConfig(projectRoot);
150
+ if (!config) {
151
+ throw new Error('Invalid ForgeCart configuration. Please reinitialize the project.');
152
+ }
153
+ return config;
154
+ }
155
+ export function getProjectRoot() {
156
+ const root = findProjectRoot();
157
+ if (!root) {
158
+ throw new Error('Not in a ForgeCart project. Run "forgecart init" to create a new project.');
159
+ }
160
+ return root;
161
+ }
162
+ //# sourceMappingURL=config.js.map