107 lines
3.1 KiB
TypeScript
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);
|
|
});
|