From 0cd3eb418c9def12aba17ff32e595d223e06f47d Mon Sep 17 00:00:00 2001 From: Benjamin Toby Date: Tue, 14 Jan 2025 10:49:37 +0100 Subject: [PATCH] Updates --- dist/index.d.ts | 6 ++--- .../functions/backend/dbHandler.js | 21 ++++++++++++--- dist/package-shared/shell/checkDb.js | 22 ++++++++++++--- dist/package-shared/shell/updateSSLUsers.js | 24 ++++++++++++++--- dist/package-shared/shell/utils/dbHandler.js | 23 ++++++++++++---- .../utils/backend/global-db/DB_HANDLER.js | 18 ++++++++++++- .../backend/global-db/DSQL_USER_DB_HANDLER.js | 20 +++++++++++--- .../utils/backend/global-db/NO_DB_HANDLER.js | 27 ++++++++++++++++--- .../backend/global-db/ROOT_DB_HANDLER.js | 27 ++++++++++++++++--- index.ts | 6 ++--- package-shared/functions/backend/dbHandler.ts | 24 +++++++++++++---- package-shared/shell/checkDb.ts | 20 +++++++++++--- package-shared/shell/updateSSLUsers.ts | 22 +++++++++++---- package-shared/shell/utils/dbHandler.ts | 23 ++++++++++++---- .../utils/backend/global-db/DB_HANDLER.ts | 17 +++++++++++- .../backend/global-db/DSQL_USER_DB_HANDLER.ts | 22 ++++++++++++--- .../utils/backend/global-db/NO_DB_HANDLER.ts | 23 +++++++++++++--- .../backend/global-db/ROOT_DB_HANDLER.ts | 25 ++++++++++++++--- package.json | 2 +- 19 files changed, 307 insertions(+), 65 deletions(-) diff --git a/dist/index.d.ts b/dist/index.d.ts index 136eba0..6a07bb2 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -1,8 +1,8 @@ import { ServerlessMysql } from "serverless-mysql"; declare global { - var DSQL_DB_CONN: ServerlessMysql; - var DSQL_READ_ONLY_DB_CONN: ServerlessMysql; - var DSQL_FULL_ACCESS_DB_CONN: ServerlessMysql; + var DSQL_DB_CONN: ServerlessMysql | undefined; + var DSQL_READ_ONLY_DB_CONN: ServerlessMysql | undefined; + var DSQL_FULL_ACCESS_DB_CONN: ServerlessMysql | undefined; } /** * Imports diff --git a/dist/package-shared/functions/backend/dbHandler.js b/dist/package-shared/functions/backend/dbHandler.js index 7ec0947..cfa896d 100644 --- a/dist/package-shared/functions/backend/dbHandler.js +++ b/dist/package-shared/functions/backend/dbHandler.js @@ -15,6 +15,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.default = dbHandler; const fs_1 = __importDefault(require("fs")); const serverError_1 = __importDefault(require("./serverError")); +const serverless_mysql_1 = __importDefault(require("serverless-mysql")); /** * # Main DB Handler Function */ @@ -23,6 +24,19 @@ function dbHandler(...args) { var _a; ((_a = process.env.NODE_ENV) === null || _a === void 0 ? void 0 : _a.match(/dev/)) && fs_1.default.appendFileSync("./.tmp/sqlQuery.sql", args[0] + "\n" + Date() + "\n\n\n", "utf8"); + const CONNECTION = global.DSQL_DB_CONN || + (0, serverless_mysql_1.default)({ + config: { + host: process.env.DSQL_DB_HOST, + user: process.env.DSQL_DB_USERNAME, + password: process.env.DSQL_DB_PASSWORD, + database: process.env.DSQL_DB_NAME, + port: process.env.DSQL_DB_PORT + ? Number(process.env.DSQL_DB_PORT) + : undefined, + charset: "utf8mb4", + }, + }); let results; /** * Fetch from db @@ -30,9 +44,8 @@ function dbHandler(...args) { * @description Fetch data from db if no cache */ try { - const connection = global.DSQL_DB_CONN; results = yield new Promise((resolve, reject) => { - connection.query(...args, (error, result, fields) => { + CONNECTION.query(...args, (error, result, fields) => { if (error) { resolve({ error: error.message }); } @@ -41,7 +54,6 @@ function dbHandler(...args) { } }); }); - yield connection.end(); } catch (error) { fs_1.default.appendFileSync("./.tmp/dbErrorLogs.txt", JSON.stringify(error, null, 4) + "\n" + Date() + "\n\n\n", "utf8"); @@ -51,6 +63,9 @@ function dbHandler(...args) { message: error.message, }); } + finally { + yield (CONNECTION === null || CONNECTION === void 0 ? void 0 : CONNECTION.end()); + } /** * Return results * diff --git a/dist/package-shared/shell/checkDb.js b/dist/package-shared/shell/checkDb.js index 23bc9dd..cb54ef0 100644 --- a/dist/package-shared/shell/checkDb.js +++ b/dist/package-shared/shell/checkDb.js @@ -8,8 +8,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge 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 }); require("dotenv").config({ path: "./../.env" }); +const serverless_mysql_1 = __importDefault(require("serverless-mysql")); /** * # Main DB Handler Function * @async @@ -22,16 +26,28 @@ require("dotenv").config({ path: "./../.env" }); * @returns {Promise} */ (() => __awaiter(void 0, void 0, void 0, function* () { - const connection = global.DSQL_DB_CONN; + const CONNECTION = global.DSQL_DB_CONN || + (0, serverless_mysql_1.default)({ + config: { + host: process.env.DSQL_DB_HOST, + user: process.env.DSQL_DB_USERNAME, + password: process.env.DSQL_DB_PASSWORD, + database: process.env.DSQL_DB_NAME, + port: process.env.DSQL_DB_PORT + ? Number(process.env.DSQL_DB_PORT) + : undefined, + charset: "utf8mb4", + }, + }); try { - const result = yield connection.query("SELECT id,first_name,last_name FROM users LIMIT 3"); + const result = yield CONNECTION.query("SELECT id,first_name,last_name FROM users LIMIT 3"); console.log("Connection Query Success =>", result); } catch (error) { console.log("Connection query ERROR =>", error.message); } finally { - connection.end(); + 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 f917a99..e6d0508 100644 --- a/dist/package-shared/shell/updateSSLUsers.js +++ b/dist/package-shared/shell/updateSSLUsers.js @@ -8,8 +8,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge 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 }); require("dotenv").config({ path: "./../.env" }); +const serverless_mysql_1 = __importDefault(require("serverless-mysql")); /** * # Main DB Handler Function * @async @@ -23,9 +27,21 @@ require("dotenv").config({ path: "./../.env" }); */ (() => __awaiter(void 0, void 0, void 0, function* () { var _a; - const connection = global.DSQL_DB_CONN; + const CONNECTION = global.DSQL_DB_CONN || + (0, serverless_mysql_1.default)({ + config: { + host: process.env.DSQL_DB_HOST, + user: process.env.DSQL_DB_USERNAME, + password: process.env.DSQL_DB_PASSWORD, + database: process.env.DSQL_DB_NAME, + port: process.env.DSQL_DB_PORT + ? Number(process.env.DSQL_DB_PORT) + : undefined, + charset: "utf8mb4", + }, + }); try { - const result = yield connection.query("SELECT user,host,ssl_type FROM mysql.user"); + const result = yield CONNECTION.query("SELECT user,host,ssl_type FROM mysql.user"); const parsedResults = JSON.parse(JSON.stringify(result)); for (let i = 0; i < parsedResults.length; i++) { const user = parsedResults[i]; @@ -38,7 +54,7 @@ require("dotenv").config({ path: "./../.env" }); if (ssl_type === "ANY") { continue; } - const addUserSSL = yield connection.query(`ALTER USER '${User}'@'${Host}'`); + const addUserSSL = yield CONNECTION.query(`ALTER USER '${User}'@'${Host}'`); console.log(`addUserSSL => ${User}@${Host}`, addUserSSL); } } @@ -46,7 +62,7 @@ require("dotenv").config({ path: "./../.env" }); console.log("Connection query ERROR =>", error.message); } finally { - connection.end(); + CONNECTION.end(); process.exit(); } }))(); diff --git a/dist/package-shared/shell/utils/dbHandler.js b/dist/package-shared/shell/utils/dbHandler.js index 0312c76..f833fc4 100644 --- a/dist/package-shared/shell/utils/dbHandler.js +++ b/dist/package-shared/shell/utils/dbHandler.js @@ -15,20 +15,33 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.default = dbHandler; const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); +const serverless_mysql_1 = __importDefault(require("serverless-mysql")); /** * # Main DB Handler Function * @requires DSQL_DB_CONN - Gobal Variable for Datasquirel Database */ function dbHandler(_a) { return __awaiter(this, arguments, void 0, function* ({ query, values, }) { - let connection = global.DSQL_DB_CONN; + const CONNECTION = global.DSQL_DB_CONN || + (0, serverless_mysql_1.default)({ + config: { + host: process.env.DSQL_DB_HOST, + user: process.env.DSQL_DB_USERNAME, + password: process.env.DSQL_DB_PASSWORD, + database: process.env.DSQL_DB_NAME, + port: process.env.DSQL_DB_PORT + ? Number(process.env.DSQL_DB_PORT) + : undefined, + charset: "utf8mb4", + }, + }); let results; try { if (query && values) { - results = yield connection.query(query, values); + results = yield CONNECTION.query(query, values); } else { - results = yield connection.query(query); + results = yield CONNECTION.query(query); } } catch ( /** @type {any} */error) { @@ -37,12 +50,12 @@ function dbHandler(_a) { } console.log("ERROR in dbHandler =>", error.message); console.log(error); - console.log(connection.config()); + console.log(CONNECTION.config()); fs_1.default.appendFileSync(path_1.default.resolve(__dirname, "../.tmp/dbErrorLogs.txt"), JSON.stringify(error, null, 4) + "\n" + Date() + "\n\n\n", "utf8"); results = null; } finally { - yield (connection === null || connection === void 0 ? void 0 : connection.end()); + yield (CONNECTION === null || CONNECTION === void 0 ? void 0 : CONNECTION.end()); } if (results) { return JSON.parse(JSON.stringify(results)); 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 424a9be..4ddb8cc 100644 --- a/dist/package-shared/utils/backend/global-db/DB_HANDLER.js +++ b/dist/package-shared/utils/backend/global-db/DB_HANDLER.js @@ -8,15 +8,31 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge 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 serverless_mysql_1 = __importDefault(require("serverless-mysql")); /** * # DSQL user read-only DB handler * @requires DSQL_DB_CONN - Gobal Variable for Datasquirel Database */ function DB_HANDLER(...args) { return __awaiter(this, void 0, void 0, function* () { - const CONNECTION = global.DSQL_DB_CONN; + const CONNECTION = global.DSQL_DB_CONN || + (0, serverless_mysql_1.default)({ + config: { + host: process.env.DSQL_DB_HOST, + user: process.env.DSQL_DB_USERNAME, + password: process.env.DSQL_DB_PASSWORD, + database: process.env.DSQL_DB_NAME, + port: process.env.DSQL_DB_PORT + ? Number(process.env.DSQL_DB_PORT) + : undefined, + charset: "utf8mb4", + }, + }); try { if (!CONNECTION) throw new Error("No Connection provided to DB_HANDLER function!"); 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 0246a91..fc9fac4 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 @@ -13,20 +13,34 @@ var __importDefault = (this && this.__importDefault) || function (mod) { }; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = DSQL_USER_DB_HANDLER; +const serverless_mysql_1 = __importDefault(require("serverless-mysql")); const conn_db_handler_1 = __importDefault(require("../../db/conn-db-handler")); /** * # DSQL user read-only DB handler */ function DSQL_USER_DB_HANDLER(_a) { return __awaiter(this, arguments, void 0, function* ({ paradigm, queryString, queryValues, }) { + const CONNECTION = global.DSQL_DB_CONN || + (0, serverless_mysql_1.default)({ + config: { + host: process.env.DSQL_DB_HOST, + user: process.env.DSQL_DB_USERNAME, + password: process.env.DSQL_DB_PASSWORD, + database: process.env.DSQL_DB_NAME, + port: process.env.DSQL_DB_PORT + ? Number(process.env.DSQL_DB_PORT) + : undefined, + charset: "utf8mb4", + }, + }); try { switch (paradigm) { case "Read Only": - return yield (0, conn_db_handler_1.default)(global.DSQL_READ_ONLY_DB_CONN, queryString, queryValues); + return yield (0, conn_db_handler_1.default)(global.DSQL_READ_ONLY_DB_CONN || CONNECTION, queryString, queryValues); case "Full Access": - return yield (0, conn_db_handler_1.default)(global.DSQL_FULL_ACCESS_DB_CONN, queryString, queryValues); + return yield (0, conn_db_handler_1.default)(global.DSQL_FULL_ACCESS_DB_CONN || CONNECTION, queryString, queryValues); case "FA": - return yield (0, conn_db_handler_1.default)(global.DSQL_FULL_ACCESS_DB_CONN, queryString, queryValues); + return yield (0, conn_db_handler_1.default)(global.DSQL_FULL_ACCESS_DB_CONN || CONNECTION, queryString, queryValues); default: return null; } 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 f4a64e0..997d6bf 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,20 +1,36 @@ "use strict"; +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 serverless_mysql_1 = __importDefault(require("serverless-mysql")); /** * # DSQL user read-only DB handler */ function NO_DB_HANDLER(...args) { - const NO_DB = global.DSQL_DB_CONN; + const CONNECTION = global.DSQL_DB_CONN || + (0, serverless_mysql_1.default)({ + config: { + host: process.env.DSQL_DB_HOST, + user: process.env.DSQL_DB_USERNAME, + password: process.env.DSQL_DB_PASSWORD, + database: process.env.DSQL_DB_NAME, + port: process.env.DSQL_DB_PORT + ? Number(process.env.DSQL_DB_PORT) + : undefined, + charset: "utf8mb4", + }, + }); try { return new Promise((resolve, reject) => { - NO_DB.query(...args) + CONNECTION.query(...args) .then((results) => { - NO_DB.end(); + CONNECTION.end(); resolve(JSON.parse(JSON.stringify(results))); }) .catch((err) => { - NO_DB.end(); + CONNECTION.end(); resolve({ error: err.message, sql: err.sql, @@ -28,4 +44,7 @@ function NO_DB_HANDLER(...args) { error: error.message, }; } + finally { + CONNECTION === null || CONNECTION === void 0 ? void 0 : CONNECTION.end(); + } } 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 index 0454d4f..69adae5 100644 --- a/dist/package-shared/utils/backend/global-db/ROOT_DB_HANDLER.js +++ b/dist/package-shared/utils/backend/global-db/ROOT_DB_HANDLER.js @@ -1,20 +1,36 @@ "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 serverless_mysql_1 = __importDefault(require("serverless-mysql")); /** * # Root DB handler */ function ROOT_DB_HANDLER(...args) { - const NO_DB = global.DSQL_DB_CONN; + const CONNECTION = global.DSQL_DB_CONN || + (0, serverless_mysql_1.default)({ + config: { + host: process.env.DSQL_DB_HOST, + user: process.env.DSQL_DB_USERNAME, + password: process.env.DSQL_DB_PASSWORD, + database: process.env.DSQL_DB_NAME, + port: process.env.DSQL_DB_PORT + ? Number(process.env.DSQL_DB_PORT) + : undefined, + charset: "utf8mb4", + }, + }); try { return new Promise((resolve, reject) => { - NO_DB.query(...args) + CONNECTION.query(...args) .then((results) => { - NO_DB.end(); + CONNECTION.end(); resolve(JSON.parse(JSON.stringify(results))); }) .catch((err) => { - NO_DB.end(); + CONNECTION.end(); resolve({ error: err.message, sql: err.sql, @@ -28,4 +44,7 @@ function ROOT_DB_HANDLER(...args) { error: error.message, }; } + finally { + CONNECTION === null || CONNECTION === void 0 ? void 0 : CONNECTION.end(); + } } diff --git a/index.ts b/index.ts index cc10fb6..2b5924d 100644 --- a/index.ts +++ b/index.ts @@ -1,8 +1,8 @@ import { ServerlessMysql } from "serverless-mysql"; declare global { - var DSQL_DB_CONN: ServerlessMysql; - var DSQL_READ_ONLY_DB_CONN: ServerlessMysql; - var DSQL_FULL_ACCESS_DB_CONN: ServerlessMysql; + var DSQL_DB_CONN: ServerlessMysql | undefined; + var DSQL_READ_ONLY_DB_CONN: ServerlessMysql | undefined; + var DSQL_FULL_ACCESS_DB_CONN: ServerlessMysql | undefined; } /** diff --git a/package-shared/functions/backend/dbHandler.ts b/package-shared/functions/backend/dbHandler.ts index f2281ea..c08b4eb 100644 --- a/package-shared/functions/backend/dbHandler.ts +++ b/package-shared/functions/backend/dbHandler.ts @@ -1,5 +1,6 @@ import fs from "fs"; import serverError from "./serverError"; +import mysql from "serverless-mysql"; /** * # Main DB Handler Function @@ -12,6 +13,21 @@ export default async function dbHandler(...args: any[]) { "utf8" ); + const CONNECTION = + global.DSQL_DB_CONN || + mysql({ + config: { + host: process.env.DSQL_DB_HOST, + user: process.env.DSQL_DB_USERNAME, + password: process.env.DSQL_DB_PASSWORD, + database: process.env.DSQL_DB_NAME, + port: process.env.DSQL_DB_PORT + ? Number(process.env.DSQL_DB_PORT) + : undefined, + charset: "utf8mb4", + }, + }); + let results; /** @@ -20,10 +36,8 @@ export default async function dbHandler(...args: any[]) { * @description Fetch data from db if no cache */ try { - const connection = global.DSQL_DB_CONN; - results = await new Promise((resolve, reject) => { - connection.query( + CONNECTION.query( ...args, (error: any, result: any, fields: any) => { if (error) { @@ -34,8 +48,6 @@ export default async function dbHandler(...args: any[]) { } ); }); - - await connection.end(); } catch (error: any) { fs.appendFileSync( "./.tmp/dbErrorLogs.txt", @@ -49,6 +61,8 @@ export default async function dbHandler(...args: any[]) { component: "dbHandler", message: error.message, }); + } finally { + await CONNECTION?.end(); } /** diff --git a/package-shared/shell/checkDb.ts b/package-shared/shell/checkDb.ts index f29a7a9..dda3aa2 100755 --- a/package-shared/shell/checkDb.ts +++ b/package-shared/shell/checkDb.ts @@ -1,6 +1,5 @@ require("dotenv").config({ path: "./../.env" }); import mysql from "serverless-mysql"; -import grabDbSSL from "../utils/backend/grabDbSSL"; /** * # Main DB Handler Function @@ -14,17 +13,30 @@ import grabDbSSL from "../utils/backend/grabDbSSL"; * @returns {Promise} */ (async () => { - const connection = global.DSQL_DB_CONN; + const CONNECTION = + global.DSQL_DB_CONN || + mysql({ + config: { + host: process.env.DSQL_DB_HOST, + user: process.env.DSQL_DB_USERNAME, + password: process.env.DSQL_DB_PASSWORD, + database: process.env.DSQL_DB_NAME, + port: process.env.DSQL_DB_PORT + ? Number(process.env.DSQL_DB_PORT) + : undefined, + charset: "utf8mb4", + }, + }); try { - const result = await connection.query( + const result = await CONNECTION.query( "SELECT id,first_name,last_name FROM users LIMIT 3" ); console.log("Connection Query Success =>", result); } catch (error: any) { console.log("Connection query ERROR =>", error.message); } finally { - connection.end(); + CONNECTION?.end(); process.exit(); } })(); diff --git a/package-shared/shell/updateSSLUsers.ts b/package-shared/shell/updateSSLUsers.ts index 2f2a3c4..3945c20 100755 --- a/package-shared/shell/updateSSLUsers.ts +++ b/package-shared/shell/updateSSLUsers.ts @@ -1,5 +1,4 @@ require("dotenv").config({ path: "./../.env" }); -import grabDbSSL from "../utils/backend/grabDbSSL"; import mysql from "serverless-mysql"; /** @@ -14,10 +13,23 @@ import mysql from "serverless-mysql"; * @returns {Promise} */ (async () => { - const connection = global.DSQL_DB_CONN; + const CONNECTION = + global.DSQL_DB_CONN || + mysql({ + config: { + host: process.env.DSQL_DB_HOST, + user: process.env.DSQL_DB_USERNAME, + password: process.env.DSQL_DB_PASSWORD, + database: process.env.DSQL_DB_NAME, + port: process.env.DSQL_DB_PORT + ? Number(process.env.DSQL_DB_PORT) + : undefined, + charset: "utf8mb4", + }, + }); try { - const result = await connection.query( + const result = await CONNECTION.query( "SELECT user,host,ssl_type FROM mysql.user" ); const parsedResults = JSON.parse(JSON.stringify(result)); @@ -39,7 +51,7 @@ import mysql from "serverless-mysql"; continue; } - const addUserSSL = await connection.query( + const addUserSSL = await CONNECTION.query( `ALTER USER '${User}'@'${Host}'` ); @@ -48,7 +60,7 @@ import mysql from "serverless-mysql"; } catch (error: any) { console.log("Connection query ERROR =>", error.message); } finally { - connection.end(); + CONNECTION.end(); process.exit(); } })(); diff --git a/package-shared/shell/utils/dbHandler.ts b/package-shared/shell/utils/dbHandler.ts index f81b4d3..4cebea7 100755 --- a/package-shared/shell/utils/dbHandler.ts +++ b/package-shared/shell/utils/dbHandler.ts @@ -17,15 +17,28 @@ export default async function dbHandler({ query, values, }: Param): Promise { - let connection = global.DSQL_DB_CONN; + const CONNECTION = + global.DSQL_DB_CONN || + mysql({ + config: { + host: process.env.DSQL_DB_HOST, + user: process.env.DSQL_DB_USERNAME, + password: process.env.DSQL_DB_PASSWORD, + database: process.env.DSQL_DB_NAME, + port: process.env.DSQL_DB_PORT + ? Number(process.env.DSQL_DB_PORT) + : undefined, + charset: "utf8mb4", + }, + }); let results; try { if (query && values) { - results = await connection.query(query, values); + results = await CONNECTION.query(query, values); } else { - results = await connection.query(query); + results = await CONNECTION.query(query); } } catch (/** @type {any} */ error: any) { if (process.env.FIRST_RUN) { @@ -34,7 +47,7 @@ export default async function dbHandler({ console.log("ERROR in dbHandler =>", error.message); console.log(error); - console.log(connection.config()); + console.log(CONNECTION.config()); fs.appendFileSync( path.resolve(__dirname, "../.tmp/dbErrorLogs.txt"), @@ -43,7 +56,7 @@ export default async function dbHandler({ ); results = null; } finally { - await connection?.end(); + await CONNECTION?.end(); } if (results) { diff --git a/package-shared/utils/backend/global-db/DB_HANDLER.ts b/package-shared/utils/backend/global-db/DB_HANDLER.ts index 6f32d13..c9935ce 100644 --- a/package-shared/utils/backend/global-db/DB_HANDLER.ts +++ b/package-shared/utils/backend/global-db/DB_HANDLER.ts @@ -1,9 +1,24 @@ +import mysql from "serverless-mysql"; + /** * # DSQL user read-only DB handler * @requires DSQL_DB_CONN - Gobal Variable for Datasquirel Database */ export default async function DB_HANDLER(...args: any[]) { - const CONNECTION = global.DSQL_DB_CONN; + const CONNECTION = + global.DSQL_DB_CONN || + mysql({ + config: { + host: process.env.DSQL_DB_HOST, + user: process.env.DSQL_DB_USERNAME, + password: process.env.DSQL_DB_PASSWORD, + database: process.env.DSQL_DB_NAME, + port: process.env.DSQL_DB_PORT + ? Number(process.env.DSQL_DB_PORT) + : undefined, + charset: "utf8mb4", + }, + }); try { if (!CONNECTION) 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 f0659f1..324d7c2 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 @@ -1,3 +1,4 @@ +import mysql from "serverless-mysql"; import connDbHandler from "../../db/conn-db-handler"; type Param = { @@ -14,25 +15,40 @@ export default async function DSQL_USER_DB_HANDLER({ queryString, queryValues, }: Param) { + const CONNECTION = + global.DSQL_DB_CONN || + mysql({ + config: { + host: process.env.DSQL_DB_HOST, + user: process.env.DSQL_DB_USERNAME, + password: process.env.DSQL_DB_PASSWORD, + database: process.env.DSQL_DB_NAME, + port: process.env.DSQL_DB_PORT + ? Number(process.env.DSQL_DB_PORT) + : undefined, + charset: "utf8mb4", + }, + }); + try { switch (paradigm) { case "Read Only": return await connDbHandler( - global.DSQL_READ_ONLY_DB_CONN, + global.DSQL_READ_ONLY_DB_CONN || CONNECTION, queryString, queryValues ); case "Full Access": return await connDbHandler( - global.DSQL_FULL_ACCESS_DB_CONN, + global.DSQL_FULL_ACCESS_DB_CONN || CONNECTION, queryString, queryValues ); case "FA": return await connDbHandler( - global.DSQL_FULL_ACCESS_DB_CONN, + global.DSQL_FULL_ACCESS_DB_CONN || CONNECTION, queryString, queryValues ); 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 c1569e8..2504213 100644 --- a/package-shared/utils/backend/global-db/NO_DB_HANDLER.ts +++ b/package-shared/utils/backend/global-db/NO_DB_HANDLER.ts @@ -5,17 +5,30 @@ import grabDbSSL from "../grabDbSSL"; * # DSQL user read-only DB handler */ export default function NO_DB_HANDLER(...args: any[]) { - const NO_DB = global.DSQL_DB_CONN; + const CONNECTION = + global.DSQL_DB_CONN || + mysql({ + config: { + host: process.env.DSQL_DB_HOST, + user: process.env.DSQL_DB_USERNAME, + password: process.env.DSQL_DB_PASSWORD, + database: process.env.DSQL_DB_NAME, + port: process.env.DSQL_DB_PORT + ? Number(process.env.DSQL_DB_PORT) + : undefined, + charset: "utf8mb4", + }, + }); try { return new Promise((resolve, reject) => { - NO_DB.query(...args) + CONNECTION.query(...args) .then((results) => { - NO_DB.end(); + CONNECTION.end(); resolve(JSON.parse(JSON.stringify(results))); }) .catch((err) => { - NO_DB.end(); + CONNECTION.end(); resolve({ error: err.message, sql: err.sql, @@ -27,5 +40,7 @@ export default function NO_DB_HANDLER(...args: 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 index 1bff67a..73a5a38 100644 --- a/package-shared/utils/backend/global-db/ROOT_DB_HANDLER.ts +++ b/package-shared/utils/backend/global-db/ROOT_DB_HANDLER.ts @@ -1,18 +1,33 @@ +import mysql from "serverless-mysql"; + /** * # Root DB handler */ export default function ROOT_DB_HANDLER(...args: any[]) { - const NO_DB = global.DSQL_DB_CONN; + const CONNECTION = + global.DSQL_DB_CONN || + mysql({ + config: { + host: process.env.DSQL_DB_HOST, + user: process.env.DSQL_DB_USERNAME, + password: process.env.DSQL_DB_PASSWORD, + database: process.env.DSQL_DB_NAME, + port: process.env.DSQL_DB_PORT + ? Number(process.env.DSQL_DB_PORT) + : undefined, + charset: "utf8mb4", + }, + }); try { return new Promise((resolve, reject) => { - NO_DB.query(...args) + CONNECTION.query(...args) .then((results) => { - NO_DB.end(); + CONNECTION.end(); resolve(JSON.parse(JSON.stringify(results))); }) .catch((err) => { - NO_DB.end(); + CONNECTION.end(); resolve({ error: err.message, sql: err.sql, @@ -24,5 +39,7 @@ export default function ROOT_DB_HANDLER(...args: any[]) { success: false, error: error.message, }; + } finally { + CONNECTION?.end(); } } diff --git a/package.json b/package.json index 151330b..eac4bce 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@moduletrace/datasquirel", - "version": "3.4.7", + "version": "3.4.8", "description": "Cloud-based SQL data management tool", "main": "dist/index.js", "bin": {