diff --git a/dist/index.d.ts b/dist/index.d.ts index 21606f5..6a07bb2 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -1,3 +1,9 @@ +import { ServerlessMysql } from "serverless-mysql"; +declare global { + 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/api/users/api-login.js b/dist/package-shared/functions/api/users/api-login.js index 1158c73..2a16ea3 100644 --- a/dist/package-shared/functions/api/users/api-login.js +++ b/dist/package-shared/functions/api/users/api-login.js @@ -45,12 +45,14 @@ function apiLoginUser(_a) { password: password, }) : null; + console.log("Finding DSQL User ..."); let foundUser = yield (0, varDatabaseDbHandler_1.default)({ queryString: `SELECT * FROM ${dbFullName}.users WHERE email = ? OR username = ?`, queryValuesArray: [email, username], database: dbFullName, useLocal, }); + console.log("foundUser", foundUser); if ((!foundUser || !foundUser[0]) && !social) return { success: false, @@ -69,7 +71,6 @@ function apiLoginUser(_a) { email_login && email_login_code && email_login_field) { - /** @type {string} */ const tempCode = foundUser[0][email_login_field]; if (!tempCode) throw new Error("No code Found!"); diff --git a/dist/package-shared/functions/backend/dbHandler.js b/dist/package-shared/functions/backend/dbHandler.js index a9e2c39..2e13631 100644 --- a/dist/package-shared/functions/backend/dbHandler.js +++ b/dist/package-shared/functions/backend/dbHandler.js @@ -15,7 +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")); +const grab_dsql_connection_1 = __importDefault(require("../../utils/grab-dsql-connection")); /** * # Main DB Handler Function */ @@ -24,18 +24,7 @@ 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 = (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", - }, - }); + const CONNECTION = (0, grab_dsql_connection_1.default)(); let results; /** * Fetch from db diff --git a/dist/package-shared/shell/checkDb.js b/dist/package-shared/shell/checkDb.js index d3cf88f..b55ba6c 100644 --- a/dist/package-shared/shell/checkDb.js +++ b/dist/package-shared/shell/checkDb.js @@ -13,7 +13,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) { }; Object.defineProperty(exports, "__esModule", { value: true }); require("dotenv").config({ path: "./../.env" }); -const serverless_mysql_1 = __importDefault(require("serverless-mysql")); +const grab_dsql_connection_1 = __importDefault(require("../utils/grab-dsql-connection")); /** * # Main DB Handler Function * @async @@ -26,18 +26,7 @@ const serverless_mysql_1 = __importDefault(require("serverless-mysql")); * @returns {Promise} */ (() => __awaiter(void 0, void 0, void 0, function* () { - const CONNECTION = (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", - }, - }); + const CONNECTION = (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); diff --git a/dist/package-shared/shell/test-external-server.js b/dist/package-shared/shell/test-external-server.js index 1471762..c43b738 100644 --- a/dist/package-shared/shell/test-external-server.js +++ b/dist/package-shared/shell/test-external-server.js @@ -13,18 +13,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) { }; Object.defineProperty(exports, "__esModule", { value: true }); require("dotenv").config({ path: "./.env" }); -const grabDbSSL_1 = __importDefault(require("../utils/backend/grabDbSSL")); -const serverless_mysql_1 = __importDefault(require("serverless-mysql")); -const connection = (0, serverless_mysql_1.default)({ - config: { - host: process.env.DSQL_DB_HOST, - user: process.env.DB_USER, - password: process.env.DB_PASS, - // database: process.env.DSQL_DB_NAME, - charset: "utf8mb4", - ssl: (0, grabDbSSL_1.default)(), - }, -}); +const grab_dsql_connection_1 = __importDefault(require("../utils/grab-dsql-connection")); /** * # Main DB Handler Function * @async @@ -37,13 +26,14 @@ const connection = (0, serverless_mysql_1.default)({ * @returns {Promise} */ (() => __awaiter(void 0, void 0, void 0, function* () { + const CONNECTION = (0, grab_dsql_connection_1.default)({ noDb: true }); /** * Switch Database * * @description If a database is provided, switch to it */ try { - const result = yield connection.query("SHOW DATABASES"); + const result = yield CONNECTION.query("SHOW DATABASES"); const parsedResults = JSON.parse(JSON.stringify(result)); console.log("parsedResults =>", parsedResults); } @@ -51,7 +41,7 @@ const connection = (0, serverless_mysql_1.default)({ 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 00b1ed6..1b642c0 100644 --- a/dist/package-shared/shell/updateSSLUsers.js +++ b/dist/package-shared/shell/updateSSLUsers.js @@ -13,7 +13,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) { }; Object.defineProperty(exports, "__esModule", { value: true }); require("dotenv").config({ path: "./../.env" }); -const serverless_mysql_1 = __importDefault(require("serverless-mysql")); +const grab_dsql_connection_1 = __importDefault(require("../utils/grab-dsql-connection")); /** * # Main DB Handler Function * @async @@ -27,18 +27,7 @@ const serverless_mysql_1 = __importDefault(require("serverless-mysql")); */ (() => __awaiter(void 0, void 0, void 0, function* () { var _a; - const CONNECTION = (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", - }, - }); + const CONNECTION = (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)); diff --git a/dist/package-shared/shell/utils/dbHandler.js b/dist/package-shared/shell/utils/dbHandler.js index 792c6c2..d6e92cc 100644 --- a/dist/package-shared/shell/utils/dbHandler.js +++ b/dist/package-shared/shell/utils/dbHandler.js @@ -15,25 +15,14 @@ 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")); +const grab_dsql_connection_1 = __importDefault(require("../../utils/grab-dsql-connection")); /** * # 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, }) { - const CONNECTION = (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", - }, - }); + const CONNECTION = (0, grab_dsql_connection_1.default)(); let results; try { if (query && values) { 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 2900c37..84c5a0d 100644 --- a/dist/package-shared/utils/backend/global-db/DB_HANDLER.js +++ b/dist/package-shared/utils/backend/global-db/DB_HANDLER.js @@ -13,25 +13,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) { }; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = DB_HANDLER; -const serverless_mysql_1 = __importDefault(require("serverless-mysql")); +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(...args) { return __awaiter(this, void 0, void 0, function* () { - const CONNECTION = (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", - }, - }); + const CONNECTION = (0, grab_dsql_connection_1.default)(); 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 67f91b4..ffd5400 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,36 +13,16 @@ 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")); +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, }) { const CONNECTION = paradigm == "Read Only" - ? (0, serverless_mysql_1.default)({ - config: { - 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", - }, - }) - : (0, serverless_mysql_1.default)({ - config: { - 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", - }, - }); + ? (0, grab_dsql_connection_1.default)({ ro: true }) + : (0, grab_dsql_connection_1.default)({ fa: true }); try { return yield (0, conn_db_handler_1.default)(CONNECTION, queryString, queryValues); } @@ -53,85 +33,5 @@ function DSQL_USER_DB_HANDLER(_a) { finally { CONNECTION === null || CONNECTION === void 0 ? void 0 : CONNECTION.end(); } - // try { - // return new Promise((resolve, reject) => { - // const fullAccess = paradigm?.match(/full.access|^fa$/i) - // ? true - // : false; - // try { - // if (fullAccess) { - // DSQL_USER = mysql({ - // config: { - // host: process.env.DSQL_DB_HOST, - // user: process.env.DSQL_DB_FULL_ACCESS_USERNAME, - // password: process.env.DSQL_DB_FULL_ACCESS_PASSWORD, - // database: database, - // ssl: grabDbSSL(), - // }, - // }); - // } else { - // DSQL_USER = mysql({ - // config: { - // host: process.env.DSQL_DB_HOST, - // user: process.env.DSQL_DB_READ_ONLY_USERNAME, - // password: process.env.DSQL_DB_READ_ONLY_PASSWORD, - // database: database, - // ssl: grabDbSSL(), - // }, - // }); - // } - // /** - // * ### Run query Function - // * @param {any} results - // */ - // function runQuery(results: any) { - // DSQL_USER.end(); - // resolve(JSON.parse(JSON.stringify(results))); - // } - // /** - // * ### Query Error - // * @param {any} err - // */ - // function queryError(err: any) { - // DSQL_USER.end(); - // resolve({ - // error: err.message, - // queryStringGenerated: queryString, - // queryValuesGenerated: queryValues, - // sql: err.sql, - // }); - // } - // if ( - // queryValues && - // Array.isArray(queryValues) && - // queryValues[0] - // ) { - // DSQL_USER.query(queryString, queryValues) - // .then(runQuery) - // .catch(queryError); - // } else { - // DSQL_USER.query(queryString) - // .then(runQuery) - // .catch(queryError); - // } - // //////////////////////////////////////// - // } catch (/** @type {any} */ error: any) { - // //////////////////////////////////////// - // fs.appendFileSync( - // "./.tmp/dbErrorLogs.txt", - // error.message + "\n" + Date() + "\n\n\n", - // "utf8" - // ); - // resolve({ - // error: error.message, - // }); - // } - // }); - // } catch (/** @type {any} */ error: any) { - // return { - // success: false, - // error: error.message, - // }; - // } }); } 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 49e27cf..2c1b4d4 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 @@ -13,47 +13,27 @@ var __importDefault = (this && this.__importDefault) || function (mod) { }; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = LOCAL_DB_HANDLER; -const serverless_mysql_1 = __importDefault(require("serverless-mysql")); -const grabDbSSL_1 = __importDefault(require("../grabDbSSL")); +const grab_dsql_connection_1 = __importDefault(require("../../grab-dsql-connection")); /** * # DSQL user read-only DB handler */ function LOCAL_DB_HANDLER(...args) { return __awaiter(this, void 0, void 0, function* () { - const MASTER = (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", - ssl: (0, grabDbSSL_1.default)(), - }, - onConnect: () => { - console.log("Connection Successful!"); - }, - onConnectError: (/** @type {any} */ err) => { - console.log("Connection Error", err.message); - }, - onError: (/** @type {any} */ err) => { - console.log("Client Error", err.message); - }, - }); + const MASTER = (0, grab_dsql_connection_1.default)(); console.log("Querying ..."); try { const results = yield MASTER.query(...args); - yield MASTER.end(); return JSON.parse(JSON.stringify(results)); } - catch ( /** @type {any} */error) { + catch (error) { console.log("DB Error =>", error.message); return { success: false, error: error.message, }; } + finally { + yield (MASTER === null || MASTER === void 0 ? void 0 : MASTER.end()); + } }); } 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 5d04add..16e49ad 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 @@ -4,23 +4,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) { }; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = NO_DB_HANDLER; -const serverless_mysql_1 = __importDefault(require("serverless-mysql")); +const grab_dsql_connection_1 = __importDefault(require("../../grab-dsql-connection")); /** * # DSQL user read-only DB handler */ function NO_DB_HANDLER(...args) { - const CONNECTION = (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", - }, - }); + const CONNECTION = (0, grab_dsql_connection_1.default)(); try { return new Promise((resolve, reject) => { CONNECTION.query(...args) 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 f51f223..b769c9d 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 @@ -4,23 +4,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) { }; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = ROOT_DB_HANDLER; -const serverless_mysql_1 = __importDefault(require("serverless-mysql")); +const grab_dsql_connection_1 = __importDefault(require("../../grab-dsql-connection")); /** * # Root DB handler */ function ROOT_DB_HANDLER(...args) { - const CONNECTION = (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", - }, - }); + const CONNECTION = (0, grab_dsql_connection_1.default)(); try { return new Promise((resolve, reject) => { CONNECTION.query(...args) diff --git a/dist/package-shared/utils/grab-dsql-connection.d.ts b/dist/package-shared/utils/grab-dsql-connection.d.ts new file mode 100644 index 0000000..f26789e --- /dev/null +++ b/dist/package-shared/utils/grab-dsql-connection.d.ts @@ -0,0 +1,20 @@ +import { ServerlessMysql } from "serverless-mysql"; +type Param = { + /** + * Read Only? + */ + ro?: boolean; + /** + * Full Access? + */ + fa?: boolean; + /** + * Full Access? + */ + noDb?: boolean; +}; +/** + * # Grab General CONNECTION for DSQL + */ +export default function grabDSQLConnection(param?: Param): ServerlessMysql; +export {}; diff --git a/dist/package-shared/utils/grab-dsql-connection.js b/dist/package-shared/utils/grab-dsql-connection.js new file mode 100644 index 0000000..c421778 --- /dev/null +++ b/dist/package-shared/utils/grab-dsql-connection.js @@ -0,0 +1,53 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = grabDSQLConnection; +const serverless_mysql_1 = __importDefault(require("serverless-mysql")); +/** + * # Grab General CONNECTION for DSQL + */ +function grabDSQLConnection(param) { + if (param === null || param === void 0 ? void 0 : param.ro) { + return (DSQL_READ_ONLY_DB_CONN || + (0, serverless_mysql_1.default)({ + config: { + 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", + }, + })); + } + if (param === null || param === void 0 ? void 0 : param.fa) { + return (global.DSQL_FULL_ACCESS_DB_CONN || + (0, serverless_mysql_1.default)({ + config: { + 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", + }, + })); + } + return (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: (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", + }, + })); +} diff --git a/dist/users/login-user.js b/dist/users/login-user.js index 479bbb5..800f10a 100644 --- a/dist/users/login-user.js +++ b/dist/users/login-user.js @@ -82,7 +82,6 @@ function loginUser(_a) { (DSQL_DB_PASSWORD === null || DSQL_DB_PASSWORD === void 0 ? void 0 : DSQL_DB_PASSWORD.match(/./)) && (DSQL_DB_NAME === null || DSQL_DB_NAME === void 0 ? void 0 : DSQL_DB_NAME.match(/./)) && useLocal) { - /** @type {import("../package-shared/types").DSQL_DatabaseSchemaType | undefined} */ let dbSchema; try { const localDbSchemaPath = path_1.default.resolve(process.cwd(), "dsql.schema.json"); diff --git a/index.ts b/index.ts index 570feac..10356b9 100644 --- a/index.ts +++ b/index.ts @@ -1,3 +1,11 @@ +import { ServerlessMysql } from "serverless-mysql"; + +declare global { + 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/package-shared/functions/api/users/api-login.ts b/package-shared/functions/api/users/api-login.ts index fb7c851..8f3a737 100644 --- a/package-shared/functions/api/users/api-login.ts +++ b/package-shared/functions/api/users/api-login.ts @@ -54,6 +54,8 @@ export default async function apiLoginUser({ }) : null; + console.log("Finding DSQL User ..."); + let foundUser = await varDatabaseDbHandler({ queryString: `SELECT * FROM ${dbFullName}.users WHERE email = ? OR username = ?`, queryValuesArray: [email, username], @@ -61,6 +63,8 @@ export default async function apiLoginUser({ useLocal, }); + console.log("foundUser", foundUser); + if ((!foundUser || !foundUser[0]) && !social) return { success: false, @@ -81,8 +85,7 @@ export default async function apiLoginUser({ email_login_code && email_login_field ) { - /** @type {string} */ - const tempCode = foundUser[0][email_login_field]; + const tempCode: string = foundUser[0][email_login_field]; if (!tempCode) throw new Error("No code Found!"); diff --git a/package-shared/functions/backend/dbHandler.ts b/package-shared/functions/backend/dbHandler.ts index 3c5be19..e00b852 100644 --- a/package-shared/functions/backend/dbHandler.ts +++ b/package-shared/functions/backend/dbHandler.ts @@ -1,6 +1,7 @@ import fs from "fs"; import serverError from "./serverError"; import mysql from "serverless-mysql"; +import grabDSQLConnection from "../../utils/grab-dsql-connection"; /** * # Main DB Handler Function @@ -13,18 +14,7 @@ export default async function dbHandler(...args: any[]) { "utf8" ); - const CONNECTION = 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", - }, - }); + const CONNECTION = grabDSQLConnection(); let results; diff --git a/package-shared/shell/checkDb.ts b/package-shared/shell/checkDb.ts index aa5c234..aa7aefc 100755 --- a/package-shared/shell/checkDb.ts +++ b/package-shared/shell/checkDb.ts @@ -1,5 +1,6 @@ require("dotenv").config({ path: "./../.env" }); import mysql from "serverless-mysql"; +import grabDSQLConnection from "../utils/grab-dsql-connection"; /** * # Main DB Handler Function @@ -13,18 +14,7 @@ import mysql from "serverless-mysql"; * @returns {Promise} */ (async () => { - const CONNECTION = 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", - }, - }); + const CONNECTION = grabDSQLConnection(); try { const result = await CONNECTION.query( diff --git a/package-shared/shell/test-external-server.ts b/package-shared/shell/test-external-server.ts index 1602624..66efa8a 100755 --- a/package-shared/shell/test-external-server.ts +++ b/package-shared/shell/test-external-server.ts @@ -1,17 +1,5 @@ require("dotenv").config({ path: "./.env" }); -import grabDbSSL from "../utils/backend/grabDbSSL"; -import mysql from "serverless-mysql"; - -const connection = mysql({ - config: { - host: process.env.DSQL_DB_HOST, - user: process.env.DB_USER, - password: process.env.DB_PASS, - // database: process.env.DSQL_DB_NAME, - charset: "utf8mb4", - ssl: grabDbSSL(), - }, -}); +import grabDSQLConnection from "../utils/grab-dsql-connection"; /** * # Main DB Handler Function @@ -25,13 +13,15 @@ const connection = mysql({ * @returns {Promise} */ (async () => { + const CONNECTION = grabDSQLConnection({ noDb: true }); + /** * Switch Database * * @description If a database is provided, switch to it */ try { - const result = await connection.query("SHOW DATABASES"); + const result = await CONNECTION.query("SHOW DATABASES"); const parsedResults = JSON.parse(JSON.stringify(result)); @@ -39,7 +29,7 @@ const connection = mysql({ } 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 cc59046..c137a23 100755 --- a/package-shared/shell/updateSSLUsers.ts +++ b/package-shared/shell/updateSSLUsers.ts @@ -1,5 +1,6 @@ require("dotenv").config({ path: "./../.env" }); import mysql from "serverless-mysql"; +import grabDSQLConnection from "../utils/grab-dsql-connection"; /** * # Main DB Handler Function @@ -13,18 +14,7 @@ import mysql from "serverless-mysql"; * @returns {Promise} */ (async () => { - const CONNECTION = 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", - }, - }); + const CONNECTION = grabDSQLConnection(); try { const result = await CONNECTION.query( diff --git a/package-shared/shell/utils/dbHandler.ts b/package-shared/shell/utils/dbHandler.ts index 82d7073..a9325d9 100755 --- a/package-shared/shell/utils/dbHandler.ts +++ b/package-shared/shell/utils/dbHandler.ts @@ -3,6 +3,7 @@ import path from "path"; import mysql from "serverless-mysql"; import grabDbSSL from "../../utils/backend/grabDbSSL"; +import grabDSQLConnection from "../../utils/grab-dsql-connection"; type Param = { query: string; @@ -17,18 +18,7 @@ export default async function dbHandler({ query, values, }: Param): Promise { - const CONNECTION = 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", - }, - }); + const CONNECTION = grabDSQLConnection(); let results; diff --git a/package-shared/utils/backend/global-db/DB_HANDLER.ts b/package-shared/utils/backend/global-db/DB_HANDLER.ts index b183af4..622ce6a 100644 --- a/package-shared/utils/backend/global-db/DB_HANDLER.ts +++ b/package-shared/utils/backend/global-db/DB_HANDLER.ts @@ -1,22 +1,12 @@ import mysql from "serverless-mysql"; +import grabDSQLConnection from "../../grab-dsql-connection"; /** * # 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 = 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", - }, - }); + const CONNECTION = grabDSQLConnection(); 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 0d86a1a..54ab5f8 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,5 +1,5 @@ -import mysql from "serverless-mysql"; import connDbHandler from "../../db/conn-db-handler"; +import grabDSQLConnection from "../../grab-dsql-connection"; type Param = { paradigm: "Full Access" | "FA" | "Read Only"; @@ -17,28 +17,8 @@ export default async function DSQL_USER_DB_HANDLER({ }: Param) { const CONNECTION = paradigm == "Read Only" - ? mysql({ - config: { - 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", - }, - }) - : mysql({ - config: { - 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", - }, - }); + ? grabDSQLConnection({ ro: true }) + : grabDSQLConnection({ fa: true }); try { return await connDbHandler(CONNECTION, queryString, queryValues); @@ -48,92 +28,4 @@ export default async function DSQL_USER_DB_HANDLER({ } finally { CONNECTION?.end(); } - - // try { - // return new Promise((resolve, reject) => { - // const fullAccess = paradigm?.match(/full.access|^fa$/i) - // ? true - // : false; - - // try { - // if (fullAccess) { - // DSQL_USER = mysql({ - // config: { - // host: process.env.DSQL_DB_HOST, - // user: process.env.DSQL_DB_FULL_ACCESS_USERNAME, - // password: process.env.DSQL_DB_FULL_ACCESS_PASSWORD, - // database: database, - // ssl: grabDbSSL(), - // }, - // }); - // } else { - // DSQL_USER = mysql({ - // config: { - // host: process.env.DSQL_DB_HOST, - // user: process.env.DSQL_DB_READ_ONLY_USERNAME, - // password: process.env.DSQL_DB_READ_ONLY_PASSWORD, - // database: database, - // ssl: grabDbSSL(), - // }, - // }); - // } - - // /** - // * ### Run query Function - // * @param {any} results - // */ - // function runQuery(results: any) { - // DSQL_USER.end(); - // resolve(JSON.parse(JSON.stringify(results))); - // } - - // /** - // * ### Query Error - // * @param {any} err - // */ - // function queryError(err: any) { - // DSQL_USER.end(); - // resolve({ - // error: err.message, - // queryStringGenerated: queryString, - // queryValuesGenerated: queryValues, - // sql: err.sql, - // }); - // } - - // if ( - // queryValues && - // Array.isArray(queryValues) && - // queryValues[0] - // ) { - // DSQL_USER.query(queryString, queryValues) - // .then(runQuery) - // .catch(queryError); - // } else { - // DSQL_USER.query(queryString) - // .then(runQuery) - // .catch(queryError); - // } - - // //////////////////////////////////////// - // } catch (/** @type {any} */ error: any) { - // //////////////////////////////////////// - - // fs.appendFileSync( - // "./.tmp/dbErrorLogs.txt", - // error.message + "\n" + Date() + "\n\n\n", - // "utf8" - // ); - - // resolve({ - // error: error.message, - // }); - // } - // }); - // } catch (/** @type {any} */ error: any) { - // return { - // success: false, - // error: error.message, - // }; - // } } 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 e008b66..3eafd0e 100644 --- a/package-shared/utils/backend/global-db/LOCAL_DB_HANDLER.ts +++ b/package-shared/utils/backend/global-db/LOCAL_DB_HANDLER.ts @@ -1,45 +1,24 @@ -import mysql from "serverless-mysql"; -import grabDbSSL from "../grabDbSSL"; +import grabDSQLConnection from "../../grab-dsql-connection"; /** * # DSQL user read-only DB handler */ export default async function LOCAL_DB_HANDLER(...args: any[]) { - const MASTER = 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", - ssl: grabDbSSL(), - }, - onConnect: () => { - console.log("Connection Successful!"); - }, - onConnectError: (/** @type {any} */ err: any) => { - console.log("Connection Error", err.message); - }, - onError: (/** @type {any} */ err: any) => { - console.log("Client Error", err.message); - }, - }); + const MASTER = grabDSQLConnection(); console.log("Querying ..."); try { const results = await MASTER.query(...args); - await MASTER.end(); return JSON.parse(JSON.stringify(results)); - } catch (/** @type {any} */ error: any) { + } catch (error: any) { console.log("DB Error =>", error.message); return { success: false, error: error.message, }; + } finally { + await MASTER?.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 8b4802d..020a539 100644 --- a/package-shared/utils/backend/global-db/NO_DB_HANDLER.ts +++ b/package-shared/utils/backend/global-db/NO_DB_HANDLER.ts @@ -1,22 +1,12 @@ import mysql from "serverless-mysql"; import grabDbSSL from "../grabDbSSL"; +import grabDSQLConnection from "../../grab-dsql-connection"; /** * # DSQL user read-only DB handler */ export default function NO_DB_HANDLER(...args: any[]) { - const CONNECTION = 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", - }, - }); + const CONNECTION = grabDSQLConnection(); try { return new Promise((resolve, reject) => { 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 d3ff7f1..1103078 100644 --- a/package-shared/utils/backend/global-db/ROOT_DB_HANDLER.ts +++ b/package-shared/utils/backend/global-db/ROOT_DB_HANDLER.ts @@ -1,21 +1,10 @@ -import mysql from "serverless-mysql"; +import grabDSQLConnection from "../../grab-dsql-connection"; /** * # Root DB handler */ export default function ROOT_DB_HANDLER(...args: any[]) { - const CONNECTION = 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", - }, - }); + const CONNECTION = grabDSQLConnection(); try { return new Promise((resolve, reject) => { diff --git a/package-shared/utils/grab-dsql-connection.ts b/package-shared/utils/grab-dsql-connection.ts new file mode 100644 index 0000000..947ba4c --- /dev/null +++ b/package-shared/utils/grab-dsql-connection.ts @@ -0,0 +1,71 @@ +import mysql, { ServerlessMysql } from "serverless-mysql"; + +type Param = { + /** + * Read Only? + */ + ro?: boolean; + /** + * Full Access? + */ + fa?: boolean; + /** + * Full Access? + */ + noDb?: boolean; +}; + +/** + * # Grab General CONNECTION for DSQL + */ +export default function grabDSQLConnection(param?: Param): ServerlessMysql { + if (param?.ro) { + return ( + DSQL_READ_ONLY_DB_CONN || + mysql({ + config: { + 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", + }, + }) + ); + } + + if (param?.fa) { + return ( + global.DSQL_FULL_ACCESS_DB_CONN || + mysql({ + config: { + 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", + }, + }) + ); + } + + return ( + 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: param?.noDb ? undefined : process.env.DSQL_DB_NAME, + port: process.env.DSQL_DB_PORT + ? Number(process.env.DSQL_DB_PORT) + : undefined, + charset: "utf8mb4", + }, + }) + ); +} diff --git a/package.json b/package.json index 336038d..1cb907e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@moduletrace/datasquirel", - "version": "3.4.9", + "version": "3.5.0", "description": "Cloud-based SQL data management tool", "main": "dist/index.js", "bin": { diff --git a/users/login-user.ts b/users/login-user.ts index 8eadcde..02c9d26 100644 --- a/users/login-user.ts +++ b/users/login-user.ts @@ -6,7 +6,10 @@ import grabHostNames from "../package-shared/utils/grab-host-names"; import apiLoginUser from "../package-shared/functions/api/users/api-login"; import getAuthCookieNames from "../package-shared/functions/backend/cookies/get-auth-cookie-names"; import { writeAuthFile } from "../package-shared/functions/backend/auth/write-auth-files"; -import { APILoginFunctionReturn } from "../package-shared/types"; +import { + APILoginFunctionReturn, + DSQL_DatabaseSchemaType, +} from "../package-shared/types"; type Param = { key?: string; @@ -122,10 +125,7 @@ export default async function loginUser({ DSQL_DB_NAME?.match(/./) && useLocal ) { - /** @type {import("../package-shared/types").DSQL_DatabaseSchemaType | undefined} */ - let dbSchema: - | import("../package-shared/types").DSQL_DatabaseSchemaType - | undefined; + let dbSchema: DSQL_DatabaseSchemaType | undefined; try { const localDbSchemaPath = path.resolve(