Merge dev into fix/log-analytics-adjustments

This commit is contained in:
Fred KISSIE
2025-12-10 03:19:14 +01:00
parent 9db2feff77
commit d490cab48c
555 changed files with 9375 additions and 9287 deletions

View File

@@ -1,6 +1,13 @@
import { Request, Response, NextFunction } from "express";
import { z } from "zod";
import { db, Domain, domains, OrgDomains, orgDomains, dnsRecords } from "@server/db";
import {
db,
Domain,
domains,
OrgDomains,
orgDomains,
dnsRecords
} from "@server/db";
import response from "@server/lib/response";
import HttpCode from "@server/types/HttpCode";
import createHttpError from "http-errors";
@@ -16,16 +23,15 @@ import { build } from "@server/build";
import config from "@server/lib/config";
const paramsSchema = z.strictObject({
orgId: z.string()
});
orgId: z.string()
});
const bodySchema = z.strictObject({
type: z.enum(["ns", "cname", "wildcard"]),
baseDomain: subdomainSchema,
certResolver: z.string().optional().nullable(),
preferWildcardCert: z.boolean().optional().nullable() // optional, only for wildcard
});
type: z.enum(["ns", "cname", "wildcard"]),
baseDomain: subdomainSchema,
certResolver: z.string().optional().nullable(),
preferWildcardCert: z.boolean().optional().nullable() // optional, only for wildcard
});
export type CreateDomainResponse = {
domainId: string;
@@ -72,7 +78,8 @@ export async function createOrgDomain(
}
const { orgId } = parsedParams.data;
const { type, baseDomain, certResolver, preferWildcardCert } = parsedBody.data;
const { type, baseDomain, certResolver, preferWildcardCert } =
parsedBody.data;
if (build == "oss") {
if (type !== "wildcard") {
@@ -278,7 +285,7 @@ export async function createOrgDomain(
// TODO: This needs to be cross region and not hardcoded
if (type === "ns") {
nsRecords = config.getRawConfig().dns.nameservers as string[];
// Save NS records to database
for (const nsValue of nsRecords) {
recordsToInsert.push({
@@ -300,7 +307,7 @@ export async function createOrgDomain(
baseDomain: `_acme-challenge.${baseDomain}`
}
];
// Save CNAME records to database
for (const cnameRecord of cnameRecords) {
recordsToInsert.push({
@@ -322,7 +329,7 @@ export async function createOrgDomain(
baseDomain: `${baseDomain}`
}
];
// Save A records to database
for (const aRecord of aRecords) {
recordsToInsert.push({

View File

@@ -11,9 +11,9 @@ import { usageService } from "@server/lib/billing/usageService";
import { FeatureId } from "@server/lib/billing";
const paramsSchema = z.strictObject({
domainId: z.string(),
orgId: z.string()
});
domainId: z.string(),
orgId: z.string()
});
export type DeleteAccountDomainResponse = {
success: boolean;
@@ -48,10 +48,7 @@ export async function deleteAccountDomain(
eq(orgDomains.domainId, domainId)
)
)
.innerJoin(
domains,
eq(orgDomains.domainId, domains.domainId)
);
.innerJoin(domains, eq(orgDomains.domainId, domains.domainId));
if (!existing) {
return next(

View File

@@ -11,16 +11,16 @@ import { OpenAPITags, registry } from "@server/openApi";
import { getServerIp } from "@server/lib/serverIpService"; // your in-memory IP module
const getDNSRecordsSchema = z.strictObject({
domainId: z.string(),
orgId: z.string()
});
domainId: z.string(),
orgId: z.string()
});
async function query(domainId: string) {
const records = await db
.select()
.from(dnsRecords)
.where(eq(dnsRecords.domainId, domainId));
return records;
}
@@ -72,8 +72,11 @@ export async function getDNSRecords(
const serverIp = getServerIp();
// Override value for type A or wildcard records
const updatedRecords = records.map(record => {
if ((record.recordType === "A" || record.baseDomain === "*") && serverIp) {
const updatedRecords = records.map((record) => {
if (
(record.recordType === "A" || record.baseDomain === "*") &&
serverIp
) {
return { ...record, value: serverIp };
}
return record;
@@ -92,4 +95,4 @@ export async function getDNSRecords(
createHttpError(HttpCode.INTERNAL_SERVER_ERROR, "An error occurred")
);
}
}
}

View File

@@ -11,11 +11,9 @@ import { OpenAPITags, registry } from "@server/openApi";
import { domain } from "zod/v4/core/regexes";
const getDomainSchema = z.strictObject({
domainId: z
.string()
.optional(),
orgId: z.string().optional()
});
domainId: z.string().optional(),
orgId: z.string().optional()
});
async function query(domainId?: string, orgId?: string) {
if (domainId) {
@@ -65,7 +63,9 @@ export async function getDomain(
const domain = await query(domainId, orgId);
if (!domain) {
return next(createHttpError(HttpCode.NOT_FOUND, "Domain not found"));
return next(
createHttpError(HttpCode.NOT_FOUND, "Domain not found")
);
}
return response<GetDomainResponse>(res, {

View File

@@ -4,4 +4,4 @@ export * from "./deleteOrgDomain";
export * from "./restartOrgDomain";
export * from "./getDomain";
export * from "./getDNSRecords";
export * from "./updateDomain";
export * from "./updateDomain";

View File

@@ -11,23 +11,23 @@ import { fromError } from "zod-validation-error";
import { OpenAPITags, registry } from "@server/openApi";
const listDomainsParamsSchema = z.strictObject({
orgId: z.string()
});
orgId: z.string()
});
const listDomainsSchema = z.strictObject({
limit: z
.string()
.optional()
.default("1000")
.transform(Number)
.pipe(z.int().nonnegative()),
offset: z
.string()
.optional()
.default("0")
.transform(Number)
.pipe(z.int().nonnegative())
});
limit: z
.string()
.optional()
.default("1000")
.transform(Number)
.pipe(z.int().nonnegative()),
offset: z
.string()
.optional()
.default("0")
.transform(Number)
.pipe(z.int().nonnegative())
});
async function queryDomains(orgId: string, limit: number, offset: number) {
const res = await db

View File

@@ -9,9 +9,9 @@ import { fromError } from "zod-validation-error";
import { and, eq } from "drizzle-orm";
const paramsSchema = z.strictObject({
domainId: z.string(),
orgId: z.string()
});
domainId: z.string(),
orgId: z.string()
});
export type RestartOrgDomainResponse = {
success: boolean;

View File

@@ -5,4 +5,4 @@ export type CheckDomainAvailabilityResponse = {
domainId: string;
fullDomain: string;
}[];
};
};

View File

@@ -10,14 +10,14 @@ import { eq, and } from "drizzle-orm";
import { OpenAPITags, registry } from "@server/openApi";
const paramsSchema = z.strictObject({
orgId: z.string(),
domainId: z.string()
});
orgId: z.string(),
domainId: z.string()
});
const bodySchema = z.strictObject({
certResolver: z.string().optional().nullable(),
preferWildcardCert: z.boolean().optional().nullable()
});
certResolver: z.string().optional().nullable(),
preferWildcardCert: z.boolean().optional().nullable()
});
export type UpdateDomainResponse = {
domainId: string;
@@ -25,7 +25,6 @@ export type UpdateDomainResponse = {
preferWildcardCert: boolean | null;
};
registry.registerPath({
method: "patch",
path: "/org/{orgId}/domain/{domainId}",
@@ -88,7 +87,6 @@ export async function updateOrgDomain(
);
}
const [existingDomain] = await db
.select()
.from(domains)
@@ -154,4 +152,4 @@ export async function updateOrgDomain(
createHttpError(HttpCode.INTERNAL_SERVER_ERROR, "An error occurred")
);
}
}
}