feat: added bootstrap to CLI

This commit is contained in:
Sheen Capadngan
2025-03-18 02:27:42 +08:00
parent 2d1d6f5ce8
commit 64569ab44b
6 changed files with 149 additions and 14 deletions
+10 -9
View File
@@ -401,22 +401,22 @@ export const registerAdminRouter = async (server: FastifyZodProvider) => {
server.route({
method: "POST",
url: "/initialize",
url: "/bootstrap",
config: {
rateLimit: writeLimit
},
schema: {
body: z.object({
email: z.string().email().trim(),
password: z.string().trim(),
organizationName: z.string().trim()
email: z.string().email().trim().min(1),
password: z.string().trim().min(1),
organization: z.string().trim().min(1)
}),
response: {
200: z.object({
message: z.string(),
user: UsersSchema,
organization: OrganizationsSchema,
machineIdentity: IdentitiesSchema.extend({
identity: IdentitiesSchema.extend({
credentials: z.object({
token: z.string()
}) // would just be Token AUTH for now
@@ -425,8 +425,9 @@ export const registerAdminRouter = async (server: FastifyZodProvider) => {
}
},
handler: async (req) => {
const { user, organization, machineIdentity } = await server.services.superAdmin.initializeInstance({
...req.body
const { user, organization, machineIdentity } = await server.services.superAdmin.bootstrapInstance({
...req.body,
organizationName: req.body.organization
});
await server.services.telemetry.sendPostHogEvents({
@@ -441,10 +442,10 @@ export const registerAdminRouter = async (server: FastifyZodProvider) => {
});
return {
message: "Successfully initialized instance",
message: "Successfully boostrapped instance",
user: user.user,
organization,
machineIdentity
identity: machineIdentity
};
}
});
@@ -27,9 +27,9 @@ import { UserAliasType } from "../user-alias/user-alias-types";
import { TSuperAdminDALFactory } from "./super-admin-dal";
import {
LoginMethod,
TAdminBoostrapInstanceDTO,
TAdminGetIdentitiesDTO,
TAdminGetUsersDTO,
TAdminInitializeInstanceDTO,
TAdminSignUpDTO
} from "./super-admin-types";
@@ -291,7 +291,7 @@ export const superAdminServiceFactory = ({
return { token, user: userInfo, organization };
};
const initializeInstance = async ({ email, password, organizationName }: TAdminInitializeInstanceDTO) => {
const bootstrapInstance = async ({ email, password, organizationName }: TAdminBoostrapInstanceDTO) => {
const appCfg = getConfig();
const serverCfg = await serverCfgDAL.findById(ADMIN_CONFIG_DB_UUID);
if (serverCfg?.initialized) {
@@ -352,7 +352,7 @@ export const superAdminServiceFactory = ({
});
const { identity, credentials } = await identityDAL.transaction(async (tx) => {
const newIdentity = await identityDAL.create({ name: "Admin Identity" }, tx);
const newIdentity = await identityDAL.create({ name: "Instance Admin Identity" }, tx);
await identityOrgMembershipDAL.create(
{
identityId: newIdentity.id,
@@ -547,7 +547,7 @@ export const superAdminServiceFactory = ({
initServerCfg,
updateServerCfg,
adminSignUp,
initializeInstance,
bootstrapInstance,
getUsers,
deleteUser,
getIdentities,
@@ -16,7 +16,7 @@ export type TAdminSignUpDTO = {
userAgent: string;
};
export type TAdminInitializeInstanceDTO = {
export type TAdminBoostrapInstanceDTO = {
email: string;
password: string;
organizationName: string;