From b38ddc9f211920e254693bba45b867af796cffe4 Mon Sep 17 00:00:00 2001 From: Benjamin Toby Date: Sun, 6 Jul 2025 15:32:28 +0100 Subject: [PATCH] Updates --- bun.lockb | Bin 59870 -> 57523 bytes dist/index.d.ts | 17 ++- dist/index.js | 9 +- .../functions/backend/dbHandler.js | 1 - .../functions/backend/su-db-handler.js | 18 +-- .../functions/backend/user-db-handler.js | 18 +-- .../functions/backend/varDatabaseDbHandler.js | 1 - dist/package-shared/types/index.d.ts | 1 + .../utils/backend/global-db/DB_HANDLER.d.ts | 2 +- .../utils/backend/global-db/DB_HANDLER.js | 4 +- .../backend/global-db/LOCAL_DB_HANDLER.d.ts | 2 +- .../backend/global-db/LOCAL_DB_HANDLER.js | 4 +- .../backend/global-db/NO_DB_HANDLER.d.ts | 2 +- .../utils/backend/global-db/NO_DB_HANDLER.js | 4 +- .../backend/global-db/ROOT_DB_HANDLER.d.ts | 2 +- .../backend/global-db/ROOT_DB_HANDLER.js | 4 +- .../utils/backend/grabDbSSL.d.ts | 7 +- .../package-shared/utils/backend/grabDbSSL.js | 13 +- .../utils/backend/names/grab-dir-names.d.ts | 4 + .../utils/backend/names/grab-dir-names.js | 8 ++ .../grab-docker-stack-services-names.d.ts | 12 ++ .../names/grab-docker-stack-services-names.js | 27 +++++ .../backend/names/grab-ip-addresses.d.ts | 2 + .../utils/backend/names/grab-ip-addresses.js | 11 +- .../utils/db/conn-db-handler.d.ts | 9 +- .../utils/db/conn-db-handler.js | 27 +++-- .../utils/grab-dsql-connection.d.ts | 4 +- .../utils/grab-dsql-connection.js | 91 +++++++------- dist/package-shared/utils/setup-db.d.ts | 11 ++ dist/package-shared/utils/setup-db.js | 31 +++++ index.ts | 21 ++-- package-shared/functions/backend/dbHandler.ts | 1 - .../functions/backend/su-db-handler.ts | 18 +-- .../functions/backend/user-db-handler.ts | 18 +-- .../functions/backend/varDatabaseDbHandler.ts | 1 - package-shared/shell/checkDb.ts | 1 - package-shared/shell/updateSSLUsers.ts | 1 - package-shared/types/index.ts | 1 + .../utils/backend/global-db/DB_HANDLER.ts | 4 +- .../backend/global-db/LOCAL_DB_HANDLER.ts | 4 +- .../utils/backend/global-db/NO_DB_HANDLER.ts | 6 +- .../backend/global-db/ROOT_DB_HANDLER.ts | 4 +- package-shared/utils/backend/grabDbSSL.ts | 21 ++-- .../utils/backend/names/grab-dir-names.ts | 9 ++ .../names/grab-docker-stack-services-names.ts | 26 ++++ .../utils/backend/names/grab-ip-addresses.ts | 11 +- package-shared/utils/db/conn-db-handler.ts | 34 ++++-- package-shared/utils/grab-dsql-connection.ts | 111 +++++++++--------- package-shared/utils/setup-db.ts | 53 +++++++++ package.json | 7 +- 50 files changed, 453 insertions(+), 245 deletions(-) create mode 100644 dist/package-shared/utils/backend/names/grab-docker-stack-services-names.d.ts create mode 100644 dist/package-shared/utils/backend/names/grab-docker-stack-services-names.js create mode 100644 dist/package-shared/utils/setup-db.d.ts create mode 100644 dist/package-shared/utils/setup-db.js create mode 100644 package-shared/utils/backend/names/grab-docker-stack-services-names.ts create mode 100644 package-shared/utils/setup-db.ts diff --git a/bun.lockb b/bun.lockb index 251584e0344dff196ebf198562d17a75d6f6660b..dc7f18a486c82cbbb6c44001555515175ec952d1 100755 GIT binary patch delta 10564 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 Js=0FWe*oih)f4~# diff --git a/dist/index.d.ts b/dist/index.d.ts index 4fc808d..2922254 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -1,8 +1,8 @@ -import { ServerlessMysql } from "serverless-mysql"; +import type { Pool } from "mariadb"; declare global { - var DSQL_DB_CONN: ServerlessMysql | undefined; - var DSQL_READ_ONLY_DB_CONN: ServerlessMysql | undefined; - var DSQL_FULL_ACCESS_DB_CONN: ServerlessMysql | undefined; + var DSQL_DB_CONN: Pool | undefined; + var DSQL_READ_ONLY_DB_CONN: Pool | undefined; + var DSQL_FULL_ACCESS_DB_CONN: Pool | undefined; var DSQL_USE_LOCAL: boolean | undefined; var ERROR_CALLBACK: ErrorCallback | undefined; } @@ -37,6 +37,7 @@ import dsqlMethodCrud from "./package-shared/utils/data-fetching/method-crud"; import debugLog from "./package-shared/utils/logging/debug-log"; import { ErrorCallback } from "./package-shared/types"; import parseEnv from "./package-shared/utils/parse-env"; +import setup from "./package-shared/utils/setup-db"; /** * Main Export */ @@ -141,13 +142,17 @@ declare const datasquirel: { }; /** * Run Crud actions `get`, `insert`, `update`, `delete` - * @note *Requires global variables `DSQL_USE_LOCAL` and `DSQL_DB_CONN` + * @description *Requires global variables `DSQL_USE_LOCAL` and `DSQL_DB_CONN` */ crud: typeof dsqlCrud; /** * Run Crud based on request Methods `GET`, `POST`, `PUT`, `PATCH` - * @note *Requires global variables `DSQL_USE_LOCAL` and `DSQL_DB_CONN` + * @description *Requires global variables `DSQL_USE_LOCAL` and `DSQL_DB_CONN` */ methodCrud: typeof dsqlMethodCrud; + /** + * Setup Database + */ + setup: typeof setup; }; export default datasquirel; diff --git a/dist/index.js b/dist/index.js index 0422fcc..d3a1f4f 100644 --- a/dist/index.js +++ b/dist/index.js @@ -36,6 +36,7 @@ const debug_log_1 = __importDefault(require("./package-shared/utils/logging/debu const parse_env_1 = __importDefault(require("./package-shared/utils/parse-env")); const crud_2 = __importDefault(require("./package-shared/api/crud")); const media_1 = __importDefault(require("./package-shared/api/media")); +const setup_db_1 = __importDefault(require("./package-shared/utils/setup-db")); /** * User Functions Object */ @@ -106,13 +107,17 @@ const datasquirel = { }, /** * Run Crud actions `get`, `insert`, `update`, `delete` - * @note *Requires global variables `DSQL_USE_LOCAL` and `DSQL_DB_CONN` + * @description *Requires global variables `DSQL_USE_LOCAL` and `DSQL_DB_CONN` */ crud: crud_1.default, /** * Run Crud based on request Methods `GET`, `POST`, `PUT`, `PATCH` - * @note *Requires global variables `DSQL_USE_LOCAL` and `DSQL_DB_CONN` + * @description *Requires global variables `DSQL_USE_LOCAL` and `DSQL_DB_CONN` */ methodCrud: method_crud_1.default, + /** + * Setup Database + */ + setup: setup_db_1.default, }; exports.default = datasquirel; diff --git a/dist/package-shared/functions/backend/dbHandler.js b/dist/package-shared/functions/backend/dbHandler.js index a1d6b72..2d9f8d6 100644 --- a/dist/package-shared/functions/backend/dbHandler.js +++ b/dist/package-shared/functions/backend/dbHandler.js @@ -43,7 +43,6 @@ function dbHandler(_a) { if (!noErrorLogs) { console.log("ERROR in dbHandler =>", error.message); console.log(error); - console.log(CONNECTION.config()); const tmpFolder = path_1.default.resolve(process.cwd(), "./.tmp"); if (!fs_1.default.existsSync(tmpFolder)) fs_1.default.mkdirSync(tmpFolder, { recursive: true }); diff --git a/dist/package-shared/functions/backend/su-db-handler.js b/dist/package-shared/functions/backend/su-db-handler.js index fce632f..f4e38d3 100644 --- a/dist/package-shared/functions/backend/su-db-handler.js +++ b/dist/package-shared/functions/backend/su-db-handler.js @@ -13,18 +13,18 @@ var __importDefault = (this && this.__importDefault) || function (mod) { }; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = suDbHandler; -const serverless_mysql_1 = __importDefault(require("serverless-mysql")); +const grabDbSSL_1 = __importDefault(require("../../utils/backend/grabDbSSL")); const conn_db_handler_1 = __importDefault(require("../../utils/db/conn-db-handler")); +const mariadb_1 = __importDefault(require("mariadb")); function suDbHandler(_a) { return __awaiter(this, arguments, void 0, function* ({ query, database, user, 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: database, - charset: "utf8mb4", - }, + const connection = mariadb_1.default.createPool({ + 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)(), }); 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 9d22524..7093438 100644 --- a/dist/package-shared/functions/backend/user-db-handler.js +++ b/dist/package-shared/functions/backend/user-db-handler.js @@ -13,20 +13,20 @@ var __importDefault = (this && this.__importDefault) || function (mod) { }; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = userDbHandler; -const serverless_mysql_1 = __importDefault(require("serverless-mysql")); +const mariadb_1 = __importDefault(require("mariadb")); const grab_mariadb_main_user_for_user_1 = __importDefault(require("./grab-mariadb-main-user-for-user")); const conn_db_handler_1 = __importDefault(require("../../utils/db/conn-db-handler")); +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 = (0, serverless_mysql_1.default)({ - config: { - host, - user: username, - password: password, - database: database, - charset: "utf8mb4", - }, + const connection = mariadb_1.default.createPool({ + host, + user: username, + password: password, + database: database, + charset: "utf8mb4", + ssl: (0, grabDbSSL_1.default)(), }); 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 2eface8..09c164f 100644 --- a/dist/package-shared/functions/backend/varDatabaseDbHandler.js +++ b/dist/package-shared/functions/backend/varDatabaseDbHandler.js @@ -31,7 +31,6 @@ function varDatabaseDbHandler(_a) { if (debug) { console.log(`varDatabaseDbHandler:query:`, queryString); console.log(`varDatabaseDbHandler:values:`, queryValuesArray); - console.log(`varDatabaseDbHandler:CONNECTION:`, CONNECTION.getConfig()); } let results = yield (0, conn_db_handler_1.default)(CONNECTION, queryString, queryValuesArray); if (debug) { diff --git a/dist/package-shared/types/index.d.ts b/dist/package-shared/types/index.d.ts index 734f046..7cad36e 100644 --- a/dist/package-shared/types/index.d.ts +++ b/dist/package-shared/types/index.d.ts @@ -1714,6 +1714,7 @@ export type SiteConfigMariadbServer = { root: SiteConfigMariadbServerUser; replication: SiteConfigMariadbServerUser; }; + ssl_dir?: string; }; export type SiteConfigMariadbServerUser = { user: string; diff --git a/dist/package-shared/utils/backend/global-db/DB_HANDLER.d.ts b/dist/package-shared/utils/backend/global-db/DB_HANDLER.d.ts index fe0f49b..7978496 100644 --- a/dist/package-shared/utils/backend/global-db/DB_HANDLER.d.ts +++ b/dist/package-shared/utils/backend/global-db/DB_HANDLER.d.ts @@ -2,4 +2,4 @@ * # DSQL user read-only DB handler * @requires DSQL_DB_CONN - Gobal Variable for Datasquirel Database */ -export default function DB_HANDLER(...args: any[]): Promise; +export default function DB_HANDLER(query: string, values?: any[]): Promise; 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 d098d54..18ff733 100644 --- a/dist/package-shared/utils/backend/global-db/DB_HANDLER.js +++ b/dist/package-shared/utils/backend/global-db/DB_HANDLER.js @@ -18,14 +18,14 @@ const grab_dsql_connection_1 = __importDefault(require("../../grab-dsql-connecti * # DSQL user read-only DB handler * @requires DSQL_DB_CONN - Gobal Variable for Datasquirel Database */ -function DB_HANDLER(...args) { +function DB_HANDLER(query, values) { return __awaiter(this, void 0, void 0, function* () { var _a; const CONNECTION = (0, grab_dsql_connection_1.default)(); try { if (!CONNECTION) throw new Error("No Connection provided to DB_HANDLER function!"); - const results = yield CONNECTION.query(...args); + const results = yield CONNECTION.query(query, values); return JSON.parse(JSON.stringify(results)); } catch (error) { diff --git a/dist/package-shared/utils/backend/global-db/LOCAL_DB_HANDLER.d.ts b/dist/package-shared/utils/backend/global-db/LOCAL_DB_HANDLER.d.ts index 5914fda..51fcb80 100644 --- a/dist/package-shared/utils/backend/global-db/LOCAL_DB_HANDLER.d.ts +++ b/dist/package-shared/utils/backend/global-db/LOCAL_DB_HANDLER.d.ts @@ -1,4 +1,4 @@ /** * # DSQL user read-only DB handler */ -export default function LOCAL_DB_HANDLER(...args: any[]): Promise; +export default function LOCAL_DB_HANDLER(query: string, values?: any[]): Promise; 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 61951bc..c93dfba 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 @@ -17,12 +17,12 @@ const grab_dsql_connection_1 = __importDefault(require("../../grab-dsql-connecti /** * # DSQL user read-only DB handler */ -function LOCAL_DB_HANDLER(...args) { +function LOCAL_DB_HANDLER(query, values) { return __awaiter(this, void 0, void 0, function* () { var _a; const MASTER = (0, grab_dsql_connection_1.default)(); try { - const results = yield MASTER.query(...args); + const results = yield MASTER.query(query, values); return JSON.parse(JSON.stringify(results)); } catch (error) { 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 f40dff3..3ec0e2f 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,7 @@ /** * # DSQL user read-only DB handler */ -export default function NO_DB_HANDLER(...args: any[]): Promise | { +export default function NO_DB_HANDLER(query: string, values?: any[]): Promise | { success: boolean; error: any; }; 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 497965e..54ac885 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 @@ -8,12 +8,12 @@ const grab_dsql_connection_1 = __importDefault(require("../../grab-dsql-connecti /** * # DSQL user read-only DB handler */ -function NO_DB_HANDLER(...args) { +function NO_DB_HANDLER(query, values) { var _a; const CONNECTION = (0, grab_dsql_connection_1.default)(); try { return new Promise((resolve, reject) => { - CONNECTION.query(...args) + CONNECTION.query(query, values) .then((results) => { CONNECTION.end(); resolve(JSON.parse(JSON.stringify(results))); 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 index e671f45..ab333ba 100644 --- 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 @@ -1,7 +1,7 @@ /** * # Root DB handler */ -export default function ROOT_DB_HANDLER(...args: any[]): Promise | { +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 index a0fcba2..33e033e 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 @@ -8,12 +8,12 @@ const grab_dsql_connection_1 = __importDefault(require("../../grab-dsql-connecti /** * # Root DB handler */ -function ROOT_DB_HANDLER(...args) { +function ROOT_DB_HANDLER(query, values) { var _a; const CONNECTION = (0, grab_dsql_connection_1.default)(); try { return new Promise((resolve, reject) => { - CONNECTION.query(...args) + CONNECTION.query(query, values) .then((results) => { CONNECTION.end(); resolve(JSON.parse(JSON.stringify(results))); diff --git a/dist/package-shared/utils/backend/grabDbSSL.d.ts b/dist/package-shared/utils/backend/grabDbSSL.d.ts index 4ca0dd9..d507388 100644 --- a/dist/package-shared/utils/backend/grabDbSSL.d.ts +++ b/dist/package-shared/utils/backend/grabDbSSL.d.ts @@ -1,8 +1,7 @@ -type Return = string | (import("tls").SecureContextOptions & { - rejectUnauthorized?: boolean | undefined; -}) | undefined; +import type { ConnectionConfig } from "mariadb"; +type Return = ConnectionConfig["ssl"] | undefined; /** - * # Grall SSL + * # Grab SSL */ export default function grabDbSSL(): Return; export {}; diff --git a/dist/package-shared/utils/backend/grabDbSSL.js b/dist/package-shared/utils/backend/grabDbSSL.js index 2663703..7c5c115 100644 --- a/dist/package-shared/utils/backend/grabDbSSL.js +++ b/dist/package-shared/utils/backend/grabDbSSL.js @@ -5,23 +5,22 @@ var __importDefault = (this && this.__importDefault) || function (mod) { Object.defineProperty(exports, "__esModule", { value: true }); exports.default = grabDbSSL; const fs_1 = __importDefault(require("fs")); +const grab_dir_names_1 = __importDefault(require("./names/grab-dir-names")); /** - * # Grall SSL + * # Grab SSL */ function grabDbSSL() { - const SSL_DIR = process.env.DSQL_SSL_DIR; - if (!(SSL_DIR === null || SSL_DIR === void 0 ? void 0 : SSL_DIR.match(/./))) { + const { maxscaleSSLDir } = (0, grab_dir_names_1.default)(); + if (!(maxscaleSSLDir === null || maxscaleSSLDir === void 0 ? void 0 : maxscaleSSLDir.match(/./))) { return undefined; } - const caFilePath = `${SSL_DIR}/ca-cert.pem`; + const caFilePath = `${maxscaleSSLDir}/ca-cert.pem`; if (!fs_1.default.existsSync(caFilePath)) { console.log(`${caFilePath} does not exist`); return undefined; } return { - ca: fs_1.default.readFileSync(`${SSL_DIR}/ca-cert.pem`), - // key: fs.readFileSync(`${SSL_DIR}/client-key.pem`), - // cert: fs.readFileSync(`${SSL_DIR}/client-cert.pem`), + ca: fs_1.default.readFileSync(`${maxscaleSSLDir}/ca-cert.pem`), rejectUnauthorized: false, }; } diff --git a/dist/package-shared/utils/backend/names/grab-dir-names.d.ts b/dist/package-shared/utils/backend/names/grab-dir-names.d.ts index 2bf99fd..1c2c6be 100644 --- a/dist/package-shared/utils/backend/names/grab-dir-names.d.ts +++ b/dist/package-shared/utils/backend/names/grab-dir-names.d.ts @@ -65,5 +65,9 @@ export default function grabDirNames(param?: Param): { sqlBackupDirName: string; schemasBackupDirName: string; userMainShemaJSONFilePath: string | undefined; + maxscaleSSLDir: string; + mainDBSSLDir: string; + replica1DBSSLDir: string; + replica2DBSSLDir: string; }; export {}; diff --git a/dist/package-shared/utils/backend/names/grab-dir-names.js b/dist/package-shared/utils/backend/names/grab-dir-names.js index 14a9080..843032e 100644 --- a/dist/package-shared/utils/backend/names/grab-dir-names.js +++ b/dist/package-shared/utils/backend/names/grab-dir-names.js @@ -20,6 +20,10 @@ function grabDirNames(param) { const publicSSLDir = path_1.default.join(publicDir, "documents", "ssl"); const appSSLDir = path_1.default.join(appDir, "ssl"); const mainSSLDir = path_1.default.join(DATA_DIR, "ssl"); + const maxscaleSSLDir = path_1.default.join(mainSSLDir, "maxscale"); + const mainDBSSLDir = path_1.default.join(mainSSLDir, "main"); + const replica1DBSSLDir = path_1.default.join(mainSSLDir, "replica-1"); + const replica2DBSSLDir = path_1.default.join(mainSSLDir, "replica-2"); const privateDataDir = path_1.default.join(DATA_DIR, "private"); /** * # DB Dir names @@ -175,5 +179,9 @@ function grabDirNames(param) { sqlBackupDirName, schemasBackupDirName, userMainShemaJSONFilePath, + maxscaleSSLDir, + mainDBSSLDir, + replica1DBSSLDir, + replica2DBSSLDir, }; } diff --git a/dist/package-shared/utils/backend/names/grab-docker-stack-services-names.d.ts b/dist/package-shared/utils/backend/names/grab-docker-stack-services-names.d.ts new file mode 100644 index 0000000..8f353dc --- /dev/null +++ b/dist/package-shared/utils/backend/names/grab-docker-stack-services-names.d.ts @@ -0,0 +1,12 @@ +export default function grabDockerStackServicesNames(): { + deploymentName: string; + maxScaleServiceName: string; + dbServiceName: string; + dbCronServiceName: string; + postDbSetupServiceName: string; + webAppServiceName: string; + webAppCronServiceName: string; + webAppPostDbSetupServiceName: string; + dbReplica1ServiceName: string; + dbReplica2ServiceName: string; +}; diff --git a/dist/package-shared/utils/backend/names/grab-docker-stack-services-names.js b/dist/package-shared/utils/backend/names/grab-docker-stack-services-names.js new file mode 100644 index 0000000..f23ac01 --- /dev/null +++ b/dist/package-shared/utils/backend/names/grab-docker-stack-services-names.js @@ -0,0 +1,27 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = grabDockerStackServicesNames; +function grabDockerStackServicesNames() { + const deploymentName = process.env.DSQL_DEPLOYMENT_NAME || "dsql"; + const maxScaleServiceName = `${deploymentName}-dsql-maxscale`; + const dbServiceName = `${deploymentName}-dsql-db`; + const dbCronServiceName = `${deploymentName}-dsql-db-cron`; + const postDbSetupServiceName = `${deploymentName}-dsql-post-db-setup`; + const webAppServiceName = `${deploymentName}-dsql-web-app`; + const webAppCronServiceName = `${deploymentName}-dsql-web-app-cron`; + const webAppPostDbSetupServiceName = `${deploymentName}-dsql-web-app-post-db-setup`; + const dbReplica1ServiceName = `${deploymentName}-dsql-db-replica-1`; + const dbReplica2ServiceName = `${deploymentName}-dsql-db-replica-2`; + return { + deploymentName, + maxScaleServiceName, + dbServiceName, + dbCronServiceName, + postDbSetupServiceName, + webAppServiceName, + webAppCronServiceName, + webAppPostDbSetupServiceName, + dbReplica1ServiceName, + dbReplica2ServiceName, + }; +} diff --git a/dist/package-shared/utils/backend/names/grab-ip-addresses.d.ts b/dist/package-shared/utils/backend/names/grab-ip-addresses.d.ts index bd1ffa0..65658fb 100644 --- a/dist/package-shared/utils/backend/names/grab-ip-addresses.d.ts +++ b/dist/package-shared/utils/backend/names/grab-ip-addresses.d.ts @@ -2,5 +2,7 @@ export default function grabIPAddresses(): { webAppIP: string; appCronIP: string; maxScaleIP: string; + mainDBIP: string; + localHostIP: string; globalIPPrefix: string; }; diff --git a/dist/package-shared/utils/backend/names/grab-ip-addresses.js b/dist/package-shared/utils/backend/names/grab-ip-addresses.js index 0da7d99..65c6c50 100644 --- a/dist/package-shared/utils/backend/names/grab-ip-addresses.js +++ b/dist/package-shared/utils/backend/names/grab-ip-addresses.js @@ -11,5 +11,14 @@ function grabIPAddresses() { const webAppIP = `${globalIPPrefix}.${web}`; const appCronIP = `${globalIPPrefix}.${cron}`; const maxScaleIP = `${globalIPPrefix}.${maxscale}`; - return { webAppIP, appCronIP, maxScaleIP, globalIPPrefix }; + const mainDBIP = `${globalIPPrefix}.${db}`; + const localHostIP = `${globalIPPrefix}.1`; + return { + webAppIP, + appCronIP, + maxScaleIP, + mainDBIP, + localHostIP, + globalIPPrefix, + }; } 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 a302e51..5e50d18 100644 --- a/dist/package-shared/utils/db/conn-db-handler.d.ts +++ b/dist/package-shared/utils/db/conn-db-handler.d.ts @@ -1,12 +1,13 @@ -import { ServerlessMysql } from "serverless-mysql"; import { DSQLErrorObject } from "../../types"; +import type { ConnectionConfig, Pool } from "mariadb"; export type ConnDBHandlerQueryObject = { query: string; values?: (string | number | undefined)[]; }; -type Return = ReturnType | null | { +type Return = ReturnType | ReturnType[] | null | { error?: string; errors?: DSQLErrorObject[]; + config?: ConnectionConfig; }; /** * # Run Query From MySQL Connection @@ -15,9 +16,9 @@ type Return = ReturnType | null | { */ export default function connDbHandler( /** - * ServerlessMySQL Connection Object + * MariaDB Connection Pool Object */ -conn?: ServerlessMysql, +connPool?: Pool, /** * 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 96c13bf..19cea5c 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( /** - * ServerlessMySQL Connection Object + * MariaDB Connection Pool Object */ -conn, +connPool, /** * String Or `ConnDBHandlerQueryObject` Array */ @@ -35,13 +35,13 @@ values, debug) { return __awaiter(this, void 0, void 0, function* () { var _a, _b; try { - if (!conn) + if (!connPool) throw new Error("No Connection Found!"); if (!query) throw new Error("Query String Required!"); let queryErrorArray = []; if (typeof query == "string") { - const res = yield conn.query(trimQuery(query), values); + const res = yield connPool.query(trimQuery(query), values); if (debug) { (0, debug_log_1.default)({ log: res, @@ -49,7 +49,10 @@ values, debug) { label: "res", }); } - return JSON.parse(JSON.stringify(res)); + if (Array.isArray(res)) { + return Array.from(res); + } + return res; } else if (typeof query == "object") { const resArray = []; @@ -59,7 +62,7 @@ values, debug) { const queryObj = query[i]; currentQueryError.sql = queryObj.query; currentQueryError.sqlValues = queryObj.values; - const queryObjRes = yield conn.query(trimQuery(queryObj.query), queryObj.values); + const queryObjRes = yield connPool.query(trimQuery(queryObj.query), queryObj.values); if (debug) { (0, debug_log_1.default)({ log: queryObjRes, @@ -67,7 +70,12 @@ values, debug) { label: "queryObjRes", }); } - resArray.push(JSON.parse(JSON.stringify(queryObjRes))); + if (Array.isArray(queryObjRes)) { + resArray.push(Array.from(queryObjRes)); + } + else { + resArray.push(queryObjRes); + } } catch (error) { (_a = global.ERROR_CALLBACK) === null || _a === void 0 ? void 0 : _a.call(global, `Connection DB Handler Query Error`, error); @@ -105,13 +113,14 @@ values, debug) { } return { error: `Connection DB Handler Error: ${error.message}`, + // config: conn, }; } finally { - conn === null || conn === void 0 ? void 0 : conn.end(); + connPool === null || connPool === void 0 ? void 0 : connPool.end(); } }); } function trimQuery(query) { - return query.replace(/\n/gm, "").replace(/ {2,}/g, "").trim(); + return query.replace(/\n/gm, " ").replace(/ {2,}/g, " ").trim(); } diff --git a/dist/package-shared/utils/grab-dsql-connection.d.ts b/dist/package-shared/utils/grab-dsql-connection.d.ts index 225f264..cef0c86 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 { ServerlessMysql } from "serverless-mysql"; +import { Pool } from "mariadb"; type Param = { /** * Read Only? @@ -20,5 +20,5 @@ type Param = { /** * # Grab General CONNECTION for DSQL */ -export default function grabDSQLConnection(param?: Param): ServerlessMysql; +export default function grabDSQLConnection(param?: Param): Pool; export {}; diff --git a/dist/package-shared/utils/grab-dsql-connection.js b/dist/package-shared/utils/grab-dsql-connection.js index bcec92a..10b2732 100644 --- a/dist/package-shared/utils/grab-dsql-connection.js +++ b/dist/package-shared/utils/grab-dsql-connection.js @@ -4,59 +4,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) { }; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = grabDSQLConnection; -const serverless_mysql_1 = __importDefault(require("serverless-mysql")); +const mariadb_1 = __importDefault(require("mariadb")); +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 (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", - }, - })); - } - if (param === null || param === void 0 ? void 0 : param.ro) { - return (global.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: { + mariadb_1.default.createPool({ host: process.env.DSQL_DB_HOST, user: process.env.DSQL_DB_USERNAME, password: process.env.DSQL_DB_PASSWORD, @@ -65,6 +21,45 @@ function grabDSQLConnection(param) { ? Number(process.env.DSQL_DB_PORT) : 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)(), })); } diff --git a/dist/package-shared/utils/setup-db.d.ts b/dist/package-shared/utils/setup-db.d.ts new file mode 100644 index 0000000..27e792b --- /dev/null +++ b/dist/package-shared/utils/setup-db.d.ts @@ -0,0 +1,11 @@ +import mariadb, { ConnectionConfig } from "mariadb"; +type Params = { + useLocal?: boolean; + dbConfig?: ConnectionConfig; + ssl?: boolean; + connectionLimit?: number; +}; +export default function setupDSQLDb({ useLocal, dbConfig, ssl, connectionLimit, }: Params): { + pool: mariadb.Pool; +}; +export {}; diff --git a/dist/package-shared/utils/setup-db.js b/dist/package-shared/utils/setup-db.js new file mode 100644 index 0000000..eea4bdf --- /dev/null +++ b/dist/package-shared/utils/setup-db.js @@ -0,0 +1,31 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +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, + }; +} diff --git a/index.ts b/index.ts index c415f08..3b84774 100644 --- a/index.ts +++ b/index.ts @@ -1,9 +1,9 @@ -import { ServerlessMysql } from "serverless-mysql"; +import type { Pool } from "mariadb"; declare global { - var DSQL_DB_CONN: ServerlessMysql | undefined; - var DSQL_READ_ONLY_DB_CONN: ServerlessMysql | undefined; - var DSQL_FULL_ACCESS_DB_CONN: ServerlessMysql | undefined; + var DSQL_DB_CONN: Pool | undefined; + var DSQL_READ_ONLY_DB_CONN: Pool | undefined; + var DSQL_FULL_ACCESS_DB_CONN: Pool | undefined; var DSQL_USE_LOCAL: boolean | undefined; var ERROR_CALLBACK: ErrorCallback | undefined; } @@ -12,10 +12,6 @@ import get from "./package-shared/actions/get"; import post from "./package-shared/actions/post"; import getSchema from "./package-shared/actions/get-schema"; -import uploadImage from "./package-shared/actions/upload-image"; -import uploadFile from "./package-shared/actions/upload-file"; -import deleteFile from "./package-shared/actions/delete-file"; - import createUser from "./package-shared/actions/users/add-user"; import updateUser from "./package-shared/actions/users/update-user"; import loginUser from "./package-shared/actions/users/login-user"; @@ -50,6 +46,7 @@ import { ErrorCallback } from "./package-shared/types"; import parseEnv from "./package-shared/utils/parse-env"; import crud from "./package-shared/api/crud"; import media from "./package-shared/api/media"; +import setup from "./package-shared/utils/setup-db"; /** * User Functions Object @@ -124,14 +121,18 @@ const datasquirel = { }, /** * Run Crud actions `get`, `insert`, `update`, `delete` - * @note *Requires global variables `DSQL_USE_LOCAL` and `DSQL_DB_CONN` + * @description *Requires global variables `DSQL_USE_LOCAL` and `DSQL_DB_CONN` */ crud: dsqlCrud, /** * Run Crud based on request Methods `GET`, `POST`, `PUT`, `PATCH` - * @note *Requires global variables `DSQL_USE_LOCAL` and `DSQL_DB_CONN` + * @description *Requires global variables `DSQL_USE_LOCAL` and `DSQL_DB_CONN` */ methodCrud: dsqlMethodCrud, + /** + * Setup Database + */ + setup, }; export default datasquirel; diff --git a/package-shared/functions/backend/dbHandler.ts b/package-shared/functions/backend/dbHandler.ts index 21c117a..f582c46 100644 --- a/package-shared/functions/backend/dbHandler.ts +++ b/package-shared/functions/backend/dbHandler.ts @@ -39,7 +39,6 @@ export default async function dbHandler({ if (!noErrorLogs) { console.log("ERROR in dbHandler =>", error.message); console.log(error); - console.log(CONNECTION.config()); const tmpFolder = path.resolve(process.cwd(), "./.tmp"); diff --git a/package-shared/functions/backend/su-db-handler.ts b/package-shared/functions/backend/su-db-handler.ts index a3a4584..3eeceab 100644 --- a/package-shared/functions/backend/su-db-handler.ts +++ b/package-shared/functions/backend/su-db-handler.ts @@ -1,6 +1,7 @@ -import mysql from "serverless-mysql"; import { UserType } from "../../types"; +import grabDbSSL from "../../utils/backend/grabDbSSL"; import connDbHandler from "../../utils/db/conn-db-handler"; +import mariadb from "mariadb"; type Params = { query?: string; @@ -15,14 +16,13 @@ export default async function suDbHandler({ user, values, }: Params) { - const connection = mysql({ - config: { - host: process.env.DSQL_DB_HOST, - user: process.env.DSQL_DB_USERNAME, - password: process.env.DSQL_DB_PASSWORD, - database: database, - charset: "utf8mb4", - }, + 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(), }); const results = await connDbHandler(connection, query); diff --git a/package-shared/functions/backend/user-db-handler.ts b/package-shared/functions/backend/user-db-handler.ts index 6381fb2..28e515f 100644 --- a/package-shared/functions/backend/user-db-handler.ts +++ b/package-shared/functions/backend/user-db-handler.ts @@ -1,7 +1,8 @@ -import mysql from "serverless-mysql"; +import mariadb from "mariadb"; import { DSQL_TableSchemaType, UserType } from "../../types"; import grabMariadbMainUserForUser from "./grab-mariadb-main-user-for-user"; import connDbHandler from "../../utils/db/conn-db-handler"; +import grabDbSSL from "../../utils/backend/grabDbSSL"; type Params = { query?: string; @@ -23,14 +24,13 @@ export default async function userDbHandler({ const { fullName, host, username, password } = await grabMariadbMainUserForUser({ user }); - const connection = mysql({ - config: { - host, - user: username, - password: password, - database: database, - charset: "utf8mb4", - }, + const connection = mariadb.createPool({ + host, + user: username, + password: password, + database: database, + charset: "utf8mb4", + ssl: grabDbSSL(), }); const results = await connDbHandler(connection, query); diff --git a/package-shared/functions/backend/varDatabaseDbHandler.ts b/package-shared/functions/backend/varDatabaseDbHandler.ts index 758b5c3..2d44e7a 100644 --- a/package-shared/functions/backend/varDatabaseDbHandler.ts +++ b/package-shared/functions/backend/varDatabaseDbHandler.ts @@ -29,7 +29,6 @@ export default async function varDatabaseDbHandler({ if (debug) { console.log(`varDatabaseDbHandler:query:`, queryString); console.log(`varDatabaseDbHandler:values:`, queryValuesArray); - console.log(`varDatabaseDbHandler:CONNECTION:`, CONNECTION.getConfig()); } let results = await connDbHandler( diff --git a/package-shared/shell/checkDb.ts b/package-shared/shell/checkDb.ts index 06a255a..a066f7c 100644 --- a/package-shared/shell/checkDb.ts +++ b/package-shared/shell/checkDb.ts @@ -1,5 +1,4 @@ require("dotenv").config({ path: "./../.env" }); -import mysql from "serverless-mysql"; import grabDSQLConnection from "../utils/grab-dsql-connection"; /** diff --git a/package-shared/shell/updateSSLUsers.ts b/package-shared/shell/updateSSLUsers.ts index d5e4043..bd98d05 100644 --- a/package-shared/shell/updateSSLUsers.ts +++ b/package-shared/shell/updateSSLUsers.ts @@ -1,5 +1,4 @@ require("dotenv").config({ path: "./../.env" }); -import mysql from "serverless-mysql"; import grabDSQLConnection from "../utils/grab-dsql-connection"; import grabSQLKeyName from "../utils/grab-sql-key-name"; diff --git a/package-shared/types/index.ts b/package-shared/types/index.ts index 9e98143..eb01c77 100644 --- a/package-shared/types/index.ts +++ b/package-shared/types/index.ts @@ -2135,6 +2135,7 @@ export type SiteConfigMariadbServer = { root: SiteConfigMariadbServerUser; replication: SiteConfigMariadbServerUser; }; + ssl_dir?: string; }; export type SiteConfigMariadbServerUser = { diff --git a/package-shared/utils/backend/global-db/DB_HANDLER.ts b/package-shared/utils/backend/global-db/DB_HANDLER.ts index b04ad06..e560c06 100644 --- a/package-shared/utils/backend/global-db/DB_HANDLER.ts +++ b/package-shared/utils/backend/global-db/DB_HANDLER.ts @@ -4,14 +4,14 @@ 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[]) { +export default async function DB_HANDLER(query: string, values?: any[]) { const CONNECTION = grabDSQLConnection(); try { if (!CONNECTION) throw new Error("No Connection provided to DB_HANDLER function!"); - const results = await CONNECTION.query(...args); + const results = await CONNECTION.query(query, values); return JSON.parse(JSON.stringify(results)); } catch (error: any) { 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 31bc14b..c979a9c 100644 --- a/package-shared/utils/backend/global-db/LOCAL_DB_HANDLER.ts +++ b/package-shared/utils/backend/global-db/LOCAL_DB_HANDLER.ts @@ -3,11 +3,11 @@ import grabDSQLConnection from "../../grab-dsql-connection"; /** * # DSQL user read-only DB handler */ -export default async function LOCAL_DB_HANDLER(...args: any[]) { +export default async function LOCAL_DB_HANDLER(query: string, values?: any[]) { const MASTER = grabDSQLConnection(); try { - const results = await MASTER.query(...args); + const results = await MASTER.query(query, values); return JSON.parse(JSON.stringify(results)); } catch (error: any) { 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 941299a..c149cd7 100644 --- a/package-shared/utils/backend/global-db/NO_DB_HANDLER.ts +++ b/package-shared/utils/backend/global-db/NO_DB_HANDLER.ts @@ -1,16 +1,14 @@ -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[]) { +export default function NO_DB_HANDLER(query: string, values?: any[]) { const CONNECTION = grabDSQLConnection(); try { return new Promise((resolve, reject) => { - CONNECTION.query(...args) + CONNECTION.query(query, values) .then((results) => { CONNECTION.end(); resolve(JSON.parse(JSON.stringify(results))); 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 ff153a9..da4953c 100644 --- a/package-shared/utils/backend/global-db/ROOT_DB_HANDLER.ts +++ b/package-shared/utils/backend/global-db/ROOT_DB_HANDLER.ts @@ -3,12 +3,12 @@ import grabDSQLConnection from "../../grab-dsql-connection"; /** * # Root DB handler */ -export default function ROOT_DB_HANDLER(...args: any[]) { +export default function ROOT_DB_HANDLER(query: string, values?: any[]) { const CONNECTION = grabDSQLConnection(); try { return new Promise((resolve, reject) => { - CONNECTION.query(...args) + CONNECTION.query(query, values) .then((results) => { CONNECTION.end(); resolve(JSON.parse(JSON.stringify(results))); diff --git a/package-shared/utils/backend/grabDbSSL.ts b/package-shared/utils/backend/grabDbSSL.ts index f0d8b06..04667dc 100644 --- a/package-shared/utils/backend/grabDbSSL.ts +++ b/package-shared/utils/backend/grabDbSSL.ts @@ -1,22 +1,19 @@ import fs from "fs"; +import grabDirNames from "./names/grab-dir-names"; +import type { ConnectionConfig } from "mariadb"; -type Return = - | string - | (import("tls").SecureContextOptions & { - rejectUnauthorized?: boolean | undefined; - }) - | undefined; +type Return = ConnectionConfig["ssl"] | undefined; /** - * # Grall SSL + * # Grab SSL */ export default function grabDbSSL(): Return { - const SSL_DIR = process.env.DSQL_SSL_DIR; - if (!SSL_DIR?.match(/./)) { + const { maxscaleSSLDir } = grabDirNames(); + if (!maxscaleSSLDir?.match(/./)) { return undefined; } - const caFilePath = `${SSL_DIR}/ca-cert.pem`; + const caFilePath = `${maxscaleSSLDir}/ca-cert.pem`; if (!fs.existsSync(caFilePath)) { console.log(`${caFilePath} does not exist`); @@ -24,9 +21,7 @@ export default function grabDbSSL(): Return { } return { - ca: fs.readFileSync(`${SSL_DIR}/ca-cert.pem`), - // key: fs.readFileSync(`${SSL_DIR}/client-key.pem`), - // cert: fs.readFileSync(`${SSL_DIR}/client-cert.pem`), + ca: fs.readFileSync(`${maxscaleSSLDir}/ca-cert.pem`), rejectUnauthorized: false, }; } diff --git a/package-shared/utils/backend/names/grab-dir-names.ts b/package-shared/utils/backend/names/grab-dir-names.ts index 32c3566..fe7339d 100644 --- a/package-shared/utils/backend/names/grab-dir-names.ts +++ b/package-shared/utils/backend/names/grab-dir-names.ts @@ -27,6 +27,11 @@ export default function grabDirNames(param?: Param) { const appSSLDir = path.join(appDir, "ssl"); const mainSSLDir = path.join(DATA_DIR, "ssl"); + const maxscaleSSLDir = path.join(mainSSLDir, "maxscale"); + const mainDBSSLDir = path.join(mainSSLDir, "main"); + const replica1DBSSLDir = path.join(mainSSLDir, "replica-1"); + const replica2DBSSLDir = path.join(mainSSLDir, "replica-2"); + const privateDataDir = path.join(DATA_DIR, "private"); /** @@ -228,5 +233,9 @@ export default function grabDirNames(param?: Param) { sqlBackupDirName, schemasBackupDirName, userMainShemaJSONFilePath, + maxscaleSSLDir, + mainDBSSLDir, + replica1DBSSLDir, + replica2DBSSLDir, }; } diff --git a/package-shared/utils/backend/names/grab-docker-stack-services-names.ts b/package-shared/utils/backend/names/grab-docker-stack-services-names.ts new file mode 100644 index 0000000..b45ad28 --- /dev/null +++ b/package-shared/utils/backend/names/grab-docker-stack-services-names.ts @@ -0,0 +1,26 @@ +export default function grabDockerStackServicesNames() { + const deploymentName = process.env.DSQL_DEPLOYMENT_NAME || "dsql"; + + const maxScaleServiceName = `${deploymentName}-dsql-maxscale`; + const dbServiceName = `${deploymentName}-dsql-db`; + const dbCronServiceName = `${deploymentName}-dsql-db-cron`; + const postDbSetupServiceName = `${deploymentName}-dsql-post-db-setup`; + const webAppServiceName = `${deploymentName}-dsql-web-app`; + const webAppCronServiceName = `${deploymentName}-dsql-web-app-cron`; + const webAppPostDbSetupServiceName = `${deploymentName}-dsql-web-app-post-db-setup`; + const dbReplica1ServiceName = `${deploymentName}-dsql-db-replica-1`; + const dbReplica2ServiceName = `${deploymentName}-dsql-db-replica-2`; + + return { + deploymentName, + maxScaleServiceName, + dbServiceName, + dbCronServiceName, + postDbSetupServiceName, + webAppServiceName, + webAppCronServiceName, + webAppPostDbSetupServiceName, + dbReplica1ServiceName, + dbReplica2ServiceName, + }; +} diff --git a/package-shared/utils/backend/names/grab-ip-addresses.ts b/package-shared/utils/backend/names/grab-ip-addresses.ts index a19ba60..8e869ec 100644 --- a/package-shared/utils/backend/names/grab-ip-addresses.ts +++ b/package-shared/utils/backend/names/grab-ip-addresses.ts @@ -8,6 +8,15 @@ export default function grabIPAddresses() { const webAppIP = `${globalIPPrefix}.${web}`; const appCronIP = `${globalIPPrefix}.${cron}`; const maxScaleIP = `${globalIPPrefix}.${maxscale}`; + const mainDBIP = `${globalIPPrefix}.${db}`; + const localHostIP = `${globalIPPrefix}.1`; - return { webAppIP, appCronIP, maxScaleIP, globalIPPrefix }; + return { + webAppIP, + appCronIP, + maxScaleIP, + mainDBIP, + localHostIP, + globalIPPrefix, + }; } diff --git a/package-shared/utils/db/conn-db-handler.ts b/package-shared/utils/db/conn-db-handler.ts index c9daace..b4de84f 100644 --- a/package-shared/utils/db/conn-db-handler.ts +++ b/package-shared/utils/db/conn-db-handler.ts @@ -1,6 +1,6 @@ -import { ServerlessMysql } from "serverless-mysql"; import debugLog from "../logging/debug-log"; import { DSQLErrorObject } from "../../types"; +import type { ConnectionConfig, Pool } from "mariadb"; export type ConnDBHandlerQueryObject = { query: string; @@ -9,8 +9,9 @@ export type ConnDBHandlerQueryObject = { type Return = | ReturnType + | ReturnType[] | null - | { error?: string; errors?: DSQLErrorObject[] }; + | { error?: string; errors?: DSQLErrorObject[]; config?: ConnectionConfig }; /** * # Run Query From MySQL Connection @@ -19,9 +20,9 @@ type Return = */ export default async function connDbHandler( /** - * ServerlessMySQL Connection Object + * MariaDB Connection Pool Object */ - conn?: ServerlessMysql, + connPool?: Pool, /** * String Or `ConnDBHandlerQueryObject` Array */ @@ -33,13 +34,13 @@ export default async function connDbHandler( debug?: boolean ): Promise> { try { - if (!conn) throw new Error("No Connection Found!"); + if (!connPool) throw new Error("No Connection Found!"); if (!query) throw new Error("Query String Required!"); let queryErrorArray: DSQLErrorObject[] = []; if (typeof query == "string") { - const res = await conn.query(trimQuery(query), values); + const res = await connPool.query(trimQuery(query), values); if (debug) { debugLog({ @@ -49,7 +50,11 @@ export default async function connDbHandler( }); } - return JSON.parse(JSON.stringify(res)); + if (Array.isArray(res)) { + return Array.from(res); + } + + return res; } else if (typeof query == "object") { const resArray = []; @@ -62,7 +67,7 @@ export default async function connDbHandler( currentQueryError.sql = queryObj.query; currentQueryError.sqlValues = queryObj.values; - const queryObjRes = await conn.query( + const queryObjRes = await connPool.query( trimQuery(queryObj.query), queryObj.values ); @@ -75,7 +80,11 @@ export default async function connDbHandler( }); } - resArray.push(JSON.parse(JSON.stringify(queryObjRes))); + if (Array.isArray(queryObjRes)) { + resArray.push(Array.from(queryObjRes)); + } else { + resArray.push(queryObjRes); + } } catch (error: any) { global.ERROR_CALLBACK?.( `Connection DB Handler Query Error`, @@ -101,7 +110,7 @@ export default async function connDbHandler( }; } - return resArray as any; + return resArray; } else { return null; } @@ -118,12 +127,13 @@ export default async function connDbHandler( return { error: `Connection DB Handler Error: ${error.message}`, + // config: conn, }; } finally { - conn?.end(); + connPool?.end(); } } function trimQuery(query: string) { - return query.replace(/\n/gm, "").replace(/ {2,}/g, "").trim(); + return query.replace(/\n/gm, " ").replace(/ {2,}/g, " ").trim(); } diff --git a/package-shared/utils/grab-dsql-connection.ts b/package-shared/utils/grab-dsql-connection.ts index 3e62c7f..6018ef1 100644 --- a/package-shared/utils/grab-dsql-connection.ts +++ b/package-shared/utils/grab-dsql-connection.ts @@ -1,4 +1,5 @@ -import mysql, { ServerlessMysql } from "serverless-mysql"; +import mariadb, { Pool } from "mariadb"; +import grabDbSSL from "./backend/grabDbSSL"; type Param = { /** @@ -22,65 +23,11 @@ type Param = { /** * # Grab General CONNECTION for DSQL */ -export default function grabDSQLConnection(param?: Param): ServerlessMysql { +export default function grabDSQLConnection(param?: Param): Pool { if (global.DSQL_USE_LOCAL || param?.local) { 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", - }, - }) - ); - } - - if (param?.ro) { - return ( - global.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: { + mariadb.createPool({ host: process.env.DSQL_DB_HOST, user: process.env.DSQL_DB_USERNAME, password: process.env.DSQL_DB_PASSWORD, @@ -89,7 +36,55 @@ export default function grabDSQLConnection(param?: Param): ServerlessMysql { ? Number(process.env.DSQL_DB_PORT) : undefined, charset: "utf8mb4", - }, + ssl: grabDbSSL(), + }) + ); + } + + if (param?.ro) { + return ( + global.DSQL_READ_ONLY_DB_CONN || + mariadb.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: grabDbSSL(), + }) + ); + } + + if (param?.fa) { + return ( + global.DSQL_FULL_ACCESS_DB_CONN || + mariadb.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: grabDbSSL(), + }) + ); + } + + return ( + global.DSQL_DB_CONN || + mariadb.createPool({ + host: process.env.DSQL_DB_HOST, + user: process.env.DSQL_DB_USERNAME, + password: process.env.DSQL_DB_PASSWORD, + database: param?.noDb ? undefined : process.env.DSQL_DB_NAME, + port: process.env.DSQL_DB_PORT + ? Number(process.env.DSQL_DB_PORT) + : undefined, + charset: "utf8mb4", + ssl: grabDbSSL(), }) ); } diff --git a/package-shared/utils/setup-db.ts b/package-shared/utils/setup-db.ts new file mode 100644 index 0000000..9be6c9c --- /dev/null +++ b/package-shared/utils/setup-db.ts @@ -0,0 +1,53 @@ +import grabDbSSL from "./backend/grabDbSSL"; +import mariadb, { ConnectionConfig } from "mariadb"; + +type Params = { + useLocal?: boolean; + dbConfig?: ConnectionConfig; + ssl?: boolean; + connectionLimit?: number; +}; + +export default function setupDSQLDb({ + useLocal, + dbConfig, + ssl, + connectionLimit = 100, +}: Params) { + global.DSQL_USE_LOCAL = useLocal || true; + + const pool = 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, + }); + + 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, + }; +} diff --git a/package.json b/package.json index 1152467..dbfdb67 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@moduletrace/datasquirel", - "version": "4.8.6", + "version": "4.8.7", "description": "Cloud-based SQL data management tool", "main": "dist/index.js", "bin": { @@ -44,9 +44,8 @@ "google-auth-library": "^9.15.0", "inquirer": "^12.5.2", "lodash": "^4.17.21", - "mysql": "^2.18.1", + "mariadb": "^3.4.4", "nodemailer": "^6.9.14", - "sanitize-html": "^2.13.1", - "serverless-mysql": "^1.5.5" + "sanitize-html": "^2.13.1" } }