This commit is contained in:
Benjamin Toby 2025-08-05 13:56:51 +01:00
parent ab13c68c8e
commit 43a741f9ac
26 changed files with 109 additions and 115 deletions

BIN
bun.lockb

Binary file not shown.

View File

@ -1,4 +1,4 @@
import { DSQL_TableSchemaType } from "../../types"; import { DSQL_TableSchemaType, PostInsertReturn } from "../../types";
import { ConnectionConfig } from "mariadb"; import { ConnectionConfig } from "mariadb";
type Param<T extends { type Param<T extends {
[k: string]: any; [k: string]: any;
@ -18,7 +18,5 @@ type Param<T extends {
*/ */
export default function dbHandler<T extends { export default function dbHandler<T extends {
[k: string]: any; [k: string]: any;
} = { } = PostInsertReturn>({ query, values, noErrorLogs, database, config, }: Param<T>): Promise<T[] | T | null>;
[k: string]: any;
}>({ query, values, noErrorLogs, database, config, }: Param<T>): Promise<T[] | T | null>;
export {}; export {};

View File

@ -27,16 +27,16 @@ function dbHandler(_a) {
try { try {
CONNECTION = yield (0, grab_dsql_connection_1.default)({ database, config }); CONNECTION = yield (0, grab_dsql_connection_1.default)({ database, config });
if (query && values) { if (query && values) {
const queryResults = yield CONNECTION.query(query, values); const queryResults = (yield CONNECTION.query(query, values));
results = queryResults[0]; results = queryResults;
} }
else { else {
const queryResults = yield CONNECTION.query(query); const queryResults = (yield CONNECTION.query(query));
results = queryResults[0]; results = queryResults;
} }
} }
catch (error) { catch (error) {
console.log("Connection Info =>", CONNECTION === null || CONNECTION === void 0 ? void 0 : CONNECTION.info); console.log("Connection Info =>", CONNECTION === null || CONNECTION === void 0 ? void 0 : CONNECTION.getConfig());
if (error.message && if (error.message &&
typeof error.message == "string" && typeof error.message == "string" &&
error.message.match(/Access denied for user.*password/i)) { error.message.match(/Access denied for user.*password/i)) {

View File

@ -15,9 +15,5 @@ type CreateNewUserParams = {
host?: string; host?: string;
password?: string; password?: string;
}; };
export declare function createNewSQLUser({ host, password, username, }: CreateNewUserParams): Promise<{ export declare function createNewSQLUser({ host, password, username, }: CreateNewUserParams): Promise<import("../../../types").PostInsertReturn | import("../../../types").PostInsertReturn[] | null>;
[k: string]: any;
} | {
[k: string]: any;
}[] | null>;
export {}; export {};

View File

@ -28,7 +28,7 @@ const grab_dsql_connection_1 = __importDefault(require("../utils/grab-dsql-conne
(() => __awaiter(void 0, void 0, void 0, function* () { (() => __awaiter(void 0, void 0, void 0, function* () {
const CONNECTION = yield (0, grab_dsql_connection_1.default)(); const CONNECTION = yield (0, grab_dsql_connection_1.default)();
try { try {
const [result] = yield CONNECTION.query("SELECT id,first_name,last_name FROM users LIMIT 3"); const result = yield CONNECTION.query("SELECT id,first_name,last_name FROM users LIMIT 3");
console.log("Connection Query Success =>", result); console.log("Connection Query Success =>", result);
} }
catch (error) { catch (error) {

View File

@ -33,7 +33,7 @@ const grab_dsql_connection_1 = __importDefault(require("../utils/grab-dsql-conne
* @description If a database is provided, switch to it * @description If a database is provided, switch to it
*/ */
try { try {
const [result] = yield CONNECTION.query("SHOW DATABASES"); const result = yield CONNECTION.query("SHOW DATABASES");
const parsedResults = JSON.parse(JSON.stringify(result)); const parsedResults = JSON.parse(JSON.stringify(result));
console.log("parsedResults =>", parsedResults); console.log("parsedResults =>", parsedResults);
} }

View File

@ -30,7 +30,7 @@ const grab_sql_key_name_1 = __importDefault(require("../utils/grab-sql-key-name"
var _a; var _a;
const CONNECTION = yield (0, grab_dsql_connection_1.default)(); const CONNECTION = yield (0, grab_dsql_connection_1.default)();
try { try {
const [result] = yield CONNECTION.query("SELECT user,host,ssl_type FROM mysql.user"); const result = (yield CONNECTION.query("SELECT user,host,ssl_type FROM mysql.user"));
for (let i = 0; i < result.length; i++) { for (let i = 0; i < result.length; i++) {
const user = result[i]; const user = result[i];
if (user.User !== process.env.DSQL_DB_READ_ONLY_USERNAME || if (user.User !== process.env.DSQL_DB_READ_ONLY_USERNAME ||
@ -42,7 +42,7 @@ const grab_sql_key_name_1 = __importDefault(require("../utils/grab-sql-key-name"
if (ssl_type === "ANY") { if (ssl_type === "ANY") {
continue; continue;
} }
const [addUserSSL] = yield CONNECTION.query(`ALTER USER '${User}'@'${Host}'`); const addUserSSL = yield CONNECTION.query(`ALTER USER '${User}'@'${Host}'`);
console.log(`addUserSSL => ${User}@${Host}`, addUserSSL); console.log(`addUserSSL => ${User}@${Host}`, addUserSSL);
} }
} }

View File

@ -1,7 +1,4 @@
import type { ConnectionConfig } from "mariadb";
type Return = ConnectionConfig["ssl"] | undefined;
/** /**
* # Grab SSL * # Grab SSL
*/ */
export default function grabDbSSL(): Return; export default function grabDbSSL(): any;
export {};

View File

@ -7,6 +7,7 @@ exports.default = grabDbSSL;
const fs_1 = __importDefault(require("fs")); const fs_1 = __importDefault(require("fs"));
const grab_dir_names_1 = __importDefault(require("./names/grab-dir-names")); const grab_dir_names_1 = __importDefault(require("./names/grab-dir-names"));
const path_1 = __importDefault(require("path")); const path_1 = __importDefault(require("path"));
// type Return = ConnectionConfig["ssl"] | undefined;
/** /**
* # Grab SSL * # Grab SSL
*/ */

View File

@ -42,7 +42,7 @@ values, debug) {
throw new Error("Query String Required!"); throw new Error("Query String Required!");
let queryErrorArray = []; let queryErrorArray = [];
if (typeof query == "string") { if (typeof query == "string") {
const [results] = yield finalConnection.query(trimQuery(query), values); const results = (yield finalConnection.query(trimQuery(query), values));
if (debug) { if (debug) {
(0, debug_log_1.default)({ (0, debug_log_1.default)({
log: results, log: results,
@ -61,7 +61,7 @@ values, debug) {
currentQueryError.sql = queryObj.query; currentQueryError.sql = queryObj.query;
currentQueryError.sqlValues = queryObj.values; currentQueryError.sqlValues = queryObj.values;
const queryObjRes = yield finalConnection.query(trimQuery(queryObj.query), queryObj.values); const queryObjRes = yield finalConnection.query(trimQuery(queryObj.query), queryObj.values);
const results = queryObjRes[0]; const results = queryObjRes;
if (debug) { if (debug) {
(0, debug_log_1.default)({ (0, debug_log_1.default)({
log: results, log: results,

View File

@ -1,6 +0,0 @@
import mysql from "mysql";
/**
* # End MYSQL Connection
*/
declare function endConnection(connection: mysql.Connection): void;
export default endConnection;

View File

@ -1,13 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/**
* # End MYSQL Connection
*/
function endConnection(connection) {
if (connection.state !== "disconnected") {
connection.end((err) => {
console.log(err === null || err === void 0 ? void 0 : err.message);
});
}
}
exports.default = endConnection;

View File

@ -1,6 +1,6 @@
import { ConnectionConfig } from "mariadb";
import { DsqlConnectionParam } from "../types"; import { DsqlConnectionParam } from "../types";
import serverlessMysql from "serverless-mysql";
/** /**
* # Grab General CONNECTION for DSQL * # Grab General CONNECTION for DSQL
*/ */
export default function grabDSQLConnectionConfig(param?: DsqlConnectionParam): ConnectionConfig; export default function grabDSQLConnectionConfig(param?: DsqlConnectionParam): serverlessMysql.Config;

View File

@ -5,14 +5,35 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
exports.default = grabDSQLConnectionConfig; exports.default = grabDSQLConnectionConfig;
const grabDbSSL_1 = __importDefault(require("./backend/grabDbSSL")); const grabDbSSL_1 = __importDefault(require("./backend/grabDbSSL"));
const lodash_1 = __importDefault(require("lodash"));
/** /**
* # Grab General CONNECTION for DSQL * # Grab General CONNECTION for DSQL
*/ */
function grabDSQLConnectionConfig(param) { function grabDSQLConnectionConfig(param) {
const CONN_TIMEOUT = 10000; const CONN_TIMEOUT = 10000;
const config = Object.assign({ 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.database) || const config = {
((param === null || param === void 0 ? void 0 : param.noDb) ? undefined : process.env.DSQL_DB_NAME), port: process.env.DSQL_DB_PORT config: {
? Number(process.env.DSQL_DB_PORT) host: process.env.DSQL_DB_HOST,
: undefined, charset: "utf8mb4", ssl: (0, grabDbSSL_1.default)(), bigIntAsNumber: true, supportBigNumbers: true, bigNumberStrings: false, dateStrings: true, metaAsArray: true, socketTimeout: CONN_TIMEOUT, connectTimeout: CONN_TIMEOUT, compress: true }, param === null || param === void 0 ? void 0 : param.config); user: process.env.DSQL_DB_USERNAME,
return config; password: process.env.DSQL_DB_PASSWORD,
database: (param === null || param === void 0 ? void 0 : param.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)(),
connectTimeout: CONN_TIMEOUT,
dateStrings: true,
compress: true,
decimalNumbers: true,
// supportBigNumbers: true,
// bigNumberStrings: false,
// bigIntAsNumber: true,
// metaAsArray: true,
// socketTimeout: CONN_TIMEOUT,
// ...param?.config,
},
};
return lodash_1.default.merge(config, param === null || param === void 0 ? void 0 : param.config);
} }

View File

@ -1,6 +1,6 @@
import { Connection } from "mariadb";
import { DsqlConnectionParam } from "../types"; import { DsqlConnectionParam } from "../types";
import { ServerlessMysql } from "serverless-mysql";
/** /**
* # Grab General CONNECTION for DSQL * # Grab General CONNECTION for DSQL
*/ */
export default function grabDSQLConnection(param?: DsqlConnectionParam): Promise<Connection>; export default function grabDSQLConnection(param?: DsqlConnectionParam): Promise<ServerlessMysql>;

View File

@ -13,8 +13,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
}; };
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
exports.default = grabDSQLConnection; exports.default = grabDSQLConnection;
const mariadb_1 = __importDefault(require("mariadb"));
const grab_dsql_connection_config_1 = __importDefault(require("./grab-dsql-connection-config")); const grab_dsql_connection_config_1 = __importDefault(require("./grab-dsql-connection-config"));
const serverless_mysql_1 = __importDefault(require("serverless-mysql"));
/** /**
* # Grab General CONNECTION for DSQL * # Grab General CONNECTION for DSQL
*/ */
@ -22,7 +22,8 @@ function grabDSQLConnection(param) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
const config = (0, grab_dsql_connection_config_1.default)(param); const config = (0, grab_dsql_connection_config_1.default)(param);
try { try {
return yield mariadb_1.default.createConnection(config); const sql = (0, serverless_mysql_1.default)(config);
return sql;
} }
catch (error) { catch (error) {
console.log(`Error Grabbing DSQL Connection =>`, config); console.log(`Error Grabbing DSQL Connection =>`, config);

View File

@ -1,8 +1,9 @@
import fs from "fs"; import fs from "fs";
import path from "path"; import path from "path";
import grabDSQLConnection from "../../utils/grab-dsql-connection"; import grabDSQLConnection from "../../utils/grab-dsql-connection";
import { DSQL_TableSchemaType } from "../../types"; import { DSQL_TableSchemaType, PostInsertReturn } from "../../types";
import { Connection, ConnectionConfig } from "mariadb"; import { Connection, ConnectionConfig } from "mariadb";
import { ServerlessMysql } from "serverless-mysql";
type Param<T extends { [k: string]: any } = { [k: string]: any }> = { type Param<T extends { [k: string]: any } = { [k: string]: any }> = {
query: string; query: string;
@ -18,7 +19,7 @@ type Param<T extends { [k: string]: any } = { [k: string]: any }> = {
* @requires DSQL_DB_CONN - Gobal Variable for Datasquirel Database * @requires DSQL_DB_CONN - Gobal Variable for Datasquirel Database
*/ */
export default async function dbHandler< export default async function dbHandler<
T extends { [k: string]: any } = { [k: string]: any } T extends { [k: string]: any } = PostInsertReturn
>({ >({
query, query,
values, values,
@ -26,21 +27,23 @@ export default async function dbHandler<
database, database,
config, config,
}: Param<T>): Promise<T[] | T | null> { }: Param<T>): Promise<T[] | T | null> {
let CONNECTION: Connection | undefined; let CONNECTION: ServerlessMysql | undefined;
let results: T[] | T | null; let results: T[] | T | null;
try { try {
CONNECTION = await grabDSQLConnection({ database, config }); CONNECTION = await grabDSQLConnection({ database, config });
if (query && values) { if (query && values) {
const queryResults = await CONNECTION.query(query, values); const queryResults = (await CONNECTION.query(query, values)) as
results = queryResults[0]; | T
| T[];
results = queryResults;
} else { } else {
const queryResults = await CONNECTION.query(query); const queryResults = (await CONNECTION.query(query)) as T | T[];
results = queryResults[0]; results = queryResults;
} }
} catch (error: any) { } catch (error: any) {
console.log("Connection Info =>", CONNECTION?.info); console.log("Connection Info =>", CONNECTION?.getConfig());
if ( if (
error.message && error.message &&

View File

@ -16,7 +16,7 @@ import grabDSQLConnection from "../utils/grab-dsql-connection";
const CONNECTION = await grabDSQLConnection(); const CONNECTION = await grabDSQLConnection();
try { try {
const [result] = await CONNECTION.query( const result = await CONNECTION.query(
"SELECT id,first_name,last_name FROM users LIMIT 3" "SELECT id,first_name,last_name FROM users LIMIT 3"
); );
console.log("Connection Query Success =>", result); console.log("Connection Query Success =>", result);

View File

@ -21,7 +21,7 @@ import grabDSQLConnection from "../utils/grab-dsql-connection";
* @description If a database is provided, switch to it * @description If a database is provided, switch to it
*/ */
try { try {
const [result] = await CONNECTION.query("SHOW DATABASES"); const result = await CONNECTION.query("SHOW DATABASES");
const parsedResults = JSON.parse(JSON.stringify(result)); const parsedResults = JSON.parse(JSON.stringify(result));

View File

@ -17,9 +17,9 @@ import grabSQLKeyName from "../utils/grab-sql-key-name";
const CONNECTION = await grabDSQLConnection(); const CONNECTION = await grabDSQLConnection();
try { try {
const [result] = await CONNECTION.query( const result = (await CONNECTION.query(
"SELECT user,host,ssl_type FROM mysql.user" "SELECT user,host,ssl_type FROM mysql.user"
); )) as any[];
for (let i = 0; i < result.length; i++) { for (let i = 0; i < result.length; i++) {
const user = result[i]; const user = result[i];
@ -38,7 +38,7 @@ import grabSQLKeyName from "../utils/grab-sql-key-name";
continue; continue;
} }
const [addUserSSL] = await CONNECTION.query( const addUserSSL = await CONNECTION.query(
`ALTER USER '${User}'@'${Host}'` `ALTER USER '${User}'@'${Host}'`
); );

View File

@ -2,13 +2,15 @@ import fs from "fs";
import grabDirNames from "./names/grab-dir-names"; import grabDirNames from "./names/grab-dir-names";
import type { ConnectionConfig } from "mariadb"; import type { ConnectionConfig } from "mariadb";
import path from "path"; import path from "path";
import serverlessMysql from "serverless-mysql";
import { ConnectionOptions } from "tls";
type Return = ConnectionConfig["ssl"] | undefined; // type Return = ConnectionConfig["ssl"] | undefined;
/** /**
* # Grab SSL * # Grab SSL
*/ */
export default function grabDbSSL(): Return { export default function grabDbSSL(): any {
let maxscaleSSLCaCertFileFinal; let maxscaleSSLCaCertFileFinal;
try { try {

View File

@ -43,10 +43,10 @@ export default async function connDbHandler<ReturnType = any>(
let queryErrorArray: DSQLErrorObject[] = []; let queryErrorArray: DSQLErrorObject[] = [];
if (typeof query == "string") { if (typeof query == "string") {
const [results] = await finalConnection.query( const results = (await finalConnection.query(
trimQuery(query), trimQuery(query),
values values
); )) as any;
if (debug) { if (debug) {
debugLog({ debugLog({
@ -74,7 +74,7 @@ export default async function connDbHandler<ReturnType = any>(
queryObj.values queryObj.values
); );
const results = queryObjRes[0]; const results = queryObjRes;
if (debug) { if (debug) {
debugLog({ debugLog({
@ -106,7 +106,7 @@ export default async function connDbHandler<ReturnType = any>(
}; };
} }
return resArray; return resArray as ReturnType;
} else { } else {
return null; return null;
} }

View File

@ -1,14 +0,0 @@
import mysql from "mysql";
/**
* # End MYSQL Connection
*/
function endConnection(connection: mysql.Connection) {
if (connection.state !== "disconnected") {
connection.end((err) => {
console.log(err?.message);
});
}
}
export default endConnection;

View File

@ -1,37 +1,43 @@
import { ConnectionConfig } from "mariadb"; import { ConnectionConfig } from "mariadb";
import grabDbSSL from "./backend/grabDbSSL"; import grabDbSSL from "./backend/grabDbSSL";
import { DsqlConnectionParam } from "../types"; import { DsqlConnectionParam } from "../types";
import serverlessMysql from "serverless-mysql";
import { ConnectionOptions } from "tls";
import _ from "lodash";
/** /**
* # Grab General CONNECTION for DSQL * # Grab General CONNECTION for DSQL
*/ */
export default function grabDSQLConnectionConfig( export default function grabDSQLConnectionConfig(
param?: DsqlConnectionParam param?: DsqlConnectionParam
): ConnectionConfig { ): serverlessMysql.Config {
const CONN_TIMEOUT = 10000; const CONN_TIMEOUT = 10000;
const config: ConnectionConfig = { const config: serverlessMysql.Config = {
host: process.env.DSQL_DB_HOST, config: {
user: process.env.DSQL_DB_USERNAME, host: process.env.DSQL_DB_HOST,
password: process.env.DSQL_DB_PASSWORD, user: process.env.DSQL_DB_USERNAME,
database: password: process.env.DSQL_DB_PASSWORD,
param?.database || database:
(param?.noDb ? undefined : process.env.DSQL_DB_NAME), param?.database ||
port: process.env.DSQL_DB_PORT (param?.noDb ? undefined : process.env.DSQL_DB_NAME),
? Number(process.env.DSQL_DB_PORT) port: process.env.DSQL_DB_PORT
: undefined, ? Number(process.env.DSQL_DB_PORT)
charset: "utf8mb4", : undefined,
ssl: grabDbSSL(), charset: "utf8mb4",
bigIntAsNumber: true, ssl: grabDbSSL(),
supportBigNumbers: true, connectTimeout: CONN_TIMEOUT,
bigNumberStrings: false, dateStrings: true,
dateStrings: true, compress: true,
metaAsArray: true, decimalNumbers: true,
socketTimeout: CONN_TIMEOUT, // supportBigNumbers: true,
connectTimeout: CONN_TIMEOUT, // bigNumberStrings: false,
compress: true, // bigIntAsNumber: true,
...param?.config, // metaAsArray: true,
// socketTimeout: CONN_TIMEOUT,
// ...param?.config,
},
}; };
return config; return _.merge(config, param?.config);
} }

View File

@ -2,17 +2,19 @@ import mariadb, { Connection, ConnectionConfig } from "mariadb";
import grabDbSSL from "./backend/grabDbSSL"; import grabDbSSL from "./backend/grabDbSSL";
import { DsqlConnectionParam } from "../types"; import { DsqlConnectionParam } from "../types";
import grabDSQLConnectionConfig from "./grab-dsql-connection-config"; import grabDSQLConnectionConfig from "./grab-dsql-connection-config";
import serverlessMysql, { ServerlessMysql } from "serverless-mysql";
/** /**
* # Grab General CONNECTION for DSQL * # Grab General CONNECTION for DSQL
*/ */
export default async function grabDSQLConnection( export default async function grabDSQLConnection(
param?: DsqlConnectionParam param?: DsqlConnectionParam
): Promise<Connection> { ): Promise<ServerlessMysql> {
const config = grabDSQLConnectionConfig(param); const config = grabDSQLConnectionConfig(param);
try { try {
return await mariadb.createConnection(config); const sql = serverlessMysql(config);
return sql;
} catch (error) { } catch (error) {
console.log(`Error Grabbing DSQL Connection =>`, config); console.log(`Error Grabbing DSQL Connection =>`, config);
throw error; throw error;

View File

@ -1,6 +1,6 @@
{ {
"name": "@moduletrace/datasquirel", "name": "@moduletrace/datasquirel",
"version": "5.1.5", "version": "5.1.6",
"description": "Cloud-based SQL data management tool", "description": "Cloud-based SQL data management tool",
"main": "dist/index.js", "main": "dist/index.js",
"bin": { "bin": {
@ -32,7 +32,6 @@
"dependencies": { "dependencies": {
"@types/ace": "^0.0.52", "@types/ace": "^0.0.52",
"@types/lodash": "^4.17.13", "@types/lodash": "^4.17.13",
"@types/mysql": "^2.15.21",
"@types/next": "^9.0.0", "@types/next": "^9.0.0",
"@types/node": "^22.7.5", "@types/node": "^22.7.5",
"@types/nodemailer": "^6.4.17", "@types/nodemailer": "^6.4.17",
@ -46,6 +45,7 @@
"lodash": "^4.17.21", "lodash": "^4.17.21",
"mariadb": "^3.4.4", "mariadb": "^3.4.4",
"nodemailer": "^6.9.14", "nodemailer": "^6.9.14",
"sanitize-html": "^2.13.1" "sanitize-html": "^2.13.1",
"serverless-mysql": "^2.1.0"
} }
} }