@cicore/cli 1.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/bin/ci.js +13 -0
- package/dist/commands/addon/api-actions.d.ts +45 -0
- package/dist/commands/addon/api-actions.d.ts.map +1 -0
- package/dist/commands/addon/api-actions.js +281 -0
- package/dist/commands/addon/api-actions.js.map +1 -0
- package/dist/commands/addon/build.d.ts +11 -0
- package/dist/commands/addon/build.d.ts.map +1 -0
- package/dist/commands/addon/build.js +182 -0
- package/dist/commands/addon/build.js.map +1 -0
- package/dist/commands/addon/create.d.ts +11 -0
- package/dist/commands/addon/create.d.ts.map +1 -0
- package/dist/commands/addon/create.js +1186 -0
- package/dist/commands/addon/create.js.map +1 -0
- package/dist/commands/addon/delete.d.ts +13 -0
- package/dist/commands/addon/delete.d.ts.map +1 -0
- package/dist/commands/addon/delete.js +83 -0
- package/dist/commands/addon/delete.js.map +1 -0
- package/dist/commands/addon/deploy.d.ts +27 -0
- package/dist/commands/addon/deploy.d.ts.map +1 -0
- package/dist/commands/addon/deploy.js +459 -0
- package/dist/commands/addon/deploy.js.map +1 -0
- package/dist/commands/addon/dev-deploy.d.ts +31 -0
- package/dist/commands/addon/dev-deploy.d.ts.map +1 -0
- package/dist/commands/addon/dev-deploy.js +128 -0
- package/dist/commands/addon/dev-deploy.js.map +1 -0
- package/dist/commands/addon/dev.d.ts +36 -0
- package/dist/commands/addon/dev.d.ts.map +1 -0
- package/dist/commands/addon/dev.js +323 -0
- package/dist/commands/addon/dev.js.map +1 -0
- package/dist/commands/addon/extract-classes.d.ts +23 -0
- package/dist/commands/addon/extract-classes.d.ts.map +1 -0
- package/dist/commands/addon/extract-classes.js +281 -0
- package/dist/commands/addon/extract-classes.js.map +1 -0
- package/dist/commands/addon/generate-safelist.d.ts +24 -0
- package/dist/commands/addon/generate-safelist.d.ts.map +1 -0
- package/dist/commands/addon/generate-safelist.js +276 -0
- package/dist/commands/addon/generate-safelist.js.map +1 -0
- package/dist/commands/addon/index.d.ts +19 -0
- package/dist/commands/addon/index.d.ts.map +1 -0
- package/dist/commands/addon/index.js +296 -0
- package/dist/commands/addon/index.js.map +1 -0
- package/dist/commands/addon/init-repo.d.ts +25 -0
- package/dist/commands/addon/init-repo.d.ts.map +1 -0
- package/dist/commands/addon/init-repo.js +171 -0
- package/dist/commands/addon/init-repo.js.map +1 -0
- package/dist/commands/addon/install.d.ts +23 -0
- package/dist/commands/addon/install.d.ts.map +1 -0
- package/dist/commands/addon/install.js +84 -0
- package/dist/commands/addon/install.js.map +1 -0
- package/dist/commands/addon/list.d.ts +10 -0
- package/dist/commands/addon/list.d.ts.map +1 -0
- package/dist/commands/addon/list.js +102 -0
- package/dist/commands/addon/list.js.map +1 -0
- package/dist/commands/addon/manifest-refresh.d.ts +17 -0
- package/dist/commands/addon/manifest-refresh.d.ts.map +1 -0
- package/dist/commands/addon/manifest-refresh.js +48 -0
- package/dist/commands/addon/manifest-refresh.js.map +1 -0
- package/dist/commands/addon/migrate.d.ts +40 -0
- package/dist/commands/addon/migrate.d.ts.map +1 -0
- package/dist/commands/addon/migrate.js +236 -0
- package/dist/commands/addon/migrate.js.map +1 -0
- package/dist/commands/addon/publish.d.ts +33 -0
- package/dist/commands/addon/publish.d.ts.map +1 -0
- package/dist/commands/addon/publish.js +236 -0
- package/dist/commands/addon/publish.js.map +1 -0
- package/dist/commands/addon/scaffold-quality.d.ts +21 -0
- package/dist/commands/addon/scaffold-quality.d.ts.map +1 -0
- package/dist/commands/addon/scaffold-quality.js +90 -0
- package/dist/commands/addon/scaffold-quality.js.map +1 -0
- package/dist/commands/addon/sign.d.ts +9 -0
- package/dist/commands/addon/sign.d.ts.map +1 -0
- package/dist/commands/addon/sign.js +83 -0
- package/dist/commands/addon/sign.js.map +1 -0
- package/dist/commands/addon/toggle.d.ts +6 -0
- package/dist/commands/addon/toggle.d.ts.map +1 -0
- package/dist/commands/addon/toggle.js +46 -0
- package/dist/commands/addon/toggle.js.map +1 -0
- package/dist/commands/agent/index.d.ts +34 -0
- package/dist/commands/agent/index.d.ts.map +1 -0
- package/dist/commands/agent/index.js +564 -0
- package/dist/commands/agent/index.js.map +1 -0
- package/dist/commands/brand/index.d.ts +54 -0
- package/dist/commands/brand/index.d.ts.map +1 -0
- package/dist/commands/brand/index.js +367 -0
- package/dist/commands/brand/index.js.map +1 -0
- package/dist/commands/build/index.d.ts +53 -0
- package/dist/commands/build/index.d.ts.map +1 -0
- package/dist/commands/build/index.js +726 -0
- package/dist/commands/build/index.js.map +1 -0
- package/dist/commands/cache/flush-local.d.ts +31 -0
- package/dist/commands/cache/flush-local.d.ts.map +1 -0
- package/dist/commands/cache/flush-local.js +161 -0
- package/dist/commands/cache/flush-local.js.map +1 -0
- package/dist/commands/cache/index.d.ts +14 -0
- package/dist/commands/cache/index.d.ts.map +1 -0
- package/dist/commands/cache/index.js +453 -0
- package/dist/commands/cache/index.js.map +1 -0
- package/dist/commands/check/index.d.ts +8 -0
- package/dist/commands/check/index.d.ts.map +1 -0
- package/dist/commands/check/index.js +1316 -0
- package/dist/commands/check/index.js.map +1 -0
- package/dist/commands/cloudflare/index.d.ts +8 -0
- package/dist/commands/cloudflare/index.d.ts.map +1 -0
- package/dist/commands/cloudflare/index.js +453 -0
- package/dist/commands/cloudflare/index.js.map +1 -0
- package/dist/commands/core/create.d.ts +12 -0
- package/dist/commands/core/create.d.ts.map +1 -0
- package/dist/commands/core/create.js +206 -0
- package/dist/commands/core/create.js.map +1 -0
- package/dist/commands/core/delete.d.ts +11 -0
- package/dist/commands/core/delete.d.ts.map +1 -0
- package/dist/commands/core/delete.js +64 -0
- package/dist/commands/core/delete.js.map +1 -0
- package/dist/commands/core/env.d.ts +12 -0
- package/dist/commands/core/env.d.ts.map +1 -0
- package/dist/commands/core/env.js +95 -0
- package/dist/commands/core/env.js.map +1 -0
- package/dist/commands/core/health.d.ts +6 -0
- package/dist/commands/core/health.d.ts.map +1 -0
- package/dist/commands/core/health.js +215 -0
- package/dist/commands/core/health.js.map +1 -0
- package/dist/commands/core/index.d.ts +15 -0
- package/dist/commands/core/index.d.ts.map +1 -0
- package/dist/commands/core/index.js +86 -0
- package/dist/commands/core/index.js.map +1 -0
- package/dist/commands/core/list.d.ts +11 -0
- package/dist/commands/core/list.d.ts.map +1 -0
- package/dist/commands/core/list.js +58 -0
- package/dist/commands/core/list.js.map +1 -0
- package/dist/commands/core/rebuild.d.ts +13 -0
- package/dist/commands/core/rebuild.d.ts.map +1 -0
- package/dist/commands/core/rebuild.js +119 -0
- package/dist/commands/core/rebuild.js.map +1 -0
- package/dist/commands/db/index.d.ts +23 -0
- package/dist/commands/db/index.d.ts.map +1 -0
- package/dist/commands/db/index.js +355 -0
- package/dist/commands/db/index.js.map +1 -0
- package/dist/commands/db/promote-silo.d.ts +320 -0
- package/dist/commands/db/promote-silo.d.ts.map +1 -0
- package/dist/commands/db/promote-silo.js +930 -0
- package/dist/commands/db/promote-silo.js.map +1 -0
- package/dist/commands/db/relocate.d.ts +41 -0
- package/dist/commands/db/relocate.d.ts.map +1 -0
- package/dist/commands/db/relocate.js +482 -0
- package/dist/commands/db/relocate.js.map +1 -0
- package/dist/commands/db/rollback-silo.d.ts +44 -0
- package/dist/commands/db/rollback-silo.d.ts.map +1 -0
- package/dist/commands/db/rollback-silo.js +402 -0
- package/dist/commands/db/rollback-silo.js.map +1 -0
- package/dist/commands/deploy/index.d.ts +26 -0
- package/dist/commands/deploy/index.d.ts.map +1 -0
- package/dist/commands/deploy/index.js +107 -0
- package/dist/commands/deploy/index.js.map +1 -0
- package/dist/commands/devops/index.d.ts +6 -0
- package/dist/commands/devops/index.d.ts.map +1 -0
- package/dist/commands/devops/index.js +220 -0
- package/dist/commands/devops/index.js.map +1 -0
- package/dist/commands/domain/index.d.ts +8 -0
- package/dist/commands/domain/index.d.ts.map +1 -0
- package/dist/commands/domain/index.js +386 -0
- package/dist/commands/domain/index.js.map +1 -0
- package/dist/commands/image/index.d.ts +8 -0
- package/dist/commands/image/index.d.ts.map +1 -0
- package/dist/commands/image/index.js +308 -0
- package/dist/commands/image/index.js.map +1 -0
- package/dist/commands/install/factory-reset.d.ts +21 -0
- package/dist/commands/install/factory-reset.d.ts.map +1 -0
- package/dist/commands/install/factory-reset.js +83 -0
- package/dist/commands/install/factory-reset.js.map +1 -0
- package/dist/commands/install/index.d.ts +17 -0
- package/dist/commands/install/index.d.ts.map +1 -0
- package/dist/commands/install/index.js +44 -0
- package/dist/commands/install/index.js.map +1 -0
- package/dist/commands/install/install.d.ts +35 -0
- package/dist/commands/install/install.d.ts.map +1 -0
- package/dist/commands/install/install.js +171 -0
- package/dist/commands/install/install.js.map +1 -0
- package/dist/commands/login/index.d.ts +15 -0
- package/dist/commands/login/index.d.ts.map +1 -0
- package/dist/commands/login/index.js +58 -0
- package/dist/commands/login/index.js.map +1 -0
- package/dist/commands/nginx/index.d.ts +11 -0
- package/dist/commands/nginx/index.d.ts.map +1 -0
- package/dist/commands/nginx/index.js +580 -0
- package/dist/commands/nginx/index.js.map +1 -0
- package/dist/commands/server/bootstrap.d.ts +25 -0
- package/dist/commands/server/bootstrap.d.ts.map +1 -0
- package/dist/commands/server/bootstrap.js +260 -0
- package/dist/commands/server/bootstrap.js.map +1 -0
- package/dist/commands/server/index.d.ts +8 -0
- package/dist/commands/server/index.d.ts.map +1 -0
- package/dist/commands/server/index.js +2524 -0
- package/dist/commands/server/index.js.map +1 -0
- package/dist/commands/setup/index.d.ts +34 -0
- package/dist/commands/setup/index.d.ts.map +1 -0
- package/dist/commands/setup/index.js +423 -0
- package/dist/commands/setup/index.js.map +1 -0
- package/dist/commands/ssl/index.d.ts +8 -0
- package/dist/commands/ssl/index.d.ts.map +1 -0
- package/dist/commands/ssl/index.js +275 -0
- package/dist/commands/ssl/index.js.map +1 -0
- package/dist/commands/superadmin/index.d.ts +16 -0
- package/dist/commands/superadmin/index.d.ts.map +1 -0
- package/dist/commands/superadmin/index.js +81 -0
- package/dist/commands/superadmin/index.js.map +1 -0
- package/dist/commands/tenant/index.d.ts +6 -0
- package/dist/commands/tenant/index.d.ts.map +1 -0
- package/dist/commands/tenant/index.js +192 -0
- package/dist/commands/tenant/index.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +107 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/addon-sign.d.ts +23 -0
- package/dist/lib/addon-sign.d.ts.map +1 -0
- package/dist/lib/addon-sign.js +39 -0
- package/dist/lib/addon-sign.js.map +1 -0
- package/dist/lib/addon-sign.test.d.ts +2 -0
- package/dist/lib/addon-sign.test.d.ts.map +1 -0
- package/dist/lib/addon-sign.test.js +27 -0
- package/dist/lib/addon-sign.test.js.map +1 -0
- package/dist/lib/cdn.d.ts +25 -0
- package/dist/lib/cdn.d.ts.map +1 -0
- package/dist/lib/cdn.js +131 -0
- package/dist/lib/cdn.js.map +1 -0
- package/dist/lib/cloudflare.d.ts +133 -0
- package/dist/lib/cloudflare.d.ts.map +1 -0
- package/dist/lib/cloudflare.js +435 -0
- package/dist/lib/cloudflare.js.map +1 -0
- package/dist/lib/config.d.ts +96 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +132 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/env.d.ts +8 -0
- package/dist/lib/env.d.ts.map +1 -0
- package/dist/lib/env.js +64 -0
- package/dist/lib/env.js.map +1 -0
- package/dist/lib/hosts.d.ts +194 -0
- package/dist/lib/hosts.d.ts.map +1 -0
- package/dist/lib/hosts.js +183 -0
- package/dist/lib/hosts.js.map +1 -0
- package/dist/lib/logger.d.ts +68 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +130 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/nginx-config.d.ts +78 -0
- package/dist/lib/nginx-config.d.ts.map +1 -0
- package/dist/lib/nginx-config.js +736 -0
- package/dist/lib/nginx-config.js.map +1 -0
- package/dist/lib/ops/addon-dev.d.ts +93 -0
- package/dist/lib/ops/addon-dev.d.ts.map +1 -0
- package/dist/lib/ops/addon-dev.js +237 -0
- package/dist/lib/ops/addon-dev.js.map +1 -0
- package/dist/lib/ops/addon-quality.d.ts +38 -0
- package/dist/lib/ops/addon-quality.d.ts.map +1 -0
- package/dist/lib/ops/addon-quality.js +338 -0
- package/dist/lib/ops/addon-quality.js.map +1 -0
- package/dist/lib/ops/addon-routes.d.ts +49 -0
- package/dist/lib/ops/addon-routes.d.ts.map +1 -0
- package/dist/lib/ops/addon-routes.js +189 -0
- package/dist/lib/ops/addon-routes.js.map +1 -0
- package/dist/lib/ops/addon.d.ts +120 -0
- package/dist/lib/ops/addon.d.ts.map +1 -0
- package/dist/lib/ops/addon.js +260 -0
- package/dist/lib/ops/addon.js.map +1 -0
- package/dist/lib/ops/cdn.d.ts +87 -0
- package/dist/lib/ops/cdn.d.ts.map +1 -0
- package/dist/lib/ops/cdn.js +170 -0
- package/dist/lib/ops/cdn.js.map +1 -0
- package/dist/lib/ops/cf.d.ts +36 -0
- package/dist/lib/ops/cf.d.ts.map +1 -0
- package/dist/lib/ops/cf.js +114 -0
- package/dist/lib/ops/cf.js.map +1 -0
- package/dist/lib/ops/compose.d.ts +95 -0
- package/dist/lib/ops/compose.d.ts.map +1 -0
- package/dist/lib/ops/compose.js +165 -0
- package/dist/lib/ops/compose.js.map +1 -0
- package/dist/lib/ops/core.d.ts +117 -0
- package/dist/lib/ops/core.d.ts.map +1 -0
- package/dist/lib/ops/core.js +322 -0
- package/dist/lib/ops/core.js.map +1 -0
- package/dist/lib/ops/db.d.ts +116 -0
- package/dist/lib/ops/db.d.ts.map +1 -0
- package/dist/lib/ops/db.js +351 -0
- package/dist/lib/ops/db.js.map +1 -0
- package/dist/lib/ops/dns.d.ts +111 -0
- package/dist/lib/ops/dns.d.ts.map +1 -0
- package/dist/lib/ops/dns.js +306 -0
- package/dist/lib/ops/dns.js.map +1 -0
- package/dist/lib/ops/image.d.ts +94 -0
- package/dist/lib/ops/image.d.ts.map +1 -0
- package/dist/lib/ops/image.js +159 -0
- package/dist/lib/ops/image.js.map +1 -0
- package/dist/lib/ops/nginx.d.ts +114 -0
- package/dist/lib/ops/nginx.d.ts.map +1 -0
- package/dist/lib/ops/nginx.js +388 -0
- package/dist/lib/ops/nginx.js.map +1 -0
- package/dist/lib/ops/redis.d.ts +7 -0
- package/dist/lib/ops/redis.d.ts.map +1 -0
- package/dist/lib/ops/redis.js +35 -0
- package/dist/lib/ops/redis.js.map +1 -0
- package/dist/lib/ops/ssh.d.ts +127 -0
- package/dist/lib/ops/ssh.d.ts.map +1 -0
- package/dist/lib/ops/ssh.js +269 -0
- package/dist/lib/ops/ssh.js.map +1 -0
- package/dist/lib/prompts.d.ts +46 -0
- package/dist/lib/prompts.d.ts.map +1 -0
- package/dist/lib/prompts.js +113 -0
- package/dist/lib/prompts.js.map +1 -0
- package/dist/lib/sast.d.ts +43 -0
- package/dist/lib/sast.d.ts.map +1 -0
- package/dist/lib/sast.js +79 -0
- package/dist/lib/sast.js.map +1 -0
- package/dist/lib/sast.test.d.ts +2 -0
- package/dist/lib/sast.test.d.ts.map +1 -0
- package/dist/lib/sast.test.js +33 -0
- package/dist/lib/sast.test.js.map +1 -0
- package/dist/lib/shell.d.ts +61 -0
- package/dist/lib/shell.d.ts.map +1 -0
- package/dist/lib/shell.js +183 -0
- package/dist/lib/shell.js.map +1 -0
- package/dist/lib/ssh-config.d.ts +37 -0
- package/dist/lib/ssh-config.d.ts.map +1 -0
- package/dist/lib/ssh-config.js +122 -0
- package/dist/lib/ssh-config.js.map +1 -0
- package/dist/lib/tenant-scope.d.ts +38 -0
- package/dist/lib/tenant-scope.d.ts.map +1 -0
- package/dist/lib/tenant-scope.js +129 -0
- package/dist/lib/tenant-scope.js.map +1 -0
- package/dist/lib/tenant-scope.test.d.ts +2 -0
- package/dist/lib/tenant-scope.test.d.ts.map +1 -0
- package/dist/lib/tenant-scope.test.js +223 -0
- package/dist/lib/tenant-scope.test.js.map +1 -0
- package/package.json +58 -0
- package/templates/bootstrap/.env.template +54 -0
- package/templates/bootstrap/docker-compose.yml +145 -0
- package/templates/vhost.conf.tmpl +446 -0
|
@@ -0,0 +1,435 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CiCore CLI - Cloudflare API Integration
|
|
3
|
+
*
|
|
4
|
+
* Handles DNS management and Origin Certificate generation
|
|
5
|
+
*/
|
|
6
|
+
import fs from 'fs-extra';
|
|
7
|
+
import path from 'path';
|
|
8
|
+
import os from 'os';
|
|
9
|
+
import { log } from './logger.js';
|
|
10
|
+
// Cloudflare API Base URL
|
|
11
|
+
const CF_API_BASE = 'https://api.cloudflare.com/client/v4';
|
|
12
|
+
// Config file path
|
|
13
|
+
const CF_CONFIG_PATH = path.join(os.homedir(), '.vucore', 'cloudflare.json');
|
|
14
|
+
// ============================================
|
|
15
|
+
// CONFIG MANAGEMENT
|
|
16
|
+
// ============================================
|
|
17
|
+
export async function saveCloudflareConfig(config) {
|
|
18
|
+
await fs.ensureDir(path.dirname(CF_CONFIG_PATH));
|
|
19
|
+
await fs.writeJson(CF_CONFIG_PATH, config, { spaces: 2 });
|
|
20
|
+
}
|
|
21
|
+
export async function loadCloudflareConfig() {
|
|
22
|
+
try {
|
|
23
|
+
if (await fs.pathExists(CF_CONFIG_PATH)) {
|
|
24
|
+
return await fs.readJson(CF_CONFIG_PATH);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
// Ignore
|
|
29
|
+
}
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
export async function getCloudflareToken() {
|
|
33
|
+
// Check environment variable first
|
|
34
|
+
if (process.env.CLOUDFLARE_API_TOKEN) {
|
|
35
|
+
return process.env.CLOUDFLARE_API_TOKEN;
|
|
36
|
+
}
|
|
37
|
+
// Check config file
|
|
38
|
+
const config = await loadCloudflareConfig();
|
|
39
|
+
return config?.apiToken || null;
|
|
40
|
+
}
|
|
41
|
+
// ============================================
|
|
42
|
+
// API HELPERS
|
|
43
|
+
// ============================================
|
|
44
|
+
async function cfFetch(endpoint, options = {}) {
|
|
45
|
+
const token = options.token || await getCloudflareToken();
|
|
46
|
+
if (!token) {
|
|
47
|
+
return { success: false, errors: [{ message: 'Cloudflare API token not configured' }] };
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
const response = await fetch(`${CF_API_BASE}${endpoint}`, {
|
|
51
|
+
method: options.method || 'GET',
|
|
52
|
+
headers: {
|
|
53
|
+
'Authorization': `Bearer ${token}`,
|
|
54
|
+
'Content-Type': 'application/json',
|
|
55
|
+
},
|
|
56
|
+
body: options.body ? JSON.stringify(options.body) : undefined,
|
|
57
|
+
});
|
|
58
|
+
const data = await response.json();
|
|
59
|
+
return {
|
|
60
|
+
success: data.success,
|
|
61
|
+
result: data.result,
|
|
62
|
+
errors: data.errors,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
return {
|
|
67
|
+
success: false,
|
|
68
|
+
errors: [{ message: error.message }],
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// ============================================
|
|
73
|
+
// ZONE OPERATIONS
|
|
74
|
+
// ============================================
|
|
75
|
+
/**
|
|
76
|
+
* List all zones (domains) in the account
|
|
77
|
+
*/
|
|
78
|
+
export async function listZones() {
|
|
79
|
+
const response = await cfFetch('/zones');
|
|
80
|
+
if (!response.success) {
|
|
81
|
+
log.error('Failed to list zones:', response.errors?.[0]?.message);
|
|
82
|
+
return [];
|
|
83
|
+
}
|
|
84
|
+
return response.result || [];
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Get zone by domain name
|
|
88
|
+
*/
|
|
89
|
+
export async function getZoneByDomain(domain) {
|
|
90
|
+
// First try exact domain match
|
|
91
|
+
let response = await cfFetch(`/zones?name=${domain}`);
|
|
92
|
+
if (response.success && response.result?.length) {
|
|
93
|
+
return response.result[0];
|
|
94
|
+
}
|
|
95
|
+
// Handle multi-part TLDs like .com.tr, .co.uk
|
|
96
|
+
const parts = domain.split('.');
|
|
97
|
+
// Try different combinations for multi-part TLDs
|
|
98
|
+
// e.g., cicore.com.tr -> try cicore.com.tr first, then com.tr won't work
|
|
99
|
+
// e.g., api.cicore.com.tr -> try cicore.com.tr
|
|
100
|
+
if (parts.length > 2) {
|
|
101
|
+
// Try removing first subdomain
|
|
102
|
+
const withoutSubdomain = parts.slice(1).join('.');
|
|
103
|
+
response = await cfFetch(`/zones?name=${withoutSubdomain}`);
|
|
104
|
+
if (response.success && response.result?.length) {
|
|
105
|
+
return response.result[0];
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Fallback: try last 2 parts (standard TLD)
|
|
109
|
+
const rootDomain = parts.slice(-2).join('.');
|
|
110
|
+
response = await cfFetch(`/zones?name=${rootDomain}`);
|
|
111
|
+
if (!response.success || !response.result?.length) {
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
return response.result[0];
|
|
115
|
+
}
|
|
116
|
+
// ============================================
|
|
117
|
+
// DNS OPERATIONS
|
|
118
|
+
// ============================================
|
|
119
|
+
/**
|
|
120
|
+
* List DNS records for a zone
|
|
121
|
+
*/
|
|
122
|
+
export async function listDNSRecords(zoneId) {
|
|
123
|
+
const response = await cfFetch(`/zones/${zoneId}/dns_records`);
|
|
124
|
+
if (!response.success) {
|
|
125
|
+
log.error('Failed to list DNS records:', response.errors?.[0]?.message);
|
|
126
|
+
return [];
|
|
127
|
+
}
|
|
128
|
+
return response.result || [];
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Create or update DNS record
|
|
132
|
+
*/
|
|
133
|
+
export async function upsertDNSRecord(zoneId, type, name, content, proxied = true, ttl = 1 // 1 = auto
|
|
134
|
+
) {
|
|
135
|
+
// Check if record exists
|
|
136
|
+
const records = await listDNSRecords(zoneId);
|
|
137
|
+
const existing = records.find(r => r.type === type && r.name === name);
|
|
138
|
+
const recordData = {
|
|
139
|
+
type,
|
|
140
|
+
name,
|
|
141
|
+
content,
|
|
142
|
+
proxied,
|
|
143
|
+
ttl,
|
|
144
|
+
};
|
|
145
|
+
let response;
|
|
146
|
+
if (existing) {
|
|
147
|
+
// Update existing record
|
|
148
|
+
response = await cfFetch(`/zones/${zoneId}/dns_records/${existing.id}`, { method: 'PUT', body: recordData });
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
// Create new record
|
|
152
|
+
response = await cfFetch(`/zones/${zoneId}/dns_records`, { method: 'POST', body: recordData });
|
|
153
|
+
}
|
|
154
|
+
if (!response.success) {
|
|
155
|
+
log.error('Failed to upsert DNS record:', response.errors?.[0]?.message);
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
return response.result || null;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Delete DNS record
|
|
162
|
+
*/
|
|
163
|
+
export async function deleteDNSRecord(zoneId, recordId) {
|
|
164
|
+
const response = await cfFetch(`/zones/${zoneId}/dns_records/${recordId}`, { method: 'DELETE' });
|
|
165
|
+
return response.success;
|
|
166
|
+
}
|
|
167
|
+
// ============================================
|
|
168
|
+
// SSL/TLS OPERATIONS
|
|
169
|
+
// ============================================
|
|
170
|
+
/**
|
|
171
|
+
* Get current SSL/TLS mode for a zone
|
|
172
|
+
*/
|
|
173
|
+
export async function getSSLMode(zoneId) {
|
|
174
|
+
const response = await cfFetch(`/zones/${zoneId}/settings/ssl`);
|
|
175
|
+
if (!response.success) {
|
|
176
|
+
return null;
|
|
177
|
+
}
|
|
178
|
+
return response.result?.value || null;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Set SSL/TLS mode for a zone
|
|
182
|
+
* Options: off, flexible, full, strict
|
|
183
|
+
*/
|
|
184
|
+
export async function setSSLMode(zoneId, mode) {
|
|
185
|
+
const response = await cfFetch(`/zones/${zoneId}/settings/ssl`, { method: 'PATCH', body: { value: mode } });
|
|
186
|
+
return response.success;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Create Origin Certificate (15 years, free)
|
|
190
|
+
* This certificate is used between Cloudflare and your origin server
|
|
191
|
+
*/
|
|
192
|
+
export async function createOriginCertificate(hostnames, validityDays = 5475 // 15 years (max)
|
|
193
|
+
) {
|
|
194
|
+
// Get zone ID from first hostname
|
|
195
|
+
const domain = hostnames[0].replace('*.', '');
|
|
196
|
+
// Handle .com.tr, .co.uk etc - try full domain first, then strip subdomains
|
|
197
|
+
let zone = await getZoneByDomain(domain);
|
|
198
|
+
if (!zone) {
|
|
199
|
+
// Try with last 3 parts (e.g., cicore.com.tr)
|
|
200
|
+
const parts = domain.split('.');
|
|
201
|
+
if (parts.length > 2) {
|
|
202
|
+
const rootDomain = parts.slice(-3).join('.');
|
|
203
|
+
zone = await getZoneByDomain(rootDomain);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
if (!zone) {
|
|
207
|
+
log.error(`Zone not found for domain: ${domain}`);
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
// Generate CSR using openssl on server (called from server CLI)
|
|
211
|
+
const { execSync } = await import('child_process');
|
|
212
|
+
const fsSync = await import('fs');
|
|
213
|
+
const os = await import('os');
|
|
214
|
+
const pathModule = await import('path');
|
|
215
|
+
const tmpDir = os.tmpdir();
|
|
216
|
+
const keyFile = pathModule.join(tmpDir, `vucore-origin.key`);
|
|
217
|
+
const csrFile = pathModule.join(tmpDir, `vucore-origin.csr`);
|
|
218
|
+
const configFile = pathModule.join(tmpDir, `vucore-origin.cnf`);
|
|
219
|
+
try {
|
|
220
|
+
// Create openssl config for SAN
|
|
221
|
+
const sanExt = hostnames.map((h, i) => `DNS.${i + 1}=${h}`).join('\n');
|
|
222
|
+
const configContent = `[req]
|
|
223
|
+
distinguished_name = req_distinguished_name
|
|
224
|
+
req_extensions = v3_req
|
|
225
|
+
prompt = no
|
|
226
|
+
|
|
227
|
+
[req_distinguished_name]
|
|
228
|
+
CN = ${hostnames[0].replace('*.', '')}
|
|
229
|
+
O = VuCore
|
|
230
|
+
C = TR
|
|
231
|
+
|
|
232
|
+
[v3_req]
|
|
233
|
+
subjectAltName = @alt_names
|
|
234
|
+
|
|
235
|
+
[alt_names]
|
|
236
|
+
${sanExt}
|
|
237
|
+
`;
|
|
238
|
+
fsSync.writeFileSync(configFile, configContent);
|
|
239
|
+
// Generate private key
|
|
240
|
+
log.info('Generating private key...');
|
|
241
|
+
execSync(`openssl genrsa -out "${keyFile}" 2048`, { stdio: 'pipe' });
|
|
242
|
+
// Generate CSR
|
|
243
|
+
log.info('Generating CSR...');
|
|
244
|
+
execSync(`openssl req -new -key "${keyFile}" -out "${csrFile}" -config "${configFile}"`, { stdio: 'pipe' });
|
|
245
|
+
const csr = fsSync.readFileSync(csrFile, 'utf-8');
|
|
246
|
+
const privateKey = fsSync.readFileSync(keyFile, 'utf-8');
|
|
247
|
+
// Cleanup temp files
|
|
248
|
+
try {
|
|
249
|
+
fsSync.unlinkSync(configFile);
|
|
250
|
+
}
|
|
251
|
+
catch { }
|
|
252
|
+
try {
|
|
253
|
+
fsSync.unlinkSync(keyFile);
|
|
254
|
+
}
|
|
255
|
+
catch { }
|
|
256
|
+
try {
|
|
257
|
+
fsSync.unlinkSync(csrFile);
|
|
258
|
+
}
|
|
259
|
+
catch { }
|
|
260
|
+
// Cloudflare Origin CA API with CSR
|
|
261
|
+
log.info('Requesting certificate from Cloudflare...');
|
|
262
|
+
const response = await cfFetch('/certificates', {
|
|
263
|
+
method: 'POST',
|
|
264
|
+
body: {
|
|
265
|
+
hostnames,
|
|
266
|
+
requested_validity: validityDays,
|
|
267
|
+
request_type: 'origin-rsa',
|
|
268
|
+
csr: csr,
|
|
269
|
+
},
|
|
270
|
+
});
|
|
271
|
+
if (!response.success) {
|
|
272
|
+
const errorMsg = response.errors?.[0]?.message || 'Unknown error';
|
|
273
|
+
log.error('Failed to create origin certificate:', errorMsg);
|
|
274
|
+
return null;
|
|
275
|
+
}
|
|
276
|
+
// Add private key to result
|
|
277
|
+
if (response.result) {
|
|
278
|
+
response.result.private_key = privateKey;
|
|
279
|
+
}
|
|
280
|
+
return response.result || null;
|
|
281
|
+
}
|
|
282
|
+
catch (error) {
|
|
283
|
+
log.error('Failed to generate CSR:', error.message);
|
|
284
|
+
// Cleanup on error
|
|
285
|
+
try {
|
|
286
|
+
fsSync.unlinkSync(configFile);
|
|
287
|
+
}
|
|
288
|
+
catch { }
|
|
289
|
+
try {
|
|
290
|
+
fsSync.unlinkSync(keyFile);
|
|
291
|
+
}
|
|
292
|
+
catch { }
|
|
293
|
+
try {
|
|
294
|
+
fsSync.unlinkSync(csrFile);
|
|
295
|
+
}
|
|
296
|
+
catch { }
|
|
297
|
+
return null;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* List Origin Certificates
|
|
302
|
+
*/
|
|
303
|
+
export async function listOriginCertificates(zoneId) {
|
|
304
|
+
const response = await cfFetch(`/certificates?zone_id=${zoneId}`);
|
|
305
|
+
if (!response.success) {
|
|
306
|
+
return [];
|
|
307
|
+
}
|
|
308
|
+
return response.result || [];
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Revoke Origin Certificate
|
|
312
|
+
*/
|
|
313
|
+
export async function revokeOriginCertificate(certId) {
|
|
314
|
+
const response = await cfFetch(`/certificates/${certId}`, { method: 'DELETE' });
|
|
315
|
+
return response.success;
|
|
316
|
+
}
|
|
317
|
+
// ============================================
|
|
318
|
+
// CACHE OPERATIONS
|
|
319
|
+
// ============================================
|
|
320
|
+
/**
|
|
321
|
+
* Purge all cache for a zone
|
|
322
|
+
*/
|
|
323
|
+
export async function purgeAllCache(zoneId) {
|
|
324
|
+
const response = await cfFetch(`/zones/${zoneId}/purge_cache`, { method: 'POST', body: { purge_everything: true } });
|
|
325
|
+
if (!response.success) {
|
|
326
|
+
const errorMsg = response.errors?.[0]?.message || 'Unknown error';
|
|
327
|
+
log.error('Cache purge failed:', errorMsg);
|
|
328
|
+
return { success: false, error: errorMsg };
|
|
329
|
+
}
|
|
330
|
+
return { success: true };
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Purge cache by URLs
|
|
334
|
+
*/
|
|
335
|
+
export async function purgeCacheByUrls(zoneId, urls) {
|
|
336
|
+
const response = await cfFetch(`/zones/${zoneId}/purge_cache`, { method: 'POST', body: { files: urls } });
|
|
337
|
+
if (!response.success) {
|
|
338
|
+
const errorMsg = response.errors?.[0]?.message || 'Unknown error';
|
|
339
|
+
log.error('Cache purge by URLs failed:', errorMsg);
|
|
340
|
+
return { success: false, error: errorMsg };
|
|
341
|
+
}
|
|
342
|
+
return { success: true };
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Purge cache by tags (Enterprise only)
|
|
346
|
+
*/
|
|
347
|
+
export async function purgeCacheByTags(zoneId, tags) {
|
|
348
|
+
const response = await cfFetch(`/zones/${zoneId}/purge_cache`, { method: 'POST', body: { tags } });
|
|
349
|
+
return response.success;
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Purge cache by prefixes
|
|
353
|
+
*/
|
|
354
|
+
export async function purgeCacheByPrefixes(zoneId, prefixes) {
|
|
355
|
+
const response = await cfFetch(`/zones/${zoneId}/purge_cache`, { method: 'POST', body: { prefixes } });
|
|
356
|
+
return response.success;
|
|
357
|
+
}
|
|
358
|
+
// ============================================
|
|
359
|
+
// HIGH-LEVEL OPERATIONS
|
|
360
|
+
// ============================================
|
|
361
|
+
/**
|
|
362
|
+
* Setup domain for VuCore
|
|
363
|
+
* - Creates DNS records (A, AAAA for root and subdomains)
|
|
364
|
+
* - Sets SSL mode to Full (Strict)
|
|
365
|
+
* - Creates Origin Certificate
|
|
366
|
+
*/
|
|
367
|
+
export async function setupDomainForVuCore(domain, serverIP, options = {}) {
|
|
368
|
+
const { createWildcard = true, createApiSubdomain = true, sslMode = 'strict' } = options;
|
|
369
|
+
// Get zone
|
|
370
|
+
const zone = await getZoneByDomain(domain);
|
|
371
|
+
if (!zone) {
|
|
372
|
+
return { success: false, error: `Domain ${domain} not found in Cloudflare` };
|
|
373
|
+
}
|
|
374
|
+
const dnsRecords = [];
|
|
375
|
+
// Create A record for root domain
|
|
376
|
+
const rootRecord = await upsertDNSRecord(zone.id, 'A', domain, serverIP, true);
|
|
377
|
+
if (rootRecord)
|
|
378
|
+
dnsRecords.push(rootRecord);
|
|
379
|
+
// Create A record for www
|
|
380
|
+
const wwwRecord = await upsertDNSRecord(zone.id, 'A', `www.${domain}`, serverIP, true);
|
|
381
|
+
if (wwwRecord)
|
|
382
|
+
dnsRecords.push(wwwRecord);
|
|
383
|
+
// Create A record for api subdomain
|
|
384
|
+
if (createApiSubdomain) {
|
|
385
|
+
const apiRecord = await upsertDNSRecord(zone.id, 'A', `api.${domain}`, serverIP, true);
|
|
386
|
+
if (apiRecord)
|
|
387
|
+
dnsRecords.push(apiRecord);
|
|
388
|
+
}
|
|
389
|
+
// Create wildcard record for tenant subdomains
|
|
390
|
+
if (createWildcard) {
|
|
391
|
+
// Note: Wildcard DNS with proxy requires Cloudflare paid plan
|
|
392
|
+
// For free plan, we create without proxy
|
|
393
|
+
const wildcardRecord = await upsertDNSRecord(zone.id, 'A', `*.${domain}`, serverIP, false);
|
|
394
|
+
if (wildcardRecord)
|
|
395
|
+
dnsRecords.push(wildcardRecord);
|
|
396
|
+
}
|
|
397
|
+
// Set SSL mode
|
|
398
|
+
await setSSLMode(zone.id, sslMode);
|
|
399
|
+
// Create Origin Certificate
|
|
400
|
+
const hostnames = [domain, `*.${domain}`];
|
|
401
|
+
const certificate = await createOriginCertificate(hostnames);
|
|
402
|
+
if (!certificate) {
|
|
403
|
+
return {
|
|
404
|
+
success: false,
|
|
405
|
+
error: 'Failed to create origin certificate',
|
|
406
|
+
dnsRecords
|
|
407
|
+
};
|
|
408
|
+
}
|
|
409
|
+
return {
|
|
410
|
+
success: true,
|
|
411
|
+
certificate,
|
|
412
|
+
dnsRecords,
|
|
413
|
+
};
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* Verify API token is valid
|
|
417
|
+
*/
|
|
418
|
+
export async function verifyToken(token) {
|
|
419
|
+
const response = await cfFetch('/user/tokens/verify', { token });
|
|
420
|
+
if (!response.success) {
|
|
421
|
+
return { valid: false, error: response.errors?.[0]?.message };
|
|
422
|
+
}
|
|
423
|
+
return { valid: true };
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* Get account email
|
|
427
|
+
*/
|
|
428
|
+
export async function getAccountInfo() {
|
|
429
|
+
const response = await cfFetch('/user');
|
|
430
|
+
if (!response.success) {
|
|
431
|
+
return null;
|
|
432
|
+
}
|
|
433
|
+
return response.result || null;
|
|
434
|
+
}
|
|
435
|
+
//# sourceMappingURL=cloudflare.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloudflare.js","sourceRoot":"","sources":["../../src/lib/cloudflare.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CiCore CLI Configuration Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages CLI configuration, environment detection, and paths
|
|
5
|
+
*/
|
|
6
|
+
import Conf from 'conf';
|
|
7
|
+
interface CLIConfig {
|
|
8
|
+
env: 'dev' | 'prod';
|
|
9
|
+
verbose: boolean;
|
|
10
|
+
dryRun: boolean;
|
|
11
|
+
sshHost: string;
|
|
12
|
+
sshUser: string;
|
|
13
|
+
dockerRegistry: string;
|
|
14
|
+
cdnApiUrl: string;
|
|
15
|
+
cdnApiKey: string;
|
|
16
|
+
dockerHubToken: string;
|
|
17
|
+
}
|
|
18
|
+
export declare const config: Conf<CLIConfig>;
|
|
19
|
+
/** Set transient flags from parsed CLI options (called by the bootstrap hook). */
|
|
20
|
+
export declare function setRuntimeFlags(flags: {
|
|
21
|
+
dryRun?: boolean;
|
|
22
|
+
verbose?: boolean;
|
|
23
|
+
}): void;
|
|
24
|
+
/**
|
|
25
|
+
* Path configurations based on environment
|
|
26
|
+
*/
|
|
27
|
+
export declare const paths: {
|
|
28
|
+
dev: {
|
|
29
|
+
root: string;
|
|
30
|
+
addons: string;
|
|
31
|
+
scripts: string;
|
|
32
|
+
shared: string;
|
|
33
|
+
storage: string;
|
|
34
|
+
};
|
|
35
|
+
prod: {
|
|
36
|
+
root: string;
|
|
37
|
+
cores: string;
|
|
38
|
+
services: string;
|
|
39
|
+
scripts: string;
|
|
40
|
+
addons: (coreName: string) => string;
|
|
41
|
+
shared: (coreName: string) => string;
|
|
42
|
+
storage: (coreName: string) => string;
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Docker container names
|
|
47
|
+
*/
|
|
48
|
+
export declare const containers: {
|
|
49
|
+
nuxt: string;
|
|
50
|
+
php: string;
|
|
51
|
+
nginx: string;
|
|
52
|
+
postgres: string;
|
|
53
|
+
redis: string;
|
|
54
|
+
dev: {
|
|
55
|
+
nuxt: string;
|
|
56
|
+
php: string;
|
|
57
|
+
nginx: string;
|
|
58
|
+
postgres: string;
|
|
59
|
+
redis: string;
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Docker compose files
|
|
64
|
+
*/
|
|
65
|
+
export declare const composeFiles: {
|
|
66
|
+
dev: string;
|
|
67
|
+
prod: {
|
|
68
|
+
nuxt: string;
|
|
69
|
+
php: string;
|
|
70
|
+
nginx: string;
|
|
71
|
+
postgres: string;
|
|
72
|
+
redis: string;
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Get current environment
|
|
77
|
+
*/
|
|
78
|
+
export declare function getEnv(): 'dev' | 'prod';
|
|
79
|
+
/**
|
|
80
|
+
* Check if running in dry-run mode
|
|
81
|
+
*/
|
|
82
|
+
export declare function isDryRun(): boolean;
|
|
83
|
+
/**
|
|
84
|
+
* Check if verbose mode is enabled
|
|
85
|
+
*/
|
|
86
|
+
export declare function isVerbose(): boolean;
|
|
87
|
+
/**
|
|
88
|
+
* Get SSH connection string
|
|
89
|
+
*/
|
|
90
|
+
export declare function getSSHConnection(): string;
|
|
91
|
+
/**
|
|
92
|
+
* Get Docker registry
|
|
93
|
+
*/
|
|
94
|
+
export declare function getDockerRegistry(): string;
|
|
95
|
+
export {};
|
|
96
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AAKxB,UAAU,SAAS;IACjB,GAAG,EAAE,KAAK,GAAG,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAgBD,eAAO,MAAM,MAAM,iBAGjB,CAAC;AAiBH,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,KAAK,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAGpF;AAED;;GAEG;AACH,eAAO,MAAM,KAAK;;;;;;;;;;;;;2BAgBK,MAAM;2BACN,MAAM;4BACL,MAAM;;CAE7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;CAetB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;;;;CASxB,CAAC;AAEF;;GAEG;AACH,wBAAgB,MAAM,IAAI,KAAK,GAAG,MAAM,CAEvC;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,OAAO,CAElC;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAIzC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CiCore CLI Configuration Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages CLI configuration, environment detection, and paths
|
|
5
|
+
*/
|
|
6
|
+
import Conf from 'conf';
|
|
7
|
+
import { join } from 'path';
|
|
8
|
+
// Default configuration
|
|
9
|
+
const defaults = {
|
|
10
|
+
env: 'dev',
|
|
11
|
+
verbose: false,
|
|
12
|
+
dryRun: false,
|
|
13
|
+
sshHost: 'cicore',
|
|
14
|
+
sshUser: 'root',
|
|
15
|
+
dockerRegistry: 'baynis',
|
|
16
|
+
cdnApiUrl: 'https://cdn-api.cicore.com.tr',
|
|
17
|
+
cdnApiKey: '',
|
|
18
|
+
dockerHubToken: '',
|
|
19
|
+
};
|
|
20
|
+
// Persistent configuration store
|
|
21
|
+
export const config = new Conf({
|
|
22
|
+
projectName: 'vucore-cli',
|
|
23
|
+
defaults,
|
|
24
|
+
});
|
|
25
|
+
/**
|
|
26
|
+
* Transient per-invocation flags (`--dry-run`, `--verbose`).
|
|
27
|
+
*
|
|
28
|
+
* These MUST NOT live in the persistent `Conf` store: persisting `dryRun`
|
|
29
|
+
* means a single `ci --dry-run …` run writes `true` to disk, and any code
|
|
30
|
+
* path that reads `isDryRun()` without first going through the CLI's
|
|
31
|
+
* `preAction` hook (tests, direct `ops/*` imports, ad-hoc scripts) then sees
|
|
32
|
+
* a stale `true` and silently no-ops real work. Bug surfaced 2026-05-25 when
|
|
33
|
+
* a prior `--dry-run` leaked into a live DNS provisioning check.
|
|
34
|
+
*
|
|
35
|
+
* Kept in module memory, defaulting to `false`; `setRuntimeFlags()` is called
|
|
36
|
+
* once from the CLI bootstrap. A fresh process always starts clean.
|
|
37
|
+
*/
|
|
38
|
+
const runtimeFlags = { dryRun: false, verbose: false };
|
|
39
|
+
/** Set transient flags from parsed CLI options (called by the bootstrap hook). */
|
|
40
|
+
export function setRuntimeFlags(flags) {
|
|
41
|
+
if (flags.dryRun !== undefined)
|
|
42
|
+
runtimeFlags.dryRun = flags.dryRun;
|
|
43
|
+
if (flags.verbose !== undefined)
|
|
44
|
+
runtimeFlags.verbose = flags.verbose;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Path configurations based on environment
|
|
48
|
+
*/
|
|
49
|
+
export const paths = {
|
|
50
|
+
// DEV paths (local machine)
|
|
51
|
+
dev: {
|
|
52
|
+
root: process.cwd(),
|
|
53
|
+
addons: join(process.cwd(), 'addons'),
|
|
54
|
+
scripts: join(process.cwd(), 'server_scripts'),
|
|
55
|
+
shared: join(process.cwd(), 'shared'),
|
|
56
|
+
storage: join(process.cwd(), 'storage'),
|
|
57
|
+
},
|
|
58
|
+
// PROD paths (server)
|
|
59
|
+
prod: {
|
|
60
|
+
root: '/home',
|
|
61
|
+
cores: '/home/cores',
|
|
62
|
+
services: '/home/services',
|
|
63
|
+
scripts: '/home/scripts',
|
|
64
|
+
addons: (coreName) => `/home/cores/${coreName}/addons`,
|
|
65
|
+
shared: (coreName) => `/home/cores/${coreName}/shared`,
|
|
66
|
+
storage: (coreName) => `/home/cores/${coreName}/storage`,
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Docker container names
|
|
71
|
+
*/
|
|
72
|
+
export const containers = {
|
|
73
|
+
nuxt: 'cicore_nuxt',
|
|
74
|
+
php: 'cicore_php',
|
|
75
|
+
nginx: 'cicore_global_nginx',
|
|
76
|
+
postgres: 'cicore_global_postgres',
|
|
77
|
+
redis: 'cicore_global_redis',
|
|
78
|
+
// DEV containers
|
|
79
|
+
dev: {
|
|
80
|
+
nuxt: 'vucore_dev_nuxt',
|
|
81
|
+
php: 'vucore_dev_php',
|
|
82
|
+
nginx: 'vucore_dev_nginx',
|
|
83
|
+
postgres: 'vucore_dev_postgres',
|
|
84
|
+
redis: 'vucore_dev_redis',
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* Docker compose files
|
|
89
|
+
*/
|
|
90
|
+
export const composeFiles = {
|
|
91
|
+
dev: 'docker-compose.dev.yml',
|
|
92
|
+
prod: {
|
|
93
|
+
nuxt: 'docker-core-nuxt.yml',
|
|
94
|
+
php: 'docker-core-php.yml',
|
|
95
|
+
nginx: 'docker-server-nginx.yml',
|
|
96
|
+
postgres: 'docker-postgresql.yml',
|
|
97
|
+
redis: 'docker-redis.yml',
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* Get current environment
|
|
102
|
+
*/
|
|
103
|
+
export function getEnv() {
|
|
104
|
+
return config.get('env');
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Check if running in dry-run mode
|
|
108
|
+
*/
|
|
109
|
+
export function isDryRun() {
|
|
110
|
+
return runtimeFlags.dryRun;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Check if verbose mode is enabled
|
|
114
|
+
*/
|
|
115
|
+
export function isVerbose() {
|
|
116
|
+
return runtimeFlags.verbose;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Get SSH connection string
|
|
120
|
+
*/
|
|
121
|
+
export function getSSHConnection() {
|
|
122
|
+
const host = config.get('sshHost');
|
|
123
|
+
const user = config.get('sshUser');
|
|
124
|
+
return user ? `${user}@${host}` : host;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Get Docker registry
|
|
128
|
+
*/
|
|
129
|
+
export function getDockerRegistry() {
|
|
130
|
+
return config.get('dockerRegistry');
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=config.js.map
|