This commit is contained in:
Benjamin Toby
2025-07-09 20:30:45 +01:00
parent ccb5605b58
commit c37d105dee
264 changed files with 2389 additions and 3743 deletions
+1 -2
View File
@@ -16,13 +16,12 @@ import grabDSQLConnection from "../utils/grab-dsql-connection";
const CONNECTION = await grabDSQLConnection();
try {
const result = await CONNECTION.query(
const [result] = await CONNECTION.query(
"SELECT id,first_name,last_name FROM users LIMIT 3"
);
console.log("Connection Query Success =>", result);
} catch (error: any) {
console.log("Connection query ERROR =>", error.message);
global.ERROR_CALLBACK?.(`Error Checking DB`, error as Error);
} finally {
await CONNECTION?.end();
process.exit();
@@ -1,9 +1,9 @@
import varDatabaseDbHandler from "../utils/varDatabaseDbHandler";
import { DSQL_DatabaseSchemaType, PostInsertReturn } from "../../types";
import { DSQL_DatabaseSchemaType } from "../../types";
import { DSQL_DATASQUIREL_USER_DATABASES } from "../../types/dsql";
import numberfy from "../../utils/numberfy";
import addDbEntry from "../../functions/backend/db/addDbEntry";
import updateDbEntry from "../../functions/backend/db/updateDbEntry";
import dbHandler from "../../functions/backend/dbHandler";
type Param = {
userId?: number | string | null;
@@ -35,10 +35,10 @@ export default async function checkDbRecordCreateDbSchema({
} = dbSchema;
let recordedDbEntryArray = userId
? await varDatabaseDbHandler({
queryString: `SELECT * FROM datasquirel.user_databases WHERE db_full_name = ?`,
queryValuesArray: [dbFullName || "NULL"],
})
? ((await dbHandler({
query: `SELECT * FROM datasquirel.user_databases WHERE db_full_name = ?`,
values: [dbFullName || "NULL"],
})) as any[] | null)
: undefined;
let recordedDbEntry: DSQL_DATASQUIREL_USER_DATABASES | undefined =
@@ -65,10 +65,10 @@ export default async function checkDbRecordCreateDbSchema({
});
if (newDbEntry.payload?.insertId) {
recordedDbEntryArray = await varDatabaseDbHandler({
queryString: `SELECT * FROM datasquirel.user_databases WHERE db_full_name = ?`,
queryValuesArray: [dbFullName || "NULL"],
});
recordedDbEntryArray = (await dbHandler({
query: `SELECT * FROM datasquirel.user_databases WHERE db_full_name = ?`,
values: [dbFullName || "NULL"],
})) as any[] | null;
recordedDbEntry = recordedDbEntryArray?.[0];
}
} else if (recordedDbEntry?.id) {
@@ -82,11 +82,8 @@ export default async function checkDbRecordCreateDbSchema({
}
return recordedDbEntry;
} catch (error) {
global.ERROR_CALLBACK?.(
`Error Checking DB Record on Creating Schema`,
error as Error
);
} catch (error: any) {
console.log("Error =\u003e", error.message);
return undefined;
}
}
@@ -1,4 +1,3 @@
import varDatabaseDbHandler from "../utils/varDatabaseDbHandler";
import {
DSQL_DatabaseSchemaType,
DSQL_TableSchemaType,
@@ -12,6 +11,7 @@ import {
import sqlGenerator from "../../functions/dsql/sql/sql-generator";
import numberfy from "../../utils/numberfy";
import addDbEntry from "../../functions/backend/db/addDbEntry";
import dbHandler from "../../functions/backend/dbHandler";
type Param = {
userId?: number | string | null;
@@ -54,10 +54,10 @@ export default async function checkTableRecordCreateDbSchema({
});
let recordedTableEntryArray = userId
? await varDatabaseDbHandler({
queryString: queryObj?.string || "",
queryValuesArray: queryObj?.values,
})
? ((await dbHandler({
query: queryObj?.string || "",
values: queryObj?.values,
})) as any[] | null)
: undefined;
let recordedTableEntry:
@@ -98,21 +98,18 @@ export default async function checkTableRecordCreateDbSchema({
});
if (newTableRecordEntry.payload?.insertId) {
recordedTableEntryArray = await varDatabaseDbHandler({
queryString: queryObj?.string || "",
queryValuesArray: queryObj?.values,
});
recordedTableEntryArray = (await dbHandler({
query: queryObj?.string || "",
values: queryObj?.values,
})) as any[] | null;
recordedTableEntry = recordedTableEntryArray?.[0];
}
}
return recordedTableEntry;
} catch (error) {
global.ERROR_CALLBACK?.(
`Error Checking Table Record on Creating Schema`,
error as Error
);
} catch (error: any) {
console.log("Error =\u003e", error.message);
return undefined;
}
}
@@ -1,9 +1,9 @@
import varDatabaseDbHandler from "../utils/varDatabaseDbHandler";
import {
DSQL_IndexSchemaType,
DSQL_MYSQL_SHOW_INDEXES_Type,
} from "../../types";
import grabDSQLSchemaIndexComment from "../utils/grab-dsql-schema-index-comment";
import dbHandler from "../../functions/backend/dbHandler";
type Param = {
tableName: string;
@@ -22,10 +22,9 @@ export default async function handleIndexescreateDbFromSchema({
tableName,
indexes,
}: Param) {
const allExistingIndexes: DSQL_MYSQL_SHOW_INDEXES_Type[] =
await varDatabaseDbHandler({
queryString: `SHOW INDEXES FROM \`${dbFullName}\`.\`${tableName}\``,
});
const allExistingIndexes = (await dbHandler({
query: `SHOW INDEXES FROM \`${dbFullName}\`.\`${tableName}\``,
})) as DSQL_MYSQL_SHOW_INDEXES_Type[];
for (let g = 0; g < indexes.length; g++) {
const { indexType, indexName, indexTableFields, alias } = indexes[g];
@@ -56,12 +55,11 @@ export default async function handleIndexescreateDbFromSchema({
","
)}) COMMENT '${grabDSQLSchemaIndexComment()} ${indexName}'`;
const addIndex = await varDatabaseDbHandler({ queryString });
const addIndex = await dbHandler({ query: queryString });
}
}
const allExistingIndexesAfterUpdate: DSQL_MYSQL_SHOW_INDEXES_Type[] =
await varDatabaseDbHandler({
queryString: `SHOW INDEXES FROM \`${dbFullName}\`.\`${tableName}\``,
});
const allExistingIndexesAfterUpdate = (await dbHandler({
query: `SHOW INDEXES FROM \`${dbFullName}\`.\`${tableName}\``,
})) as DSQL_MYSQL_SHOW_INDEXES_Type[];
}
@@ -1,5 +1,3 @@
import noDatabaseDbHandler from "../utils/noDatabaseDbHandler";
import varDatabaseDbHandler from "../utils/varDatabaseDbHandler";
import createTable from "../utils/createTable";
import updateTable from "../utils/updateTable";
import { DSQL_DatabaseSchemaType } from "../../types";
@@ -64,19 +62,19 @@ export default async function createDbFromSchema({
console.log(`Handling database => ${dbFullName}`);
const dbCheck: any = await noDatabaseDbHandler(
`SELECT SCHEMA_NAME AS dbFullName FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '${dbFullName}'`
);
const dbCheck: any = await dbHandler({
query: `SELECT SCHEMA_NAME AS dbFullName FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '${dbFullName}'`,
});
if (!dbCheck?.[0]?.dbFullName) {
const newDatabase = await noDatabaseDbHandler(
`CREATE DATABASE IF NOT EXISTS \`${dbFullName}\` CHARACTER SET utf8mb4 COLLATE utf8mb4_bin`
);
const newDatabase = await dbHandler({
query: `CREATE DATABASE IF NOT EXISTS \`${dbFullName}\` CHARACTER SET utf8mb4 COLLATE utf8mb4_bin`,
});
}
const allTables: any = await noDatabaseDbHandler(
`SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='${dbFullName}'`
);
const allTables = (await dbHandler({
query: `SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='${dbFullName}'`,
})) as any[] | undefined;
let recordedDbEntry = await checkDbRecordCreateDbSchema({
dbSchema: database,
@@ -84,59 +82,32 @@ export default async function createDbFromSchema({
isMain,
});
for (let tb = 0; tb < allTables.length; tb++) {
const { TABLE_NAME } = allTables[tb];
if (allTables?.length) {
for (let tb = 0; tb < allTables.length; tb++) {
const { TABLE_NAME } = allTables[tb];
const targetTableSchema = tables.find(
(_table) => _table.tableName === TABLE_NAME
);
/**
* @description Check if TABLE_NAME is part of the tables contained
* in the user schema JSON. If it's not, the table is either deleted
* or the table name has been recently changed
*/
if (!targetTableSchema) {
console.log(
`Dropping Table ${TABLE_NAME} from ${dbFullName}`
const targetTableSchema = tables.find(
(_table) => _table.tableName === TABLE_NAME
);
await varDatabaseDbHandler({
queryString: `DROP TABLE \`${dbFullName}\`.\`${TABLE_NAME}\``,
});
const deleteTableEntry = await dbHandler({
query: `DELETE FROM datasquirel.user_database_tables WHERE user_id = ? AND db_slug = ? AND table_slug = ?`,
values: [userId, dbSlug, TABLE_NAME],
});
/**
* @description Check if TABLE_NAME is part of the tables contained
* in the user schema JSON. If it's not, the table is either deleted
* or the table name has been recently changed
*/
if (!targetTableSchema) {
console.log(
`Dropping Table ${TABLE_NAME} from ${dbFullName}`
);
await dbHandler({
query: `DROP TABLE \`${dbFullName}\`.\`${TABLE_NAME}\``,
});
// const oldTable = tables.find(
// (_table) =>
// _table.tableNameOld &&
// _table.tableNameOld === TABLE_NAME
// );
// /**
// * @description Check if this table has been recently renamed. Rename
// * table id true. Drop table if false
// */
// if (oldTable) {
// console.log("Renaming Table");
// await varDatabaseDbHandler({
// queryString: `RENAME TABLE \`${dbFullName}\`.\`${oldTable.tableNameOld}\` TO \`${oldTable.tableName}\``,
// });
// } else {
// console.log(
// `Dropping Table ${TABLE_NAME} from ${dbFullName}`
// );
// await varDatabaseDbHandler({
// queryString: `DROP TABLE \`${dbFullName}\`.\`${TABLE_NAME}\``,
// });
// const deleteTableEntry = await dbHandler({
// query: `DELETE FROM datasquirel.user_database_tables WHERE user_id = ? AND db_slug = ? AND table_slug = ?`,
// values: [userId, dbSlug, TABLE_NAME],
// });
// }
const deleteTableEntry = await dbHandler({
query: `DELETE FROM datasquirel.user_database_tables WHERE user_id = ? AND db_slug = ? AND table_slug = ?`,
values: [userId, dbSlug, TABLE_NAME],
});
}
}
}
@@ -156,8 +127,8 @@ export default async function createDbFromSchema({
* @description Check if table exists
* @type {any}
*/
const tableCheck: any = await varDatabaseDbHandler({
queryString: `
const tableCheck: any = await dbHandler({
query: `
SELECT EXISTS (
SELECT
TABLE_NAME
@@ -167,7 +138,7 @@ export default async function createDbFromSchema({
TABLE_SCHEMA = ? AND
TABLE_NAME = ?
) AS tableExists`,
queryValuesArray: [dbFullName, table.tableName],
values: [dbFullName, table.tableName],
});
if (tableCheck && tableCheck[0]?.tableExists > 0) {
+10 -22
View File
@@ -1,23 +1,11 @@
require("dotenv").config({ path: "./../.env" });
import varDatabaseDbHandler from "../functions/backend/varDatabaseDbHandler";
import dbHandler from "../functions/backend/dbHandler";
/** ****************************************************************************** */
/** ****************************************************************************** */
/** ****************************************************************************** */
/** ****************************************************************************** */
/** ****************************************************************************** */
/** ****************************************************************************** */
/**
* Grab Schema
*
* @description Grab Schema
*/
varDatabaseDbHandler({
queryString: `SELECT user_database_tables.*,user_databases.db_full_name FROM user_database_tables JOIN user_databases ON user_database_tables.db_id=user_databases.id`,
dbHandler({
query: `SELECT user_database_tables.*,user_databases.db_full_name FROM user_database_tables JOIN user_databases ON user_database_tables.db_id=user_databases.id`,
database: "datasquirel",
}).then(async (tables) => {
}).then(async (tables: any) => {
for (let i = 0; i < tables.length; i++) {
const table = tables[i];
const {
@@ -30,16 +18,16 @@ varDatabaseDbHandler({
table_description,
} = table;
const tableInfo = await varDatabaseDbHandler({
queryString: `SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='${db_full_name}' AND TABLE_NAME='${table_slug}'`,
const tableInfo = await dbHandler({
query: `SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='${db_full_name}' AND TABLE_NAME='${table_slug}'`,
});
const updateDbCharset = await varDatabaseDbHandler({
queryString: `ALTER DATABASE ${db_full_name} CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin;`,
const updateDbCharset = await dbHandler({
query: `ALTER DATABASE ${db_full_name} CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin;`,
});
const updateEncoding = await varDatabaseDbHandler({
queryString: `ALTER TABLE \`${db_full_name}\`.\`${table_slug}\` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin`,
const updateEncoding = await dbHandler({
query: `ALTER TABLE \`${db_full_name}\`.\`${table_slug}\` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin`,
});
}
@@ -1,44 +0,0 @@
require("dotenv").config({ path: "./../.env" });
import { AppNames } from "../dict/app-names";
import serverError from "../functions/backend/serverError";
import noDatabaseDbHandler from "./utils/noDatabaseDbHandler";
/**
* # Create Database From Schema
*/
async function grantFullPrivileges({ userId }: { userId: string | null }) {
/**
* Grab Schema
*
* @description Grab Schema
*/
try {
const defaultMariadbUserHost = process.env.DSQL_DB_HOST || "127.0.0.1";
const allDatabases = await noDatabaseDbHandler(`SHOW DATABASES`);
const datasquirelUserDatabases = allDatabases.filter((database: any) =>
database.Database.match(new RegExp(`^${AppNames["DsqlDbPrefix"]}`))
);
for (let i = 0; i < datasquirelUserDatabases.length; i++) {
const datasquirelUserDatabase = datasquirelUserDatabases[i];
const { Database } = datasquirelUserDatabase;
}
const flushPriviledged = await noDatabaseDbHandler(`FLUSH PRIVILEGES`);
} catch (error: any) {
serverError({
component: "shell/grantDbPriviledges/main-catch-error",
message: error.message,
user: { id: userId },
});
}
process.exit();
}
const userArg = process.argv[process.argv.indexOf("--user")];
const externalUser = process.argv[process.argv.indexOf("--user") + 1];
grantFullPrivileges({ userId: userArg ? externalUser : null });
@@ -1,101 +0,0 @@
import noDatabaseDbHandler from "../utils/noDatabaseDbHandler";
export interface GrantType {
database: string;
table: string;
privileges: string[];
}
type Param = {
username?: string;
host?: string;
grants?: GrantType[];
userId: string;
};
/**
* # Handle Grants for Users
*/
export default async function handleGrants({
username,
host,
grants,
userId,
}: Param): Promise<boolean> {
let success = false;
console.log(`Handling Grants for User =>`, username, host);
if (!username) {
console.log(`No username provided.`);
return success;
}
if (!host) {
console.log(
`No Host provided. \x1b[35m\`--host\`\x1b[0m flag is required`
);
return success;
}
if (!grants) {
console.log(`No grants Array provided.`);
return success;
}
try {
const existingUser = await noDatabaseDbHandler(
`SELECT * FROM mysql.user WHERE User = '${username}' AND Host = '${host}'`
);
const isUserExisting = Boolean(existingUser?.[0]?.User);
if (isUserExisting) {
const userGrants = await noDatabaseDbHandler(
`SHOW GRANTS FOR '${username}'@'${host}'`
);
for (let i = 0; i < userGrants.length; i++) {
const grantObject = userGrants[i];
const grant = grantObject?.[Object.keys(grantObject)[0]];
if (grant?.match(/GRANT .* PRIVILEGES ON .* TO/)) {
const revokeGrantText = grant
.replace(/GRANT/, "REVOKE")
.replace(/ TO /, " FROM ");
const revokePrivilege = await noDatabaseDbHandler(
revokeGrantText
);
}
}
const grantsArray: GrantType[] = grants;
for (let i = 0; i < grantsArray.length; i++) {
const grantObject = grantsArray[i];
const { database, table, privileges } = grantObject;
const tableText = table == "*" ? "*" : `\`${table}\``;
const databaseText =
database == "*"
? `\`${process.env.DSQL_USER_DB_PREFIX}${userId}_%\``
: `\`${database}\``;
const privilegesText = privileges.includes("ALL")
? "ALL PRIVILEGES"
: privileges.join(", ");
const grantText = `GRANT ${privilegesText} ON ${databaseText}.${tableText} TO '${username}'@'${host}'`;
const grantPriviledge = await noDatabaseDbHandler(grantText);
}
}
success = true;
} catch (/** @type {any} */ error: any) {
console.log(`Error in adding SQL user =>`, error.message);
}
return success;
}
@@ -1,75 +0,0 @@
require("dotenv").config({ path: "../../.env" });
import generator from "generate-password";
import noDatabaseDbHandler from "../utils/noDatabaseDbHandler";
import dbHandler from "../../functions/backend/dbHandler";
import encrypt from "../../functions/dsql/encrypt";
import grabSQLKeyName from "../../utils/grab-sql-key-name";
/**
* # Reset SQL Passwords
*/
async function resetSQLCredentialsPasswords() {
const users = (await dbHandler({
query: `SELECT * FROM users`,
})) as any[];
if (!users) {
process.exit();
}
for (let i = 0; i < users.length; i++) {
const user = users[i];
if (!user) continue;
try {
const maridbUsers = (await dbHandler({
query: `SELECT * FROM mysql.user WHERE User = '${grabSQLKeyName(
{ type: "user", userId: user.id }
)}'`,
})) as any[];
for (let j = 0; j < maridbUsers.length; j++) {
const { User, Host } = maridbUsers[j];
const password = generator.generate({
length: 16,
numbers: true,
symbols: true,
uppercase: true,
exclude: "*#.'`\"",
});
const encryptedPassword = encrypt({
data: password,
encryptionKey: process.env.DSQL_ENCRYPTION_PASSWORD,
encryptionSalt: process.env.DSQL_ENCRYPTION_SALT,
});
await noDatabaseDbHandler(
`SET PASSWORD FOR '${User}'@'${Host}' = PASSWORD('${password}')`
);
if (user.mariadb_user == User && user.mariadb_host == Host) {
const updateUser = await dbHandler({
query: `UPDATE users SET mariadb_pass = ? WHERE id = ?`,
values: [encryptedPassword, user.id],
});
}
console.log(
`User ${user.id}: ${user.first_name} ${user.last_name} Password Updated successfully added.`
);
}
} catch (error: any) {
global.ERROR_CALLBACK?.(
`Error Resetting MariaDB User Password`,
error as Error
);
}
}
process.exit();
}
resetSQLCredentialsPasswords();
@@ -3,7 +3,7 @@ require("dotenv").config({ path: "../../../.env" });
import fs from "fs";
import { execSync } from "child_process";
import EJSON from "../../../utils/ejson";
import DB_HANDLER from "../../../utils/backend/global-db/DB_HANDLER";
import dbHandler from "../../../functions/backend/dbHandler";
import addDbEntry from "../../../functions/backend/db/addDbEntry";
import addMariadbUser from "../../../functions/backend/addMariadbUser";
import updateDbEntry from "../../../functions/backend/db/updateDbEntry";
@@ -63,9 +63,9 @@ async function createUser() {
password: password,
});
let existingUser = await DB_HANDLER(
`SELECT * FROM users WHERE email='${email}'`
);
let existingUser = (await dbHandler({
query: `SELECT * FROM users WHERE email='${email}'`,
})) as any[];
if (existingUser?.[0]) {
console.log("User Exists");
@@ -170,7 +170,7 @@ async function createUser() {
return true;
} catch (error: any) {
global.ERROR_CALLBACK?.(`Error Creating User`, error as Error);
console.log("Error =\u003e", error.message);
return false;
}
}
@@ -56,7 +56,7 @@ async function createUser() {
return true;
} catch (error: any) {
global.ERROR_CALLBACK?.(`Error Updating User`, error as Error);
console.log("Error =\u003e", error.message);
return false;
}
}
+15 -11
View File
@@ -1,7 +1,6 @@
import fs from "fs";
require("dotenv").config({ path: "./../.env" });
import varDatabaseDbHandler from "../functions/backend/varDatabaseDbHandler";
import DB_HANDLER from "../utils/backend/global-db/DB_HANDLER";
import dbHandler from "../functions/backend/dbHandler";
const userId =
process.argv.indexOf("--userId") >= 0
@@ -19,9 +18,9 @@ async function recoverMainJsonFromDb() {
return;
}
const databases = await DB_HANDLER(
`SELECT * FROM user_databases WHERE user_id='${userId}'`
);
const databases = (await dbHandler({
query: `SELECT * FROM user_databases WHERE user_id='${userId}'`,
})) as any[];
const dbWrite = [];
@@ -38,9 +37,9 @@ async function recoverMainJsonFromDb() {
tables: [],
};
const tables = await DB_HANDLER(
`SELECT * FROM user_database_tables WHERE user_id='${userId}' AND db_id='${id}'`
);
const tables = (await dbHandler({
query: `SELECT * FROM user_database_tables WHERE user_id='${userId}' AND db_id='${id}'`,
})) as any[];
for (let j = 0; j < tables.length; j++) {
const { table_name, table_slug, table_description } = tables[j];
@@ -52,10 +51,15 @@ async function recoverMainJsonFromDb() {
indexes: [],
};
const tableFields = await varDatabaseDbHandler({
const tableFields = (await dbHandler({
database: db_full_name,
queryString: `SHOW COLUMNS FROM ${db_full_name}.${table_slug}`,
});
query: `SHOW COLUMNS FROM ${db_full_name}.${table_slug}`,
})) as any[] | null;
if (!tableFields) {
console.log("No table fields found");
continue;
}
for (let k = 0; k < tableFields.length; k++) {
const { Field, Type, Null, Default, Key } = tableFields[k];
@@ -1,6 +1,5 @@
require("dotenv").config({ path: "./../.env" });
import generator from "generate-password";
import noDatabaseDbHandler from "./utils/noDatabaseDbHandler";
import dbHandler from "../functions/backend/dbHandler";
import encrypt from "../functions/dsql/encrypt";
import grabSQLKeyName from "../utils/grab-sql-key-name";
@@ -35,9 +34,9 @@ async function resetSQLCredentialsPasswords() {
});
const encryptedPassword = encrypt({ data: password });
await noDatabaseDbHandler(
`SET PASSWORD FOR '${username}'@'${defaultMariadbUserHost}' = PASSWORD('${password}')`
);
await dbHandler({
query: `SET PASSWORD FOR '${username}'@'${defaultMariadbUserHost}' = PASSWORD('${password}')`,
});
const updateUser = await dbHandler({
query: `UPDATE users SET mariadb_pass = ? WHERE id = ?`,
@@ -48,10 +47,7 @@ async function resetSQLCredentialsPasswords() {
`User ${user.id}: ${user.first_name} ${user.last_name} Password Updated successfully added.`
);
} catch (error: any) {
global.ERROR_CALLBACK?.(
`Error Updating MariaDB User`,
error as Error
);
console.log("Error =\u003e", error.message);
}
}
-72
View File
@@ -1,72 +0,0 @@
require("dotenv").config({ path: "./../.env" });
import generator from "generate-password";
import noDatabaseDbHandler from "./utils/noDatabaseDbHandler";
import dbHandler from "../functions/backend/dbHandler";
import encrypt from "../functions/dsql/encrypt";
import grabSQLKeyName from "../utils/grab-sql-key-name";
/** ****************************************************************************** */
/** ****************************************************************************** */
/** ****************************************************************************** */
/** ****************************************************************************** */
/** ****************************************************************************** */
/** ****************************************************************************** */
/**
* # Set SQL Credentials
*/
async function setSQLCredentials() {
const users = (await dbHandler({
query: `SELECT * FROM users`,
})) as any[] | null;
if (!users) {
process.exit();
}
for (let i = 0; i < users.length; i++) {
const user = users[i];
if (!user) continue;
if (user.mariadb_user && user.mariadb_pass) {
continue;
}
try {
const username = grabSQLKeyName({ type: "user", userId: user.id });
const password = generator.generate({
length: 16,
numbers: true,
symbols: true,
uppercase: true,
exclude: "*#.'`\"",
});
const encryptedPassword = encrypt({ data: password });
await noDatabaseDbHandler(
`CREATE USER IF NOT EXISTS '${username}'@'127.0.0.1' IDENTIFIED BY '${password}'`
);
await noDatabaseDbHandler(
`GRANT ALL PRIVILEGES ON \`datasquirel\\_user\\_${user.id}\\_%\`.* TO '${username}'@'127.0.0.1'`
);
await noDatabaseDbHandler(`FLUSH PRIVILEGES`);
const updateUser = await dbHandler({
query: `UPDATE users SET mariadb_user = ?, mariadb_host = '127.0.0.1' mariadb_pass = ? WHERE id = ?`,
values: [username, encryptedPassword, user.id],
});
console.log(
`User ${user.id}: ${user.first_name} ${user.last_name} SQL credentials successfully added.`
);
} catch (error: any) {
global.ERROR_CALLBACK?.(
`Error Setting SQL credentials`,
error as Error
);
}
}
}
setSQLCredentials();
+2 -5
View File
@@ -21,16 +21,13 @@ import grabDSQLConnection from "../utils/grab-dsql-connection";
* @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));
console.log("parsedResults =>", parsedResults);
} catch (error: any) {
global.ERROR_CALLBACK?.(
`Error Testing External Server`,
error as Error
);
console.log("Error =\u003e", error.message);
} finally {
await CONNECTION?.end();
process.exit();
-73
View File
@@ -1,73 +0,0 @@
require("dotenv").config({ path: "./../.env" });
import generator from "generate-password";
import noDatabaseDbHandler from "./utils/noDatabaseDbHandler";
import dbHandler from "../functions/backend/dbHandler";
import encrypt from "../functions/dsql/encrypt";
import grabSQLKeyName from "../utils/grab-sql-key-name";
/**
* # Test SQL Escape
*/
export default async function testSQLEscape() {
const users = (await dbHandler({
query: `SELECT * FROM users`,
})) as any[];
if (!users) {
process.exit();
}
for (let i = 0; i < users.length; i++) {
const user = users[i];
if (!user) continue;
const defaultMariadbUserHost = process.env.DSQL_DB_HOST || "127.0.0.1";
try {
const username = grabSQLKeyName({ type: "user", userId: user.id });
const password = generator.generate({
length: 16,
numbers: true,
symbols: true,
uppercase: true,
exclude: "*#.'`\"",
});
const encryptedPassword = encrypt({ data: password });
await noDatabaseDbHandler(
`DROP USER '${username}'@'${defaultMariadbUserHost}'`
);
await noDatabaseDbHandler(
`CREATE USER IF NOT EXISTS '${username}'@'${defaultMariadbUserHost}' IDENTIFIED BY '${password}'`
);
await noDatabaseDbHandler(
`GRANT ALL PRIVILEGES ON \`datasquirel\\_user\\_${user.id}\\_%\`.* TO '${username}'@'${defaultMariadbUserHost}'`
);
await noDatabaseDbHandler(`FLUSH PRIVILEGES`);
const updateUser = await dbHandler({
query: `UPDATE users SET mariadb_user = ?, mariadb_host = ? mariadb_pass = ? WHERE id = ?`,
values: [
username,
defaultMariadbUserHost,
encryptedPassword,
user.id,
],
});
console.log(
`User ${user.id}: ${user.first_name} ${user.last_name} SQL credentials successfully added.`
);
} catch (error: any) {
global.ERROR_CALLBACK?.(`Error Testing SQL Escape`, error as Error);
}
}
process.exit();
}
testSQLEscape();
@@ -1,4 +1,4 @@
import DB_HANDLER from "../utils/backend/global-db/DB_HANDLER";
import dbHandler from "../functions/backend/dbHandler";
import fs from "fs";
require("dotenv").config({ path: "./../.env" });
@@ -31,25 +31,20 @@ async function updateChildrenTablesOnDb() {
const WHERE_CLAUSE = `WHERE user_id='${userId}' AND db_slug='${db.dbSlug}' AND table_slug='${table.tableName}'`;
const existingTableInDb = await DB_HANDLER(
`SELECT * FROM user_database_tables ${WHERE_CLAUSE}`
);
const existingTableInDb = (await dbHandler({
query: `SELECT * FROM user_database_tables ${WHERE_CLAUSE}`,
})) as any[];
if (existingTableInDb && existingTableInDb[0]) {
const updateChildrenTablesInfo = await DB_HANDLER(
`UPDATE user_database_tables SET child_table='1',child_table_parent_database='${originDbName}',child_table_parent_table='${originTableName}' WHERE id='${existingTableInDb[0].id}'`
);
if (existingTableInDb?.[0]) {
const updateChildrenTablesInfo = await dbHandler({
query: `UPDATE user_database_tables SET child_table='1',child_table_parent_database='${originDbName}',child_table_parent_table='${originTableName}' WHERE id='${existingTableInDb[0].id}'`,
});
}
}
}
}
}
} catch (error) {
global.ERROR_CALLBACK?.(
`Error Updating Children Tables on DB`,
error as Error
);
}
} catch (error) {}
process.exit();
}
+10 -10
View File
@@ -1,15 +1,15 @@
require("dotenv").config({ path: "./../.env" });
import varDatabaseDbHandler from "../functions/backend/varDatabaseDbHandler";
import dbHandler from "../functions/backend/dbHandler";
/**
* Grab Schema
*
* @description Grab Schema
*/
varDatabaseDbHandler({
queryString: `SELECT user_database_tables.*,user_databases.db_full_name FROM user_database_tables JOIN user_databases ON user_database_tables.db_id=user_databases.id`,
dbHandler({
query: `SELECT user_database_tables.*,user_databases.db_full_name FROM user_database_tables JOIN user_databases ON user_database_tables.db_id=user_databases.id`,
database: "datasquirel",
}).then(async (tables) => {
}).then(async (tables: any) => {
for (let i = 0; i < tables.length; i++) {
const table = tables[i];
const {
@@ -22,16 +22,16 @@ varDatabaseDbHandler({
table_description,
} = table;
const tableInfo = await varDatabaseDbHandler({
queryString: `SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='${db_full_name}' AND TABLE_NAME='${table_slug}'`,
const tableInfo = await dbHandler({
query: `SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='${db_full_name}' AND TABLE_NAME='${table_slug}'`,
});
const updateCreationDateTimestamp = await varDatabaseDbHandler({
queryString: `ALTER TABLE \`${db_full_name}\`.\`${table_slug}\` MODIFY COLUMN date_created_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP`,
const updateCreationDateTimestamp = await dbHandler({
query: `ALTER TABLE \`${db_full_name}\`.\`${table_slug}\` MODIFY COLUMN date_created_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP`,
});
const updateDateTimestamp = await varDatabaseDbHandler({
queryString: `ALTER TABLE \`${db_full_name}\`.\`${table_slug}\` MODIFY COLUMN date_updated_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP`,
const updateDateTimestamp = await dbHandler({
query: `ALTER TABLE \`${db_full_name}\`.\`${table_slug}\` MODIFY COLUMN date_updated_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP`,
});
console.log("Date Updated Column updated");
@@ -1,8 +1,7 @@
require("dotenv").config({ path: "./../.env" });
import serverError from "../functions/backend/serverError";
import varDatabaseDbHandler from "./utils/varDatabaseDbHandler";
import DB_HANDLER from "../utils/backend/global-db/DB_HANDLER";
import dbHandler from "../functions/backend/dbHandler";
/** ****************************************************************************** */
/** ****************************************************************************** */
@@ -16,25 +15,22 @@ import DB_HANDLER from "../utils/backend/global-db/DB_HANDLER";
*
* @description Grab Schema
*/
varDatabaseDbHandler({
queryString: `SELECT DISTINCT db_id FROM datasquirel.user_database_tables`,
}).then(async (tables) => {
// console.log(tables);
// process.exit();
dbHandler({
query: `SELECT DISTINCT db_id FROM datasquirel.user_database_tables`,
}).then(async (tables: any) => {
for (let i = 0; i < tables.length; i++) {
const table = tables[i];
try {
const { db_id } = table;
const dbSlug = await DB_HANDLER(
`SELECT db_slug FROM user_databases WHERE id='${db_id}'`
);
const dbSlug = (await dbHandler({
query: `SELECT db_slug FROM user_databases WHERE id='${db_id}'`,
})) as any;
const updateTableSlug = await DB_HANDLER(
`UPDATE user_database_tables SET db_slug='${dbSlug[0].db_slug}' WHERE db_id='${db_id}'`
);
const updateTableSlug = await dbHandler({
query: `UPDATE user_database_tables SET db_slug='${dbSlug[0].db_slug}' WHERE db_id='${db_id}'`,
});
} catch (error: any) {
serverError({
component:
@@ -42,11 +38,6 @@ varDatabaseDbHandler({
message: error.message,
user: {},
});
global.ERROR_CALLBACK?.(
`Error Updating DB Slugs For Table Records`,
error as Error
);
}
}
+5 -6
View File
@@ -17,13 +17,12 @@ import grabSQLKeyName from "../utils/grab-sql-key-name";
const CONNECTION = await grabDSQLConnection();
try {
const result = await CONNECTION.query(
const [result] = await CONNECTION.query(
"SELECT user,host,ssl_type FROM mysql.user"
);
const parsedResults = JSON.parse(JSON.stringify(result));
for (let i = 0; i < parsedResults.length; i++) {
const user = parsedResults[i];
for (let i = 0; i < result.length; i++) {
const user = result[i];
if (
user.User !== process.env.DSQL_DB_READ_ONLY_USERNAME ||
@@ -39,14 +38,14 @@ import grabSQLKeyName from "../utils/grab-sql-key-name";
continue;
}
const addUserSSL = await CONNECTION.query(
const [addUserSSL] = await CONNECTION.query(
`ALTER USER '${User}'@'${Host}'`
);
console.log(`addUserSSL => ${User}@${Host}`, addUserSSL);
}
} catch (error: any) {
global.ERROR_CALLBACK?.(`Error Updating SSL Users`, error as Error);
console.log("Error =\u003e", error.message);
} finally {
await CONNECTION?.end();
process.exit();
@@ -1,4 +1,3 @@
import varDatabaseDbHandler from "./varDatabaseDbHandler";
import { DSQL_TableSchemaType } from "../../types";
import {
DSQL_DATASQUIREL_USER_DATABASE_TABLES,
@@ -10,6 +9,7 @@ import addDbEntry from "../../functions/backend/db/addDbEntry";
import slugToNormalText from "../../utils/slug-to-normal-text";
import debugLog from "../../utils/logging/debug-log";
import _ from "lodash";
import dbHandler from "../../functions/backend/dbHandler";
type Param = {
tableSchema?: DSQL_TableSchemaType;
@@ -68,13 +68,13 @@ export default async function ({
active_data: newTableSchema.updateData ? 1 : 0,
};
const existingTable = await varDatabaseDbHandler({
queryString: `SELECT * FROM ${targetDatabase}.${targetTableName} WHERE db_id = ? AND table_slug = ?`,
queryValuesArray: [
const existingTable = (await dbHandler({
query: `SELECT * FROM ${targetDatabase}.${targetTableName} WHERE db_id = ? AND table_slug = ?`,
values: [
String(recordedDbEntry.id),
String(newTableSchema.tableName),
],
});
})) as any;
const table: DSQL_DATASQUIREL_USER_DATABASE_TABLES = existingTable?.[0];
+3 -3
View File
@@ -1,10 +1,10 @@
import varDatabaseDbHandler from "./varDatabaseDbHandler";
import generateColumnDescription from "./generateColumnDescription";
import supplementTable from "./supplementTable";
import { DSQL_FieldSchemaType, DSQL_TableSchemaType } from "../../types";
import { DSQL_DATASQUIREL_USER_DATABASES } from "../../types/dsql";
import handleTableForeignKey from "./handle-table-foreign-key";
import createTableHandleTableRecord from "./create-table-handle-table-record";
import dbHandler from "../../functions/backend/dbHandler";
type Param = {
dbFullName: string;
@@ -68,8 +68,8 @@ export default async function createTable({
const createTableQuery = createTableQueryArray.join("\n");
const newTable = await varDatabaseDbHandler({
queryString: createTableQuery,
const newTable = await dbHandler({
query: createTableQuery,
});
for (let i = 0; i < finalTable.length; i++) {
@@ -1,5 +1,5 @@
import grabSQLKeyName from "../../utils/grab-sql-key-name";
import varDatabaseDbHandler from "./varDatabaseDbHandler";
import dbHandler from "../../functions/backend/dbHandler";
type Param = {
dbFullName: string;
@@ -29,11 +29,11 @@ export default async function dropAllForeignKeys({
// });
// }
const foreignKeys = await varDatabaseDbHandler({
queryString: `SHOW INDEXES FROM \`${dbFullName}\`.\`${tableName}\` WHERE Key_name LIKE '${grabSQLKeyName(
const foreignKeys = (await dbHandler({
query: `SHOW INDEXES FROM \`${dbFullName}\`.\`${tableName}\` WHERE Key_name LIKE '${grabSQLKeyName(
{ type: "foreign_key" }
)}%'`,
});
})) as any;
for (const fk of foreignKeys) {
if (
@@ -41,8 +41,8 @@ export default async function dropAllForeignKeys({
new RegExp(grabSQLKeyName({ type: "foreign_key" }))
)
) {
await varDatabaseDbHandler({
queryString: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP INDEX \`${fk.Key_name}\`
await dbHandler({
query: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP INDEX \`${fk.Key_name}\`
`,
});
}
@@ -1,5 +1,5 @@
import varDatabaseDbHandler from "./varDatabaseDbHandler";
import { DSQL_ForeignKeyType } from "../../types";
import dbHandler from "../../functions/backend/dbHandler";
type Param = {
dbFullName: string;
@@ -41,9 +41,9 @@ export default async function handleTableForeignKey({
// let finalQueryString = `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` ${foreinKeyText}`;
const addForeignKey = await varDatabaseDbHandler({
queryString: finalQueryString,
});
const addForeignKey = (await dbHandler({
query: finalQueryString,
})) as any;
if (!addForeignKey?.serverStatus) {
errorLogs?.push(addForeignKey);
@@ -1,19 +0,0 @@
import dbHandler from "../../functions/backend/dbHandler";
export default async function noDatabaseDbHandler(
queryString: string
): Promise<any> {
let results;
try {
results = await dbHandler({ query: queryString });
} catch (error: any) {
global.ERROR_CALLBACK?.(`No DB Handler Error`, error as Error);
}
if (results) {
return results;
} else {
return null;
}
}
+45 -48
View File
@@ -1,5 +1,3 @@
import varDatabaseDbHandler from "./varDatabaseDbHandler";
import generateColumnDescription from "./generateColumnDescription";
import {
DSQL_DatabaseSchemaType,
@@ -19,6 +17,7 @@ import handleIndexescreateDbFromSchema from "../createDbFromSchema/handle-indexe
import _ from "lodash";
import { writeUpdatedDbSchema } from "../createDbFromSchema/grab-required-database-schemas";
import normalizeText from "../../utils/normalize-text";
import dbHandler from "../../functions/backend/dbHandler";
type Param = {
dbFullName: string;
@@ -105,30 +104,31 @@ export default async function updateTable({
* @description Iterate through each table index(if available)
* and perform operations
*/
const allExistingIndexes: DSQL_MYSQL_SHOW_INDEXES_Type[] =
await varDatabaseDbHandler({
queryString: `SHOW INDEXES FROM \`${dbFullName}\`.\`${tableName}\` WHERE Index_comment LIKE '%schema_index%'`,
});
const allExistingIndexes = (await dbHandler({
query: `SHOW INDEXES FROM \`${dbFullName}\`.\`${tableName}\` WHERE Index_comment LIKE '%schema_index%'`,
})) as DSQL_MYSQL_SHOW_INDEXES_Type[] | null;
for (let f = 0; f < allExistingIndexes.length; f++) {
const { Key_name } = allExistingIndexes[f];
if (allExistingIndexes) {
for (let f = 0; f < allExistingIndexes.length; f++) {
const { Key_name } = allExistingIndexes[f];
try {
const existingKeyInSchema = tableIndexes?.find(
(indexObject) => indexObject.alias === Key_name
);
if (!existingKeyInSchema)
throw new Error(
`This Index(${Key_name}) Has been Deleted!`
try {
const existingKeyInSchema = tableIndexes?.find(
(indexObject) => indexObject.alias === Key_name
);
} catch (error) {
/**
* @description Drop Index: This happens when the MYSQL index is not
* present in the datasquirel DB schema
*/
await varDatabaseDbHandler({
queryString: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP INDEX \`${Key_name}\``,
});
if (!existingKeyInSchema)
throw new Error(
`This Index(${Key_name}) Has been Deleted!`
);
} catch (error) {
/**
* @description Drop Index: This happens when the MYSQL index is not
* present in the datasquirel DB schema
*/
await dbHandler({
query: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP INDEX \`${Key_name}\``,
});
}
}
}
@@ -152,10 +152,9 @@ export default async function updateTable({
* @description Iterate through each datasquirel schema
* table index(if available), and perform operations
*/
const allForeignKeys: DSQL_MYSQL_FOREIGN_KEYS_Type[] | null =
await varDatabaseDbHandler({
queryString: `SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_SCHEMA = '${dbFullName}' AND TABLE_NAME='${tableName}' AND CONSTRAINT_TYPE='FOREIGN KEY'`,
});
const allForeignKeys = (await dbHandler({
query: `SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_SCHEMA = '${dbFullName}' AND TABLE_NAME='${tableName}' AND CONSTRAINT_TYPE='FOREIGN KEY'`,
})) as DSQL_MYSQL_FOREIGN_KEYS_Type[] | null;
if (allForeignKeys) {
for (let c = 0; c < allForeignKeys.length; c++) {
@@ -170,8 +169,8 @@ export default async function updateTable({
* @description Drop all foreign Keys to avoid MYSQL errors when adding/updating
* Foreign keys
*/
const dropForeignKey = await varDatabaseDbHandler({
queryString: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP FOREIGN KEY \`${CONSTRAINT_NAME}\``,
await dbHandler({
query: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP FOREIGN KEY \`${CONSTRAINT_NAME}\``,
});
}
}
@@ -182,19 +181,17 @@ export default async function updateTable({
* @description Find all existing unique field constraints
* and remove them
*/
const allUniqueConstraints: DSQL_MYSQL_FOREIGN_KEYS_Type[] | null =
await varDatabaseDbHandler({
queryString:
normalizeText(`SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS \
const allUniqueConstraints = (await dbHandler({
query: normalizeText(`SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS \
WHERE CONSTRAINT_SCHEMA = '${dbFullName}' AND TABLE_NAME='${tableName}' AND \
CONSTRAINT_TYPE='UNIQUE'`),
});
})) as DSQL_MYSQL_FOREIGN_KEYS_Type[] | null;
if (allUniqueConstraints) {
for (let c = 0; c < allUniqueConstraints.length; c++) {
const { CONSTRAINT_NAME } = allUniqueConstraints[c];
const dropUniqueConstraint = await varDatabaseDbHandler({
queryString: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP INDEX \`${CONSTRAINT_NAME}\``,
await dbHandler({
query: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP INDEX \`${CONSTRAINT_NAME}\``,
});
}
}
@@ -205,9 +202,9 @@ export default async function updateTable({
* @description Now handle all fields/columns
*/
let allExistingColumns: DSQL_MYSQL_SHOW_COLUMNS_Type[] =
await varDatabaseDbHandler({
queryString: `SHOW COLUMNS FROM \`${dbFullName}\`.\`${tableName}\``,
});
(await dbHandler({
query: `SHOW COLUMNS FROM \`${dbFullName}\`.\`${tableName}\``,
})) as DSQL_MYSQL_SHOW_COLUMNS_Type[];
/**
* @type {string[]}
@@ -239,8 +236,8 @@ export default async function updateTable({
if (existingEntry.updatedField && existingEntry.fieldName) {
updatedColumnsArray.push(existingEntry.fieldName);
const renameColumn = await varDatabaseDbHandler({
queryString: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` RENAME COLUMN \`${existingEntry.originName}\` TO \`${existingEntry.fieldName}\``,
await dbHandler({
query: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` RENAME COLUMN \`${existingEntry.originName}\` TO \`${existingEntry.fieldName}\``,
});
console.log(
@@ -284,9 +281,9 @@ export default async function updateTable({
});
}
allExistingColumns = await varDatabaseDbHandler({
queryString: `SHOW COLUMNS FROM \`${dbFullName}\`.\`${tableName}\``,
});
allExistingColumns = (await dbHandler({
query: `SHOW COLUMNS FROM \`${dbFullName}\`.\`${tableName}\``,
})) as DSQL_MYSQL_SHOW_COLUMNS_Type[];
} catch (error: any) {
console.log("Update table error =>", error.message);
}
@@ -300,8 +297,8 @@ export default async function updateTable({
////////////////////////////////////////
} else {
await varDatabaseDbHandler({
queryString: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP COLUMN \`${Field}\``,
await dbHandler({
query: `ALTER TABLE \`${dbFullName}\`.\`${tableName}\` DROP COLUMN \`${Field}\``,
});
}
}
@@ -386,8 +383,8 @@ export default async function updateTable({
* Alter directives like "ADD COLUMN" or "MODIFY COLUMN"
*/
if (updateTableQueryArray.length > 1) {
const updateTable = await varDatabaseDbHandler({
queryString: updateTableQuery,
const updateTable = await dbHandler({
query: updateTableQuery,
});
/**
@@ -1,57 +0,0 @@
import dbHandler from "../../functions/backend/dbHandler";
type Param = {
queryString: string;
queryValuesArray?: string[];
};
/**
* # DB handler for specific database
*/
export default async function varDatabaseDbHandler({
queryString,
queryValuesArray,
}: Param): Promise<any> {
/**
* Declare variables
*
* @description Declare "results" variable
*/
let results;
/**
* Fetch from db
*
* @description Fetch data from db if no cache
*/
try {
if (
queryString &&
queryValuesArray &&
Array.isArray(queryValuesArray) &&
queryValuesArray[0]
) {
results = await dbHandler({
query: queryString,
values: queryValuesArray,
});
} else {
results = await dbHandler({
query: queryString,
});
}
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
} catch (/** @type {any} */ error: any) {
console.log("Shell Vardb Error =>", error.message);
}
/**
* Return results
*
* @description Return results add to cache if "req" param is passed
*/
return results;
}