@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.
- package/LICENSE +21 -0
- package/README.md +7 -7
- package/bin/forgecart.js +1 -1
- package/dist/package.json +49 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/{cli.js → src/cli.js} +8 -6
- package/dist/src/cli.js.map +1 -0
- package/dist/src/commands/delete.d.ts.map +1 -0
- package/dist/{commands → src/commands}/delete.js +6 -3
- package/dist/src/commands/delete.js.map +1 -0
- package/dist/src/commands/deploy.d.ts.map +1 -0
- package/dist/src/commands/deploy.js +235 -0
- package/dist/src/commands/deploy.js.map +1 -0
- package/dist/src/commands/env.d.ts.map +1 -0
- package/dist/{commands → src/commands}/env.js +60 -9
- package/dist/src/commands/env.js.map +1 -0
- package/dist/src/commands/init.d.ts.map +1 -0
- package/dist/{commands → src/commands}/init.js +51 -17
- package/dist/src/commands/init.js.map +1 -0
- package/dist/src/commands/list.d.ts.map +1 -0
- package/dist/{commands → src/commands}/list.js +4 -2
- package/dist/src/commands/list.js.map +1 -0
- package/dist/src/commands/login.d.ts +3 -0
- package/dist/src/commands/login.d.ts.map +1 -0
- package/dist/src/commands/login.js +120 -0
- package/dist/src/commands/login.js.map +1 -0
- package/dist/src/commands/logs.d.ts.map +1 -0
- package/dist/src/commands/logs.js +88 -0
- package/dist/src/commands/logs.js.map +1 -0
- package/dist/src/commands/scale.d.ts.map +1 -0
- package/dist/{commands → src/commands}/scale.js +6 -3
- package/dist/src/commands/scale.js.map +1 -0
- package/dist/src/commands/status.d.ts.map +1 -0
- package/dist/{commands → src/commands}/status.js +4 -2
- package/dist/src/commands/status.js.map +1 -0
- package/dist/src/commands/whoami.d.ts.map +1 -0
- package/dist/{commands → src/commands}/whoami.js +18 -7
- package/dist/src/commands/whoami.js.map +1 -0
- package/dist/{index.d.ts.map → src/index.d.ts.map} +1 -1
- package/dist/src/index.js.map +1 -0
- package/dist/{lib → src/lib}/api-client.d.ts +11 -4
- package/dist/src/lib/api-client.d.ts.map +1 -0
- package/dist/src/lib/api-client.js +137 -0
- package/dist/src/lib/api-client.js.map +1 -0
- package/dist/{lib → src/lib}/archive.d.ts +2 -1
- package/dist/src/lib/archive.d.ts.map +1 -0
- package/dist/{lib → src/lib}/archive.js +27 -5
- package/dist/src/lib/archive.js.map +1 -0
- package/dist/src/lib/config-updater.d.ts +10 -0
- package/dist/src/lib/config-updater.d.ts.map +1 -0
- package/dist/src/lib/config-updater.js +34 -0
- package/dist/src/lib/config-updater.js.map +1 -0
- package/dist/src/lib/config.d.ts +53 -0
- package/dist/src/lib/config.d.ts.map +1 -0
- package/dist/src/lib/config.js +162 -0
- package/dist/src/lib/config.js.map +1 -0
- package/dist/src/lib/env-sync.d.ts +36 -0
- package/dist/src/lib/env-sync.d.ts.map +1 -0
- package/dist/src/lib/env-sync.js +118 -0
- package/dist/src/lib/env-sync.js.map +1 -0
- package/dist/src/lib/logger.d.ts.map +1 -0
- package/dist/src/lib/logger.js.map +1 -0
- package/dist/src/lib/nx-generator.d.ts +20 -0
- package/dist/src/lib/nx-generator.d.ts.map +1 -0
- package/dist/src/lib/nx-generator.js +338 -0
- package/dist/src/lib/nx-generator.js.map +1 -0
- package/dist/src/lib/standalone.d.ts +28 -0
- package/dist/src/lib/standalone.d.ts.map +1 -0
- package/dist/src/lib/standalone.js +107 -0
- package/dist/src/lib/standalone.js.map +1 -0
- package/dist/{types → src/types}/index.d.ts +10 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/src/utils/spinner.d.ts.map +1 -0
- package/dist/src/utils/spinner.js.map +1 -0
- package/dist/src/utils/validation.d.ts.map +1 -0
- package/dist/{utils → src/utils}/validation.js +18 -2
- package/dist/src/utils/validation.js.map +1 -0
- package/dist/templates/application-additions/.forgecartignore +1 -1
- package/dist/templates/application-additions/Procfile +1 -1
- package/dist/templates/application-additions/env.example +7 -0
- package/dist/templates/application-additions/src/app/app.module.ts +16 -0
- package/dist/templates/application-additions/src/services/forgecart.service.ts +62 -0
- package/dist/templates/application-additions/src/services/index.ts +2 -0
- package/dist/templates/application-additions/src/services/price-fetcher.service.ts +22 -23
- package/dist/templates/storefront-additions/.forgecartignore +30 -6
- package/dist/templates/storefront-additions/Procfile +1 -1
- package/dist/templates/storefront-additions/env.example +3 -0
- package/dist/templates/storefront-additions/package.json +11 -0
- package/dist/templates/storefront-additions/src/app/products/page.tsx +16 -28
- package/dist/templates/storefront-additions/src/lib/forgecart.ts +19 -8
- package/dist/templates/workspace/.nxignore +2 -0
- package/package.json +6 -28
- package/templates/application-additions/.forgecartignore +1 -1
- package/templates/application-additions/Procfile +1 -1
- package/templates/application-additions/env.example +7 -0
- package/templates/application-additions/src/app/app.module.ts +16 -0
- package/templates/application-additions/src/services/forgecart.service.ts +62 -0
- package/templates/application-additions/src/services/index.ts +2 -0
- package/templates/application-additions/src/services/price-fetcher.service.ts +22 -23
- package/templates/storefront-additions/.forgecartignore +30 -6
- package/templates/storefront-additions/Procfile +1 -1
- package/templates/storefront-additions/env.example +3 -0
- package/templates/storefront-additions/package.json +11 -0
- package/templates/storefront-additions/src/app/products/page.tsx +16 -28
- package/templates/storefront-additions/src/lib/forgecart.ts +19 -8
- package/templates/workspace/.nxignore +2 -0
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/commands/delete.d.ts.map +0 -1
- package/dist/commands/delete.js.map +0 -1
- package/dist/commands/deploy.d.ts.map +0 -1
- package/dist/commands/deploy.js +0 -128
- package/dist/commands/deploy.js.map +0 -1
- package/dist/commands/env.d.ts.map +0 -1
- package/dist/commands/env.js.map +0 -1
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/list.d.ts.map +0 -1
- package/dist/commands/list.js.map +0 -1
- package/dist/commands/logs.d.ts.map +0 -1
- package/dist/commands/logs.js +0 -105
- package/dist/commands/logs.js.map +0 -1
- package/dist/commands/scale.d.ts.map +0 -1
- package/dist/commands/scale.js.map +0 -1
- package/dist/commands/status.d.ts.map +0 -1
- package/dist/commands/status.js.map +0 -1
- package/dist/commands/whoami.d.ts.map +0 -1
- package/dist/commands/whoami.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/lib/api-client.d.ts.map +0 -1
- package/dist/lib/api-client.js +0 -220
- package/dist/lib/api-client.js.map +0 -1
- package/dist/lib/archive.d.ts.map +0 -1
- package/dist/lib/archive.js.map +0 -1
- package/dist/lib/config.d.ts +0 -12
- package/dist/lib/config.d.ts.map +0 -1
- package/dist/lib/config.js +0 -79
- package/dist/lib/config.js.map +0 -1
- package/dist/lib/logger.d.ts.map +0 -1
- package/dist/lib/logger.js.map +0 -1
- package/dist/lib/nx-generator.d.ts +0 -8
- package/dist/lib/nx-generator.d.ts.map +0 -1
- package/dist/lib/nx-generator.js +0 -146
- package/dist/lib/nx-generator.js.map +0 -1
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js.map +0 -1
- package/dist/utils/spinner.d.ts.map +0 -1
- package/dist/utils/spinner.js.map +0 -1
- package/dist/utils/validation.d.ts.map +0 -1
- package/dist/utils/validation.js.map +0 -1
- /package/dist/{cli.d.ts → src/cli.d.ts} +0 -0
- /package/dist/{commands → src/commands}/delete.d.ts +0 -0
- /package/dist/{commands → src/commands}/deploy.d.ts +0 -0
- /package/dist/{commands → src/commands}/env.d.ts +0 -0
- /package/dist/{commands → src/commands}/init.d.ts +0 -0
- /package/dist/{commands → src/commands}/list.d.ts +0 -0
- /package/dist/{commands → src/commands}/logs.d.ts +0 -0
- /package/dist/{commands → src/commands}/scale.d.ts +0 -0
- /package/dist/{commands → src/commands}/status.d.ts +0 -0
- /package/dist/{commands → src/commands}/whoami.d.ts +0 -0
- /package/dist/{index.d.ts → src/index.d.ts} +0 -0
- /package/dist/{index.js → src/index.js} +0 -0
- /package/dist/{lib → src/lib}/logger.d.ts +0 -0
- /package/dist/{lib → src/lib}/logger.js +0 -0
- /package/dist/{types → src/types}/index.js +0 -0
- /package/dist/{utils → src/utils}/spinner.d.ts +0 -0
- /package/dist/{utils → src/utils}/spinner.js +0 -0
- /package/dist/{utils → src/utils}/validation.d.ts +0 -0
|
@@ -3,18 +3,20 @@ import * as fs from 'fs';
|
|
|
3
3
|
import inquirer from 'inquirer';
|
|
4
4
|
import { Command } from 'commander';
|
|
5
5
|
import logger from '../lib/logger.js';
|
|
6
|
-
import { writeConfig, getDefaultConfig, configExists, readConfig, updateConfig, } from '../lib/config.js';
|
|
6
|
+
import { writeConfig, getDefaultConfig, configExists, readConfig, updateConfig, requireAuth, getGlobalApiUrl, } from '../lib/config.js';
|
|
7
7
|
import { ForgecartApiClient } from '../lib/api-client.js';
|
|
8
|
-
import { createNxWorkspace, generateNextApp, generateNestApp, installDependency, copyTemplateFiles, getCliTemplatesDir, } from '../lib/nx-generator.js';
|
|
8
|
+
import { createNxWorkspace, generateNextApp, generateNestApp, installDependency, copyTemplateFiles, getCliTemplatesDir, addPackageScripts, appendEnvPatternsToGitignore, renameEnvExample, DEFAULT_NX_VERSION, } from '../lib/nx-generator.js';
|
|
9
9
|
import { isValidProjectName } from '../utils/validation.js';
|
|
10
10
|
import { withSpinner } from '../utils/spinner.js';
|
|
11
|
+
import { ensureStandaloneOutput } from '../lib/config-updater.js';
|
|
11
12
|
export function createInitCommand() {
|
|
12
13
|
const cmd = new Command('init')
|
|
13
|
-
.description('Create a new
|
|
14
|
+
.description('Create a new ForgeCart project')
|
|
14
15
|
.argument('[name]', 'Project name')
|
|
15
|
-
.option('-t, --token <token>', '
|
|
16
|
+
.option('-t, --token <token>', 'ForgeCart channel token')
|
|
16
17
|
.option('-a, --application', 'Include NestJS backend application')
|
|
17
|
-
.option('--api-url <url>', '
|
|
18
|
+
.option('--api-url <url>', 'ForgeCart API URL', 'https://api.forgecart.com')
|
|
19
|
+
.option('--nx-version <version>', 'NX version to use', DEFAULT_NX_VERSION)
|
|
18
20
|
.action(async (name, options) => {
|
|
19
21
|
await initProject(name, options);
|
|
20
22
|
});
|
|
@@ -29,7 +31,9 @@ export function createInitApplicationCommand() {
|
|
|
29
31
|
return cmd;
|
|
30
32
|
}
|
|
31
33
|
async function initProject(name, options) {
|
|
32
|
-
logger.title('
|
|
34
|
+
logger.title('ForgeCart Project Setup');
|
|
35
|
+
// Check authentication first (set by `forgecart login`)
|
|
36
|
+
const authToken = requireAuth();
|
|
33
37
|
// Prompt for project name if not provided
|
|
34
38
|
let projectName = name;
|
|
35
39
|
if (!projectName) {
|
|
@@ -68,7 +72,7 @@ async function initProject(name, options) {
|
|
|
68
72
|
{
|
|
69
73
|
type: 'input',
|
|
70
74
|
name: 'channelToken',
|
|
71
|
-
message: '
|
|
75
|
+
message: 'ForgeCart channel token:',
|
|
72
76
|
validate: (input) => {
|
|
73
77
|
if (!input)
|
|
74
78
|
return 'Channel token is required';
|
|
@@ -83,8 +87,8 @@ async function initProject(name, options) {
|
|
|
83
87
|
logger.error('Channel token is required');
|
|
84
88
|
process.exit(1);
|
|
85
89
|
}
|
|
86
|
-
const apiUrl = options.apiUrl ||
|
|
87
|
-
const apiClient = new ForgecartApiClient(apiUrl, channelToken);
|
|
90
|
+
const apiUrl = options.apiUrl || getGlobalApiUrl();
|
|
91
|
+
const apiClient = new ForgecartApiClient(apiUrl, channelToken, authToken);
|
|
88
92
|
await withSpinner('Validating channel token...', 'Channel token validated', 'Invalid channel token', async () => {
|
|
89
93
|
const isValid = await apiClient.validateChannelToken();
|
|
90
94
|
if (!isValid) {
|
|
@@ -106,7 +110,7 @@ async function initProject(name, options) {
|
|
|
106
110
|
}
|
|
107
111
|
// Create NX workspace
|
|
108
112
|
await withSpinner('Creating NX workspace...', 'NX workspace created', 'Failed to create NX workspace', async () => {
|
|
109
|
-
const success = await createNxWorkspace(projectName, process.cwd());
|
|
113
|
+
const success = await createNxWorkspace(projectName, process.cwd(), options.nxVersion);
|
|
110
114
|
if (!success) {
|
|
111
115
|
throw new Error('Failed to create NX workspace');
|
|
112
116
|
}
|
|
@@ -120,7 +124,7 @@ async function initProject(name, options) {
|
|
|
120
124
|
});
|
|
121
125
|
// Install @forgecart/sdk
|
|
122
126
|
await withSpinner('Installing @forgecart/sdk...', '@forgecart/sdk installed', 'Failed to install SDK', async () => {
|
|
123
|
-
const success = await installDependency('@forgecart/sdk', targetDir);
|
|
127
|
+
const success = await installDependency('@forgecart/sdk@^1.2.0', targetDir);
|
|
124
128
|
if (!success) {
|
|
125
129
|
throw new Error('Failed to install SDK');
|
|
126
130
|
}
|
|
@@ -131,7 +135,19 @@ async function initProject(name, options) {
|
|
|
131
135
|
const storefrontAdditionsDir = path.join(templatesDir, 'storefront-additions');
|
|
132
136
|
const storefrontDir = path.join(targetDir, 'apps', 'storefront');
|
|
133
137
|
copyTemplateFiles(storefrontAdditionsDir, storefrontDir);
|
|
138
|
+
renameEnvExample(storefrontDir);
|
|
134
139
|
logger.success('Storefront customizations applied');
|
|
140
|
+
// Add .env patterns to .gitignore
|
|
141
|
+
appendEnvPatternsToGitignore(targetDir);
|
|
142
|
+
// Configure standalone output for deployment
|
|
143
|
+
logger.info('Configuring standalone output...');
|
|
144
|
+
const standaloneConfigured = ensureStandaloneOutput(storefrontDir);
|
|
145
|
+
if (standaloneConfigured) {
|
|
146
|
+
logger.success('Standalone output configured in next.config.js');
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
logger.warn('Could not auto-configure standalone output. Please add output: "standalone" to next.config.js manually.');
|
|
150
|
+
}
|
|
135
151
|
// Generate NestJS application if requested
|
|
136
152
|
if (withApplication) {
|
|
137
153
|
await withSpinner('Generating NestJS application...', 'Application generated', 'Failed to generate application', async () => {
|
|
@@ -140,14 +156,24 @@ async function initProject(name, options) {
|
|
|
140
156
|
throw new Error('Failed to generate application');
|
|
141
157
|
}
|
|
142
158
|
});
|
|
159
|
+
// Install @nestjs/config for environment variable management
|
|
160
|
+
await withSpinner('Installing @nestjs/config...', '@nestjs/config installed', 'Failed to install @nestjs/config', async () => {
|
|
161
|
+
const success = await installDependency('@nestjs/config', targetDir);
|
|
162
|
+
if (!success) {
|
|
163
|
+
throw new Error('Failed to install @nestjs/config');
|
|
164
|
+
}
|
|
165
|
+
});
|
|
143
166
|
// Copy application template additions
|
|
144
167
|
logger.info('Applying application customizations...');
|
|
145
168
|
const applicationAdditionsDir = path.join(templatesDir, 'application-additions');
|
|
146
169
|
const applicationDir = path.join(targetDir, 'apps', 'application');
|
|
147
170
|
copyTemplateFiles(applicationAdditionsDir, applicationDir);
|
|
171
|
+
renameEnvExample(applicationDir);
|
|
148
172
|
logger.success('Application customizations applied');
|
|
149
173
|
}
|
|
150
|
-
//
|
|
174
|
+
// Add convenience scripts to package.json
|
|
175
|
+
addPackageScripts(targetDir, withApplication || false);
|
|
176
|
+
// Create ForgeCart config (authToken is stored globally in ~/.forgecart/)
|
|
151
177
|
const config = getDefaultConfig();
|
|
152
178
|
config.channelToken = channelToken;
|
|
153
179
|
config.apiUrl = apiUrl;
|
|
@@ -157,7 +183,7 @@ async function initProject(name, options) {
|
|
|
157
183
|
config.applicationPath = 'apps/application';
|
|
158
184
|
}
|
|
159
185
|
writeConfig(config, targetDir);
|
|
160
|
-
logger.success('
|
|
186
|
+
logger.success('ForgeCart configuration created');
|
|
161
187
|
// Success message
|
|
162
188
|
logger.newline();
|
|
163
189
|
logger.box(`Project "${projectName}" created successfully!
|
|
@@ -177,14 +203,14 @@ Your application will be available at:
|
|
|
177
203
|
}
|
|
178
204
|
async function addApplication() {
|
|
179
205
|
logger.title('Add NestJS Application');
|
|
180
|
-
// Check if we're in a
|
|
206
|
+
// Check if we're in a ForgeCart project
|
|
181
207
|
if (!configExists()) {
|
|
182
|
-
logger.error('Not in a
|
|
208
|
+
logger.error('Not in a ForgeCart project. Run "forgecart init" first.');
|
|
183
209
|
process.exit(1);
|
|
184
210
|
}
|
|
185
211
|
const config = readConfig();
|
|
186
212
|
if (!config) {
|
|
187
|
-
logger.error('Invalid
|
|
213
|
+
logger.error('Invalid ForgeCart configuration');
|
|
188
214
|
process.exit(1);
|
|
189
215
|
}
|
|
190
216
|
// Check if application already exists
|
|
@@ -202,17 +228,25 @@ async function addApplication() {
|
|
|
202
228
|
});
|
|
203
229
|
// Install @forgecart/sdk in application
|
|
204
230
|
await withSpinner('Installing @forgecart/sdk...', '@forgecart/sdk installed', 'Failed to install SDK', async () => {
|
|
205
|
-
const success = await installDependency('@forgecart/sdk', projectRoot);
|
|
231
|
+
const success = await installDependency('@forgecart/sdk@^1.2.0', projectRoot);
|
|
206
232
|
if (!success) {
|
|
207
233
|
throw new Error('Failed to install SDK');
|
|
208
234
|
}
|
|
209
235
|
});
|
|
236
|
+
// Install @nestjs/config for environment variable management
|
|
237
|
+
await withSpinner('Installing @nestjs/config...', '@nestjs/config installed', 'Failed to install @nestjs/config', async () => {
|
|
238
|
+
const success = await installDependency('@nestjs/config', projectRoot);
|
|
239
|
+
if (!success) {
|
|
240
|
+
throw new Error('Failed to install @nestjs/config');
|
|
241
|
+
}
|
|
242
|
+
});
|
|
210
243
|
// Copy application template additions
|
|
211
244
|
logger.info('Applying application customizations...');
|
|
212
245
|
const templatesDir = getCliTemplatesDir();
|
|
213
246
|
const applicationAdditionsDir = path.join(templatesDir, 'application-additions');
|
|
214
247
|
const applicationDir = path.join(projectRoot, 'apps', 'application');
|
|
215
248
|
copyTemplateFiles(applicationAdditionsDir, applicationDir);
|
|
249
|
+
renameEnvExample(applicationDir);
|
|
216
250
|
logger.success('Application customizations applied');
|
|
217
251
|
// Update config
|
|
218
252
|
updateConfig({
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAQnC,wBAAgB,iBAAiB,IAAI,OAAO,CAS3C"}
|
|
@@ -2,7 +2,7 @@ import { Command } from 'commander';
|
|
|
2
2
|
import Table from 'cli-table3';
|
|
3
3
|
import chalk from 'chalk';
|
|
4
4
|
import logger from '../lib/logger.js';
|
|
5
|
-
import { requireConfig } from '../lib/config.js';
|
|
5
|
+
import { requireConfig, requireAuth } from '../lib/config.js';
|
|
6
6
|
import { ForgecartApiClient } from '../lib/api-client.js';
|
|
7
7
|
import { DeploymentStatus } from '../types/index.js';
|
|
8
8
|
export function createListCommand() {
|
|
@@ -31,8 +31,10 @@ function getStatusColor(status) {
|
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
33
|
async function listDeployments() {
|
|
34
|
+
// Check authentication first
|
|
35
|
+
const authToken = requireAuth();
|
|
34
36
|
const config = requireConfig();
|
|
35
|
-
const apiClient = new ForgecartApiClient(config.apiUrl, config.channelToken);
|
|
37
|
+
const apiClient = new ForgecartApiClient(config.apiUrl, config.channelToken, authToken);
|
|
36
38
|
const deployments = await apiClient.getDeployments();
|
|
37
39
|
if (deployments.length === 0) {
|
|
38
40
|
logger.info('No deployments found');
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,KAAK,MAAM,YAAY,CAAA;AAC9B,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,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,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEpD,MAAM,UAAU,iBAAiB;IAC/B,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;SAC5B,KAAK,CAAC,IAAI,CAAC;SACX,WAAW,CAAC,uCAAuC,CAAC;SACpD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,eAAe,EAAE,CAAA;IACzB,CAAC,CAAC,CAAA;IAEJ,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,SAAS,cAAc,CAAC,MAAwB;IAC9C,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,gBAAgB,CAAC,OAAO;YAC3B,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAC5B,KAAK,gBAAgB,CAAC,OAAO;YAC3B,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAC7B,KAAK,gBAAgB,CAAC,OAAO;YAC3B,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC3B,KAAK,gBAAgB,CAAC,KAAK;YACzB,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAC1B,KAAK,gBAAgB,CAAC,OAAO;YAC3B,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC3B;YACE,OAAO,MAAM,CAAA;IACjB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe;IAC5B,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,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,cAAc,EAAE,CAAA;IAEpD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;QACnC,MAAM,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAA;QAC/D,OAAM;IACR,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;QACtB,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,eAAe,CAAC;QAC7D,KAAK,EAAE;YACL,IAAI,EAAE,CAAC,MAAM,CAAC;SACf;KACF,CAAC,CAAA;IAEF,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC;YACT,UAAU,CAAC,IAAI;YACf,cAAc,CAAC,UAAU,CAAC,MAA0B,CAAC;YACrD,UAAU,CAAC,GAAG,IAAI,GAAG;YACrB,UAAU,CAAC,SAAS,CAAC,QAAQ,EAAE;YAC/B,UAAU,CAAC,cAAc;gBACvB,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,cAAc,EAAE;gBACtD,CAAC,CAAC,GAAG;SACR,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAA;AAC/B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA4BnC,wBAAgB,kBAAkB,IAAI,OAAO,CAqB5C"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { gql, GraphQLClient } from 'graphql-request';
|
|
3
|
+
import { findProjectRoot, getGlobalConfigPath, updateConfig, updateGlobalConfig, } from '../lib/config.js';
|
|
4
|
+
import logger from '../lib/logger.js';
|
|
5
|
+
import { withSpinner } from '../utils/spinner.js';
|
|
6
|
+
const DEFAULT_API_URL = 'https://api.forgecart.com';
|
|
7
|
+
const DEFAULT_DASHBOARD_URL = 'http://dashboard.forgecart.com';
|
|
8
|
+
export function createLoginCommand() {
|
|
9
|
+
const cmd = new Command('login')
|
|
10
|
+
.description('Authenticate with ForgeCart via browser')
|
|
11
|
+
.option('--api-url <url>', 'API URL', DEFAULT_API_URL)
|
|
12
|
+
.option('--dashboard-url <url>', 'Dashboard URL for authentication', DEFAULT_DASHBOARD_URL)
|
|
13
|
+
.option('--no-browser', 'Skip opening browser automatically')
|
|
14
|
+
.action(async (options) => {
|
|
15
|
+
await browserLogin(options);
|
|
16
|
+
});
|
|
17
|
+
return cmd;
|
|
18
|
+
}
|
|
19
|
+
async function browserLogin(options) {
|
|
20
|
+
const dashboardUrl = options.dashboardUrl.replace(/\/$/, ''); // Remove trailing slash
|
|
21
|
+
const apiUrl = options.apiUrl.replace(/\/$/, ''); // Remove trailing slash
|
|
22
|
+
logger.title('ForgeCart CLI Login');
|
|
23
|
+
logger.newline();
|
|
24
|
+
// Create GraphQL client for admin-api (public endpoints don't require auth)
|
|
25
|
+
const client = new GraphQLClient(`${apiUrl}/admin-api`);
|
|
26
|
+
// 1. Generate device code
|
|
27
|
+
logger.info('Requesting authorization code...');
|
|
28
|
+
const GENERATE_DEVICE_CODE = gql `
|
|
29
|
+
mutation GenerateDeviceCode($input: GenerateDeviceCodeInput!) {
|
|
30
|
+
generateDeviceCode(input: $input) {
|
|
31
|
+
deviceCode
|
|
32
|
+
userCode
|
|
33
|
+
verificationUri
|
|
34
|
+
expiresIn
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
`;
|
|
38
|
+
let deviceCodeResponse;
|
|
39
|
+
try {
|
|
40
|
+
const response = await client.request(GENERATE_DEVICE_CODE, { input: { apiUrl } });
|
|
41
|
+
deviceCodeResponse = response.generateDeviceCode;
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
logger.error('Failed to connect to ForgeCart API');
|
|
45
|
+
logger.error(`Make sure ${apiUrl} is accessible`);
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
const { deviceCode, userCode, expiresIn } = deviceCodeResponse;
|
|
49
|
+
// 2. Display instructions - construct auth URL using dashboard URL directly
|
|
50
|
+
const authUrl = `${dashboardUrl}/cli/auth?code=${userCode}`;
|
|
51
|
+
logger.newline();
|
|
52
|
+
logger.info('To authorize, open this URL in your browser:');
|
|
53
|
+
logger.newline();
|
|
54
|
+
logger.info(` ${authUrl}`);
|
|
55
|
+
logger.newline();
|
|
56
|
+
logger.info(`Or enter this code manually: ${userCode}`);
|
|
57
|
+
logger.newline();
|
|
58
|
+
// 3. Open browser (if enabled)
|
|
59
|
+
if (options.browser) {
|
|
60
|
+
try {
|
|
61
|
+
const open = (await import('open')).default;
|
|
62
|
+
await open(authUrl);
|
|
63
|
+
logger.info('Browser opened automatically.');
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
logger.warn('Could not open browser automatically.');
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// 4. Poll for approval
|
|
70
|
+
logger.newline();
|
|
71
|
+
const result = await withSpinner(`Waiting for approval (code: ${userCode})...`, 'Authorization successful!', 'Authorization failed', () => pollForToken(client, deviceCode, expiresIn));
|
|
72
|
+
// 5. Save auth token to global config (~/.forgecart/)
|
|
73
|
+
updateGlobalConfig({
|
|
74
|
+
authToken: result.authToken,
|
|
75
|
+
apiUrl,
|
|
76
|
+
});
|
|
77
|
+
logger.success(`Global config saved: ${getGlobalConfigPath()}`);
|
|
78
|
+
// 6. Also update project config if in a project (authToken is global only)
|
|
79
|
+
const projectRoot = findProjectRoot(process.cwd());
|
|
80
|
+
if (projectRoot) {
|
|
81
|
+
// Update existing project config with channel token
|
|
82
|
+
updateConfig({
|
|
83
|
+
channelToken: result.channelToken,
|
|
84
|
+
apiUrl,
|
|
85
|
+
}, projectRoot);
|
|
86
|
+
logger.success(`Project config updated: ${projectRoot}/.forgecart/config.json`);
|
|
87
|
+
}
|
|
88
|
+
logger.newline();
|
|
89
|
+
logger.box('Successfully authenticated with ForgeCart!');
|
|
90
|
+
}
|
|
91
|
+
async function pollForToken(client, deviceCode, expiresIn) {
|
|
92
|
+
const POLL_DEVICE_TOKEN = gql `
|
|
93
|
+
query PollDeviceToken($deviceCode: String!) {
|
|
94
|
+
pollDeviceToken(deviceCode: $deviceCode) {
|
|
95
|
+
status
|
|
96
|
+
channelToken
|
|
97
|
+
authToken
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
`;
|
|
101
|
+
const startTime = Date.now();
|
|
102
|
+
const pollInterval = 3000; // 3 seconds
|
|
103
|
+
while (Date.now() - startTime < expiresIn * 1000) {
|
|
104
|
+
const response = await client.request(POLL_DEVICE_TOKEN, { deviceCode });
|
|
105
|
+
const { status, channelToken, authToken } = response.pollDeviceToken;
|
|
106
|
+
if (status === 'APPROVED' && channelToken && authToken) {
|
|
107
|
+
return { channelToken, authToken };
|
|
108
|
+
}
|
|
109
|
+
else if (status === 'DENIED') {
|
|
110
|
+
throw new Error('Authorization was denied');
|
|
111
|
+
}
|
|
112
|
+
else if (status === 'EXPIRED') {
|
|
113
|
+
throw new Error('Authorization code expired');
|
|
114
|
+
}
|
|
115
|
+
// Wait before next poll
|
|
116
|
+
await new Promise((resolve) => setTimeout(resolve, pollInterval));
|
|
117
|
+
}
|
|
118
|
+
throw new Error('Authorization timed out');
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../../src/commands/logs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAQnC,wBAAgB,iBAAiB,IAAI,OAAO,CAc3C"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { requireAuth, requireConfig } from '../lib/config.js';
|
|
4
|
+
import { ForgecartApiClient } from '../lib/api-client.js';
|
|
5
|
+
import logger from '../lib/logger.js';
|
|
6
|
+
import { DeploymentType } from '../types/index.js';
|
|
7
|
+
export function createLogsCommand() {
|
|
8
|
+
const cmd = new Command('logs')
|
|
9
|
+
.description('View deployment logs')
|
|
10
|
+
.argument('[type]', 'Deployment type (storefront or application)', 'storefront')
|
|
11
|
+
.option('-f, --follow', 'Follow log output (default behavior)')
|
|
12
|
+
.action(async (type) => {
|
|
13
|
+
await viewLogs(type);
|
|
14
|
+
});
|
|
15
|
+
return cmd;
|
|
16
|
+
}
|
|
17
|
+
async function viewLogs(type) {
|
|
18
|
+
// Validate type
|
|
19
|
+
if (type !== DeploymentType.STOREFRONT &&
|
|
20
|
+
type !== DeploymentType.APPLICATION) {
|
|
21
|
+
logger.error('Invalid deployment type. Use "storefront" or "application".');
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
// Check authentication first
|
|
25
|
+
const authToken = requireAuth();
|
|
26
|
+
const config = requireConfig();
|
|
27
|
+
logger.info(`Connecting to ${type} logs...`);
|
|
28
|
+
// Use ForgecartApiClient with SDK subscription
|
|
29
|
+
const apiClient = new ForgecartApiClient(config.apiUrl, config.channelToken, authToken);
|
|
30
|
+
// Handle Ctrl+C
|
|
31
|
+
process.on('SIGINT', () => {
|
|
32
|
+
logger.newline();
|
|
33
|
+
logger.info('Disconnecting...');
|
|
34
|
+
apiClient.dispose();
|
|
35
|
+
process.exit(0);
|
|
36
|
+
});
|
|
37
|
+
try {
|
|
38
|
+
const subscription = apiClient.subscribeToDeploymentLogs(type);
|
|
39
|
+
logger.success(`Connected to ${type} logs`);
|
|
40
|
+
logger.info('Press Ctrl+C to stop');
|
|
41
|
+
logger.newline();
|
|
42
|
+
for await (const result of subscription) {
|
|
43
|
+
const log = result.deploymentLogs;
|
|
44
|
+
if (log) {
|
|
45
|
+
// Try to parse the message as JSON (Epinio format)
|
|
46
|
+
let displayMessage = log.message;
|
|
47
|
+
try {
|
|
48
|
+
const parsed = JSON.parse(log.message);
|
|
49
|
+
// If it's JSON with Message field, use that (or skip if empty)
|
|
50
|
+
if ('Message' in parsed) {
|
|
51
|
+
displayMessage = parsed.Message?.trim() || null;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// Not JSON, use as-is
|
|
56
|
+
}
|
|
57
|
+
// Skip empty messages
|
|
58
|
+
if (!displayMessage) {
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
// Format timestamp to HH:MM:SS
|
|
62
|
+
const timestamp = new Date(log.timestamp).toLocaleTimeString('en-US', {
|
|
63
|
+
hour12: false,
|
|
64
|
+
hour: '2-digit',
|
|
65
|
+
minute: '2-digit',
|
|
66
|
+
second: '2-digit',
|
|
67
|
+
});
|
|
68
|
+
console.log(`${chalk.gray(timestamp)} ${displayMessage}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
let errorMessage;
|
|
74
|
+
if (error instanceof Error) {
|
|
75
|
+
errorMessage = error.message;
|
|
76
|
+
}
|
|
77
|
+
else if (typeof error === 'object' && error !== null) {
|
|
78
|
+
errorMessage = JSON.stringify(error, null, 2);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
errorMessage = String(error);
|
|
82
|
+
}
|
|
83
|
+
logger.error(`Subscription error: ${errorMessage}`);
|
|
84
|
+
apiClient.dispose();
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=logs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../src/commands/logs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scale.d.ts","sourceRoot":"","sources":["../../../src/commands/scale.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAOnC,wBAAgB,kBAAkB,IAAI,OAAO,CAU5C"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
import logger from '../lib/logger.js';
|
|
3
|
-
import { requireConfig } from '../lib/config.js';
|
|
3
|
+
import { requireConfig, requireAuth } from '../lib/config.js';
|
|
4
4
|
import { ForgecartApiClient } from '../lib/api-client.js';
|
|
5
5
|
import { DeploymentType } from '../types/index.js';
|
|
6
6
|
import { withSpinner } from '../utils/spinner.js';
|
|
@@ -16,7 +16,8 @@ export function createScaleCommand() {
|
|
|
16
16
|
}
|
|
17
17
|
async function scaleDeployment(type, instances) {
|
|
18
18
|
// Validate type
|
|
19
|
-
if (type !== DeploymentType.STOREFRONT &&
|
|
19
|
+
if (type !== DeploymentType.STOREFRONT &&
|
|
20
|
+
type !== DeploymentType.APPLICATION) {
|
|
20
21
|
logger.error('Invalid deployment type. Use "storefront" or "application".');
|
|
21
22
|
process.exit(1);
|
|
22
23
|
}
|
|
@@ -25,8 +26,10 @@ async function scaleDeployment(type, instances) {
|
|
|
25
26
|
logger.error('Invalid number of instances. Must be between 0 and 10.');
|
|
26
27
|
process.exit(1);
|
|
27
28
|
}
|
|
29
|
+
// Check authentication first
|
|
30
|
+
const authToken = requireAuth();
|
|
28
31
|
const config = requireConfig();
|
|
29
|
-
const apiClient = new ForgecartApiClient(config.apiUrl, config.channelToken);
|
|
32
|
+
const apiClient = new ForgecartApiClient(config.apiUrl, config.channelToken, authToken);
|
|
30
33
|
// Check if deployment exists
|
|
31
34
|
const deployment = await apiClient.getDeployment(type);
|
|
32
35
|
if (!deployment) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scale.js","sourceRoot":"","sources":["../../../src/commands/scale.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,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,kBAAkB;IAChC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;SAC7B,WAAW,CAAC,oBAAoB,CAAC;SACjC,QAAQ,CAAC,QAAQ,EAAE,6CAA6C,CAAC;SACjE,QAAQ,CAAC,aAAa,EAAE,qBAAqB,CAAC;SAC9C,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,SAAiB,EAAE,EAAE;QAChD,MAAM,eAAe,CAAC,IAAsB,EAAE,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAA;IACxE,CAAC,CAAC,CAAA;IAEJ,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,IAAoB,EACpB,SAAiB;IAEjB,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,qBAAqB;IACrB,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,GAAG,EAAE,EAAE,CAAC;QACxD,MAAM,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAA;QACtE,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,MAAM,MAAM,GAAG,MAAM,WAAW,CAC9B,WAAW,IAAI,OAAO,SAAS,iBAAiB,EAChD,GAAG,IAAI,cAAc,SAAS,cAAc,EAC5C,mBAAmB,IAAI,EAAE,EACzB,KAAK,IAAI,EAAE;QACT,OAAO,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IACnD,CAAC,CACF,CAAA;IAED,MAAM,CAAC,OAAO,EAAE,CAAA;IAChB,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;IACpC,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAA;IACzD,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;AAC1C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAQnC,wBAAgB,mBAAmB,IAAI,OAAO,CAS7C"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
import chalk from 'chalk';
|
|
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 { DeploymentStatus } from '../types/index.js';
|
|
7
7
|
import { withSpinner } from '../utils/spinner.js';
|
|
@@ -31,8 +31,10 @@ function getStatusColor(status) {
|
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
33
|
async function showStatus(type) {
|
|
34
|
+
// Check authentication first
|
|
35
|
+
const authToken = requireAuth();
|
|
34
36
|
const config = requireConfig();
|
|
35
|
-
const apiClient = new ForgecartApiClient(config.apiUrl, config.channelToken);
|
|
37
|
+
const apiClient = new ForgecartApiClient(config.apiUrl, config.channelToken, authToken);
|
|
36
38
|
if (type) {
|
|
37
39
|
// Show status for specific deployment
|
|
38
40
|
const deployment = await withSpinner('Fetching deployment status...', 'Status retrieved', 'Failed to fetch status', async () => {
|
|
@@ -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,15 +14,17 @@ export function createWhoamiCommand() {
|
|
|
14
14
|
async function showWhoami() {
|
|
15
15
|
const projectRoot = findProjectRoot();
|
|
16
16
|
if (!projectRoot) {
|
|
17
|
-
logger.error('Not in a
|
|
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
|
|
22
|
+
logger.error('Invalid ForgeCart configuration');
|
|
23
23
|
process.exit(1);
|
|
24
24
|
}
|
|
25
|
-
|
|
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
|
});
|
|
@@ -32,12 +34,21 @@ async function showWhoami() {
|
|
|
32
34
|
}
|
|
33
35
|
logger.newline();
|
|
34
36
|
logger.title('Channel Information');
|
|
37
|
+
logger.keyValue('Name', channelInfo.name);
|
|
38
|
+
logger.keyValue('Domain', channelInfo.domain);
|
|
35
39
|
logger.keyValue('Channel ID', channelInfo.id);
|
|
36
|
-
logger.keyValue('Channel Code', channelInfo.code);
|
|
37
40
|
logger.keyValue('API URL', config.apiUrl);
|
|
38
41
|
logger.newline();
|
|
39
|
-
logger.
|
|
40
|
-
|
|
42
|
+
logger.title('Application');
|
|
43
|
+
if (channelInfo.hasApplication && channelInfo.applicationName) {
|
|
44
|
+
logger.keyValue('Name', channelInfo.applicationName);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
logger.info('No application deployed');
|
|
48
|
+
}
|
|
49
|
+
logger.newline();
|
|
50
|
+
logger.title('Project');
|
|
51
|
+
logger.keyValue('Root', projectRoot);
|
|
41
52
|
logger.keyValue('Storefront Path', config.storefrontPath);
|
|
42
53
|
if (config.applicationPath) {
|
|
43
54
|
logger.keyValue('Application Path', config.applicationPath);
|
|
@@ -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":["
|
|
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"}
|