import crypto from "node:crypto";import { findComposeById } from "@dokploy/server/services/compose";import { parse, stringify } from "yaml";import { addSuffixToAllConfigs } from "./compose/configs";import { addSuffixToAllNetworks } from "./compose/network";import { addSuffixToAllSecrets } from "./compose/secrets";import { addSuffixToAllServiceNames } from "./compose/service";import { addSuffixToAllVolumes } from "./compose/volume";import type { ComposeSpecification } from "./types"; export const generateRandomHash = (): string => { return crypto.randomBytes(4).toString("hex");}; export const randomizeComposeFile = async ( composeId: string, suffix?: string,) => { const compose = await findComposeById(composeId); const composeFile = compose.composeFile; const composeData = parse(composeFile, { maxAliasCount: 10000, }) as ComposeSpecification; const randomSuffix = suffix || generateRandomHash(); const newComposeFile = addSuffixToAllProperties(composeData, randomSuffix); return stringify(newComposeFile);}; export const randomizeSpecificationFile = ( composeSpec: ComposeSpecification, suffix?: string,) => { if (!suffix) { return composeSpec; } const newComposeFile = addSuffixToAllProperties(composeSpec, suffix); return newComposeFile;}; export const addSuffixToAllProperties = ( composeData: ComposeSpecification, suffix: string,): ComposeSpecification => { let updatedComposeData = { ...composeData }; updatedComposeData = addSuffixToAllServiceNames(updatedComposeData, suffix); updatedComposeData = addSuffixToAllVolumes(updatedComposeData, suffix); updatedComposeData = addSuffixToAllNetworks(updatedComposeData, suffix); updatedComposeData = addSuffixToAllConfigs(updatedComposeData, suffix); updatedComposeData = addSuffixToAllSecrets(updatedComposeData, suffix); return updatedComposeData;};
import crypto from "node:crypto";
import { findComposeById } from "@dokploy/server/services/compose";
import { parse, stringify } from "yaml";
import { addSuffixToAllConfigs } from "./compose/configs";
import { addSuffixToAllNetworks } from "./compose/network";
import { addSuffixToAllSecrets } from "./compose/secrets";
import { addSuffixToAllServiceNames } from "./compose/service";
import { addSuffixToAllVolumes } from "./compose/volume";
import type { ComposeSpecification } from "./types";
export const generateRandomHash = (): string => {
return crypto.randomBytes(4).toString("hex");
};
export const randomizeComposeFile = async (
composeId: string,
suffix?: string,
) => {
const compose = await findComposeById(composeId);
const composeFile = compose.composeFile;
const composeData = parse(composeFile, {
maxAliasCount: 10000,
}) as ComposeSpecification;
const randomSuffix = suffix || generateRandomHash();
const newComposeFile = addSuffixToAllProperties(composeData, randomSuffix);
return stringify(newComposeFile);
};
export const randomizeSpecificationFile = (
composeSpec: ComposeSpecification,
suffix?: string,
) => {
if (!suffix) {
return composeSpec;
}
const newComposeFile = addSuffixToAllProperties(composeSpec, suffix);
return newComposeFile;
};
export const addSuffixToAllProperties = (
composeData: ComposeSpecification,
suffix: string,
): ComposeSpecification => {
let updatedComposeData = { ...composeData };
updatedComposeData = addSuffixToAllServiceNames(updatedComposeData, suffix);
updatedComposeData = addSuffixToAllVolumes(updatedComposeData, suffix);
updatedComposeData = addSuffixToAllNetworks(updatedComposeData, suffix);
updatedComposeData = addSuffixToAllConfigs(updatedComposeData, suffix);
updatedComposeData = addSuffixToAllSecrets(updatedComposeData, suffix);
return updatedComposeData;
};