Files
HexaHost-GameCloud/packages/database/src/cli/seed-dev.ts
smueller ab21f53cdd
Some checks failed
CI / Node — lint, typecheck, test, build (push) Failing after 9s
CI / Go — node-agent tests (push) Failing after 8s
CI / Go — edge-gateway build (push) Successful in 14s
Phase7
2026-06-26 13:20:55 +02:00

107 lines
3.1 KiB
TypeScript

import { PrismaClient } from '@prisma/client';
import { hashToken } from '@hexahost/auth';
/** Stable dev node ID — must match NODE_ID in .env for local agent */
export const DEV_NODE_ID = '00000000-0000-4000-8000-000000000001';
export const DEV_NODE_ID_2 = '00000000-0000-4000-8000-000000000002';
/** Shown once in seed output; hash stored in DB */
export const DEV_NODE_ENROLLMENT_TOKEN =
'local-dev-enrollment-token-change-me-32chars';
export const DEV_NODE_2_ENROLLMENT_TOKEN =
'local-dev-node2-enrollment-token-32ch';
async function main(): Promise<void> {
const prisma = new PrismaClient();
try {
const freePlan = await prisma.plan.upsert({
where: { slug: 'free' },
create: {
name: 'Free',
slug: 'free',
description: 'Free tier with limited resources',
isFree: true,
isActive: true,
maxRamMb: 2048,
maxCpuCores: 1,
maxStorageMb: 5120,
maxServersPerUser: 3,
idleTimeoutMinutes: 10,
idleGraceAfterStartMinutes: 2,
idleCountdownSeconds: 60,
queuePriority: 0,
monthlyCreditGrant: 5000,
},
update: {
isActive: true,
maxServersPerUser: 3,
idleTimeoutMinutes: 10,
idleGraceAfterStartMinutes: 2,
idleCountdownSeconds: 60,
queuePriority: 0,
monthlyCreditGrant: 5000,
},
});
const devNode = await prisma.gameNode.upsert({
where: { id: DEV_NODE_ID },
create: {
id: DEV_NODE_ID,
name: 'local-dev',
hostname: 'localhost',
status: 'OFFLINE',
maxServers: 10,
maxRamMb: 16384,
platformRamMb: 2048,
enrollmentTokenHash: hashToken(DEV_NODE_ENROLLMENT_TOKEN),
},
update: {
name: 'local-dev',
hostname: 'localhost',
maxRamMb: 16384,
platformRamMb: 2048,
enrollmentTokenHash: hashToken(DEV_NODE_ENROLLMENT_TOKEN),
},
});
const devNode2 = await prisma.gameNode.upsert({
where: { id: DEV_NODE_ID_2 },
create: {
id: DEV_NODE_ID_2,
name: 'local-dev-2',
hostname: 'localhost',
status: 'OFFLINE',
maxServers: 10,
maxRamMb: 16384,
platformRamMb: 2048,
enrollmentTokenHash: hashToken(DEV_NODE_2_ENROLLMENT_TOKEN),
},
update: {
name: 'local-dev-2',
hostname: 'localhost',
maxRamMb: 16384,
platformRamMb: 2048,
enrollmentTokenHash: hashToken(DEV_NODE_2_ENROLLMENT_TOKEN),
},
});
console.log('Seed complete:');
console.log(` Plan Free: ${freePlan.id}`);
console.log(` Dev node: ${devNode.id} (${devNode.name})`);
console.log(` Dev node 2: ${devNode2.id} (${devNode2.name})`);
console.log(` Enrollment token (set NODE_TOKEN): ${DEV_NODE_ENROLLMENT_TOKEN}`);
console.log(` Node 2 enrollment token: ${DEV_NODE_2_ENROLLMENT_TOKEN}`);
} finally {
await prisma.$disconnect();
}
}
void main().catch((error: unknown) => {
console.error(error instanceof Error ? error.message : error);
process.exit(1);
});