From 6acf0f2cd6ea4f1b2c9eb7460628661d3dc3c34e Mon Sep 17 00:00:00 2001 From: Benjamin Toby Date: Sun, 6 Jul 2025 17:00:35 +0100 Subject: [PATCH] Updates --- dist/index.d.ts | 8 +- .../functions/backend/dbHandler.js | 9 +- .../functions/backend/fullAccessDbHandler.js | 1 - .../backend/noDatabaseDbHandler.d.ts | 4 - .../functions/backend/noDatabaseDbHandler.js | 64 ---------- .../functions/backend/su-db-handler.js | 16 ++- .../functions/backend/user-db-handler.js | 5 +- .../functions/backend/varDatabaseDbHandler.js | 6 +- .../backend/varReadOnlyDatabaseDbHandler.js | 1 - .../functions/dsql/sync-databases/index.d.ts | 1 - .../functions/dsql/sync-databases/index.js | 102 --------------- dist/package-shared/shell/checkDb.js | 4 +- .../shell/test-external-server.js | 4 +- dist/package-shared/shell/updateSSLUsers.js | 4 +- .../utils/backend/global-db/DB_HANDLER.js | 9 +- .../backend/global-db/DSQL_USER_DB_HANDLER.js | 6 +- .../backend/global-db/LOCAL_DB_HANDLER.js | 13 +- .../backend/global-db/NO_DB_HANDLER.d.ts | 5 +- .../utils/backend/global-db/NO_DB_HANDLER.js | 68 ++++++---- .../backend/global-db/ROOT_DB_HANDLER.d.ts | 7 -- .../backend/global-db/ROOT_DB_HANDLER.js | 40 ------ .../utils/db/conn-db-handler.d.ts | 6 +- .../utils/db/conn-db-handler.js | 13 +- .../utils/grab-dsql-connection.d.ts | 4 +- .../utils/grab-dsql-connection.js | 107 +++++++++------- dist/package-shared/utils/setup-db.d.ts | 6 +- dist/package-shared/utils/setup-db.js | 68 ++++++---- index.ts | 8 +- package-shared/functions/backend/dbHandler.ts | 8 +- .../functions/backend/fullAccessDbHandler.ts | 1 - .../functions/backend/noDatabaseDbHandler.ts | 56 --------- .../functions/backend/su-db-handler.ts | 17 ++- .../functions/backend/user-db-handler.ts | 5 +- .../functions/backend/varDatabaseDbHandler.ts | 8 +- .../backend/varReadOnlyDatabaseDbHandler.ts | 1 - .../functions/dsql/sync-databases/index.ts | 117 ------------------ package-shared/shell/checkDb.ts | 4 +- package-shared/shell/test-external-server.ts | 4 +- package-shared/shell/updateSSLUsers.ts | 4 +- .../utils/backend/global-db/DB_HANDLER.ts | 8 +- .../backend/global-db/DSQL_USER_DB_HANDLER.ts | 6 +- .../backend/global-db/LOCAL_DB_HANDLER.ts | 12 +- .../utils/backend/global-db/NO_DB_HANDLER.ts | 21 ++-- .../backend/global-db/ROOT_DB_HANDLER.ts | 33 ----- package-shared/utils/db/conn-db-handler.ts | 17 +-- package-shared/utils/grab-dsql-connection.ts | 34 +++-- package-shared/utils/setup-db.ts | 28 ++++- package.json | 2 +- 48 files changed, 353 insertions(+), 622 deletions(-) delete mode 100644 dist/package-shared/functions/backend/noDatabaseDbHandler.d.ts delete mode 100644 dist/package-shared/functions/backend/noDatabaseDbHandler.js delete mode 100644 dist/package-shared/functions/dsql/sync-databases/index.d.ts delete mode 100644 dist/package-shared/functions/dsql/sync-databases/index.js delete mode 100644 dist/package-shared/utils/backend/global-db/ROOT_DB_HANDLER.d.ts delete mode 100644 dist/package-shared/utils/backend/global-db/ROOT_DB_HANDLER.js delete mode 100644 package-shared/functions/backend/noDatabaseDbHandler.ts delete mode 100644 package-shared/functions/dsql/sync-databases/index.ts delete mode 100644 package-shared/utils/backend/global-db/ROOT_DB_HANDLER.ts diff --git a/dist/index.d.ts b/dist/index.d.ts index 2922254..e6fbef8 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -1,8 +1,8 @@ -import type { Pool } from "mariadb"; +import type { Connection } from "mariadb"; declare global { - var DSQL_DB_CONN: Pool | undefined; - var DSQL_READ_ONLY_DB_CONN: Pool | undefined; - var DSQL_FULL_ACCESS_DB_CONN: Pool | undefined; + var DSQL_DB_CONN: Connection | undefined; + var DSQL_READ_ONLY_DB_CONN: Connection | undefined; + var DSQL_FULL_ACCESS_DB_CONN: Connection | undefined; var DSQL_USE_LOCAL: boolean | undefined; var ERROR_CALLBACK: ErrorCallback | undefined; } diff --git a/dist/package-shared/functions/backend/dbHandler.js b/dist/package-shared/functions/backend/dbHandler.js index 2d9f8d6..a49bdfe 100644 --- a/dist/package-shared/functions/backend/dbHandler.js +++ b/dist/package-shared/functions/backend/dbHandler.js @@ -23,7 +23,7 @@ const grab_dsql_connection_1 = __importDefault(require("../../utils/grab-dsql-co function dbHandler(_a) { return __awaiter(this, arguments, void 0, function* ({ query, values, noErrorLogs, }) { var _b; - const CONNECTION = (0, grab_dsql_connection_1.default)(); + const CONNECTION = yield (0, grab_dsql_connection_1.default)(); let results; try { if (query && values) { @@ -54,7 +54,12 @@ function dbHandler(_a) { yield (CONNECTION === null || CONNECTION === void 0 ? void 0 : CONNECTION.end()); } if (results) { - return JSON.parse(JSON.stringify(results)); + if (Array.isArray(results)) { + return Array.from(results); + } + else { + return results; + } } else { return null; diff --git a/dist/package-shared/functions/backend/fullAccessDbHandler.js b/dist/package-shared/functions/backend/fullAccessDbHandler.js index 926d577..cb26619 100644 --- a/dist/package-shared/functions/backend/fullAccessDbHandler.js +++ b/dist/package-shared/functions/backend/fullAccessDbHandler.js @@ -53,7 +53,6 @@ function fullAccessDbHandler(_a) { return error.message; } finally { - DB_CONN === null || DB_CONN === void 0 ? void 0 : DB_CONN.end(); } /** * Return results diff --git a/dist/package-shared/functions/backend/noDatabaseDbHandler.d.ts b/dist/package-shared/functions/backend/noDatabaseDbHandler.d.ts deleted file mode 100644 index 95dce69..0000000 --- a/dist/package-shared/functions/backend/noDatabaseDbHandler.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -/** - * # No Database DB Handler - */ -export default function noDatabaseDbHandler(queryString: string): Promise; diff --git a/dist/package-shared/functions/backend/noDatabaseDbHandler.js b/dist/package-shared/functions/backend/noDatabaseDbHandler.js deleted file mode 100644 index b129744..0000000 --- a/dist/package-shared/functions/backend/noDatabaseDbHandler.js +++ /dev/null @@ -1,64 +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 = noDatabaseDbHandler; -const fs_1 = __importDefault(require("fs")); -const serverError_1 = __importDefault(require("./serverError")); -const NO_DB_HANDLER_1 = __importDefault(require("../../utils/backend/global-db/NO_DB_HANDLER")); -/** - * # No Database DB Handler - */ -function noDatabaseDbHandler(queryString) { - return __awaiter(this, void 0, void 0, function* () { - var _a; - ((_a = process.env.NODE_ENV) === null || _a === void 0 ? void 0 : _a.match(/dev/)) && - fs_1.default.appendFileSync("./.tmp/sqlQuery.sql", queryString + "\n" + Date() + "\n\n\n", "utf8"); - /** - * Declare variables - * - * @description Declare "results" variable - */ - let results; - /** - * Fetch from db - * - * @description Fetch data from db if no cache - */ - try { - /** ********************* Run Query */ - results = yield (0, NO_DB_HANDLER_1.default)(queryString); - //////////////////////////////////////// - //////////////////////////////////////// - //////////////////////////////////////// - } - catch ( /** @type {any} */error) { - (0, serverError_1.default)({ - component: "noDatabaseDbHandler", - message: error.message, - }); - console.log("ERROR in noDatabaseDbHandler =>", error.message); - } - /** - * Return results - * - * @description Return results add to cache if "req" param is passed - */ - if (results) { - return results; - } - else { - return null; - } - }); -} diff --git a/dist/package-shared/functions/backend/su-db-handler.js b/dist/package-shared/functions/backend/su-db-handler.js index f4e38d3..fcbf79a 100644 --- a/dist/package-shared/functions/backend/su-db-handler.js +++ b/dist/package-shared/functions/backend/su-db-handler.js @@ -18,14 +18,28 @@ const conn_db_handler_1 = __importDefault(require("../../utils/db/conn-db-handle const mariadb_1 = __importDefault(require("mariadb")); function suDbHandler(_a) { return __awaiter(this, arguments, void 0, function* ({ query, database, user, values, }) { - const connection = mariadb_1.default.createPool({ + const connection = yield mariadb_1.default.createConnection({ host: process.env.DSQL_DB_HOST, user: process.env.DSQL_DB_USERNAME, password: process.env.DSQL_DB_PASSWORD, database: database, charset: "utf8mb4", ssl: (0, grabDbSSL_1.default)(), + supportBigNumbers: true, + bigNumberStrings: false, + dateStrings: true, }); + // const connection = mariadb.createPool({ + // host: process.env.DSQL_DB_HOST, + // user: process.env.DSQL_DB_USERNAME, + // password: process.env.DSQL_DB_PASSWORD, + // database: database, + // charset: "utf8mb4", + // ssl: grabDbSSL(), + // supportBigNumbers: true, + // bigNumberStrings: false, + // dateStrings: true, + // }); const results = yield (0, conn_db_handler_1.default)(connection, query); return results; }); diff --git a/dist/package-shared/functions/backend/user-db-handler.js b/dist/package-shared/functions/backend/user-db-handler.js index 7093438..5467954 100644 --- a/dist/package-shared/functions/backend/user-db-handler.js +++ b/dist/package-shared/functions/backend/user-db-handler.js @@ -20,13 +20,16 @@ const grabDbSSL_1 = __importDefault(require("../../utils/backend/grabDbSSL")); function userDbHandler(_a) { return __awaiter(this, arguments, void 0, function* ({ query, user, database, debug, tableSchema, values, }) { const { fullName, host, username, password } = yield (0, grab_mariadb_main_user_for_user_1.default)({ user }); - const connection = mariadb_1.default.createPool({ + const connection = yield mariadb_1.default.createConnection({ host, user: username, password: password, database: database, charset: "utf8mb4", ssl: (0, grabDbSSL_1.default)(), + supportBigNumbers: true, + bigNumberStrings: false, + dateStrings: true, }); const results = yield (0, conn_db_handler_1.default)(connection, query); return results; diff --git a/dist/package-shared/functions/backend/varDatabaseDbHandler.js b/dist/package-shared/functions/backend/varDatabaseDbHandler.js index 09c164f..7653c34 100644 --- a/dist/package-shared/functions/backend/varDatabaseDbHandler.js +++ b/dist/package-shared/functions/backend/varDatabaseDbHandler.js @@ -23,11 +23,11 @@ const conn_db_handler_1 = __importDefault(require("../../utils/db/conn-db-handle function varDatabaseDbHandler(_a) { return __awaiter(this, arguments, void 0, function* ({ queryString, queryValuesArray, database, tableSchema, debug, }) { var _b; - let CONNECTION = (0, grab_dsql_connection_1.default)({ fa: true }); + let CONNECTION = yield (0, grab_dsql_connection_1.default)({ fa: true }); if (global.DSQL_USE_LOCAL) - CONNECTION = (0, grab_dsql_connection_1.default)({ local: true }); + CONNECTION = yield (0, grab_dsql_connection_1.default)({ local: true }); if (database === null || database === void 0 ? void 0 : database.match(/^datasquirel$/)) - CONNECTION = (0, grab_dsql_connection_1.default)(); + CONNECTION = yield (0, grab_dsql_connection_1.default)(); if (debug) { console.log(`varDatabaseDbHandler:query:`, queryString); console.log(`varDatabaseDbHandler:values:`, queryValuesArray); diff --git a/dist/package-shared/functions/backend/varReadOnlyDatabaseDbHandler.js b/dist/package-shared/functions/backend/varReadOnlyDatabaseDbHandler.js index f71c407..19c09e0 100644 --- a/dist/package-shared/functions/backend/varReadOnlyDatabaseDbHandler.js +++ b/dist/package-shared/functions/backend/varReadOnlyDatabaseDbHandler.js @@ -40,7 +40,6 @@ function varReadOnlyDatabaseDbHandler(_a) { return error.message; } finally { - DB_CONN === null || DB_CONN === void 0 ? void 0 : DB_CONN.end(); } if (results) { const unparsedResults = results; diff --git a/dist/package-shared/functions/dsql/sync-databases/index.d.ts b/dist/package-shared/functions/dsql/sync-databases/index.d.ts deleted file mode 100644 index cb0ff5c..0000000 --- a/dist/package-shared/functions/dsql/sync-databases/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/dist/package-shared/functions/dsql/sync-databases/index.js b/dist/package-shared/functions/dsql/sync-databases/index.js deleted file mode 100644 index 8208b70..0000000 --- a/dist/package-shared/functions/dsql/sync-databases/index.js +++ /dev/null @@ -1,102 +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 }); -const mysql_1 = __importDefault(require("mysql")); -const child_process_1 = require("child_process"); -const util_1 = require("util"); -function getConnection(config) { - return mysql_1.default.createConnection(config); -} -function getMasterStatus(config) { - return new Promise((resolve, reject) => { - const connection = getConnection(config); - connection.query("SHOW MASTER STATUS", (error, results) => { - connection.end(); - if (error) - reject(error); - else - resolve(results[0]); - }); - }); -} -function syncDatabases() { - return __awaiter(this, void 0, void 0, function* () { - const config = { - host: "localhost", - user: "root", - password: "your_password", - }; - let lastPosition = null; // Track last synced position - while (true) { - try { - // Get current master status - const { File, Position } = yield getMasterStatus(config); - // Determine start position (use lastPosition or 4 if first run) - const startPosition = lastPosition !== null ? lastPosition + 1 : 4; - if (startPosition >= Position) { - yield new Promise((resolve) => setTimeout(resolve, 5000)); // Wait 5 seconds if no new changes - continue; - } - // Execute mysqlbinlog to get changes - const execPromise = (0, util_1.promisify)(child_process_1.exec); - const { stdout } = yield execPromise(`mysqlbinlog --database=db_master ${File} --start-position=${startPosition} --stop-position=${Position}`); - if (stdout) { - const connection = getConnection(Object.assign(Object.assign({}, config), { database: "db_slave" })); - return new Promise((resolve, reject) => { - connection.query(stdout, (error) => { - connection.end(); - if (error) - reject(error); - else { - lastPosition = Position; - console.log(`Synced up to position ${Position} at ${new Date().toISOString()}`); - resolve(null); - } - }); - }); - } - } - catch (error) { - console.error("Sync error:", error); - } - yield new Promise((resolve) => setTimeout(resolve, 5000)); // Check every 5 seconds - } - }); -} -// Initialize db_slave with db_master data -function initializeSlave() { - return __awaiter(this, void 0, void 0, function* () { - const config = { - host: "localhost", - user: "root", - password: "your_password", - }; - try { - yield (0, util_1.promisify)(child_process_1.exec)(`mysqldump -u ${config.user} -p${config.password} db_master > db_master_backup.sql`); - yield (0, util_1.promisify)(child_process_1.exec)(`mysql -u ${config.user} -p${config.password} db_slave < db_master_backup.sql`); - console.log("Slave initialized with master data"); - } - catch (error) { - console.error("Initialization error:", error); - } - }); -} -// Run the sync process -function main() { - return __awaiter(this, void 0, void 0, function* () { - yield initializeSlave(); - yield syncDatabases(); - }); -} -main().catch(console.error); diff --git a/dist/package-shared/shell/checkDb.js b/dist/package-shared/shell/checkDb.js index a7ac02e..8900f21 100644 --- a/dist/package-shared/shell/checkDb.js +++ b/dist/package-shared/shell/checkDb.js @@ -27,7 +27,7 @@ const grab_dsql_connection_1 = __importDefault(require("../utils/grab-dsql-conne */ (() => __awaiter(void 0, void 0, void 0, function* () { var _a; - const CONNECTION = (0, grab_dsql_connection_1.default)(); + const CONNECTION = yield (0, grab_dsql_connection_1.default)(); try { const result = yield CONNECTION.query("SELECT id,first_name,last_name FROM users LIMIT 3"); console.log("Connection Query Success =>", result); @@ -37,7 +37,7 @@ const grab_dsql_connection_1 = __importDefault(require("../utils/grab-dsql-conne (_a = global.ERROR_CALLBACK) === null || _a === void 0 ? void 0 : _a.call(global, `Error Checking DB`, error); } finally { - CONNECTION === null || CONNECTION === void 0 ? void 0 : CONNECTION.end(); + yield (CONNECTION === null || CONNECTION === void 0 ? void 0 : CONNECTION.end()); process.exit(); } }))(); diff --git a/dist/package-shared/shell/test-external-server.js b/dist/package-shared/shell/test-external-server.js index b234c94..f5d6104 100644 --- a/dist/package-shared/shell/test-external-server.js +++ b/dist/package-shared/shell/test-external-server.js @@ -27,7 +27,7 @@ const grab_dsql_connection_1 = __importDefault(require("../utils/grab-dsql-conne */ (() => __awaiter(void 0, void 0, void 0, function* () { var _a; - const CONNECTION = (0, grab_dsql_connection_1.default)({ noDb: true }); + const CONNECTION = yield (0, grab_dsql_connection_1.default)({ noDb: true }); /** * Switch Database * @@ -42,7 +42,7 @@ const grab_dsql_connection_1 = __importDefault(require("../utils/grab-dsql-conne (_a = global.ERROR_CALLBACK) === null || _a === void 0 ? void 0 : _a.call(global, `Error Testing External Server`, error); } finally { - CONNECTION === null || CONNECTION === void 0 ? void 0 : CONNECTION.end(); + yield (CONNECTION === null || CONNECTION === void 0 ? void 0 : CONNECTION.end()); process.exit(); } }))(); diff --git a/dist/package-shared/shell/updateSSLUsers.js b/dist/package-shared/shell/updateSSLUsers.js index e63938f..5b34318 100644 --- a/dist/package-shared/shell/updateSSLUsers.js +++ b/dist/package-shared/shell/updateSSLUsers.js @@ -28,7 +28,7 @@ const grab_sql_key_name_1 = __importDefault(require("../utils/grab-sql-key-name" */ (() => __awaiter(void 0, void 0, void 0, function* () { var _a, _b; - const CONNECTION = (0, grab_dsql_connection_1.default)(); + const CONNECTION = yield (0, grab_dsql_connection_1.default)(); try { const result = yield CONNECTION.query("SELECT user,host,ssl_type FROM mysql.user"); const parsedResults = JSON.parse(JSON.stringify(result)); @@ -51,7 +51,7 @@ const grab_sql_key_name_1 = __importDefault(require("../utils/grab-sql-key-name" (_b = global.ERROR_CALLBACK) === null || _b === void 0 ? void 0 : _b.call(global, `Error Updating SSL Users`, error); } finally { - CONNECTION.end(); + yield (CONNECTION === null || CONNECTION === void 0 ? void 0 : CONNECTION.end()); process.exit(); } }))(); diff --git a/dist/package-shared/utils/backend/global-db/DB_HANDLER.js b/dist/package-shared/utils/backend/global-db/DB_HANDLER.js index 18ff733..55b2f30 100644 --- a/dist/package-shared/utils/backend/global-db/DB_HANDLER.js +++ b/dist/package-shared/utils/backend/global-db/DB_HANDLER.js @@ -21,12 +21,17 @@ const grab_dsql_connection_1 = __importDefault(require("../../grab-dsql-connecti function DB_HANDLER(query, values) { return __awaiter(this, void 0, void 0, function* () { var _a; - const CONNECTION = (0, grab_dsql_connection_1.default)(); + 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); - return JSON.parse(JSON.stringify(results)); + 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); diff --git a/dist/package-shared/utils/backend/global-db/DSQL_USER_DB_HANDLER.js b/dist/package-shared/utils/backend/global-db/DSQL_USER_DB_HANDLER.js index 648a5cb..79af75d 100644 --- a/dist/package-shared/utils/backend/global-db/DSQL_USER_DB_HANDLER.js +++ b/dist/package-shared/utils/backend/global-db/DSQL_USER_DB_HANDLER.js @@ -22,8 +22,8 @@ function DSQL_USER_DB_HANDLER(_a) { return __awaiter(this, arguments, void 0, function* ({ paradigm, queryString, queryValues, }) { var _b; const CONNECTION = paradigm == "Read Only" - ? (0, grab_dsql_connection_1.default)({ ro: true }) - : (0, grab_dsql_connection_1.default)({ fa: true }); + ? 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); } @@ -32,7 +32,7 @@ function DSQL_USER_DB_HANDLER(_a) { return null; } finally { - CONNECTION === null || CONNECTION === void 0 ? void 0 : CONNECTION.end(); + yield (CONNECTION === null || CONNECTION === void 0 ? void 0 : CONNECTION.end()); } }); } diff --git a/dist/package-shared/utils/backend/global-db/LOCAL_DB_HANDLER.js b/dist/package-shared/utils/backend/global-db/LOCAL_DB_HANDLER.js index c93dfba..2f54230 100644 --- a/dist/package-shared/utils/backend/global-db/LOCAL_DB_HANDLER.js +++ b/dist/package-shared/utils/backend/global-db/LOCAL_DB_HANDLER.js @@ -20,10 +20,15 @@ const grab_dsql_connection_1 = __importDefault(require("../../grab-dsql-connecti function LOCAL_DB_HANDLER(query, values) { return __awaiter(this, void 0, void 0, function* () { var _a; - const MASTER = (0, grab_dsql_connection_1.default)(); + const CONNECTION = yield (0, grab_dsql_connection_1.default)(); try { - const results = yield MASTER.query(query, values); - return JSON.parse(JSON.stringify(results)); + 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); @@ -33,7 +38,7 @@ function LOCAL_DB_HANDLER(query, values) { }; } finally { - yield (MASTER === null || MASTER === void 0 ? void 0 : MASTER.end()); + yield (CONNECTION === null || CONNECTION === void 0 ? void 0 : CONNECTION.end()); } }); } diff --git a/dist/package-shared/utils/backend/global-db/NO_DB_HANDLER.d.ts b/dist/package-shared/utils/backend/global-db/NO_DB_HANDLER.d.ts index 3ec0e2f..422b3fd 100644 --- a/dist/package-shared/utils/backend/global-db/NO_DB_HANDLER.d.ts +++ b/dist/package-shared/utils/backend/global-db/NO_DB_HANDLER.d.ts @@ -1,7 +1,4 @@ /** * # DSQL user read-only DB handler */ -export default function NO_DB_HANDLER(query: string, values?: any[]): Promise | { - success: boolean; - error: any; -}; +export default function NO_DB_HANDLER(query: string, values?: any[]): Promise; diff --git a/dist/package-shared/utils/backend/global-db/NO_DB_HANDLER.js b/dist/package-shared/utils/backend/global-db/NO_DB_HANDLER.js index 54ac885..645b05d 100644 --- a/dist/package-shared/utils/backend/global-db/NO_DB_HANDLER.js +++ b/dist/package-shared/utils/backend/global-db/NO_DB_HANDLER.js @@ -1,4 +1,13 @@ "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 }; }; @@ -9,32 +18,37 @@ const grab_dsql_connection_1 = __importDefault(require("../../grab-dsql-connecti * # DSQL user read-only DB handler */ function NO_DB_HANDLER(query, values) { - var _a; - const CONNECTION = (0, grab_dsql_connection_1.default)(); - try { - return new Promise((resolve, reject) => { - CONNECTION.query(query, values) - .then((results) => { - CONNECTION.end(); - resolve(JSON.parse(JSON.stringify(results))); - }) - .catch((err) => { - CONNECTION.end(); - resolve({ - error: err.message, - sql: err.sql, - }); + 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, - }; - } - finally { - 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, + }; + } + }); } diff --git a/dist/package-shared/utils/backend/global-db/ROOT_DB_HANDLER.d.ts b/dist/package-shared/utils/backend/global-db/ROOT_DB_HANDLER.d.ts deleted file mode 100644 index ab333ba..0000000 --- a/dist/package-shared/utils/backend/global-db/ROOT_DB_HANDLER.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * # Root DB handler - */ -export default function ROOT_DB_HANDLER(query: string, values?: any[]): Promise | { - success: boolean; - error: any; -}; diff --git a/dist/package-shared/utils/backend/global-db/ROOT_DB_HANDLER.js b/dist/package-shared/utils/backend/global-db/ROOT_DB_HANDLER.js deleted file mode 100644 index 33e033e..0000000 --- a/dist/package-shared/utils/backend/global-db/ROOT_DB_HANDLER.js +++ /dev/null @@ -1,40 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.default = ROOT_DB_HANDLER; -const grab_dsql_connection_1 = __importDefault(require("../../grab-dsql-connection")); -/** - * # Root DB handler - */ -function ROOT_DB_HANDLER(query, values) { - var _a; - const CONNECTION = (0, grab_dsql_connection_1.default)(); - try { - return new Promise((resolve, reject) => { - CONNECTION.query(query, values) - .then((results) => { - CONNECTION.end(); - resolve(JSON.parse(JSON.stringify(results))); - }) - .catch((err) => { - CONNECTION.end(); - resolve({ - error: err.message, - sql: err.sql, - }); - }); - }); - } - catch (error) { - (_a = global.ERROR_CALLBACK) === null || _a === void 0 ? void 0 : _a.call(global, `ROOT_DB_HANDLER Error`, error); - return { - success: false, - error: error.message, - }; - } - finally { - CONNECTION === null || CONNECTION === void 0 ? void 0 : CONNECTION.end(); - } -} diff --git a/dist/package-shared/utils/db/conn-db-handler.d.ts b/dist/package-shared/utils/db/conn-db-handler.d.ts index 5e50d18..d4c4159 100644 --- a/dist/package-shared/utils/db/conn-db-handler.d.ts +++ b/dist/package-shared/utils/db/conn-db-handler.d.ts @@ -1,5 +1,5 @@ import { DSQLErrorObject } from "../../types"; -import type { ConnectionConfig, Pool } from "mariadb"; +import mariadb, { ConnectionConfig } from "mariadb"; export type ConnDBHandlerQueryObject = { query: string; values?: (string | number | undefined)[]; @@ -16,9 +16,9 @@ type Return = ReturnType | ReturnType[] | null | { */ export default function connDbHandler( /** - * MariaDB Connection Pool Object + * MariaDB Connection */ -connPool?: Pool, +conn?: mariadb.Connection, /** * String Or `ConnDBHandlerQueryObject` Array */ diff --git a/dist/package-shared/utils/db/conn-db-handler.js b/dist/package-shared/utils/db/conn-db-handler.js index 19cea5c..c89c6c1 100644 --- a/dist/package-shared/utils/db/conn-db-handler.js +++ b/dist/package-shared/utils/db/conn-db-handler.js @@ -21,9 +21,9 @@ const debug_log_1 = __importDefault(require("../logging/debug-log")); */ function connDbHandler( /** - * MariaDB Connection Pool Object + * MariaDB Connection */ -connPool, +conn, /** * String Or `ConnDBHandlerQueryObject` Array */ @@ -35,13 +35,13 @@ values, debug) { return __awaiter(this, void 0, void 0, function* () { var _a, _b; try { - if (!connPool) + if (!conn) throw new Error("No Connection Found!"); if (!query) throw new Error("Query String Required!"); let queryErrorArray = []; if (typeof query == "string") { - const res = yield connPool.query(trimQuery(query), values); + const res = yield conn.query(trimQuery(query), values); if (debug) { (0, debug_log_1.default)({ log: res, @@ -62,7 +62,7 @@ values, debug) { const queryObj = query[i]; currentQueryError.sql = queryObj.query; currentQueryError.sqlValues = queryObj.values; - const queryObjRes = yield connPool.query(trimQuery(queryObj.query), queryObj.values); + const queryObjRes = yield conn.query(trimQuery(queryObj.query), queryObj.values); if (debug) { (0, debug_log_1.default)({ log: queryObjRes, @@ -79,6 +79,7 @@ values, debug) { } 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; queryErrorArray.push(currentQueryError); @@ -117,7 +118,7 @@ values, debug) { }; } finally { - connPool === null || connPool === void 0 ? void 0 : connPool.end(); + yield (conn === null || conn === void 0 ? void 0 : conn.end()); } }); } diff --git a/dist/package-shared/utils/grab-dsql-connection.d.ts b/dist/package-shared/utils/grab-dsql-connection.d.ts index cef0c86..d2dff1a 100644 --- a/dist/package-shared/utils/grab-dsql-connection.d.ts +++ b/dist/package-shared/utils/grab-dsql-connection.d.ts @@ -1,4 +1,4 @@ -import { Pool } from "mariadb"; +import { Connection } from "mariadb"; type Param = { /** * Read Only? @@ -20,5 +20,5 @@ type Param = { /** * # Grab General CONNECTION for DSQL */ -export default function grabDSQLConnection(param?: Param): Pool; +export default function grabDSQLConnection(param?: Param): Promise; export {}; diff --git a/dist/package-shared/utils/grab-dsql-connection.js b/dist/package-shared/utils/grab-dsql-connection.js index 10b2732..16135cc 100644 --- a/dist/package-shared/utils/grab-dsql-connection.js +++ b/dist/package-shared/utils/grab-dsql-connection.js @@ -1,4 +1,13 @@ "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 }; }; @@ -10,9 +19,58 @@ const grabDbSSL_1 = __importDefault(require("./backend/grabDbSSL")); * # Grab General CONNECTION for DSQL */ function grabDSQLConnection(param) { - if (global.DSQL_USE_LOCAL || (param === null || param === void 0 ? void 0 : param.local)) { + return __awaiter(this, void 0, void 0, function* () { + 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, + }))); + } + 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, + }))); + } + 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 || - mariadb_1.default.createPool({ + (yield mariadb_1.default.createConnection({ host: process.env.DSQL_DB_HOST, user: process.env.DSQL_DB_USERNAME, password: process.env.DSQL_DB_PASSWORD, @@ -22,44 +80,9 @@ function grabDSQLConnection(param) { : undefined, charset: "utf8mb4", ssl: (0, grabDbSSL_1.default)(), - })); - } - if (param === null || param === void 0 ? void 0 : param.ro) { - return (global.DSQL_READ_ONLY_DB_CONN || - mariadb_1.default.createPool({ - 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)(), - })); - } - if (param === null || param === void 0 ? void 0 : param.fa) { - return (global.DSQL_FULL_ACCESS_DB_CONN || - mariadb_1.default.createPool({ - 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)(), - })); - } - return (global.DSQL_DB_CONN || - mariadb_1.default.createPool({ - 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, + }))); + }); } diff --git a/dist/package-shared/utils/setup-db.d.ts b/dist/package-shared/utils/setup-db.d.ts index 27e792b..9f9a536 100644 --- a/dist/package-shared/utils/setup-db.d.ts +++ b/dist/package-shared/utils/setup-db.d.ts @@ -5,7 +5,7 @@ type Params = { ssl?: boolean; connectionLimit?: number; }; -export default function setupDSQLDb({ useLocal, dbConfig, ssl, connectionLimit, }: Params): { - pool: mariadb.Pool; -}; +export default function setupDSQLDb({ useLocal, dbConfig, ssl, connectionLimit, }: Params): Promise<{ + conn: mariadb.Connection; +}>; export {}; diff --git a/dist/package-shared/utils/setup-db.js b/dist/package-shared/utils/setup-db.js index eea4bdf..0b105e5 100644 --- a/dist/package-shared/utils/setup-db.js +++ b/dist/package-shared/utils/setup-db.js @@ -1,4 +1,13 @@ "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 }; }; @@ -6,26 +15,41 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.default = setupDSQLDb; const grabDbSSL_1 = __importDefault(require("./backend/grabDbSSL")); const mariadb_1 = __importDefault(require("mariadb")); -function setupDSQLDb({ useLocal, dbConfig, ssl, connectionLimit = 100, }) { - global.DSQL_USE_LOCAL = useLocal || true; - const pool = mariadb_1.default.createPool(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, connectionLimit })); - global.DSQL_DB_CONN = pool; - // let readOnlyConnection; - // if (addReadOnlyConn) { - // readOnlyConnection = mariadb.createPool({ - // host: process.env.DSQL_DB_HOST, - // user: process.env.DSQL_DB_READ_ONLY_USERNAME, - // password: process.env.DSQL_DB_READ_ONLY_PASSWORD, - // database: process.env.DSQL_DB_NAME, - // charset: "utf8mb4", - // ...readOnlyDbConfig, - // ssl: ssl ? grabDbSSL() : undefined, - // connectionLimit, - // }); - // global.DSQL_READ_ONLY_DB_CONN = readOnlyConnection; - // } - return { - pool, - // readOnlyConnection, - }; +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 })); + // const conn = mariadb.createPool({ + // 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 ? grabDbSSL() : undefined, + // connectionLimit, + // supportBigNumbers: true, + // bigNumberStrings: false, + // dateStrings: true, + // }); + global.DSQL_DB_CONN = conn; + // let readOnlyConnection; + // if (addReadOnlyConn) { + // readOnlyConnection = mariadb.createPool({ + // host: process.env.DSQL_DB_HOST, + // user: process.env.DSQL_DB_READ_ONLY_USERNAME, + // password: process.env.DSQL_DB_READ_ONLY_PASSWORD, + // database: process.env.DSQL_DB_NAME, + // charset: "utf8mb4", + // ...readOnlyDbConfig, + // ssl: ssl ? grabDbSSL() : undefined, + // connectionLimit, + // }); + // global.DSQL_READ_ONLY_DB_CONN = readOnlyConnection; + // } + return { + conn, + // readOnlyConnection, + }; + }); } diff --git a/index.ts b/index.ts index 3b84774..8f19752 100644 --- a/index.ts +++ b/index.ts @@ -1,9 +1,9 @@ -import type { Pool } from "mariadb"; +import type { Connection } from "mariadb"; declare global { - var DSQL_DB_CONN: Pool | undefined; - var DSQL_READ_ONLY_DB_CONN: Pool | undefined; - var DSQL_FULL_ACCESS_DB_CONN: Pool | undefined; + var DSQL_DB_CONN: Connection | undefined; + var DSQL_READ_ONLY_DB_CONN: Connection | undefined; + var DSQL_FULL_ACCESS_DB_CONN: Connection | undefined; var DSQL_USE_LOCAL: boolean | undefined; var ERROR_CALLBACK: ErrorCallback | undefined; } diff --git a/package-shared/functions/backend/dbHandler.ts b/package-shared/functions/backend/dbHandler.ts index f582c46..45bc32a 100644 --- a/package-shared/functions/backend/dbHandler.ts +++ b/package-shared/functions/backend/dbHandler.ts @@ -17,7 +17,7 @@ export default async function dbHandler({ values, noErrorLogs, }: Param): Promise { - const CONNECTION = grabDSQLConnection(); + const CONNECTION = await grabDSQLConnection(); let results; @@ -58,7 +58,11 @@ export default async function dbHandler({ } if (results) { - return JSON.parse(JSON.stringify(results)); + if (Array.isArray(results)) { + return Array.from(results); + } else { + return results; + } } else { return null; } diff --git a/package-shared/functions/backend/fullAccessDbHandler.ts b/package-shared/functions/backend/fullAccessDbHandler.ts index 21dd784..52097af 100644 --- a/package-shared/functions/backend/fullAccessDbHandler.ts +++ b/package-shared/functions/backend/fullAccessDbHandler.ts @@ -53,7 +53,6 @@ export default async function fullAccessDbHandler({ */ return error.message; } finally { - DB_CONN?.end(); } /** diff --git a/package-shared/functions/backend/noDatabaseDbHandler.ts b/package-shared/functions/backend/noDatabaseDbHandler.ts deleted file mode 100644 index e244f5d..0000000 --- a/package-shared/functions/backend/noDatabaseDbHandler.ts +++ /dev/null @@ -1,56 +0,0 @@ -import fs from "fs"; -import serverError from "./serverError"; -import NO_DB_HANDLER from "../../utils/backend/global-db/NO_DB_HANDLER"; - -/** - * # No Database DB Handler - */ -export default async function noDatabaseDbHandler( - queryString: string -): Promise { - process.env.NODE_ENV?.match(/dev/) && - fs.appendFileSync( - "./.tmp/sqlQuery.sql", - queryString + "\n" + Date() + "\n\n\n", - "utf8" - ); - - /** - * Declare variables - * - * @description Declare "results" variable - */ - let results; - - /** - * Fetch from db - * - * @description Fetch data from db if no cache - */ - try { - /** ********************* Run Query */ - results = await NO_DB_HANDLER(queryString); - - //////////////////////////////////////// - //////////////////////////////////////// - //////////////////////////////////////// - } catch (/** @type {any} */ error: any) { - serverError({ - component: "noDatabaseDbHandler", - message: error.message, - }); - - console.log("ERROR in noDatabaseDbHandler =>", error.message); - } - - /** - * Return results - * - * @description Return results add to cache if "req" param is passed - */ - if (results) { - return results; - } else { - return null; - } -} diff --git a/package-shared/functions/backend/su-db-handler.ts b/package-shared/functions/backend/su-db-handler.ts index 3eeceab..b2c9056 100644 --- a/package-shared/functions/backend/su-db-handler.ts +++ b/package-shared/functions/backend/su-db-handler.ts @@ -16,15 +16,30 @@ export default async function suDbHandler({ user, values, }: Params) { - const connection = mariadb.createPool({ + const connection = await mariadb.createConnection({ host: process.env.DSQL_DB_HOST, user: process.env.DSQL_DB_USERNAME, password: process.env.DSQL_DB_PASSWORD, database: database, charset: "utf8mb4", ssl: grabDbSSL(), + supportBigNumbers: true, + bigNumberStrings: false, + dateStrings: true, }); + // const connection = mariadb.createPool({ + // host: process.env.DSQL_DB_HOST, + // user: process.env.DSQL_DB_USERNAME, + // password: process.env.DSQL_DB_PASSWORD, + // database: database, + // charset: "utf8mb4", + // ssl: grabDbSSL(), + // supportBigNumbers: true, + // bigNumberStrings: false, + // dateStrings: true, + // }); + const results = await connDbHandler(connection, query); return results; diff --git a/package-shared/functions/backend/user-db-handler.ts b/package-shared/functions/backend/user-db-handler.ts index 28e515f..378f196 100644 --- a/package-shared/functions/backend/user-db-handler.ts +++ b/package-shared/functions/backend/user-db-handler.ts @@ -24,13 +24,16 @@ export default async function userDbHandler({ const { fullName, host, username, password } = await grabMariadbMainUserForUser({ user }); - const connection = mariadb.createPool({ + const connection = await mariadb.createConnection({ host, user: username, password: password, database: database, charset: "utf8mb4", ssl: grabDbSSL(), + supportBigNumbers: true, + bigNumberStrings: false, + dateStrings: true, }); const results = await connDbHandler(connection, query); diff --git a/package-shared/functions/backend/varDatabaseDbHandler.ts b/package-shared/functions/backend/varDatabaseDbHandler.ts index 2d44e7a..be79fda 100644 --- a/package-shared/functions/backend/varDatabaseDbHandler.ts +++ b/package-shared/functions/backend/varDatabaseDbHandler.ts @@ -22,9 +22,11 @@ export default async function varDatabaseDbHandler({ tableSchema, debug, }: Param): Promise { - let CONNECTION = grabDSQLConnection({ fa: true }); - if (global.DSQL_USE_LOCAL) CONNECTION = grabDSQLConnection({ local: true }); - if (database?.match(/^datasquirel$/)) CONNECTION = grabDSQLConnection(); + let CONNECTION = await grabDSQLConnection({ fa: true }); + if (global.DSQL_USE_LOCAL) + CONNECTION = await grabDSQLConnection({ local: true }); + if (database?.match(/^datasquirel$/)) + CONNECTION = await grabDSQLConnection(); if (debug) { console.log(`varDatabaseDbHandler:query:`, queryString); diff --git a/package-shared/functions/backend/varReadOnlyDatabaseDbHandler.ts b/package-shared/functions/backend/varReadOnlyDatabaseDbHandler.ts index 8bb34ad..a4e1105 100644 --- a/package-shared/functions/backend/varReadOnlyDatabaseDbHandler.ts +++ b/package-shared/functions/backend/varReadOnlyDatabaseDbHandler.ts @@ -38,7 +38,6 @@ export default async function varReadOnlyDatabaseDbHandler({ return error.message; } finally { - DB_CONN?.end(); } if (results) { diff --git a/package-shared/functions/dsql/sync-databases/index.ts b/package-shared/functions/dsql/sync-databases/index.ts deleted file mode 100644 index fddb6d4..0000000 --- a/package-shared/functions/dsql/sync-databases/index.ts +++ /dev/null @@ -1,117 +0,0 @@ -import mysql, { Connection } from "mysql"; -import { exec } from "child_process"; -import { promisify } from "util"; - -// Configuration interface -interface DatabaseConfig { - host: string; - user: string; - password: string; - database?: string; // Optional for global connection -} - -// Master status interface -interface MasterStatus { - File: string; - Position: number; - Binlog_Do_DB?: string; - Binlog_Ignore_DB?: string; -} - -function getConnection(config: DatabaseConfig): Connection { - return mysql.createConnection(config); -} - -function getMasterStatus(config: DatabaseConfig): Promise { - return new Promise((resolve, reject) => { - const connection = getConnection(config); - connection.query("SHOW MASTER STATUS", (error, results) => { - connection.end(); - if (error) reject(error); - else resolve(results[0] as MasterStatus); - }); - }); -} - -async function syncDatabases() { - const config: DatabaseConfig = { - host: "localhost", - user: "root", - password: "your_password", - }; - - let lastPosition: number | null = null; // Track last synced position - - while (true) { - try { - // Get current master status - const { File, Position } = await getMasterStatus(config); - - // Determine start position (use lastPosition or 4 if first run) - const startPosition = lastPosition !== null ? lastPosition + 1 : 4; - if (startPosition >= Position) { - await new Promise((resolve) => setTimeout(resolve, 5000)); // Wait 5 seconds if no new changes - continue; - } - - // Execute mysqlbinlog to get changes - const execPromise = promisify(exec); - const { stdout } = await execPromise( - `mysqlbinlog --database=db_master ${File} --start-position=${startPosition} --stop-position=${Position}` - ); - - if (stdout) { - const connection = getConnection({ - ...config, - database: "db_slave", - }); - return new Promise((resolve, reject) => { - connection.query(stdout, (error) => { - connection.end(); - if (error) reject(error); - else { - lastPosition = Position; - console.log( - `Synced up to position ${Position} at ${new Date().toISOString()}` - ); - resolve(null); - } - }); - }); - } - } catch (error) { - console.error("Sync error:", error); - } - - await new Promise((resolve) => setTimeout(resolve, 5000)); // Check every 5 seconds - } -} - -// Initialize db_slave with db_master data -async function initializeSlave() { - const config: DatabaseConfig = { - host: "localhost", - user: "root", - password: "your_password", - }; - - try { - await promisify(exec)( - `mysqldump -u ${config.user} -p${config.password} db_master > db_master_backup.sql` - ); - await promisify(exec)( - `mysql -u ${config.user} -p${config.password} db_slave < db_master_backup.sql` - ); - console.log("Slave initialized with master data"); - } catch (error) { - console.error("Initialization error:", error); - } -} - -// Run the sync process -async function main() { - await initializeSlave(); - await syncDatabases(); -} - -main().catch(console.error); diff --git a/package-shared/shell/checkDb.ts b/package-shared/shell/checkDb.ts index a066f7c..e94ea16 100644 --- a/package-shared/shell/checkDb.ts +++ b/package-shared/shell/checkDb.ts @@ -13,7 +13,7 @@ import grabDSQLConnection from "../utils/grab-dsql-connection"; * @returns {Promise} */ (async () => { - const CONNECTION = grabDSQLConnection(); + const CONNECTION = await grabDSQLConnection(); try { const result = await CONNECTION.query( @@ -24,7 +24,7 @@ import grabDSQLConnection from "../utils/grab-dsql-connection"; console.log("Connection query ERROR =>", error.message); global.ERROR_CALLBACK?.(`Error Checking DB`, error as Error); } finally { - CONNECTION?.end(); + await CONNECTION?.end(); process.exit(); } })(); diff --git a/package-shared/shell/test-external-server.ts b/package-shared/shell/test-external-server.ts index b1e69f6..b453ef0 100644 --- a/package-shared/shell/test-external-server.ts +++ b/package-shared/shell/test-external-server.ts @@ -13,7 +13,7 @@ import grabDSQLConnection from "../utils/grab-dsql-connection"; * @returns {Promise} */ (async () => { - const CONNECTION = grabDSQLConnection({ noDb: true }); + const CONNECTION = await grabDSQLConnection({ noDb: true }); /** * Switch Database @@ -32,7 +32,7 @@ import grabDSQLConnection from "../utils/grab-dsql-connection"; error as Error ); } finally { - CONNECTION?.end(); + await CONNECTION?.end(); process.exit(); } })(); diff --git a/package-shared/shell/updateSSLUsers.ts b/package-shared/shell/updateSSLUsers.ts index bd98d05..6fac255 100644 --- a/package-shared/shell/updateSSLUsers.ts +++ b/package-shared/shell/updateSSLUsers.ts @@ -14,7 +14,7 @@ import grabSQLKeyName from "../utils/grab-sql-key-name"; * @returns {Promise} */ (async () => { - const CONNECTION = grabDSQLConnection(); + const CONNECTION = await grabDSQLConnection(); try { const result = await CONNECTION.query( @@ -48,7 +48,7 @@ import grabSQLKeyName from "../utils/grab-sql-key-name"; } catch (error: any) { global.ERROR_CALLBACK?.(`Error Updating SSL Users`, error as Error); } finally { - CONNECTION.end(); + await CONNECTION?.end(); process.exit(); } })(); diff --git a/package-shared/utils/backend/global-db/DB_HANDLER.ts b/package-shared/utils/backend/global-db/DB_HANDLER.ts index e560c06..01ef2a4 100644 --- a/package-shared/utils/backend/global-db/DB_HANDLER.ts +++ b/package-shared/utils/backend/global-db/DB_HANDLER.ts @@ -5,7 +5,7 @@ import grabDSQLConnection from "../../grab-dsql-connection"; * @requires DSQL_DB_CONN - Gobal Variable for Datasquirel Database */ export default async function DB_HANDLER(query: string, values?: any[]) { - const CONNECTION = grabDSQLConnection(); + const CONNECTION = await grabDSQLConnection(); try { if (!CONNECTION) @@ -13,7 +13,11 @@ export default async function DB_HANDLER(query: string, values?: any[]) { const results = await CONNECTION.query(query, values); - return JSON.parse(JSON.stringify(results)); + if (Array.isArray(results)) { + return Array.from(results); + } else { + return results; + } } catch (error: any) { global.ERROR_CALLBACK?.(`DB_HANDLER Error`, error as Error); return { diff --git a/package-shared/utils/backend/global-db/DSQL_USER_DB_HANDLER.ts b/package-shared/utils/backend/global-db/DSQL_USER_DB_HANDLER.ts index 12ed52e..3840ebf 100644 --- a/package-shared/utils/backend/global-db/DSQL_USER_DB_HANDLER.ts +++ b/package-shared/utils/backend/global-db/DSQL_USER_DB_HANDLER.ts @@ -17,8 +17,8 @@ export default async function DSQL_USER_DB_HANDLER({ }: Param) { const CONNECTION = paradigm == "Read Only" - ? grabDSQLConnection({ ro: true }) - : grabDSQLConnection({ fa: true }); + ? await grabDSQLConnection({ ro: true }) + : await grabDSQLConnection({ fa: true }); try { return await connDbHandler(CONNECTION, queryString, queryValues); @@ -26,6 +26,6 @@ export default async function DSQL_USER_DB_HANDLER({ global.ERROR_CALLBACK?.(`DSQL_USER_DB_HANDLER Error`, error as Error); return null; } finally { - CONNECTION?.end(); + await CONNECTION?.end(); } } diff --git a/package-shared/utils/backend/global-db/LOCAL_DB_HANDLER.ts b/package-shared/utils/backend/global-db/LOCAL_DB_HANDLER.ts index c979a9c..760f3e2 100644 --- a/package-shared/utils/backend/global-db/LOCAL_DB_HANDLER.ts +++ b/package-shared/utils/backend/global-db/LOCAL_DB_HANDLER.ts @@ -4,12 +4,16 @@ import grabDSQLConnection from "../../grab-dsql-connection"; * # DSQL user read-only DB handler */ export default async function LOCAL_DB_HANDLER(query: string, values?: any[]) { - const MASTER = grabDSQLConnection(); + const CONNECTION = await grabDSQLConnection(); try { - const results = await MASTER.query(query, values); + const results = await CONNECTION.query(query, values); - return JSON.parse(JSON.stringify(results)); + if (Array.isArray(results)) { + return Array.from(results); + } else { + return results; + } } catch (error: any) { global.ERROR_CALLBACK?.(`LOCAL_DB_HANDLER Error`, error as Error); return { @@ -17,6 +21,6 @@ export default async function LOCAL_DB_HANDLER(query: string, values?: any[]) { error: error.message, }; } finally { - await MASTER?.end(); + await CONNECTION?.end(); } } diff --git a/package-shared/utils/backend/global-db/NO_DB_HANDLER.ts b/package-shared/utils/backend/global-db/NO_DB_HANDLER.ts index c149cd7..9c4aa3e 100644 --- a/package-shared/utils/backend/global-db/NO_DB_HANDLER.ts +++ b/package-shared/utils/backend/global-db/NO_DB_HANDLER.ts @@ -3,22 +3,27 @@ import grabDSQLConnection from "../../grab-dsql-connection"; /** * # DSQL user read-only DB handler */ -export default function NO_DB_HANDLER(query: string, values?: any[]) { - const CONNECTION = grabDSQLConnection(); +export default async function NO_DB_HANDLER(query: string, values?: any[]) { + const CONNECTION = await grabDSQLConnection(); try { return new Promise((resolve, reject) => { CONNECTION.query(query, values) - .then((results) => { - CONNECTION.end(); - resolve(JSON.parse(JSON.stringify(results))); + .then(async (results) => { + if (Array.isArray(results)) { + resolve(Array.from(results)); + } else { + resolve(results); + } }) - .catch((err) => { - CONNECTION.end(); + .catch(async (err) => { resolve({ error: err.message, sql: err.sql, }); + }) + .finally(async () => { + await CONNECTION?.end(); }); }); } catch (error: any) { @@ -27,7 +32,5 @@ export default function NO_DB_HANDLER(query: string, values?: any[]) { success: false, error: error.message, }; - } finally { - CONNECTION?.end(); } } diff --git a/package-shared/utils/backend/global-db/ROOT_DB_HANDLER.ts b/package-shared/utils/backend/global-db/ROOT_DB_HANDLER.ts deleted file mode 100644 index da4953c..0000000 --- a/package-shared/utils/backend/global-db/ROOT_DB_HANDLER.ts +++ /dev/null @@ -1,33 +0,0 @@ -import grabDSQLConnection from "../../grab-dsql-connection"; - -/** - * # Root DB handler - */ -export default function ROOT_DB_HANDLER(query: string, values?: any[]) { - const CONNECTION = grabDSQLConnection(); - - try { - return new Promise((resolve, reject) => { - CONNECTION.query(query, values) - .then((results) => { - CONNECTION.end(); - resolve(JSON.parse(JSON.stringify(results))); - }) - .catch((err) => { - CONNECTION.end(); - resolve({ - error: err.message, - sql: err.sql, - }); - }); - }); - } catch (error: any) { - global.ERROR_CALLBACK?.(`ROOT_DB_HANDLER Error`, error as Error); - return { - success: false, - error: error.message, - }; - } finally { - CONNECTION?.end(); - } -} diff --git a/package-shared/utils/db/conn-db-handler.ts b/package-shared/utils/db/conn-db-handler.ts index b4de84f..ce18581 100644 --- a/package-shared/utils/db/conn-db-handler.ts +++ b/package-shared/utils/db/conn-db-handler.ts @@ -1,6 +1,6 @@ import debugLog from "../logging/debug-log"; import { DSQLErrorObject } from "../../types"; -import type { ConnectionConfig, Pool } from "mariadb"; +import mariadb, { Connection, ConnectionConfig, Pool } from "mariadb"; export type ConnDBHandlerQueryObject = { query: string; @@ -20,9 +20,9 @@ type Return = */ export default async function connDbHandler( /** - * MariaDB Connection Pool Object + * MariaDB Connection */ - connPool?: Pool, + conn?: mariadb.Connection, /** * String Or `ConnDBHandlerQueryObject` Array */ @@ -34,13 +34,13 @@ export default async function connDbHandler( debug?: boolean ): Promise> { try { - if (!connPool) throw new Error("No Connection Found!"); + if (!conn) throw new Error("No Connection Found!"); if (!query) throw new Error("Query String Required!"); let queryErrorArray: DSQLErrorObject[] = []; if (typeof query == "string") { - const res = await connPool.query(trimQuery(query), values); + const res = await conn.query(trimQuery(query), values); if (debug) { debugLog({ @@ -67,7 +67,7 @@ export default async function connDbHandler( currentQueryError.sql = queryObj.query; currentQueryError.sqlValues = queryObj.values; - const queryObjRes = await connPool.query( + const queryObjRes = await conn.query( trimQuery(queryObj.query), queryObj.values ); @@ -90,6 +90,9 @@ export default async function connDbHandler( `Connection DB Handler Query Error`, error as Error ); + + console.log("query", query); + resArray.push(null); currentQueryError["error"] = error.message; queryErrorArray.push(currentQueryError); @@ -130,7 +133,7 @@ export default async function connDbHandler( // config: conn, }; } finally { - connPool?.end(); + await conn?.end(); } } diff --git a/package-shared/utils/grab-dsql-connection.ts b/package-shared/utils/grab-dsql-connection.ts index 6018ef1..264a23e 100644 --- a/package-shared/utils/grab-dsql-connection.ts +++ b/package-shared/utils/grab-dsql-connection.ts @@ -1,4 +1,4 @@ -import mariadb, { Pool } from "mariadb"; +import mariadb, { Connection, Pool } from "mariadb"; import grabDbSSL from "./backend/grabDbSSL"; type Param = { @@ -23,11 +23,13 @@ type Param = { /** * # Grab General CONNECTION for DSQL */ -export default function grabDSQLConnection(param?: Param): Pool { +export default async function grabDSQLConnection( + param?: Param +): Promise { if (global.DSQL_USE_LOCAL || param?.local) { return ( global.DSQL_DB_CONN || - mariadb.createPool({ + (await mariadb.createConnection({ host: process.env.DSQL_DB_HOST, user: process.env.DSQL_DB_USERNAME, password: process.env.DSQL_DB_PASSWORD, @@ -37,14 +39,17 @@ export default function grabDSQLConnection(param?: Param): Pool { : undefined, charset: "utf8mb4", ssl: grabDbSSL(), - }) + supportBigNumbers: true, + bigNumberStrings: false, + dateStrings: true, + })) ); } if (param?.ro) { return ( global.DSQL_READ_ONLY_DB_CONN || - mariadb.createPool({ + (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, @@ -53,14 +58,17 @@ export default function grabDSQLConnection(param?: Param): Pool { : undefined, charset: "utf8mb4", ssl: grabDbSSL(), - }) + supportBigNumbers: true, + bigNumberStrings: false, + dateStrings: true, + })) ); } if (param?.fa) { return ( global.DSQL_FULL_ACCESS_DB_CONN || - mariadb.createPool({ + (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, @@ -69,13 +77,16 @@ export default function grabDSQLConnection(param?: Param): Pool { : undefined, charset: "utf8mb4", ssl: grabDbSSL(), - }) + supportBigNumbers: true, + bigNumberStrings: false, + dateStrings: true, + })) ); } return ( global.DSQL_DB_CONN || - mariadb.createPool({ + (await mariadb.createConnection({ host: process.env.DSQL_DB_HOST, user: process.env.DSQL_DB_USERNAME, password: process.env.DSQL_DB_PASSWORD, @@ -85,6 +96,9 @@ export default function grabDSQLConnection(param?: Param): Pool { : undefined, charset: "utf8mb4", ssl: grabDbSSL(), - }) + supportBigNumbers: true, + bigNumberStrings: false, + dateStrings: true, + })) ); } diff --git a/package-shared/utils/setup-db.ts b/package-shared/utils/setup-db.ts index 9be6c9c..1087ec1 100644 --- a/package-shared/utils/setup-db.ts +++ b/package-shared/utils/setup-db.ts @@ -8,15 +8,15 @@ type Params = { connectionLimit?: number; }; -export default function setupDSQLDb({ +export default async function setupDSQLDb({ useLocal, dbConfig, ssl, - connectionLimit = 100, + connectionLimit = 20, }: Params) { global.DSQL_USE_LOCAL = useLocal || true; - const pool = mariadb.createPool({ + const conn = await mariadb.createConnection({ host: process.env.DSQL_DB_HOST, user: process.env.DSQL_DB_USERNAME, password: process.env.DSQL_DB_PASSWORD, @@ -24,10 +24,26 @@ export default function setupDSQLDb({ charset: "utf8mb4", ...dbConfig, ssl: ssl ? grabDbSSL() : undefined, - connectionLimit, + supportBigNumbers: true, + bigNumberStrings: false, + dateStrings: true, }); - global.DSQL_DB_CONN = pool; + // const conn = mariadb.createPool({ + // 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 ? grabDbSSL() : undefined, + // connectionLimit, + // supportBigNumbers: true, + // bigNumberStrings: false, + // dateStrings: true, + // }); + + global.DSQL_DB_CONN = conn; // let readOnlyConnection; @@ -47,7 +63,7 @@ export default function setupDSQLDb({ // } return { - pool, + conn, // readOnlyConnection, }; } diff --git a/package.json b/package.json index dbfdb67..8f205f9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@moduletrace/datasquirel", - "version": "4.8.7", + "version": "4.8.8", "description": "Cloud-based SQL data management tool", "main": "dist/index.js", "bin": {