// Production seed: registers an operator and creates a project. Creating a // project provisions staging + prod environments; the prod SDK key is what // the runtime SDK sends as projectKey. import { createAdminClient } from './adminClient.js'; import type { SeedArtifact } from './types.js'; export async function runSeed( baseUrl: string, log: (m: string) => void = () => {}, ): Promise { const api = createAdminClient(baseUrl); const ts = Date.now(); const runtimeEnv = 'prod'; const adminEmail = `e2e+${ts}@rudder.build`; const password = `Passw0rd!e2e-${ts}`; const auth = await api.post<{ accessToken: string; refreshToken: string }>( '/platform/v1/authorization/register', { email: adminEmail, password, fullName: 'E2E Bot' }, { auth: false }, ); api.setToken(auth.accessToken); log(`registered ${adminEmail}`); const project = await api.post<{ id: string; name: string }>('/platform/v1/projects', { name: `e2e-${ts}`, }); const projPath = `/platform/v1/projects/${project.id}`; const environments = await api.get>( `${projPath}/environments`, ); const projectKey = environments.find((e) => e.name === runtimeEnv)?.sdkKey; if (!projectKey) { throw new Error(`project ${project.id} has no ${runtimeEnv} environment sdk key`); } log(`project ${project.id} ${runtimeEnv}Key=${projectKey}`); return { baseUrl, projectId: project.id, projectKey, adminToken: auth.accessToken, adminEmail, environment: runtimeEnv, seededAt: new Date(ts).toISOString(), }; } export async function deleteProject(artifact: SeedArtifact): Promise { const api = createAdminClient(artifact.baseUrl); api.setToken(artifact.adminToken); await api.del(`/platform/v1/projects/${artifact.projectId}`); }