Allow add/edit domain to upsert tenant DNS on Cloudflare or Arvan.

Update DNS writes @, www, business, customer, and api records on the chosen provider instead of Arvan only.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Alireza Hassani
2026-08-31 18:46:48 +03:30
co-authored by Cursor
parent d1f60b5313
commit f42e6fe2a4
8 changed files with 101 additions and 35 deletions
+17 -5
View File
@@ -719,8 +719,10 @@ export class DomainAdminService {
},
});
// Same Arvan helper as business-admin domain add/edit (`ensureTenantRecords`).
const dnsError = dto.updateDns ? await this.applyArvanDns(host) : null;
// Same DNS helper as business-admin domain add/edit (`ensureTenantRecords`).
const dnsError = dto.updateDns
? await this.applyTenantDns(host, dto.dnsProvider === 'cloudflare' ? 'cloudflare' : 'arvan')
: null;
return {
...updated,
@@ -936,12 +938,22 @@ export class DomainAdminService {
}
}
private async applyArvanDns(host: string): Promise<string | null> {
private async applyTenantDns(
host: string,
provider: ParkedDnsProvider,
): Promise<string | null> {
try {
await this.arvanDns.ensureTenantRecords(host);
if (provider === 'cloudflare') {
await this.cloudflareDns.ensureTenantRecords(host);
} else {
await this.arvanDns.ensureTenantRecords(host);
}
return null;
} catch (err) {
return this.httpErrorMessage(err, 'Arvan DNS update failed');
return this.httpErrorMessage(
err,
provider === 'cloudflare' ? 'Cloudflare DNS update failed' : 'Arvan DNS update failed',
);
}
}
@@ -1,4 +1,4 @@
import { IsBoolean, IsDateString, IsOptional, IsString, Matches, MinLength } from 'class-validator';
import { IsBoolean, IsDateString, IsIn, IsOptional, IsString, Matches, MinLength } from 'class-validator';
import { GIT_REPO_URL_RE } from '../../website-deploy/website-deploy.util';
export class UpdateDomainAdminDto {
@@ -11,11 +11,16 @@ export class UpdateDomainAdminDto {
@IsDateString()
expiresAt?: string;
/** When true, upsert Meshkee tenant records in Arvan DNS. */
/** When true, upsert Meshkee tenant records (@, www, business, customer, api). */
@IsOptional()
@IsBoolean()
updateDns?: boolean;
/** DNS host for tenant records. Ignored unless updateDns is true. Default arvan. */
@IsOptional()
@IsIn(['arvan', 'cloudflare'])
dnsProvider?: 'arvan' | 'cloudflare';
/** HTTPS or SSH git URL — when set, provisions storefront deploy on the websites VM. */
@IsOptional()
@IsString()