56 lines · 1.8 KB · TypeScript
RawDownload
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) 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;};