clefbase 2.0.0 → 2.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/dist/app.d.ts.map +1 -1
- package/dist/app.js +2 -3
- package/dist/app.js.map +1 -1
- package/dist/cli-src/cli/api.js +14 -14
- package/dist/cli-src/cli/commands/deploy.js +84 -16
- package/dist/cli-src/cli/commands/init.js +616 -18
- package/dist/cli-src/cli/config.js +0 -1
- package/dist/cli-src/cli/index.js +48 -9
- package/dist/cli.js +728 -57
- package/dist/hosting/index.d.ts +8 -98
- package/dist/hosting/index.d.ts.map +1 -1
- package/dist/hosting/index.js +37 -95
- package/dist/hosting/index.js.map +1 -1
- package/dist/types.d.ts +0 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
package/dist/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAI9C;;;GAGG;AACH,qBAAa,WAAW;IACtB,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAEhC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,EAAS,UAAU,CAAC;IACrD,gBAAgB,CAAC,QAAQ,CAAC,SAAS,EAAO,UAAU,CAAC;IACrD,gBAAgB,CAAC,QAAQ,CAAC,YAAY,EAAI,UAAU,CAAC;IACrD,gBAAgB,CAAC,QAAQ,CAAC,YAAY,EAAI,UAAU,CAAC;IACrD,gBAAgB,CAAC,QAAQ,CAAC,cAAc,EAAE,UAAU,CAAC;IACrD,gBAAgB,CAAC,QAAQ,CAAC,OAAO,EAAS,UAAU,CAAC;IAErD,OAAO,CAAC,GAAG,CAAuC;IAClD,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,UAAU,CAAgC;IAClD,OAAO,CAAC,GAAG,CAAuC;gBAEtC,MAAM,EAAE,cAAc;
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAI9C;;;GAGG;AACH,qBAAa,WAAW;IACtB,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAEhC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,EAAS,UAAU,CAAC;IACrD,gBAAgB,CAAC,QAAQ,CAAC,SAAS,EAAO,UAAU,CAAC;IACrD,gBAAgB,CAAC,QAAQ,CAAC,YAAY,EAAI,UAAU,CAAC;IACrD,gBAAgB,CAAC,QAAQ,CAAC,YAAY,EAAI,UAAU,CAAC;IACrD,gBAAgB,CAAC,QAAQ,CAAC,cAAc,EAAE,UAAU,CAAC;IACrD,gBAAgB,CAAC,QAAQ,CAAC,OAAO,EAAS,UAAU,CAAC;IAErD,OAAO,CAAC,GAAG,CAAuC;IAClD,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,UAAU,CAAgC;IAClD,OAAO,CAAC,GAAG,CAAuC;gBAEtC,MAAM,EAAE,cAAc;IAalC,gBAAgB;IAChB,MAAM,IAAI,QAAQ;IAKlB,gBAAgB;IAChB,QAAQ,IAAI,IAAI;IAKhB,gBAAgB;IAChB,WAAW,IAAI,eAAe;IAU9B,gBAAgB;IAChB,WAAW,IAAI,eAAe;IAM9B,gBAAgB;IAChB,aAAa,IAAI,iBAAiB;IAMlC,gBAAgB;IAChB,MAAM,IAAI,UAAU;CAKrB;AAOD;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,cAAc,EACtB,IAAI,GAAE,MAAgB,GACrB,WAAW,CAKb;AAED,wEAAwE;AACxE,wBAAgB,MAAM,CAAC,IAAI,GAAE,MAAgB,GAAG,WAAW,CAQ1D;AAID,gCAAgC;AAChC,wBAAgB,WAAW,CAAC,GAAG,CAAC,EAAE,WAAW,GAAG,QAAQ,CAEvD;AAED,4BAA4B;AAC5B,wBAAgB,OAAO,CAAC,GAAG,CAAC,EAAE,WAAW,GAAG,IAAI,CAE/C;AAED,+BAA+B;AAC/B,wBAAgB,UAAU,CAAC,GAAG,CAAC,EAAE,WAAW,GAAG,eAAe,CAE7D;AAED,iEAAiE;AACjE,wBAAgB,UAAU,CAAC,GAAG,CAAC,EAAE,WAAW,GAAG,eAAe,CAE7D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,GAAG,CAAC,EAAE,WAAW,GAAG,iBAAiB,CAEjE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,KAAK,CAAC,GAAG,CAAC,EAAE,WAAW,GAAG,UAAU,CAEnD"}
|
package/dist/app.js
CHANGED
|
@@ -26,11 +26,10 @@ class ClefbaseApp {
|
|
|
26
26
|
this.config = config;
|
|
27
27
|
const base = config.serverUrl.replace(/\/+$/, "");
|
|
28
28
|
const cfxKey = { "x-cfx-key": config.apiKey };
|
|
29
|
-
const admin = { "x-admin-secret": config.adminSecret ?? "" };
|
|
30
29
|
this._dbHttp = new http_1.HttpClient(`${base}/db`, cfxKey);
|
|
31
30
|
this._authHttp = new http_1.HttpClient(`${base}/auth`, cfxKey);
|
|
32
31
|
this._storageHttp = new http_1.HttpClient(`${base}/storage`, cfxKey);
|
|
33
|
-
this._hostingHttp = new http_1.HttpClient(`${base}/
|
|
32
|
+
this._hostingHttp = new http_1.HttpClient(`${base}/hosting`, cfxKey);
|
|
34
33
|
this._functionsHttp = new http_1.HttpClient(`${base}/functions`, cfxKey);
|
|
35
34
|
this._aiHttp = new http_1.HttpClient(`${base}/ai`, cfxKey);
|
|
36
35
|
}
|
|
@@ -55,7 +54,7 @@ class ClefbaseApp {
|
|
|
55
54
|
/** @internal */
|
|
56
55
|
_getHosting() {
|
|
57
56
|
if (!this._hosting)
|
|
58
|
-
this._hosting = new hosting_1.ClefbaseHosting(this._hostingHttp
|
|
57
|
+
this._hosting = new hosting_1.ClefbaseHosting(this._hostingHttp);
|
|
59
58
|
return this._hosting;
|
|
60
59
|
}
|
|
61
60
|
/** @internal */
|
package/dist/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
package/dist/cli-src/cli/api.js
CHANGED
|
@@ -91,17 +91,17 @@ function base(cfg) {
|
|
|
91
91
|
return cfg.serverUrl.replace(/\/+$/, "");
|
|
92
92
|
}
|
|
93
93
|
function adminHeaders(cfg) {
|
|
94
|
-
return { "Content-Type": "application/json", "x-
|
|
94
|
+
return { "Content-Type": "application/json", "x-cfx-key": cfg.apiKey };
|
|
95
95
|
}
|
|
96
96
|
function cfxHeaders(cfg) {
|
|
97
97
|
return { "Content-Type": "application/json", "x-cfx-key": cfg.apiKey };
|
|
98
98
|
}
|
|
99
99
|
// ─── Hosting API ──────────────────────────────────────────────────────────────
|
|
100
100
|
async function listSites(cfg) {
|
|
101
|
-
return apiFetch(`${base(cfg)}/
|
|
101
|
+
return apiFetch(`${base(cfg)}/hosting/sites`, { headers: cfxHeaders(cfg) });
|
|
102
102
|
}
|
|
103
103
|
async function createSite(cfg, name, description) {
|
|
104
|
-
return apiFetch(`${base(cfg)}/
|
|
104
|
+
return apiFetch(`${base(cfg)}/hosting/sites`, { method: "POST", headers: cfxHeaders(cfg), body: JSON.stringify({ name, description }) });
|
|
105
105
|
}
|
|
106
106
|
async function deleteSite(cfg, siteId, opts = {}) {
|
|
107
107
|
const params = new URLSearchParams();
|
|
@@ -110,24 +110,24 @@ async function deleteSite(cfg, siteId, opts = {}) {
|
|
|
110
110
|
if (opts.deleteDns)
|
|
111
111
|
params.set("deleteDns", "true");
|
|
112
112
|
const qs = params.toString() ? `?${params}` : "";
|
|
113
|
-
return apiFetch(`${base(cfg)}/
|
|
113
|
+
return apiFetch(`${base(cfg)}/hosting/sites/${siteId}${qs}`, { method: "DELETE", headers: cfxHeaders(cfg) });
|
|
114
114
|
}
|
|
115
115
|
async function getDnsStatus(cfg, siteId) {
|
|
116
|
-
return apiFetch(`${base(cfg)}/
|
|
116
|
+
return apiFetch(`${base(cfg)}/hosting/sites/${siteId}/dns`, { headers: cfxHeaders(cfg) });
|
|
117
117
|
}
|
|
118
118
|
async function reprovisionDns(cfg, siteId) {
|
|
119
|
-
return apiFetch(`${base(cfg)}/
|
|
119
|
+
return apiFetch(`${base(cfg)}/hosting/sites/${siteId}/dns/reprovision`, { method: "POST", headers: cfxHeaders(cfg), body: JSON.stringify({}) });
|
|
120
120
|
}
|
|
121
121
|
async function createDeploy(cfg, siteId, entrypoint = "index.html") {
|
|
122
|
-
return apiFetch(`${base(cfg)}/
|
|
122
|
+
return apiFetch(`${base(cfg)}/hosting/sites/${siteId}/deploys`, {
|
|
123
123
|
method: "POST",
|
|
124
|
-
headers:
|
|
124
|
+
headers: cfxHeaders(cfg),
|
|
125
125
|
body: JSON.stringify({ entrypoint, deployedBy: "clefbase-cli" }),
|
|
126
126
|
});
|
|
127
127
|
}
|
|
128
128
|
async function uploadFileBatch(cfg, deployId, files) {
|
|
129
129
|
const fetchFn = await getFetch();
|
|
130
|
-
const url = `${base(cfg)}/
|
|
130
|
+
const url = `${base(cfg)}/hosting/deploys/${deployId}/files/batch`;
|
|
131
131
|
let res;
|
|
132
132
|
if (typeof FormData !== "undefined") {
|
|
133
133
|
const form = new FormData();
|
|
@@ -140,7 +140,7 @@ async function uploadFileBatch(cfg, deployId, files) {
|
|
|
140
140
|
}
|
|
141
141
|
res = await fetchFn(url, {
|
|
142
142
|
method: "POST",
|
|
143
|
-
headers: { "x-
|
|
143
|
+
headers: { "x-cfx-key": cfg.apiKey },
|
|
144
144
|
body: form,
|
|
145
145
|
});
|
|
146
146
|
}
|
|
@@ -157,7 +157,7 @@ async function uploadFileBatch(cfg, deployId, files) {
|
|
|
157
157
|
}
|
|
158
158
|
res = await fetchFn(url, {
|
|
159
159
|
method: "POST",
|
|
160
|
-
headers: { "x-
|
|
160
|
+
headers: { "x-cfx-key": cfg.apiKey, ...form.getHeaders() },
|
|
161
161
|
body: form,
|
|
162
162
|
});
|
|
163
163
|
}
|
|
@@ -174,15 +174,15 @@ async function uploadFileBatch(cfg, deployId, files) {
|
|
|
174
174
|
return res.json();
|
|
175
175
|
}
|
|
176
176
|
async function finalizeDeploy(cfg, deployId, message) {
|
|
177
|
-
return apiFetch(`${base(cfg)}/
|
|
177
|
+
return apiFetch(`${base(cfg)}/hosting/deploys/${deployId}/finalize`, {
|
|
178
178
|
method: "POST",
|
|
179
|
-
headers:
|
|
179
|
+
headers: cfxHeaders(cfg),
|
|
180
180
|
body: JSON.stringify({ message: message ?? "Deployed via clefbase CLI" }),
|
|
181
181
|
});
|
|
182
182
|
}
|
|
183
183
|
async function getActiveDeploy(cfg, siteId) {
|
|
184
184
|
try {
|
|
185
|
-
return await apiFetch(`${base(cfg)}/
|
|
185
|
+
return await apiFetch(`${base(cfg)}/hosting/sites/${siteId}/active`, { headers: cfxHeaders(cfg) });
|
|
186
186
|
}
|
|
187
187
|
catch (err) {
|
|
188
188
|
if (err.status === 404)
|
|
@@ -4,12 +4,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.runDeploy = runDeploy;
|
|
7
|
+
exports.runHostingDeploy = runHostingDeploy;
|
|
8
|
+
exports.runFunctionsDeploy = runFunctionsDeploy;
|
|
7
9
|
exports.runHostingInit = runHostingInit;
|
|
8
10
|
exports.runStatus = runStatus;
|
|
9
11
|
exports.runDnsStatus = runDnsStatus;
|
|
10
12
|
exports.runDnsReprovision = runDnsReprovision;
|
|
11
13
|
const path_1 = __importDefault(require("path"));
|
|
12
14
|
const fs_1 = __importDefault(require("fs"));
|
|
15
|
+
const child_process_1 = require("child_process");
|
|
13
16
|
const chalk_1 = __importDefault(require("chalk"));
|
|
14
17
|
const ora_1 = __importDefault(require("ora"));
|
|
15
18
|
const inquirer_1 = __importDefault(require("inquirer"));
|
|
@@ -70,17 +73,62 @@ function fmtBytes(n) {
|
|
|
70
73
|
function siteUrl(site) {
|
|
71
74
|
return site.customDomain ? `https://${site.customDomain}` : site.previewUrl;
|
|
72
75
|
}
|
|
73
|
-
// ─── deploy
|
|
76
|
+
// ─── deploy (combined: hosting + functions, or --only one) ────────────────────
|
|
74
77
|
async function runDeploy(opts) {
|
|
75
78
|
const cwd = opts.cwd ?? process.cwd();
|
|
76
79
|
const cfg = (0, config_1.requireConfig)(cwd);
|
|
80
|
+
const deployHosting = !opts.only || opts.only === "hosting";
|
|
81
|
+
const deployFunctions = !opts.only || opts.only === "functions";
|
|
82
|
+
// Guard: make sure at least one of the requested targets is enabled
|
|
83
|
+
if (deployHosting && !cfg.services.hosting && opts.only === "hosting") {
|
|
84
|
+
console.error(chalk_1.default.red("\n Hosting is not enabled for this project.\n Run `clefbase hosting:init` to set it up.\n"));
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
if (deployFunctions && !cfg.services.functions && opts.only === "functions") {
|
|
88
|
+
console.error(chalk_1.default.red("\n Functions is not enabled for this project.\n Run `clefbase init` and enable Functions to set it up.\n"));
|
|
89
|
+
process.exit(1);
|
|
90
|
+
}
|
|
77
91
|
console.log();
|
|
78
|
-
|
|
92
|
+
if (opts.only === "hosting") {
|
|
93
|
+
console.log(chalk_1.default.bold.cyan(" Clefbase Deploy · Hosting"));
|
|
94
|
+
}
|
|
95
|
+
else if (opts.only === "functions") {
|
|
96
|
+
console.log(chalk_1.default.bold.cyan(" Clefbase Deploy · Functions"));
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
console.log(chalk_1.default.bold.cyan(" Clefbase Deploy"));
|
|
100
|
+
}
|
|
79
101
|
console.log();
|
|
102
|
+
// ── Functions first (fast, no file scanning) ──────────────────────────────
|
|
103
|
+
if (deployFunctions && cfg.services.functions) {
|
|
104
|
+
await runFunctionsDeploy({ cwd });
|
|
105
|
+
if (deployHosting && cfg.services.hosting) {
|
|
106
|
+
console.log();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// ── Hosting ───────────────────────────────────────────────────────────────
|
|
110
|
+
if (deployHosting && cfg.services.hosting) {
|
|
111
|
+
await runHostingDeploy({ dir: opts.dir, message: opts.message, site: opts.site, cwd });
|
|
112
|
+
}
|
|
113
|
+
// ── Nothing to do ─────────────────────────────────────────────────────────
|
|
114
|
+
if (!deployHosting && !deployFunctions) {
|
|
115
|
+
console.log(chalk_1.default.yellow(" Nothing to deploy — no services matched.\n"));
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// ─── deploy:hosting ───────────────────────────────────────────────────────────
|
|
119
|
+
//
|
|
120
|
+
// Can be called standalone (clefbase deploy:hosting) or from runDeploy above.
|
|
121
|
+
async function runHostingDeploy(opts) {
|
|
122
|
+
const cwd = opts.cwd ?? process.cwd();
|
|
123
|
+
const cfg = (0, config_1.requireConfig)(cwd);
|
|
124
|
+
if (!cfg.services.hosting) {
|
|
125
|
+
console.error(chalk_1.default.red("\n Hosting is not enabled for this project.\n Run `clefbase hosting:init` to set it up.\n"));
|
|
126
|
+
process.exit(1);
|
|
127
|
+
}
|
|
80
128
|
// ── Resolve / pick a site ─────────────────────────────────────────────────
|
|
81
129
|
let siteId = opts.site ?? cfg.hosting?.siteId ?? "";
|
|
82
130
|
let siteName = cfg.hosting?.siteName ?? "";
|
|
83
|
-
let previewUrl = "";
|
|
131
|
+
let previewUrl = cfg.hosting?.previewUrl ?? "";
|
|
84
132
|
if (!siteId) {
|
|
85
133
|
const site = await pickOrCreateSite(cfg);
|
|
86
134
|
siteId = site.id;
|
|
@@ -95,9 +143,6 @@ async function runDeploy(opts) {
|
|
|
95
143
|
};
|
|
96
144
|
(0, config_1.saveConfig)(cfg, cwd);
|
|
97
145
|
}
|
|
98
|
-
else {
|
|
99
|
-
previewUrl = cfg.hosting?.previewUrl ?? "";
|
|
100
|
-
}
|
|
101
146
|
// ── Resolve dist dir ──────────────────────────────────────────────────────
|
|
102
147
|
const distDir = opts.dir ?? cfg.hosting?.distDir ?? await promptDistDir(cwd);
|
|
103
148
|
const absDir = path_1.default.isAbsolute(distDir) ? distDir : path_1.default.join(cwd, distDir);
|
|
@@ -184,6 +229,39 @@ async function runDeploy(opts) {
|
|
|
184
229
|
}
|
|
185
230
|
console.log();
|
|
186
231
|
}
|
|
232
|
+
// ─── deploy:functions ─────────────────────────────────────────────────────────
|
|
233
|
+
//
|
|
234
|
+
// Runs `node functions/deploy.mjs` from the project root.
|
|
235
|
+
// Can be called standalone (clefbase deploy:functions) or from runDeploy above.
|
|
236
|
+
async function runFunctionsDeploy(opts = {}) {
|
|
237
|
+
const cwd = opts.cwd ?? process.cwd();
|
|
238
|
+
const cfg = (0, config_1.requireConfig)(cwd);
|
|
239
|
+
if (!cfg.services.functions) {
|
|
240
|
+
console.error(chalk_1.default.red("\n Functions is not enabled for this project.\n Run `clefbase init` and enable Functions.\n"));
|
|
241
|
+
process.exit(1);
|
|
242
|
+
}
|
|
243
|
+
const deployMjs = path_1.default.join(cwd, "functions", "deploy.mjs");
|
|
244
|
+
if (!fs_1.default.existsSync(deployMjs)) {
|
|
245
|
+
console.error(chalk_1.default.red(`\n ✗ functions/deploy.mjs not found.`));
|
|
246
|
+
console.error(chalk_1.default.dim(" Re-run `clefbase init` to regenerate the functions/ folder,"));
|
|
247
|
+
console.error(chalk_1.default.dim(" or deploy individual functions with:"));
|
|
248
|
+
console.error(chalk_1.default.cyan(" clefbase functions:deploy -f functions/src/hello.ts --name hello --trigger http\n"));
|
|
249
|
+
process.exit(1);
|
|
250
|
+
}
|
|
251
|
+
console.log(chalk_1.default.bold(" Deploying functions…"));
|
|
252
|
+
console.log(chalk_1.default.dim(` Running: node functions/deploy.mjs\n`));
|
|
253
|
+
try {
|
|
254
|
+
(0, child_process_1.execSync)("node deploy.mjs", {
|
|
255
|
+
cwd: path_1.default.join(cwd, "functions"),
|
|
256
|
+
stdio: "inherit",
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
catch {
|
|
260
|
+
// execSync throws on non-zero exit — deploy.mjs already printed the details
|
|
261
|
+
console.error(chalk_1.default.red("\n ✗ One or more functions failed to deploy.\n"));
|
|
262
|
+
process.exit(1);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
187
265
|
// ─── hosting:init ─────────────────────────────────────────────────────────────
|
|
188
266
|
async function runHostingInit(cwd = process.cwd()) {
|
|
189
267
|
const cfg = (0, config_1.requireConfig)(cwd);
|
|
@@ -270,7 +348,6 @@ async function runDnsStatus(cwd = process.cwd()) {
|
|
|
270
348
|
const dns = await (0, api_1.getDnsStatus)(cfg, cfg.hosting.siteId);
|
|
271
349
|
sp.succeed("DNS checked");
|
|
272
350
|
console.log();
|
|
273
|
-
// Preview subdomain
|
|
274
351
|
console.log(` ${chalk_1.default.bold("Preview subdomain:")}`);
|
|
275
352
|
console.log(` URL: ${chalk_1.default.cyan(dns.previewUrl)}`);
|
|
276
353
|
if (dns.preview.isCorrect) {
|
|
@@ -284,7 +361,6 @@ async function runDnsStatus(cwd = process.cwd()) {
|
|
|
284
361
|
console.log(` DNS: ${chalk_1.default.yellow("⚠ Not yet provisioned")}`);
|
|
285
362
|
console.log(chalk_1.default.dim(" Run `clefbase hosting:dns:reprovision` to create the record."));
|
|
286
363
|
}
|
|
287
|
-
// Custom domain
|
|
288
364
|
if (dns.customDomain) {
|
|
289
365
|
console.log();
|
|
290
366
|
console.log(` ${chalk_1.default.bold("Custom domain:")}`);
|
|
@@ -331,11 +407,6 @@ async function runDnsReprovision(cwd = process.cwd()) {
|
|
|
331
407
|
console.log();
|
|
332
408
|
}
|
|
333
409
|
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
334
|
-
/**
|
|
335
|
-
* Interactive site picker / creator.
|
|
336
|
-
* Shows existing sites, allows creating a new one.
|
|
337
|
-
* On creation: enforces uniqueness, shows preview URL.
|
|
338
|
-
*/
|
|
339
410
|
async function pickOrCreateSite(cfg) {
|
|
340
411
|
const sp = (0, ora_1.default)("Fetching sites…").start();
|
|
341
412
|
let sites = [];
|
|
@@ -365,7 +436,6 @@ async function pickOrCreateSite(cfg) {
|
|
|
365
436
|
}
|
|
366
437
|
return createSiteInteractive(cfg);
|
|
367
438
|
}
|
|
368
|
-
/** Prompt for a new site name, handle conflict errors with retry. */
|
|
369
439
|
async function createSiteInteractive(cfg) {
|
|
370
440
|
while (true) {
|
|
371
441
|
const { name } = await inquirer_1.default.prompt([{
|
|
@@ -384,11 +454,9 @@ async function createSiteInteractive(cfg) {
|
|
|
384
454
|
}
|
|
385
455
|
catch (err) {
|
|
386
456
|
const message = err.message;
|
|
387
|
-
// 409 conflict — name already taken
|
|
388
457
|
if (message.toLowerCase().includes("already exists") || message.includes("409")) {
|
|
389
458
|
s.fail(chalk_1.default.red(message));
|
|
390
459
|
console.log(chalk_1.default.dim(" Please choose a different name.\n"));
|
|
391
|
-
// Loop to prompt again
|
|
392
460
|
}
|
|
393
461
|
else {
|
|
394
462
|
s.fail(message);
|