Enable storefront provision from Add Domain via optional git URL.

Persist deploy_slug on domains, call the websites agent /provision endpoint, and drop the hard-coded host map so Deploy appears from the UI.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Alireza Hassani
2026-08-08 14:07:56 +03:30
co-authored by Cursor
parent 9ca6e2306f
commit d933aef40b
15 changed files with 604 additions and 46 deletions
+26
View File
@@ -0,0 +1,26 @@
/** Derive storefront slug from apex host: oaktasty.com → oaktasty, ali-mohammadi.ir → ali-mohammadi */
export function deploySlugFromHost(host: string): string {
const h = host.trim().toLowerCase();
const parts = h.split('.').filter(Boolean);
const base = parts.length >= 2 ? parts.slice(0, -1).join('-') : parts[0] ?? h;
return base
.replace(/[^a-z0-9-]+/g, '-')
.replace(/-+/g, '-')
.replace(/^-|-$/g, '');
}
const GIT_SSH_RE =
/^(?:git@[\w.-]+:[\w./-]+\.git|ssh:\/\/git@[\w.-]+(?::\d+)?\/[\w./-]+\.git)$/i;
export function isValidGitRepoUrl(url: string): boolean {
return GIT_SSH_RE.test(url.trim());
}
/** Turn .../deploy into .../provision (or append /provision if bare). */
export function provisionUrlFromDeployUrl(deployUrl: string): string {
const trimmed = deployUrl.trim().replace(/\/+$/, '');
if (/\/deploy$/i.test(trimmed)) {
return trimmed.replace(/\/deploy$/i, '/provision');
}
return `${trimmed}/provision`;
}