Merge branch 'main' into dev

This commit is contained in:
Owen
2026-05-31 11:12:30 -07:00
187 changed files with 2965 additions and 247 deletions

View File

@@ -78,7 +78,22 @@ registry.registerPath({
}
}
},
responses: {}
responses: {
200: {
description: "Successful response",
content: {
"application/json": {
schema: z.object({
data: z.unknown().nullable(),
success: z.boolean(),
error: z.boolean(),
message: z.string(),
status: z.number()
})
}
}
}
}
});
export async function createSite(

View File

@@ -16,7 +16,7 @@ import { usageService } from "@server/lib/billing/usageService";
import { FeatureId } from "@server/lib/billing";
const deleteSiteSchema = z.strictObject({
siteId: z.string().transform(Number).pipe(z.int().positive())
siteId: z.coerce.number().int().positive()
});
registry.registerPath({
@@ -27,7 +27,22 @@ registry.registerPath({
request: {
params: deleteSiteSchema
},
responses: {}
responses: {
200: {
description: "Successful response",
content: {
"application/json": {
schema: z.object({
data: z.unknown().nullable(),
success: z.boolean(),
error: z.boolean(),
message: z.string(),
status: z.number()
})
}
}
}
}
});
export async function deleteSite(

View File

@@ -61,7 +61,22 @@ registry.registerPath({
niceId: z.string()
})
},
responses: {}
responses: {
200: {
description: "Successful response",
content: {
"application/json": {
schema: z.object({
data: z.unknown().nullable(),
success: z.boolean(),
error: z.boolean(),
message: z.string(),
status: z.number()
})
}
}
}
}
});
registry.registerPath({
@@ -74,7 +89,22 @@ registry.registerPath({
siteId: z.number()
})
},
responses: {}
responses: {
200: {
description: "Successful response",
content: {
"application/json": {
schema: z.object({
data: z.unknown().nullable(),
success: z.boolean(),
error: z.boolean(),
message: z.string(),
status: z.number()
})
}
}
}
}
});
export async function getSite(

View File

@@ -10,7 +10,7 @@ import logger from "@server/logger";
import { fromError } from "zod-validation-error";
const listSiteRolesSchema = z.strictObject({
siteId: z.string().transform(Number).pipe(z.int().positive())
siteId: z.coerce.number().int().positive()
});
export async function listSiteRoles(

View File

@@ -274,7 +274,22 @@ registry.registerPath({
params: listSitesParamsSchema,
query: listSitesSchema
},
responses: {}
responses: {
200: {
description: "Successful response",
content: {
"application/json": {
schema: z.object({
data: z.unknown().nullable(),
success: z.boolean(),
error: z.boolean(),
message: z.string(),
status: z.number()
})
}
}
}
}
});
export async function listSites(

View File

@@ -15,6 +15,7 @@ import config from "@server/lib/config";
import { OpenAPITags, registry } from "@server/openApi";
import { fromError } from "zod-validation-error";
import { z } from "zod";
import { createApiResponseSchema } from "@server/lib/openapi/createApiResponseSchema";
import { listExitNodes } from "#dynamic/lib/exitNodes";
export type PickSiteDefaultsResponse = {
@@ -29,6 +30,19 @@ export type PickSiteDefaultsResponse = {
newtSecret: string;
clientAddress?: string;
};
const PickSiteDefaultsResponseDataSchema = z.object({
exitNodeId: z.number(),
address: z.string(),
publicKey: z.string(),
name: z.string(),
listenPort: z.number(),
endpoint: z.string(),
subnet: z.string(),
newtId: z.string(),
newtSecret: z.string(),
clientAddress: z.string().optional()
});
registry.registerPath({
method: "get",
@@ -41,7 +55,16 @@ registry.registerPath({
orgId: z.string()
})
},
responses: {}
responses: {
200: {
description: "Successful response",
content: {
"application/json": {
schema: createApiResponseSchema(PickSiteDefaultsResponseDataSchema)
}
}
}
}
});
const pickSiteDefaultsSchema = z.strictObject({

View File

@@ -44,7 +44,7 @@ export interface Container {
}
const siteIdParamsSchema = z.strictObject({
siteId: z.string().transform(stoi).pipe(z.int().positive())
siteId: z.coerce.number().int().positive()
});
const DockerStatusSchema = z.strictObject({

View File

@@ -13,7 +13,7 @@ import { isLicensedOrSubscribed } from "#dynamic/lib/isLicencedOrSubscribed";
import { tierMatrix, TierFeature } from "@server/lib/billing/tierMatrix";
const updateSiteParamsSchema = z.strictObject({
siteId: z.string().transform(Number).pipe(z.int().positive())
siteId: z.coerce.number().int().positive()
});
const updateSiteBodySchema = z
@@ -44,7 +44,22 @@ registry.registerPath({
}
}
},
responses: {}
responses: {
200: {
description: "Successful response",
content: {
"application/json": {
schema: z.object({
data: z.unknown().nullable(),
success: z.boolean(),
error: z.boolean(),
message: z.string(),
status: z.number()
})
}
}
}
}
});
export async function updateSite(