55 lines
1.8 KiB
TypeScript
55 lines
1.8 KiB
TypeScript
// 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<SeedArtifact> {
|
|
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<Array<{ name: string; sdkKey: string }>>(
|
|
`${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<void> {
|
|
const api = createAdminClient(artifact.baseUrl);
|
|
api.setToken(artifact.adminToken);
|
|
await api.del(`/platform/v1/projects/${artifact.projectId}`);
|
|
}
|