This commit is contained in:
Benjamin Toby
2025-07-09 20:30:45 +01:00
parent ccb5605b58
commit c37d105dee
264 changed files with 2389 additions and 3743 deletions
@@ -1,5 +0,0 @@
/**
* # DSQL user read-only DB handler
* @requires DSQL_DB_CONN - Gobal Variable for Datasquirel Database
*/
export default function DB_HANDLER(query: string, values?: any[]): Promise<any>;
@@ -1,47 +0,0 @@
"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 });
exports.default = DB_HANDLER;
const grab_dsql_connection_1 = __importDefault(require("../../grab-dsql-connection"));
/**
* # DSQL user read-only DB handler
* @requires DSQL_DB_CONN - Gobal Variable for Datasquirel Database
*/
function DB_HANDLER(query, values) {
return __awaiter(this, void 0, void 0, function* () {
var _a;
const CONNECTION = yield (0, grab_dsql_connection_1.default)();
try {
if (!CONNECTION)
throw new Error("No Connection provided to DB_HANDLER function!");
const results = yield CONNECTION.query(query, values);
if (Array.isArray(results)) {
return Array.from(results);
}
else {
return results;
}
}
catch (error) {
(_a = global.ERROR_CALLBACK) === null || _a === void 0 ? void 0 : _a.call(global, `DB_HANDLER Error`, error);
return {
success: false,
error: error.message,
};
}
finally {
yield (CONNECTION === null || CONNECTION === void 0 ? void 0 : CONNECTION.end());
}
});
}
@@ -1,10 +0,0 @@
type Param = {
paradigm: "Full Access" | "FA" | "Read Only";
queryString: string;
queryValues?: string[];
};
/**
* # DSQL user read-only DB handler
*/
export default function DSQL_USER_DB_HANDLER({ paradigm, queryString, queryValues, }: Param): Promise<any>;
export {};
@@ -1,38 +0,0 @@
"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 });
exports.default = DSQL_USER_DB_HANDLER;
const conn_db_handler_1 = __importDefault(require("../../db/conn-db-handler"));
const grab_dsql_connection_1 = __importDefault(require("../../grab-dsql-connection"));
/**
* # DSQL user read-only DB handler
*/
function DSQL_USER_DB_HANDLER(_a) {
return __awaiter(this, arguments, void 0, function* ({ paradigm, queryString, queryValues, }) {
var _b;
const CONNECTION = paradigm == "Read Only"
? yield (0, grab_dsql_connection_1.default)({ ro: true })
: yield (0, grab_dsql_connection_1.default)({ fa: true });
try {
return yield (0, conn_db_handler_1.default)(CONNECTION, queryString, queryValues);
}
catch (error) {
(_b = global.ERROR_CALLBACK) === null || _b === void 0 ? void 0 : _b.call(global, `DSQL_USER_DB_HANDLER Error`, error);
return null;
}
finally {
yield (CONNECTION === null || CONNECTION === void 0 ? void 0 : CONNECTION.end());
}
});
}
@@ -1,4 +0,0 @@
/**
* # DSQL user read-only DB handler
*/
export default function LOCAL_DB_HANDLER(query: string, values?: any[]): Promise<any>;
@@ -1,44 +0,0 @@
"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 });
exports.default = LOCAL_DB_HANDLER;
const grab_dsql_connection_1 = __importDefault(require("../../grab-dsql-connection"));
/**
* # DSQL user read-only DB handler
*/
function LOCAL_DB_HANDLER(query, values) {
return __awaiter(this, void 0, void 0, function* () {
var _a;
const CONNECTION = yield (0, grab_dsql_connection_1.default)();
try {
const results = yield CONNECTION.query(query, values);
if (Array.isArray(results)) {
return Array.from(results);
}
else {
return results;
}
}
catch (error) {
(_a = global.ERROR_CALLBACK) === null || _a === void 0 ? void 0 : _a.call(global, `LOCAL_DB_HANDLER Error`, error);
return {
success: false,
error: error.message,
};
}
finally {
yield (CONNECTION === null || CONNECTION === void 0 ? void 0 : CONNECTION.end());
}
});
}
@@ -1,4 +0,0 @@
/**
* # DSQL user read-only DB handler
*/
export default function NO_DB_HANDLER(query: string, values?: any[]): Promise<unknown>;
@@ -1,54 +0,0 @@
"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 });
exports.default = NO_DB_HANDLER;
const grab_dsql_connection_1 = __importDefault(require("../../grab-dsql-connection"));
/**
* # DSQL user read-only DB handler
*/
function NO_DB_HANDLER(query, values) {
return __awaiter(this, void 0, void 0, function* () {
var _a;
const CONNECTION = yield (0, grab_dsql_connection_1.default)();
try {
return new Promise((resolve, reject) => {
CONNECTION.query(query, values)
.then((results) => __awaiter(this, void 0, void 0, function* () {
if (Array.isArray(results)) {
resolve(Array.from(results));
}
else {
resolve(results);
}
}))
.catch((err) => __awaiter(this, void 0, void 0, function* () {
resolve({
error: err.message,
sql: err.sql,
});
}))
.finally(() => __awaiter(this, void 0, void 0, function* () {
yield (CONNECTION === null || CONNECTION === void 0 ? void 0 : CONNECTION.end());
}));
});
}
catch (error) {
(_a = global.ERROR_CALLBACK) === null || _a === void 0 ? void 0 : _a.call(global, `NO_DB_HANDLER Error`, error);
return {
success: false,
error: error.message,
};
}
});
}
+4 -4
View File
@@ -10,17 +10,17 @@ const grab_dir_names_1 = __importDefault(require("./names/grab-dir-names"));
* # Grab SSL
*/
function grabDbSSL() {
const { maxscaleSSLDir } = (0, grab_dir_names_1.default)();
if (!(maxscaleSSLDir === null || maxscaleSSLDir === void 0 ? void 0 : maxscaleSSLDir.match(/./))) {
const { maxscaleSSLCaCertFile } = (0, grab_dir_names_1.default)();
const caFilePath = process.env.DSQL_SSL_CA_CERT || maxscaleSSLCaCertFile;
if (!(caFilePath === null || caFilePath === void 0 ? void 0 : caFilePath.match(/./))) {
return undefined;
}
const caFilePath = `${maxscaleSSLDir}/ca-cert.pem`;
if (!fs_1.default.existsSync(caFilePath)) {
console.log(`${caFilePath} does not exist`);
return undefined;
}
return {
ca: fs_1.default.readFileSync(`${maxscaleSSLDir}/ca-cert.pem`),
ca: fs_1.default.readFileSync(caFilePath),
rejectUnauthorized: false,
};
}
@@ -26,7 +26,7 @@ function importMariadbDatabase(_a) {
const finalMariadbUser = mariadbUser || process.env.DSQL_DB_USERNAME;
const finalMariadbHost = mariadbHost || process.env.DSQL_DB_HOST;
const finalMariadbPass = mariadbPass || process.env.DSQL_DB_PASSWORD;
yield (0, conn_db_handler_1.default)(global.DSQL_DB_CONN, `CREATE DATABASE IF NOT EXISTS ${dbFullName}`);
yield (0, conn_db_handler_1.default)(null, `CREATE DATABASE IF NOT EXISTS ${dbFullName}`);
const cmd = `${mysqlPath} -u ${finalMariadbUser} -h ${finalMariadbHost} -p"${finalMariadbPass}" ${dbFullName} < ${targetFilePath}`;
let execSyncOptions = {
encoding: "utf-8",
@@ -67,6 +67,7 @@ export default function grabDirNames(param?: Param): {
schemasBackupDirName: string;
userMainShemaJSONFilePath: string | undefined;
maxscaleSSLDir: string;
maxscaleSSLCaCertFile: string;
mainDBSSLDir: string;
replica1DBSSLDir: string;
replica2DBSSLDir: string;
@@ -89,5 +90,13 @@ export default function grabDirNames(param?: Param): {
distroEnterpriseExportTarName: "dsql-enterprise.tar.xz";
communityDistroTempDir: string;
communityDistroDir: string;
installScriptFile: string;
updateScriptFile: string;
installTypescriptFile: string;
updateTypescriptFile: string;
dsqlDbDockerComposeFile: string;
dsqlDbDockerComposeFileAlt: string;
dsqlDbDockerComposeFileName: string;
dsqlDbDockerComposeFileNameAlt: string;
};
export {};
+22 -2
View File
@@ -26,10 +26,15 @@ function grabDirNames(param) {
const publicSSLDir = path_1.default.join(publicDir, "documents", "ssl");
const appSSLDir = path_1.default.join(appDir, "ssl");
const mainSSLDir = path_1.default.join(DATA_DIR, "ssl");
const installScriptFile = path_1.default.join(appDir, "scripts", "shell", "installation", "install.sh");
const updateScriptFile = path_1.default.join(appDir, "scripts", "shell", "installation", "update.sh");
const installTypescriptFile = path_1.default.join(appDir, "scripts", "shell", "installation", "install.ts");
const updateTypescriptFile = path_1.default.join(appDir, "scripts", "shell", "installation", "update.ts");
const maxscaleSSLDir = path_1.default.join(mainSSLDir, "maxscale");
const mainDBSSLDir = path_1.default.join(mainSSLDir, "main");
const replica1DBSSLDir = path_1.default.join(mainSSLDir, "replica-1");
const replica2DBSSLDir = path_1.default.join(mainSSLDir, "replica-2");
const maxscaleSSLCaCertFile = path_1.default.join(maxscaleSSLDir, "ca-cert.pem");
const privateDataDir = path_1.default.join(DATA_DIR, "private");
/**
* # DB Dir names
@@ -106,12 +111,18 @@ function grabDirNames(param) {
const dbNginxLoadBalancerConfigFile = path_1.default.join(appDir, "docker/services/mariadb/load-balancer/config/template/nginx.conf");
let dockerComposeFile = path_1.default.join(appDir, "docker-compose.yml");
let dockerComposeFileAlt = path_1.default.join(appDir, "docker-compose.yaml");
const dbDockerComposeFileName = "db.docker-compose.yml";
const dbDockerComposeFileNameAlt = "db.docker-compose.yaml";
const dsqlDockerComposeFileName = "dsql.docker-compose.yml";
const dsqlDockerComposeFileNameAlt = "dsql.docker-compose.yaml";
const dsqlDbDockerComposeFileName = "dsql-db.docker-compose.yml";
const dsqlDbDockerComposeFileNameAlt = "dsql-db.docker-compose.yaml";
const dsqlDockerComposeFile = path_1.default.join(appDir, dsqlDockerComposeFileName);
const dsqlDockerComposeFileAlt = path_1.default.join(appDir, dsqlDockerComposeFileNameAlt);
const dbDockerComposeFile = path_1.default.join(appDir, "db.docker-compose.yml");
const dbDockerComposeFileAlt = path_1.default.join(appDir, "db.docker-compose.yaml");
const dbDockerComposeFile = path_1.default.join(appDir, dbDockerComposeFileName);
const dbDockerComposeFileAlt = path_1.default.join(appDir, dbDockerComposeFileNameAlt);
const dsqlDbDockerComposeFile = path_1.default.join(appDir, dsqlDbDockerComposeFileName);
const dsqlDbDockerComposeFileAlt = path_1.default.join(appDir, dsqlDbDockerComposeFileNameAlt);
const extraDockerComposeFile = path_1.default.join(appDir, "extra.docker-compose.yml");
const extraDockerComposeFileAlt = path_1.default.join(appDir, "extra.docker-compose.yaml");
const siteSetupFile = path_1.default.join(appDir, "site-setup.json");
@@ -204,6 +215,7 @@ function grabDirNames(param) {
schemasBackupDirName,
userMainShemaJSONFilePath,
maxscaleSSLDir,
maxscaleSSLCaCertFile,
mainDBSSLDir,
replica1DBSSLDir,
replica2DBSSLDir,
@@ -226,5 +238,13 @@ function grabDirNames(param) {
distroEnterpriseExportTarName,
communityDistroTempDir,
communityDistroDir,
installScriptFile,
updateScriptFile,
installTypescriptFile,
updateTypescriptFile,
dsqlDbDockerComposeFile,
dsqlDbDockerComposeFileAlt,
dsqlDbDockerComposeFileName,
dsqlDbDockerComposeFileNameAlt,
};
}
@@ -6,4 +6,5 @@ export default function grabIPAddresses(): {
localHostIP: string;
globalIPPrefix: string;
webSocketIP: string;
dbCronIP: string;
};
@@ -13,6 +13,7 @@ function grabIPAddresses() {
const maxScaleIP = `${globalIPPrefix}.${maxscale}`;
const mainDBIP = `${globalIPPrefix}.${db}`;
const webSocketIP = `${globalIPPrefix}.${websocket}`;
const dbCronIP = `${globalIPPrefix}.${db_cron}`;
const localHostIP = `${globalIPPrefix}.1`;
return {
webAppIP,
@@ -22,5 +23,6 @@ function grabIPAddresses() {
localHostIP,
globalIPPrefix,
webSocketIP,
dbCronIP,
};
}
-2
View File
@@ -9,7 +9,6 @@ exports.default = parseCookies;
* returns the cookies as a JS object
*/
function parseCookies({ request, cookieString, }) {
var _a;
try {
/** @type {string | undefined} */
const cookieStr = request
@@ -37,7 +36,6 @@ function parseCookies({ request, cookieString, }) {
return cookieObject;
}
catch (error) {
(_a = global.ERROR_CALLBACK) === null || _a === void 0 ? void 0 : _a.call(global, `Parse Cookies Error`, error);
return {};
}
}
+3 -5
View File
@@ -4,9 +4,7 @@ exports.default = checkIfIsMaster;
function checkIfIsMaster({ dbContext, dbFullName }) {
return (dbContext === null || dbContext === void 0 ? void 0 : dbContext.match(/dsql.user/i))
? false
: global.DSQL_USE_LOCAL
? true
: dbFullName && !dbFullName.match(/^datasquirel$/)
? false
: true;
: dbFullName && !dbFullName.match(/^datasquirel$/)
? false
: true;
}
+1 -2
View File
@@ -23,7 +23,6 @@ function dsqlCrud(params) {
const { action, data, table, targetValue, sanitize, targetField, targetId, dbFullName, deleteData, batchData, deleteKeyValues, debug, } = params;
const finalData = (sanitize ? sanitize({ data }) : data);
const finalBatchData = (sanitize ? sanitize({ batchData }) : batchData);
const DB_CONN = global.DSQL_READ_ONLY_DB_CONN || global.DSQL_DB_CONN;
switch (action) {
case "get":
return yield (0, crud_get_1.default)(params);
@@ -60,7 +59,7 @@ function dsqlCrud(params) {
dbFullName,
deleteKeyValues,
});
const res = (yield (0, conn_db_handler_1.default)(DB_CONN, deleteQuery === null || deleteQuery === void 0 ? void 0 : deleteQuery.query, deleteQuery === null || deleteQuery === void 0 ? void 0 : deleteQuery.values));
const res = (yield (0, conn_db_handler_1.default)(undefined, deleteQuery === null || deleteQuery === void 0 ? void 0 : deleteQuery.query, deleteQuery === null || deleteQuery === void 0 ? void 0 : deleteQuery.values));
return {
success: Boolean(res.affectedRows),
payload: res,
+1 -2
View File
@@ -20,7 +20,7 @@ const numberfy_1 = __importDefault(require("../numberfy"));
const crud_1 = __importDefault(require("./crud"));
function dsqlMethodCrud(_a) {
return __awaiter(this, arguments, void 0, function* ({ method, tableName, addUser, user, extraData, transformData, existingData, body, query, targetId, sanitize, transformQuery, debug, }) {
var _b, _c, _d, _e, _f;
var _b, _c, _d, _e;
let result = {
success: false,
};
@@ -160,7 +160,6 @@ function dsqlMethodCrud(_a) {
return result;
}
catch (error) {
(_f = global.ERROR_CALLBACK) === null || _f === void 0 ? void 0 : _f.call(global, `Method Crud Error`, error);
return result;
}
});
+1 -1
View File
@@ -18,7 +18,7 @@ export default function connDbHandler<ReturnType = any>(
/**
* MariaDB Connection
*/
conn?: mariadb.Connection,
conn?: mariadb.Connection | null,
/**
* String Or `ConnDBHandlerQueryObject` Array
*/
+6 -16
View File
@@ -34,7 +34,6 @@ query,
*/
values, debug) {
return __awaiter(this, void 0, void 0, function* () {
var _a, _b;
const finalConnection = conn || (yield (0, grab_dsql_connection_1.default)());
try {
if (!finalConnection)
@@ -43,18 +42,15 @@ values, debug) {
throw new Error("Query String Required!");
let queryErrorArray = [];
if (typeof query == "string") {
const res = yield finalConnection.query(trimQuery(query), values);
const [results] = yield finalConnection.query(trimQuery(query), values);
if (debug) {
(0, debug_log_1.default)({
log: res,
log: results,
addTime: true,
label: "res",
});
}
if (Array.isArray(res)) {
return Array.from(res);
}
return res;
return results;
}
else if (typeof query == "object") {
const resArray = [];
@@ -65,22 +61,17 @@ values, debug) {
currentQueryError.sql = queryObj.query;
currentQueryError.sqlValues = queryObj.values;
const queryObjRes = yield finalConnection.query(trimQuery(queryObj.query), queryObj.values);
const results = queryObjRes[0];
if (debug) {
(0, debug_log_1.default)({
log: queryObjRes,
log: results,
addTime: true,
label: "queryObjRes",
});
}
if (Array.isArray(queryObjRes)) {
resArray.push(Array.from(queryObjRes));
}
else {
resArray.push(queryObjRes);
}
resArray.push(results);
}
catch (error) {
(_a = global.ERROR_CALLBACK) === null || _a === void 0 ? void 0 : _a.call(global, `Connection DB Handler Query Error`, error);
console.log("query", query);
resArray.push(null);
currentQueryError["error"] = error.message;
@@ -106,7 +97,6 @@ values, debug) {
}
}
catch (error) {
(_b = global.ERROR_CALLBACK) === null || _b === void 0 ? void 0 : _b.call(global, `Connection DB Handler Error`, error);
if (debug) {
(0, debug_log_1.default)({
log: `Connection DB Handler Error: ${error.message}`,
@@ -0,0 +1,6 @@
type Params = {
maxRetries?: number;
sleepTime?: number;
};
export default function dockerTestDbConnection(params?: Params): Promise<void>;
export {};
+46
View File
@@ -0,0 +1,46 @@
"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 });
exports.default = dockerTestDbConnection;
const debug_log_1 = __importDefault(require("./logging/debug-log"));
const mariadb_local_query_1 = __importDefault(require("./mariadb-local-query"));
let checkDbRetries = 0;
const MAX_CHECK_DB_RETRIES = 10;
const DEFAULT_SLEEP_TIME = 3000;
function dockerTestDbConnection(params) {
return __awaiter(this, void 0, void 0, function* () {
const maxRetries = (params === null || params === void 0 ? void 0 : params.maxRetries) || MAX_CHECK_DB_RETRIES;
const sleepTime = (params === null || params === void 0 ? void 0 : params.sleepTime) || DEFAULT_SLEEP_TIME;
while (true) {
if (checkDbRetries > maxRetries) {
(0, debug_log_1.default)({
log: `Max Retries for checking Database. Exiting ...`,
addTime: true,
label: "MaxRetries",
});
process.exit(1);
}
const checkDb = (0, mariadb_local_query_1.default)(`SHOW DATABASES`);
const isDbReady = typeof checkDb == "string" &&
Boolean(checkDb.match(/\ninformation_schema\n/));
if (isDbReady) {
break;
}
else {
checkDbRetries++;
yield Bun.sleep(sleepTime);
}
}
});
}
@@ -0,0 +1,6 @@
type Params = {
maxRetries?: number;
sleepTime?: number;
};
export default function dockerTestMaxscaleConnection(params?: Params): Promise<void>;
export {};
@@ -0,0 +1,41 @@
"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());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = dockerTestMaxscaleConnection;
let checkDbRetries = 0;
const MAX_CHECK_DB_RETRIES = 10;
const DEFAULT_SLEEP_TIME = 3000;
function dockerTestMaxscaleConnection(params) {
return __awaiter(this, void 0, void 0, function* () {
const maxRetries = (params === null || params === void 0 ? void 0 : params.maxRetries) || MAX_CHECK_DB_RETRIES;
const sleepTime = (params === null || params === void 0 ? void 0 : params.sleepTime) || DEFAULT_SLEEP_TIME;
// while (true) {
// if (checkDbRetries > maxRetries) {
// debugLog({
// log: `Max Retries for checking Database. Exiting ...`,
// addTime: true,
// label: "MaxRetries",
// });
// process.exit(1);
// }
// const checkDb = mariaDBlocalQuery(`SHOW DATABASES`);
// const isDbReady =
// typeof checkDb == "string" &&
// Boolean(checkDb.match(/\ninformation_schema\n/));
// if (isDbReady) {
// break;
// } else {
// checkDbRetries++;
// await Bun.sleep(sleepTime);
// }
// }
});
}
+2
View File
@@ -0,0 +1,2 @@
import { ExecSyncOptions } from "child_process";
export default function execute(cmd: string | string[], options?: ExecSyncOptions): string | (string | undefined)[] | undefined;
+40
View File
@@ -0,0 +1,40 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = execute;
const child_process_1 = require("child_process");
function execute(cmd, options) {
function runCmd(cmd) {
try {
const res = (0, child_process_1.execSync)(cmd, Object.assign({ encoding: "utf-8" }, options));
if (typeof res == "string") {
return res.trim();
}
else {
return undefined;
}
}
catch (error) {
console.log(`Execute Run Error =>`, error.message);
console.log(`Execute CMD =>`, cmd);
return undefined;
}
}
try {
if (typeof cmd == "string") {
return runCmd(cmd);
}
else if (Array.isArray(cmd)) {
let resArr = [];
for (let i = 0; i < cmd.length; i++) {
const singleCmd = cmd[i];
const res = runCmd(singleCmd);
resArr.push(res);
}
return resArr;
}
}
catch (error) {
console.log(`Execute Error =>`, error.message);
return undefined;
}
}
+1
View File
@@ -0,0 +1 @@
export default function grabAPIKey(key?: string): string | undefined;
+9
View File
@@ -0,0 +1,9 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = grabAPIKey;
function grabAPIKey(key) {
return (key ||
process.env.DSQL_API_KEY ||
process.env.DSQL_FULL_ACCESS_API_KEY ||
process.env.DSQL_READ_ONLY_API_KEY);
}
+7 -11
View File
@@ -1,21 +1,17 @@
import { Connection } from "mariadb";
import { Connection, ConnectionConfig } from "mariadb";
type Param = {
/**
* Read Only?
*/
ro?: boolean;
/**
* Full Access?
*/
fa?: boolean;
/**
* No Database Connection
*/
noDb?: boolean;
/**
* Is this a local connection?
* Database Name
*/
local?: boolean;
database?: string;
/**
* Debug
*/
config?: ConnectionConfig;
};
/**
* # Grab General CONNECTION for DSQL
+80 -75
View File
@@ -20,83 +20,88 @@ const grabDbSSL_1 = __importDefault(require("./backend/grabDbSSL"));
*/
function grabDSQLConnection(param) {
return __awaiter(this, void 0, void 0, function* () {
return yield mariadb_1.default.createConnection({
host: process.env.DSQL_DB_HOST,
user: process.env.DSQL_DB_USERNAME,
password: process.env.DSQL_DB_PASSWORD,
database: (param === null || param === void 0 ? void 0 : param.noDb) ? undefined : process.env.DSQL_DB_NAME,
port: process.env.DSQL_DB_PORT
const config = Object.assign({ host: process.env.DSQL_DB_HOST, user: process.env.DSQL_DB_USERNAME, password: process.env.DSQL_DB_PASSWORD, database: (param === null || param === void 0 ? void 0 : param.database) ||
((param === null || param === void 0 ? void 0 : param.noDb) ? undefined : process.env.DSQL_DB_NAME), port: process.env.DSQL_DB_PORT
? Number(process.env.DSQL_DB_PORT)
: undefined,
charset: "utf8mb4",
ssl: (0, grabDbSSL_1.default)(),
supportBigNumbers: true,
bigNumberStrings: false,
dateStrings: true,
});
if (global.DSQL_USE_LOCAL || (param === null || param === void 0 ? void 0 : param.local)) {
return (global.DSQL_DB_CONN ||
(yield mariadb_1.default.createConnection({
host: process.env.DSQL_DB_HOST,
user: process.env.DSQL_DB_USERNAME,
password: process.env.DSQL_DB_PASSWORD,
database: (param === null || param === void 0 ? void 0 : param.noDb) ? undefined : process.env.DSQL_DB_NAME,
port: process.env.DSQL_DB_PORT
? Number(process.env.DSQL_DB_PORT)
: undefined,
charset: "utf8mb4",
ssl: (0, grabDbSSL_1.default)(),
supportBigNumbers: true,
bigNumberStrings: false,
dateStrings: true,
})));
: undefined, charset: "utf8mb4", ssl: (0, grabDbSSL_1.default)(), bigIntAsNumber: true, supportBigNumbers: true, bigNumberStrings: false, dateStrings: true, metaAsArray: true }, param === null || param === void 0 ? void 0 : param.config);
try {
return yield mariadb_1.default.createConnection(config);
}
if (param === null || param === void 0 ? void 0 : param.ro) {
return (global.DSQL_READ_ONLY_DB_CONN ||
(yield mariadb_1.default.createConnection({
host: process.env.DSQL_DB_HOST,
user: process.env.DSQL_DB_READ_ONLY_USERNAME,
password: process.env.DSQL_DB_READ_ONLY_PASSWORD,
port: process.env.DSQL_DB_PORT
? Number(process.env.DSQL_DB_PORT)
: undefined,
charset: "utf8mb4",
ssl: (0, grabDbSSL_1.default)(),
supportBigNumbers: true,
bigNumberStrings: false,
dateStrings: true,
})));
catch (error) {
console.log(`Error Grabbing DSQL Connection =>`, config);
throw error;
}
if (param === null || param === void 0 ? void 0 : param.fa) {
return (global.DSQL_FULL_ACCESS_DB_CONN ||
(yield mariadb_1.default.createConnection({
host: process.env.DSQL_DB_HOST,
user: process.env.DSQL_DB_FULL_ACCESS_USERNAME,
password: process.env.DSQL_DB_FULL_ACCESS_PASSWORD,
port: process.env.DSQL_DB_PORT
? Number(process.env.DSQL_DB_PORT)
: undefined,
charset: "utf8mb4",
ssl: (0, grabDbSSL_1.default)(),
supportBigNumbers: true,
bigNumberStrings: false,
dateStrings: true,
})));
}
return (global.DSQL_DB_CONN ||
(yield mariadb_1.default.createConnection({
host: process.env.DSQL_DB_HOST,
user: process.env.DSQL_DB_USERNAME,
password: process.env.DSQL_DB_PASSWORD,
database: (param === null || param === void 0 ? void 0 : param.noDb) ? undefined : process.env.DSQL_DB_NAME,
port: process.env.DSQL_DB_PORT
? Number(process.env.DSQL_DB_PORT)
: undefined,
charset: "utf8mb4",
ssl: (0, grabDbSSL_1.default)(),
supportBigNumbers: true,
bigNumberStrings: false,
dateStrings: true,
})));
// if (global.DSQL_USE_LOCAL || param?.local) {
// return (
// global.DSQL_DB_CONN ||
// (await mariadb.createConnection({
// host: process.env.DSQL_DB_HOST,
// user: process.env.DSQL_DB_USERNAME,
// password: process.env.DSQL_DB_PASSWORD,
// database: param?.noDb ? undefined : process.env.DSQL_DB_NAME,
// port: process.env.DSQL_DB_PORT
// ? Number(process.env.DSQL_DB_PORT)
// : undefined,
// charset: "utf8mb4",
// ssl: grabDbSSL(),
// supportBigNumbers: true,
// bigNumberStrings: false,
// dateStrings: true,
// }))
// );
// }
// if (param?.ro) {
// return (
// global.DSQL_READ_ONLY_DB_CONN ||
// (await mariadb.createConnection({
// host: process.env.DSQL_DB_HOST,
// user: process.env.DSQL_DB_READ_ONLY_USERNAME,
// password: process.env.DSQL_DB_READ_ONLY_PASSWORD,
// port: process.env.DSQL_DB_PORT
// ? Number(process.env.DSQL_DB_PORT)
// : undefined,
// charset: "utf8mb4",
// ssl: grabDbSSL(),
// supportBigNumbers: true,
// bigNumberStrings: false,
// dateStrings: true,
// }))
// );
// }
// if (param?.fa) {
// return (
// global.DSQL_FULL_ACCESS_DB_CONN ||
// (await mariadb.createConnection({
// host: process.env.DSQL_DB_HOST,
// user: process.env.DSQL_DB_FULL_ACCESS_USERNAME,
// password: process.env.DSQL_DB_FULL_ACCESS_PASSWORD,
// port: process.env.DSQL_DB_PORT
// ? Number(process.env.DSQL_DB_PORT)
// : undefined,
// charset: "utf8mb4",
// ssl: grabDbSSL(),
// supportBigNumbers: true,
// bigNumberStrings: false,
// dateStrings: true,
// }))
// );
// }
// return (
// global.DSQL_DB_CONN ||
// (await mariadb.createConnection({
// host: process.env.DSQL_DB_HOST,
// user: process.env.DSQL_DB_USERNAME,
// password: process.env.DSQL_DB_PASSWORD,
// database: param?.noDb ? undefined : process.env.DSQL_DB_NAME,
// port: process.env.DSQL_DB_PORT
// ? Number(process.env.DSQL_DB_PORT)
// : undefined,
// charset: "utf8mb4",
// ssl: grabDbSSL(),
// supportBigNumbers: true,
// bigNumberStrings: false,
// dateStrings: true,
// }))
// );
});
}
+6
View File
@@ -0,0 +1,6 @@
export default function grabDSQLRemoteURLs(): {
communityTarballURL: string;
communityTarballShortURL: string;
installScriptURL: string;
updateScriptURL: string;
};
+15
View File
@@ -0,0 +1,15 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = grabDSQLRemoteURLs;
function grabDSQLRemoteURLs() {
const communityTarballURL = "https://static.datasquirel.com/images/user-images/user-2/dsql/distro/dsql-community.tar.xz";
const communityTarballShortURL = "https://datasquirel.com/api/media/dsql-community";
const installScriptURL = "https://datasquirel.com/api/media/install";
const updateScriptURL = "https://datasquirel.com/api/media/update";
return {
communityTarballURL,
communityTarballShortURL,
installScriptURL,
updateScriptURL,
};
}
+2
View File
@@ -0,0 +1,2 @@
export default function mariaDBlocalQuery(query: string | string[]): string | (string | undefined)[] | undefined;
export declare function removeQueryDoubleQuotes(query: string): string;
+24
View File
@@ -0,0 +1,24 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = mariaDBlocalQuery;
exports.removeQueryDoubleQuotes = removeQueryDoubleQuotes;
const grab_docker_stack_services_names_1 = __importDefault(require("@/package-shared/utils/backend/names/grab-docker-stack-services-names"));
const normalize_text_1 = __importDefault(require("@/package-shared/utils/normalize-text"));
const execute_1 = __importDefault(require("./execute"));
function mariaDBlocalQuery(query) {
const { dbServiceName, maxScaleServiceName } = (0, grab_docker_stack_services_names_1.default)();
const MARIADB_CMD_PREFIX = `docker exec ${dbServiceName} mariadb -u root -p"${process.env.DSQL_MARIADB_ROOT_PASSWORD}"`;
function grabMariadbDockerCmd(cmd) {
return `${MARIADB_CMD_PREFIX} -e "${removeQueryDoubleQuotes((0, normalize_text_1.default)(cmd))}"`;
}
const finalQuery = Array.isArray(query)
? query.map((qry) => grabMariadbDockerCmd(qry))
: grabMariadbDockerCmd(query);
return (0, execute_1.default)(finalQuery);
}
function removeQueryDoubleQuotes(query) {
return query.replace(/\"/gm, '\\"');
}
+2 -2
View File
@@ -71,8 +71,8 @@ export default function parseEnv(
DSQL_WEB_APP_FAIL_COUNTS: string | undefined;
NODE_ARCH: string | undefined;
DSQL_WEBSOCKET_PORT: string | undefined;
DSQL_WEBSOCKET_URL: string | undefined;
NEXT_PUBLIC_DSQL_WEBSOCKET_URL: string | undefined;
DSQL_WEBSOCKET_HOST: string | undefined;
NEXT_PUBLIC_DSQL_WEBSOCKET_HOST: string | undefined;
S3_ACCESS_KEY_ID: string | undefined;
S3_SECRET_ACCESS: string | undefined;
DSQL_ADDITIONAL_MARIADB_SERVERS: string | undefined;
+1 -1
View File
@@ -5,7 +5,7 @@ type Params = {
ssl?: boolean;
connectionLimit?: number;
};
export default function setupDSQLDb({ useLocal, dbConfig, ssl, connectionLimit, }: Params): Promise<{
export default function setupDSQLDb({ dbConfig, ssl }: Params): Promise<{
conn: mariadb.Connection;
}>;
export {};
+2 -4
View File
@@ -16,9 +16,8 @@ exports.default = setupDSQLDb;
const grabDbSSL_1 = __importDefault(require("./backend/grabDbSSL"));
const mariadb_1 = __importDefault(require("mariadb"));
function setupDSQLDb(_a) {
return __awaiter(this, arguments, void 0, function* ({ useLocal, dbConfig, ssl, connectionLimit = 20, }) {
global.DSQL_USE_LOCAL = useLocal || true;
const conn = yield mariadb_1.default.createConnection(Object.assign(Object.assign({ host: process.env.DSQL_DB_HOST, user: process.env.DSQL_DB_USERNAME, password: process.env.DSQL_DB_PASSWORD, database: process.env.DSQL_DB_NAME, charset: "utf8mb4" }, dbConfig), { ssl: ssl ? (0, grabDbSSL_1.default)() : undefined, supportBigNumbers: true, bigNumberStrings: false, dateStrings: true }));
return __awaiter(this, arguments, void 0, function* ({ dbConfig, ssl }) {
const conn = yield mariadb_1.default.createConnection(Object.assign(Object.assign({ host: process.env.DSQL_DB_HOST, user: process.env.DSQL_DB_USERNAME, password: process.env.DSQL_DB_PASSWORD, database: process.env.DSQL_DB_NAME, charset: "utf8mb4" }, dbConfig), { ssl: ssl ? (0, grabDbSSL_1.default)() : undefined, supportBigNumbers: true, bigNumberStrings: false, dateStrings: true, bigIntAsNumber: true, metaAsArray: true }));
// const conn = mariadb.createPool({
// host: process.env.DSQL_DB_HOST,
// user: process.env.DSQL_DB_USERNAME,
@@ -32,7 +31,6 @@ function setupDSQLDb(_a) {
// bigNumberStrings: false,
// dateStrings: true,
// });
global.DSQL_DB_CONN = conn;
// let readOnlyConnection;
// if (addReadOnlyConn) {
// readOnlyConnection = mariadb.createPool({
+4 -1
View File
@@ -22,5 +22,8 @@ function setupGlobalNetwork() {
newNtwkCmd += ` ${globalNetworkName}`;
(0, child_process_1.execSync)(newNtwkCmd);
}
catch (error) { }
catch (error) {
console.log(`Failed to create global network ${globalNetworkName}`);
console.log(globalIPPrefix);
}
}
+6
View File
@@ -0,0 +1,6 @@
type Params = {
maxRetries?: number;
sleepTime?: number;
};
export default function testDbConnection(params?: Params): Promise<boolean>;
export {};
+44
View File
@@ -0,0 +1,44 @@
"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 });
exports.default = testDbConnection;
const dbHandler_1 = __importDefault(require("../functions/backend/dbHandler"));
let testDbConnRetries = 0;
const MAX_TEST_DB_CONN_RETRIES = 10;
const SLEEP_TIME = 2000;
function testDbConnection(params) {
return __awaiter(this, void 0, void 0, function* () {
console.log("Testing Database Connection ...", testDbConnRetries);
while (true) {
testDbConnRetries++;
try {
const res = (yield (0, dbHandler_1.default)({ query: `SHOW DATABASES` }));
if (res === null || res === void 0 ? void 0 : res[0]) {
console.log("Database Connection Complete!");
break;
}
yield Bun.sleep((params === null || params === void 0 ? void 0 : params.sleepTime) || SLEEP_TIME);
if (testDbConnRetries >
((params === null || params === void 0 ? void 0 : params.maxRetries) || MAX_TEST_DB_CONN_RETRIES)) {
console.log("Database Connection Failed!");
process.exit(1);
}
}
catch (error) {
yield Bun.sleep((params === null || params === void 0 ? void 0 : params.sleepTime) || SLEEP_TIME);
}
}
return true;
});
}