UNPKG

@forzalabs/remora

Version:

A powerful CLI tool for seamless data translation.

81 lines (80 loc) 4.24 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const AdminManager_1 = __importDefault(require("../auth/AdminManager")); const Affirm_1 = __importDefault(require("../core/Affirm")); const UserManager_1 = __importDefault(require("../engines/UserManager")); const Helper_1 = __importDefault(require("../helper/Helper")); const DatabaseEngine_1 = __importDefault(require("./DatabaseEngine")); const DatabaseStructure_1 = __importDefault(require("./DatabaseStructure")); const bcryptjs_1 = __importDefault(require("bcryptjs")); class DatabaseInitializerClass { constructor() { this.initialize = () => __awaiter(this, void 0, void 0, function* () { try { yield DatabaseEngine_1.default.connect(); yield this.createCollections(); yield this.primeCollections(); } catch (error) { console.error('Error initializing database:', error); throw error; } }); this.createCollections = () => __awaiter(this, void 0, void 0, function* () { const db = DatabaseEngine_1.default.db(); // Get list of existing collections const collections = yield db.listCollections().toArray(); const existingCollections = collections.map(col => col.name); // Check and create required collections from SETTINGS for (const collection of DatabaseStructure_1.default.collections) { const name = collection.name; if (!existingCollections.includes(name)) { console.log(`Creating collection: ${name}`); yield db.createCollection(name); for (const index of collection.indexes) { console.log(`Setting up index ${JSON.stringify(index)}`); yield db.collection(name).createIndex(index); } } } console.log('Collections creation completed'); }); this.primeCollections = () => __awaiter(this, void 0, void 0, function* () { // Create the default user of the system (0, Affirm_1.default)(process.env.ROOT_TEMP_PASSWORD, 'Wrong system config: missing root user temp password'); const rootUser = yield DatabaseEngine_1.default.findOne(AdminManager_1.default.COLLECTION, { isRoot: true }); if (!rootUser) { const salt = yield bcryptjs_1.default.genSalt(10); const passHash = yield bcryptjs_1.default.hash(process.env.ROOT_TEMP_PASSWORD, salt); const newRootUser = { _id: Helper_1.default.uuid(), _signature: '', auth: { oid: null, provider: 'password' }, email: 'root@remora.com', lastLogin: new Date().toJSON(), name: 'Root', roles: ['root'], isRoot: true, rootPasswordHash: passHash }; console.log('Creating the default root user'); yield UserManager_1.default.update(newRootUser); } console.log('Collections priming completed'); }); } } const DatabaseInitializer = new DatabaseInitializerClass(); exports.default = DatabaseInitializer;