@coko/server
Version:
Reusable server for use by Coko's projects
108 lines • 4.34 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ConfigSchema = void 0;
const zod_1 = require("zod");
// Zod doesn't have a specific type for Knex.PoolConfig, so we define it loosely
// or only include the fields you intend to validate.
// For simplicity here, we'll allow any object, but you should refine this
// if you need validation for specific Knex pool properties.
// const KnexPoolConfigSchema = z.record(z.any()).optional();
const DatabaseConfigSchema = zod_1.z.strictObject({
host: zod_1.z.string(),
port: zod_1.z.number().int().positive(),
database: zod_1.z.string(),
user: zod_1.z.string(),
password: zod_1.z.string(),
allowSelfSignedCertificates: zod_1.z.boolean().optional(),
caCert: zod_1.z.string().optional(),
});
const AlternateDatabaseConfigSchema = zod_1.z.strictObject({
host: zod_1.z.string().optional(),
port: zod_1.z.number().int().positive().optional(),
database: zod_1.z.string().optional(),
user: zod_1.z.string().optional(),
password: zod_1.z.string().optional(),
allowSelfSignedCertificates: zod_1.z.boolean().optional(),
caCert: zod_1.z.string().optional(),
});
const FileStorageConfigSchema = zod_1.z.strictObject({
accessKeyId: zod_1.z.string().optional(),
secretAccessKey: zod_1.z.string().optional(),
url: zod_1.z.url(),
publicUrl: zod_1.z.url().optional(),
bucket: zod_1.z.string(),
region: zod_1.z.string().optional(),
maximumWidthForSmallImages: zod_1.z.number().int().nonnegative(),
maximumWidthForMediumImages: zod_1.z.number().int().nonnegative(),
s3ForcePathStyle: zod_1.z.boolean(),
s3SeparateDeleteOperations: zod_1.z.boolean(),
});
const MailerTransportAuthSchema = zod_1.z.strictObject({
user: zod_1.z.string(),
pass: zod_1.z.string(),
});
const MailerTransportSchema = zod_1.z.strictObject({
host: zod_1.z.string(),
port: zod_1.z.number().int().positive(),
auth: MailerTransportAuthSchema,
});
const MailerConfigSchema = zod_1.z.strictObject({
from: zod_1.z.string(),
transport: MailerTransportSchema,
});
const TeamConfigSchema = zod_1.z.strictObject({
displayName: zod_1.z.string(),
role: zod_1.z.string(),
});
const TeamsConfigSchema = zod_1.z.strictObject({
global: zod_1.z.array(TeamConfigSchema),
nonGlobal: zod_1.z.array(TeamConfigSchema),
});
const StaticFolderSchema = zod_1.z.strictObject({
folderPath: zod_1.z.string(),
mountPoint: zod_1.z.string(),
});
const IntegrationConfigSchema = zod_1.z.strictObject({
name: zod_1.z.string(),
clientId: zod_1.z.string(),
redirectUri: zod_1.z.url(),
tokenUrl: zod_1.z.url(),
});
const SentrySchema = zod_1.z.strictObject({
dsn: zod_1.z.string(),
environment: zod_1.z.string(),
});
const AdminUserSchema = zod_1.z.strictObject({
username: zod_1.z.string(),
password: zod_1.z.string(),
email: zod_1.z.email(),
givenNames: zod_1.z.string().optional(),
surname: zod_1.z.string().optional(),
});
exports.ConfigSchema = zod_1.z.strictObject({
// database
db: DatabaseConfigSchema,
subscriptionsDb: AlternateDatabaseConfigSchema.optional(),
jobQueueDb: AlternateDatabaseConfigSchema.optional(),
// pool: KnexPoolConfigSchema.optional(),
acquireConnectionTimeout: zod_1.z.number().int().nonnegative().optional(),
adminUser: zod_1.z.union([AdminUserSchema, zod_1.z.literal(false)]),
clientUrl: zod_1.z.url().optional(),
components: zod_1.z.array(zod_1.z.string()),
corsOrigin: zod_1.z.union([zod_1.z.string(), zod_1.z.array(zod_1.z.string())]).optional(),
fileStorage: zod_1.z.union([FileStorageConfigSchema, zod_1.z.literal(false)]),
mailer: zod_1.z.union([MailerConfigSchema, zod_1.z.literal(false)]),
passwordResetRedirect: zod_1.z.string(),
port: zod_1.z.number().int().positive(),
secret: zod_1.z.string(),
sentry: zod_1.z.union([SentrySchema, zod_1.z.literal(false)]),
serverUrl: zod_1.z.url(),
staticFolders: zod_1.z.array(StaticFolderSchema),
suppressLoggerInTestEnv: zod_1.z.boolean(),
teams: TeamsConfigSchema,
tokenExpiresIn: zod_1.z.number().int().nonnegative(),
useGraphQLServer: zod_1.z.boolean(),
// drop
integrations: zod_1.z.array(IntegrationConfigSchema).optional(),
});
//# sourceMappingURL=configSchema.js.map