@forgecart/cli 1.1.0 → 2.0.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.
- package/dist/bin/forgecart.d.ts +2 -0
- package/dist/bin/forgecart.js +4 -0
- package/dist/bin/forgecart.js.map +1 -0
- package/dist/src/cli.d.ts +14 -1
- package/dist/src/cli.js +30 -15
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/init.d.ts +20 -2
- package/dist/src/commands/init.js +88 -307
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/placeholders.d.ts +19 -0
- package/dist/src/commands/placeholders.js +109 -0
- package/dist/src/commands/placeholders.js.map +1 -0
- package/dist/src/output.d.ts +11 -0
- package/dist/src/output.js +16 -0
- package/dist/src/output.js.map +1 -0
- package/package.json +21 -11
- package/templates/storefront/.env.example +12 -0
- package/templates/storefront/.forgecartignore +2 -0
- package/templates/storefront/Procfile +1 -0
- package/templates/storefront/README.md +87 -0
- package/templates/storefront/next.config.js +14 -0
- package/templates/storefront/package.json +25 -0
- package/templates/storefront/postcss.config.js +6 -0
- package/templates/storefront/src/app/cart/page.tsx +110 -0
- package/templates/storefront/src/app/globals.css +13 -0
- package/templates/storefront/src/app/layout.tsx +30 -0
- package/templates/storefront/src/app/page.tsx +49 -0
- package/templates/storefront/src/app/products/[slug]/not-found.tsx +20 -0
- package/templates/storefront/src/app/products/[slug]/page.tsx +96 -0
- package/templates/storefront/src/app/products/page.tsx +27 -0
- package/templates/storefront/src/components/AddToCartButton.tsx +30 -0
- package/templates/storefront/src/components/Header.tsx +36 -0
- package/templates/storefront/src/components/ProductCard.tsx +43 -0
- package/templates/storefront/src/lib/cart-context.tsx +116 -0
- package/templates/storefront/src/lib/forgecart.ts +202 -0
- package/{dist/templates/storefront-additions → templates/storefront}/tailwind.config.js +1 -1
- package/templates/storefront/tsconfig.json +23 -0
- package/LICENSE +0 -21
- package/README.md +0 -179
- package/bin/forgecart.js +0 -3
- package/dist/package.json +0 -50
- package/dist/src/cli.d.ts.map +0 -1
- package/dist/src/commands/delete.d.ts +0 -3
- package/dist/src/commands/delete.d.ts.map +0 -1
- package/dist/src/commands/delete.js +0 -60
- package/dist/src/commands/delete.js.map +0 -1
- package/dist/src/commands/deploy.d.ts +0 -3
- package/dist/src/commands/deploy.d.ts.map +0 -1
- package/dist/src/commands/deploy.js +0 -243
- package/dist/src/commands/deploy.js.map +0 -1
- package/dist/src/commands/env.d.ts +0 -3
- package/dist/src/commands/env.d.ts.map +0 -1
- package/dist/src/commands/env.js +0 -158
- package/dist/src/commands/env.js.map +0 -1
- package/dist/src/commands/init.d.ts.map +0 -1
- package/dist/src/commands/list.d.ts +0 -3
- package/dist/src/commands/list.d.ts.map +0 -1
- package/dist/src/commands/list.js +0 -65
- package/dist/src/commands/list.js.map +0 -1
- package/dist/src/commands/login.d.ts +0 -3
- package/dist/src/commands/login.d.ts.map +0 -1
- package/dist/src/commands/login.js +0 -120
- package/dist/src/commands/login.js.map +0 -1
- package/dist/src/commands/logs.d.ts +0 -3
- package/dist/src/commands/logs.d.ts.map +0 -1
- package/dist/src/commands/logs.js +0 -88
- package/dist/src/commands/logs.js.map +0 -1
- package/dist/src/commands/scale.d.ts +0 -3
- package/dist/src/commands/scale.d.ts.map +0 -1
- package/dist/src/commands/scale.js +0 -49
- package/dist/src/commands/scale.js.map +0 -1
- package/dist/src/commands/status.d.ts +0 -3
- package/dist/src/commands/status.d.ts.map +0 -1
- package/dist/src/commands/status.js +0 -90
- package/dist/src/commands/status.js.map +0 -1
- package/dist/src/commands/whoami.d.ts +0 -3
- package/dist/src/commands/whoami.d.ts.map +0 -1
- package/dist/src/commands/whoami.js +0 -59
- package/dist/src/commands/whoami.js.map +0 -1
- package/dist/src/index.d.ts +0 -3
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -5
- package/dist/src/index.js.map +0 -1
- package/dist/src/lib/api-client.d.ts +0 -34
- package/dist/src/lib/api-client.d.ts.map +0 -1
- package/dist/src/lib/api-client.js +0 -141
- package/dist/src/lib/api-client.js.map +0 -1
- package/dist/src/lib/archive.d.ts +0 -9
- package/dist/src/lib/archive.d.ts.map +0 -1
- package/dist/src/lib/archive.js +0 -118
- package/dist/src/lib/archive.js.map +0 -1
- package/dist/src/lib/config-updater.d.ts +0 -10
- package/dist/src/lib/config-updater.d.ts.map +0 -1
- package/dist/src/lib/config-updater.js +0 -34
- package/dist/src/lib/config-updater.js.map +0 -1
- package/dist/src/lib/config.d.ts +0 -53
- package/dist/src/lib/config.d.ts.map +0 -1
- package/dist/src/lib/config.js +0 -162
- package/dist/src/lib/config.js.map +0 -1
- package/dist/src/lib/env-sync.d.ts +0 -44
- package/dist/src/lib/env-sync.d.ts.map +0 -1
- package/dist/src/lib/env-sync.js +0 -207
- package/dist/src/lib/env-sync.js.map +0 -1
- package/dist/src/lib/logger.d.ts +0 -15
- package/dist/src/lib/logger.d.ts.map +0 -1
- package/dist/src/lib/logger.js +0 -54
- package/dist/src/lib/logger.js.map +0 -1
- package/dist/src/lib/nx-generator.d.ts +0 -22
- package/dist/src/lib/nx-generator.d.ts.map +0 -1
- package/dist/src/lib/nx-generator.js +0 -345
- package/dist/src/lib/nx-generator.js.map +0 -1
- package/dist/src/lib/standalone.d.ts +0 -28
- package/dist/src/lib/standalone.d.ts.map +0 -1
- package/dist/src/lib/standalone.js +0 -107
- package/dist/src/lib/standalone.js.map +0 -1
- package/dist/src/types/index.d.ts +0 -80
- package/dist/src/types/index.d.ts.map +0 -1
- package/dist/src/types/index.js +0 -14
- package/dist/src/types/index.js.map +0 -1
- package/dist/src/utils/spinner.d.ts +0 -16
- package/dist/src/utils/spinner.d.ts.map +0 -1
- package/dist/src/utils/spinner.js +0 -88
- package/dist/src/utils/spinner.js.map +0 -1
- package/dist/src/utils/validation.d.ts +0 -12
- package/dist/src/utils/validation.d.ts.map +0 -1
- package/dist/src/utils/validation.js +0 -82
- package/dist/src/utils/validation.js.map +0 -1
- package/dist/templates/application-additions/.forgecartignore +0 -37
- package/dist/templates/application-additions/Procfile +0 -1
- package/dist/templates/application-additions/src/app/app.module.ts +0 -16
- package/dist/templates/application-additions/src/services/forgecart.service.ts +0 -62
- package/dist/templates/application-additions/src/services/index.ts +0 -2
- package/dist/templates/application-additions/src/services/product-event-listener.service.ts +0 -150
- package/dist/templates/application-e2e-additions/src/support/global-setup.ts +0 -16
- package/dist/templates/application-e2e-additions/src/support/test-setup.ts +0 -9
- package/dist/templates/storefront-additions/.forgecartignore +0 -64
- package/dist/templates/storefront-additions/Procfile +0 -1
- package/dist/templates/storefront-additions/package.json +0 -11
- package/dist/templates/storefront-additions/postcss.config.js +0 -5
- package/dist/templates/storefront-additions/src/app/cart/page.tsx +0 -77
- package/dist/templates/storefront-additions/src/app/global.css +0 -1
- package/dist/templates/storefront-additions/src/app/layout.tsx +0 -25
- package/dist/templates/storefront-additions/src/app/page.tsx +0 -43
- package/dist/templates/storefront-additions/src/components/AddToCartButton.tsx +0 -29
- package/dist/templates/storefront-additions/src/components/CartItem.tsx +0 -82
- package/dist/templates/storefront-additions/src/components/Header.tsx +0 -42
- package/dist/templates/storefront-additions/src/components/ProductCard.tsx +0 -57
- package/dist/templates/storefront-additions/src/components/QuantitySelector.tsx +0 -35
- package/dist/templates/storefront-additions/src/context/CartContext.tsx +0 -158
- package/dist/templates/storefront-additions/src/lib/forgecart.ts +0 -22
- package/dist/templates/storefront-e2e-additions/playwright.config.ts +0 -26
- package/dist/templates/storefront-e2e-additions/src/example.spec.ts +0 -11
- package/dist/templates/workspace/.nxignore +0 -2
- package/templates/application-additions/.forgecartignore +0 -37
- package/templates/application-additions/Procfile +0 -1
- package/templates/application-additions/src/app/app.module.ts +0 -16
- package/templates/application-additions/src/services/forgecart.service.ts +0 -62
- package/templates/application-additions/src/services/index.ts +0 -2
- package/templates/application-additions/src/services/product-event-listener.service.ts +0 -150
- package/templates/application-e2e-additions/src/support/global-setup.ts +0 -16
- package/templates/application-e2e-additions/src/support/test-setup.ts +0 -9
- package/templates/storefront-additions/.forgecartignore +0 -64
- package/templates/storefront-additions/Procfile +0 -1
- package/templates/storefront-additions/package.json +0 -11
- package/templates/storefront-additions/postcss.config.js +0 -5
- package/templates/storefront-additions/src/app/cart/page.tsx +0 -77
- package/templates/storefront-additions/src/app/global.css +0 -1
- package/templates/storefront-additions/src/app/layout.tsx +0 -25
- package/templates/storefront-additions/src/app/page.tsx +0 -43
- package/templates/storefront-additions/src/components/AddToCartButton.tsx +0 -29
- package/templates/storefront-additions/src/components/CartItem.tsx +0 -82
- package/templates/storefront-additions/src/components/Header.tsx +0 -42
- package/templates/storefront-additions/src/components/ProductCard.tsx +0 -57
- package/templates/storefront-additions/src/components/QuantitySelector.tsx +0 -35
- package/templates/storefront-additions/src/context/CartContext.tsx +0 -158
- package/templates/storefront-additions/src/lib/forgecart.ts +0 -22
- package/templates/storefront-additions/tailwind.config.js +0 -8
- package/templates/storefront-e2e-additions/playwright.config.ts +0 -26
- package/templates/storefront-e2e-additions/src/example.spec.ts +0 -11
- package/templates/workspace/.nxignore +0 -2
package/dist/src/commands/env.js
DELETED
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import Table from 'cli-table3';
|
|
3
|
-
import logger from '../lib/logger.js';
|
|
4
|
-
import { requireConfig, requireAuth } from '../lib/config.js';
|
|
5
|
-
import { ForgecartApiClient } from '../lib/api-client.js';
|
|
6
|
-
import { DeploymentType } from '../types/index.js';
|
|
7
|
-
import { withSpinner } from '../utils/spinner.js';
|
|
8
|
-
import { syncEnvToDeployment, syncAllEnvToDeployments, getEnvFilePath, } from '../lib/env-sync.js';
|
|
9
|
-
export function createEnvCommand() {
|
|
10
|
-
const cmd = new Command('env').description('Manage environment variables');
|
|
11
|
-
cmd
|
|
12
|
-
.command('get <type>')
|
|
13
|
-
.description('Get environment variables for a deployment')
|
|
14
|
-
.action(async (type) => {
|
|
15
|
-
await getEnv(type);
|
|
16
|
-
});
|
|
17
|
-
cmd
|
|
18
|
-
.command('set <type> <key> <value>')
|
|
19
|
-
.description('Set an environment variable')
|
|
20
|
-
.action(async (type, key, value) => {
|
|
21
|
-
await setEnv(type, key, value);
|
|
22
|
-
});
|
|
23
|
-
cmd
|
|
24
|
-
.command('unset <type> <key>')
|
|
25
|
-
.description('Remove an environment variable')
|
|
26
|
-
.action(async (type, key) => {
|
|
27
|
-
await unsetEnv(type, key);
|
|
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
|
-
});
|
|
35
|
-
return cmd;
|
|
36
|
-
}
|
|
37
|
-
async function getEnv(type) {
|
|
38
|
-
// Validate type
|
|
39
|
-
if (type !== DeploymentType.STOREFRONT &&
|
|
40
|
-
type !== DeploymentType.APPLICATION) {
|
|
41
|
-
logger.error('Invalid deployment type. Use "storefront" or "application".');
|
|
42
|
-
process.exit(1);
|
|
43
|
-
}
|
|
44
|
-
const config = requireConfig();
|
|
45
|
-
const apiClient = new ForgecartApiClient(config.apiUrl, config.channelToken, requireAuth());
|
|
46
|
-
const env = await withSpinner(`Fetching environment variables for ${type}...`, 'Environment variables retrieved', 'Failed to fetch environment variables', async () => {
|
|
47
|
-
return apiClient.getDeploymentEnv(type);
|
|
48
|
-
});
|
|
49
|
-
if (env.length === 0) {
|
|
50
|
-
logger.info(`No environment variables set for ${type}`);
|
|
51
|
-
apiClient.dispose();
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
const table = new Table({
|
|
55
|
-
head: ['Key', 'Value'],
|
|
56
|
-
style: {
|
|
57
|
-
head: ['cyan'],
|
|
58
|
-
},
|
|
59
|
-
});
|
|
60
|
-
for (const item of env) {
|
|
61
|
-
// Mask sensitive values
|
|
62
|
-
const displayValue = item.key.toLowerCase().includes('secret') ||
|
|
63
|
-
item.key.toLowerCase().includes('password') ||
|
|
64
|
-
item.key.toLowerCase().includes('key')
|
|
65
|
-
? '********'
|
|
66
|
-
: item.value;
|
|
67
|
-
table.push([item.key, displayValue]);
|
|
68
|
-
}
|
|
69
|
-
console.log(table.toString());
|
|
70
|
-
apiClient.dispose();
|
|
71
|
-
}
|
|
72
|
-
async function setEnv(type, key, value) {
|
|
73
|
-
// Validate type
|
|
74
|
-
if (type !== DeploymentType.STOREFRONT &&
|
|
75
|
-
type !== DeploymentType.APPLICATION) {
|
|
76
|
-
logger.error('Invalid deployment type. Use "storefront" or "application".');
|
|
77
|
-
process.exit(1);
|
|
78
|
-
}
|
|
79
|
-
// Validate key
|
|
80
|
-
if (!key || !/^[A-Z_][A-Z0-9_]*$/i.test(key)) {
|
|
81
|
-
logger.error('Invalid environment variable name. Use only letters, numbers, and underscores.');
|
|
82
|
-
process.exit(1);
|
|
83
|
-
}
|
|
84
|
-
const config = requireConfig();
|
|
85
|
-
const apiClient = new ForgecartApiClient(config.apiUrl, config.channelToken, requireAuth());
|
|
86
|
-
await withSpinner(`Setting ${key} for ${type}...`, `${key} set successfully`, `Failed to set ${key}`, async () => {
|
|
87
|
-
// Use bulk API with single variable
|
|
88
|
-
const success = await apiClient.setDeploymentEnv(type, [{ key, value }]);
|
|
89
|
-
if (!success) {
|
|
90
|
-
throw new Error('Failed to set environment variable');
|
|
91
|
-
}
|
|
92
|
-
});
|
|
93
|
-
logger.info('Note: The deployment will be restarted automatically for changes to take effect.');
|
|
94
|
-
apiClient.dispose();
|
|
95
|
-
}
|
|
96
|
-
async function unsetEnv(type, key) {
|
|
97
|
-
// Validate type
|
|
98
|
-
if (type !== DeploymentType.STOREFRONT &&
|
|
99
|
-
type !== DeploymentType.APPLICATION) {
|
|
100
|
-
logger.error('Invalid deployment type. Use "storefront" or "application".');
|
|
101
|
-
process.exit(1);
|
|
102
|
-
}
|
|
103
|
-
const config = requireConfig();
|
|
104
|
-
const apiClient = new ForgecartApiClient(config.apiUrl, config.channelToken, requireAuth());
|
|
105
|
-
await withSpinner(`Removing ${key} from ${type}...`, `${key} removed successfully`, `Failed to remove ${key}`, async () => {
|
|
106
|
-
// Use bulk API with single key
|
|
107
|
-
const success = await apiClient.unsetDeploymentEnv(type, [key]);
|
|
108
|
-
if (!success) {
|
|
109
|
-
throw new Error('Failed to remove environment variable');
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
logger.info('Note: The deployment may need to be restarted for changes to take effect.');
|
|
113
|
-
apiClient.dispose();
|
|
114
|
-
}
|
|
115
|
-
async function pushEnv(type) {
|
|
116
|
-
// Validate type if provided
|
|
117
|
-
if (type &&
|
|
118
|
-
type !== DeploymentType.STOREFRONT &&
|
|
119
|
-
type !== DeploymentType.APPLICATION) {
|
|
120
|
-
logger.error('Invalid deployment type. Use "storefront" or "application".');
|
|
121
|
-
process.exit(1);
|
|
122
|
-
}
|
|
123
|
-
const config = requireConfig();
|
|
124
|
-
const apiClient = new ForgecartApiClient(config.apiUrl, config.channelToken, requireAuth());
|
|
125
|
-
if (type) {
|
|
126
|
-
// Push for specific type
|
|
127
|
-
const envFilePath = getEnvFilePath(type);
|
|
128
|
-
if (!envFilePath) {
|
|
129
|
-
logger.error(`Could not find .env file path for ${type}`);
|
|
130
|
-
process.exit(1);
|
|
131
|
-
}
|
|
132
|
-
logger.info(`Pushing environment variables from ${envFilePath}`);
|
|
133
|
-
const result = await withSpinner(`Syncing environment variables for ${type}...`, `Environment variables synced`, `Failed to sync environment variables`, async () => {
|
|
134
|
-
return syncEnvToDeployment(apiClient, type);
|
|
135
|
-
});
|
|
136
|
-
logger.info(`Synced ${result.synced} variable(s)${result.removed > 0 ? `, removed ${result.removed}` : ''}`);
|
|
137
|
-
}
|
|
138
|
-
else {
|
|
139
|
-
// Push for all types
|
|
140
|
-
logger.info('Pushing environment variables for all deployments');
|
|
141
|
-
const results = await withSpinner('Syncing environment variables...', 'Environment variables synced', 'Failed to sync environment variables', async () => {
|
|
142
|
-
return syncAllEnvToDeployments(apiClient);
|
|
143
|
-
});
|
|
144
|
-
if (results.storefront.synced > 0 || results.storefront.removed > 0) {
|
|
145
|
-
logger.info(`Storefront: ${results.storefront.synced} synced${results.storefront.removed > 0 ? `, ${results.storefront.removed} removed` : ''}`);
|
|
146
|
-
}
|
|
147
|
-
if (results.application.synced > 0 || results.application.removed > 0) {
|
|
148
|
-
logger.info(`Application: ${results.application.synced} synced${results.application.removed > 0 ? `, ${results.application.removed} removed` : ''}`);
|
|
149
|
-
}
|
|
150
|
-
const totalSynced = results.storefront.synced + results.application.synced;
|
|
151
|
-
if (totalSynced === 0) {
|
|
152
|
-
logger.info('No .env files found or no variables to sync');
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
logger.info('Note: The deployment may need to be restarted for changes to take effect.');
|
|
156
|
-
apiClient.dispose();
|
|
157
|
-
}
|
|
158
|
-
//# sourceMappingURL=env.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/commands/env.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import Table from 'cli-table3';
|
|
3
|
-
import chalk from 'chalk';
|
|
4
|
-
import logger from '../lib/logger.js';
|
|
5
|
-
import { requireConfig, requireAuth } from '../lib/config.js';
|
|
6
|
-
import { ForgecartApiClient } from '../lib/api-client.js';
|
|
7
|
-
import { DeploymentStatus } from '../types/index.js';
|
|
8
|
-
export function createListCommand() {
|
|
9
|
-
const cmd = new Command('list')
|
|
10
|
-
.alias('ls')
|
|
11
|
-
.description('List all deployments for this channel')
|
|
12
|
-
.action(async () => {
|
|
13
|
-
await listDeployments();
|
|
14
|
-
});
|
|
15
|
-
return cmd;
|
|
16
|
-
}
|
|
17
|
-
function getStatusColor(status) {
|
|
18
|
-
switch (status) {
|
|
19
|
-
case DeploymentStatus.RUNNING:
|
|
20
|
-
return chalk.green(status);
|
|
21
|
-
case DeploymentStatus.STAGING:
|
|
22
|
-
return chalk.yellow(status);
|
|
23
|
-
case DeploymentStatus.PENDING:
|
|
24
|
-
return chalk.blue(status);
|
|
25
|
-
case DeploymentStatus.ERROR:
|
|
26
|
-
return chalk.red(status);
|
|
27
|
-
case DeploymentStatus.STOPPED:
|
|
28
|
-
return chalk.gray(status);
|
|
29
|
-
default:
|
|
30
|
-
return status;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
async function listDeployments() {
|
|
34
|
-
// Check authentication first
|
|
35
|
-
const authToken = requireAuth();
|
|
36
|
-
const config = requireConfig();
|
|
37
|
-
const apiClient = new ForgecartApiClient(config.apiUrl, config.channelToken, authToken);
|
|
38
|
-
const deployments = await apiClient.getDeployments();
|
|
39
|
-
if (deployments.length === 0) {
|
|
40
|
-
logger.info('No deployments found');
|
|
41
|
-
logger.log('Run "forgecart deploy" to deploy your application');
|
|
42
|
-
apiClient.dispose();
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
const table = new Table({
|
|
46
|
-
head: ['Type', 'Status', 'URL', 'Instances', 'Last Deployed'],
|
|
47
|
-
style: {
|
|
48
|
-
head: ['cyan'],
|
|
49
|
-
},
|
|
50
|
-
});
|
|
51
|
-
for (const deployment of deployments) {
|
|
52
|
-
table.push([
|
|
53
|
-
deployment.type,
|
|
54
|
-
getStatusColor(deployment.status),
|
|
55
|
-
deployment.url || '-',
|
|
56
|
-
deployment.instances.toString(),
|
|
57
|
-
deployment.lastDeployedAt
|
|
58
|
-
? new Date(deployment.lastDeployedAt).toLocaleString()
|
|
59
|
-
: '-',
|
|
60
|
-
]);
|
|
61
|
-
}
|
|
62
|
-
console.log(table.toString());
|
|
63
|
-
apiClient.dispose();
|
|
64
|
-
}
|
|
65
|
-
//# sourceMappingURL=list.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,120 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,88 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../src/commands/logs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
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,49 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import logger from '../lib/logger.js';
|
|
3
|
-
import { requireConfig, requireAuth } from '../lib/config.js';
|
|
4
|
-
import { ForgecartApiClient } from '../lib/api-client.js';
|
|
5
|
-
import { DeploymentType } from '../types/index.js';
|
|
6
|
-
import { withSpinner } from '../utils/spinner.js';
|
|
7
|
-
export function createScaleCommand() {
|
|
8
|
-
const cmd = new Command('scale')
|
|
9
|
-
.description('Scale a deployment')
|
|
10
|
-
.argument('<type>', 'Deployment type (storefront or application)')
|
|
11
|
-
.argument('<instances>', 'Number of instances')
|
|
12
|
-
.action(async (type, instances) => {
|
|
13
|
-
await scaleDeployment(type, parseInt(instances, 10));
|
|
14
|
-
});
|
|
15
|
-
return cmd;
|
|
16
|
-
}
|
|
17
|
-
async function scaleDeployment(type, instances) {
|
|
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
|
-
// Validate instances
|
|
25
|
-
if (isNaN(instances) || instances < 0 || instances > 10) {
|
|
26
|
-
logger.error('Invalid number of instances. Must be between 0 and 10.');
|
|
27
|
-
process.exit(1);
|
|
28
|
-
}
|
|
29
|
-
// Check authentication first
|
|
30
|
-
const authToken = requireAuth();
|
|
31
|
-
const config = requireConfig();
|
|
32
|
-
const apiClient = new ForgecartApiClient(config.apiUrl, config.channelToken, authToken);
|
|
33
|
-
// Check if deployment exists
|
|
34
|
-
const deployment = await apiClient.getDeployment(type);
|
|
35
|
-
if (!deployment) {
|
|
36
|
-
logger.error(`No ${type} deployment found`);
|
|
37
|
-
process.exit(1);
|
|
38
|
-
}
|
|
39
|
-
// Scale deployment
|
|
40
|
-
const scaled = await withSpinner(`Scaling ${type} to ${instances} instance(s)...`, `${type} scaled to ${instances} instance(s)`, `Failed to scale ${type}`, async () => {
|
|
41
|
-
return apiClient.scaleDeployment(type, instances);
|
|
42
|
-
});
|
|
43
|
-
logger.newline();
|
|
44
|
-
logger.keyValue('Type', scaled.type);
|
|
45
|
-
logger.keyValue('Instances', scaled.instances.toString());
|
|
46
|
-
logger.keyValue('Status', scaled.status);
|
|
47
|
-
apiClient.dispose();
|
|
48
|
-
}
|
|
49
|
-
//# sourceMappingURL=scale.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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;IACxC,SAAS,CAAC,OAAO,EAAE,CAAA;AACrB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|