Refactor Code to typescript

This commit is contained in:
Benjamin Toby
2025-01-10 20:10:28 +01:00
parent 549d0abc02
commit eb0992f28d
270 changed files with 3535 additions and 9062 deletions
@@ -1,2 +0,0 @@
declare const _exports: import("../../../types").APICreateUserFunction;
export = _exports;
@@ -1,19 +1,22 @@
// @ts-check
const addUsersTableToDb = require("../../backend/addUsersTableToDb");
const addDbEntry = require("../../backend/db/addDbEntry");
const updateUsersTableSchema = require("../../backend/updateUsersTableSchema");
const varDatabaseDbHandler = require("../../backend/varDatabaseDbHandler");
const hashPassword = require("../../dsql/hashPassword");
import { APICreateUserFunctionParams } from "../../../types";
import addUsersTableToDb from "../../backend/addUsersTableToDb";
import addDbEntry from "../../backend/db/addDbEntry";
import updateUsersTableSchema from "../../backend/updateUsersTableSchema";
import varDatabaseDbHandler from "../../backend/varDatabaseDbHandler";
import hashPassword from "../../dsql/hashPassword";
/** @type {import("../../../types").APICreateUserFunction} */
module.exports = async function apiCreateUser({
/**
* # API Create User
*/
export default async function apiCreateUser({
encryptionKey,
payload,
database,
userId,
useLocal,
}) {
}: APICreateUserFunctionParams) {
const dbFullName = database;
const API_USER_ID = userId || process.env.DSQL_API_USER_ID;
@@ -73,9 +76,7 @@ module.exports = async function apiCreateUser({
};
}
const fieldsTitles = fields.map(
(/** @type {any} */ fieldObject) => fieldObject.Field
);
const fieldsTitles = fields.map((fieldObject: any) => fieldObject.Field);
let invalidField = null;
@@ -159,4 +160,4 @@ module.exports = async function apiCreateUser({
payload: null,
};
}
};
}
-10
View File
@@ -1,10 +0,0 @@
declare function _exports({ dbFullName, deletedUserId, useLocal, }: {
dbFullName: string;
deletedUserId: string | number;
useLocal?: boolean;
}): Promise<{
success: boolean;
result?: any;
msg?: string;
}>;
export = _exports;
@@ -1,23 +1,21 @@
// @ts-check
import deleteDbEntry from "../../backend/db/deleteDbEntry";
import varDatabaseDbHandler from "../../backend/varDatabaseDbHandler";
const deleteDbEntry = require("../../backend/db/deleteDbEntry");
const varDatabaseDbHandler = require("../../backend/varDatabaseDbHandler");
type Param = {
dbFullName: string;
deletedUserId: string | number;
useLocal?: boolean;
};
type Return = { success: boolean; result?: any; msg?: string };
/**
* # Update API User Function
*
* @param {object} params
* @param {string} params.dbFullName
* @param {string | number} params.deletedUserId
* @param {boolean} [params.useLocal]
*
* @returns {Promise<{ success: boolean, result?: any, msg?: string }>}
*/
module.exports = async function apiDeleteUser({
export default async function apiDeleteUser({
dbFullName,
deletedUserId,
useLocal,
}) {
}: Param): Promise<Return> {
const existingUserQuery = `SELECT * FROM users WHERE id = ?`;
const existingUserValues = [deletedUserId];
@@ -49,4 +47,4 @@ module.exports = async function apiDeleteUser({
success: true,
result: deleteUser,
};
};
}
-2
View File
@@ -1,2 +0,0 @@
declare const _exports: import("../../../types").APIGetUserFunction;
export = _exports;
@@ -1,14 +1,18 @@
// @ts-check
import {
APIGetUserFunctionParams,
GetUserFunctionReturn,
} from "../../../types";
import varDatabaseDbHandler from "../../backend/varDatabaseDbHandler";
const varDatabaseDbHandler = require("../../backend/varDatabaseDbHandler");
/** @type {import("../../../types").APIGetUserFunction} */
module.exports = async function apiGetUser({
/**
* # API Get User
*/
export default async function apiGetUser({
fields,
dbFullName,
userId,
useLocal,
}) {
}: APIGetUserFunctionParams): Promise<GetUserFunctionReturn> {
const query = `SELECT ${fields.join(",")} FROM users WHERE id=?`;
const API_USER_ID = userId || process.env.DSQL_API_USER_ID;
@@ -30,4 +34,4 @@ module.exports = async function apiGetUser({
success: true,
payload: foundUser[0],
};
};
}
-2
View File
@@ -1,2 +0,0 @@
declare const _exports: import("../../../types").APILoginFunction;
export = _exports;
@@ -1,10 +1,15 @@
// @ts-check
import {
APILoginFunctionParams,
APILoginFunctionReturn,
DATASQUIREL_LoggedInUser,
} from "../../../types";
import varDatabaseDbHandler from "../../backend/varDatabaseDbHandler";
import hashPassword from "../../dsql/hashPassword";
const varDatabaseDbHandler = require("../../backend/varDatabaseDbHandler");
const hashPassword = require("../../dsql/hashPassword");
/** @type {import("../../../types").APILoginFunction} */
module.exports = async function apiLoginUser({
/**
* # API Login
*/
export default async function apiLoginUser({
encryptionKey,
email,
username,
@@ -18,7 +23,7 @@ module.exports = async function apiLoginUser({
skipPassword,
social,
useLocal,
}) {
}: APILoginFunctionParams): Promise<APILoginFunctionReturn> {
const dbFullName = database;
/**
@@ -115,8 +120,7 @@ module.exports = async function apiLoginUser({
"-" +
Math.random().toString(36).substring(2);
/** @type {import("../../../types").DATASQUIREL_LoggedInUser} */
let userPayload = {
let userPayload: DATASQUIREL_LoggedInUser = {
id: foundUser[0].id,
first_name: foundUser[0].first_name,
last_name: foundUser[0].last_name,
@@ -135,14 +139,10 @@ module.exports = async function apiLoginUser({
date: Date.now(),
};
/** @type {import("../../../types").APILoginFunctionReturn} */
const resposeObject = {
const resposeObject: APILoginFunctionReturn = {
success: true,
msg: "Login Successful",
payload:
/** @type {import("../../../types").DATASQUIREL_LoggedInUser} */ (
userPayload
),
payload: userPayload,
userId: foundUser[0].id,
csrf: csrfKey,
};
@@ -158,4 +158,4 @@ module.exports = async function apiLoginUser({
}
return resposeObject;
};
}
@@ -1,9 +0,0 @@
declare function _exports({ existingUser, database, additionalFields, useLocal, }: {
existingUser: {
[x: string]: any;
};
database?: string;
additionalFields?: string[];
useLocal?: boolean;
}): Promise<import("../../../types").APILoginFunctionReturn>;
export = _exports;
@@ -1,25 +1,22 @@
// @ts-check
import { APILoginFunctionReturn } from "../../../types";
import varDatabaseDbHandler from "../../backend/varDatabaseDbHandler";
const LOCAL_DB_HANDLER = require("../../../utils/backend/global-db/LOCAL_DB_HANDLER");
const varDatabaseDbHandler = require("../../backend/varDatabaseDbHandler");
const nodemailer = require("nodemailer");
type Param = {
existingUser: { [s: string]: any };
database?: string;
additionalFields?: string[];
useLocal?: boolean;
};
/**
* # Re-authenticate API user
* @param {object} param
* @param {Object<string, any>} param.existingUser
* @param {string} [param.database]
* @param {string[]} [param.additionalFields]
* @param {boolean} [param.useLocal]
*
* @returns {Promise<import("../../../types").APILoginFunctionReturn>}
*/
module.exports = async function apiReauthUser({
export default async function apiReauthUser({
existingUser,
database,
additionalFields,
useLocal,
}) {
}: Param): Promise<APILoginFunctionReturn> {
let foundUser =
existingUser?.id && existingUser.id.toString().match(/./)
? await varDatabaseDbHandler({
@@ -30,10 +27,6 @@ module.exports = async function apiReauthUser({
})
: null;
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
if (!foundUser || !foundUser[0])
return {
success: false,
@@ -41,17 +34,13 @@ module.exports = async function apiReauthUser({
msg: "No user found",
};
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
let csrfKey =
Math.random().toString(36).substring(2) +
"-" +
Math.random().toString(36).substring(2);
/** @type {import("../../../types").DATASQUIREL_LoggedInUser} */
let userPayload = {
let userPayload: import("../../../types").DATASQUIREL_LoggedInUser = {
id: foundUser[0].id,
first_name: foundUser[0].first_name,
last_name: foundUser[0].last_name,
@@ -80,15 +69,10 @@ module.exports = async function apiReauthUser({
});
}
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
/** ********************* Send Response */
return {
success: true,
msg: "Login Successful",
payload: userPayload,
csrf: csrfKey,
};
};
}
@@ -1,18 +0,0 @@
declare function _exports({ email, database, email_login_field, mail_domain, mail_port, sender, mail_username, mail_password, html, useLocal, response, extraCookies, }: {
email: string;
database: string;
email_login_field?: string;
mail_domain?: string;
mail_port?: number;
sender?: string;
mail_username?: string;
mail_password?: string;
html: string;
useLocal?: boolean;
response?: http.ServerResponse & {
[x: string]: any;
};
extraCookies?: import("../../../../package-shared/types").CookieObject[];
}): Promise<import("../../../types").SendOneTimeCodeEmailResponse>;
export = _exports;
import http = require("http");
@@ -1,32 +1,30 @@
// @ts-check
import varDatabaseDbHandler from "../../backend/varDatabaseDbHandler";
import nodemailer, { SendMailOptions } from "nodemailer";
import http from "http";
import getAuthCookieNames from "../../backend/cookies/get-auth-cookie-names";
import encrypt from "../../dsql/encrypt";
import serializeCookies from "../../../utils/serialize-cookies";
import { SendOneTimeCodeEmailResponse } from "../../../types";
const varDatabaseDbHandler = require("../../backend/varDatabaseDbHandler");
const nodemailer = require("nodemailer");
const http = require("http");
const getAuthCookieNames = require("../../backend/cookies/get-auth-cookie-names");
const encrypt = require("../../dsql/encrypt");
const serializeCookies = require("../../../utils/serialize-cookies");
type Param = {
email: string;
database: string;
email_login_field?: string;
mail_domain?: string;
mail_port?: number;
sender?: string;
mail_username?: string;
mail_password?: string;
html: string;
useLocal?: boolean;
response?: http.ServerResponse & { [s: string]: any };
extraCookies?: import("../../../../package-shared/types").CookieObject[];
};
/**
* # Send Email Login Code
*
* @param {object} param
* @param {string} param.email
* @param {string} param.database
* @param {string} [param.email_login_field]
* @param {string} [param.mail_domain]
* @param {number} [param.mail_port]
* @param {string} [param.sender]
* @param {string} [param.mail_username]
* @param {string} [param.mail_password]
* @param {string} param.html
* @param {boolean} [param.useLocal]
* @param {http.ServerResponse & Object<string,any>} [param.response]
* @param {import("../../../../package-shared/types").CookieObject[]} [param.extraCookies]
*
* @returns {Promise<import("../../../types").SendOneTimeCodeEmailResponse>}
*/
module.exports = async function apiSendEmailCode({
export default async function apiSendEmailCode({
email,
database,
email_login_field,
@@ -39,7 +37,7 @@ module.exports = async function apiSendEmailCode({
useLocal,
response,
extraCookies,
}) {
}: Param): Promise<SendOneTimeCodeEmailResponse> {
if (email?.match(/ /)) {
return {
success: false,
@@ -83,7 +81,11 @@ module.exports = async function apiSendEmailCode({
let transporter = nodemailer.createTransport({
host: mail_domain || process.env.DSQL_MAIL_HOST,
port: mail_port || process.env.DSQL_MAIL_PORT || 465,
port: mail_port
? mail_port
: process.env.DSQL_MAIL_PORT
? Number(process.env.DSQL_MAIL_PORT)
: 465,
secure: true,
auth: {
user: mail_username || process.env.DSQL_MAIL_EMAIL,
@@ -91,7 +93,7 @@ module.exports = async function apiSendEmailCode({
},
});
let mailObject = {};
let mailObject: SendMailOptions = {};
mailObject["from"] = `"Datasquirel SSO" <${
sender || "support@datasquirel.com"
@@ -116,13 +118,14 @@ module.exports = async function apiSendEmailCode({
});
/** @type {import("../../../types").SendOneTimeCodeEmailResponse} */
const resObject = {
success: true,
code: tempCode,
email: email,
createdAt,
msg: "Success",
};
const resObject: import("../../../types").SendOneTimeCodeEmailResponse =
{
success: true,
code: tempCode,
email: email,
createdAt,
msg: "Success",
};
if (response) {
const cookieKeyNames = getAuthCookieNames();
@@ -139,19 +142,21 @@ module.exports = async function apiSendEmailCode({
}
/** @type {import("../../../../package-shared/types").CookieObject} */
const oneTimeCookieObject = {
name: oneTimeCodeCookieName,
value: encryptedPayload,
sameSite: "Strict",
path: "/",
httpOnly: true,
secure: true,
};
const oneTimeCookieObject: import("../../../../package-shared/types").CookieObject =
{
name: oneTimeCodeCookieName,
value: encryptedPayload,
sameSite: "Strict",
path: "/",
httpOnly: true,
secure: true,
};
/** @type {import("../../../../package-shared/types").CookieObject[]} */
const cookiesObjectArray = extraCookies
? [...extraCookies, oneTimeCookieObject]
: [oneTimeCookieObject];
const cookiesObjectArray: import("../../../../package-shared/types").CookieObject[] =
extraCookies
? [...extraCookies, oneTimeCookieObject]
: [oneTimeCookieObject];
const serializedCookies = serializeCookies({
cookies: cookiesObjectArray,
@@ -167,4 +172,4 @@ module.exports = async function apiSendEmailCode({
msg: "Invalid Email/Password format",
};
}
};
}
-14
View File
@@ -1,14 +0,0 @@
declare function _exports({ payload, dbFullName, updatedUserId, useLocal, dbSchema, }: {
payload: {
[x: string]: any;
};
dbFullName: string;
updatedUserId: string | number;
useLocal?: boolean;
dbSchema?: import("../../../types").DSQL_DatabaseSchemaType;
}): Promise<{
success: boolean;
payload?: any;
msg?: string;
}>;
export = _exports;
@@ -1,29 +1,30 @@
// @ts-check
const updateDbEntry = require("../../backend/db/updateDbEntry");
const encrypt = require("../../dsql/encrypt");
const hashPassword = require("../../dsql/hashPassword");
const varDatabaseDbHandler = require("../../backend/varDatabaseDbHandler");
import updateDbEntry from "../../backend/db/updateDbEntry";
import encrypt from "../../dsql/encrypt";
import hashPassword from "../../dsql/hashPassword";
import varDatabaseDbHandler from "../../backend/varDatabaseDbHandler";
type Param = {
payload: { [s: string]: any };
dbFullName: string;
updatedUserId: string | number;
useLocal?: boolean;
dbSchema?: import("../../../types").DSQL_DatabaseSchemaType;
};
type Return = { success: boolean; payload?: any; msg?: string };
/**
* # Update API User Function
*
* @param {object} params
* @param {Object<string, any>} params.payload
* @param {string} params.dbFullName
* @param {string | number} params.updatedUserId
* @param {boolean} [params.useLocal]
* @param {import("../../../types").DSQL_DatabaseSchemaType} [params.dbSchema]
*
* @returns {Promise<{ success: boolean, payload?: any, msg?: string }>}
*/
module.exports = async function apiUpdateUser({
export default async function apiUpdateUser({
payload,
dbFullName,
updatedUserId,
useLocal,
dbSchema,
}) {
}: Param): Promise<Return> {
const existingUserQuery = `SELECT * FROM users WHERE id = ?`;
const existingUserValues = [updatedUserId];
@@ -56,7 +57,7 @@ module.exports = async function apiUpdateUser({
})();
/** @type {any} */
const finalData = {};
const finalData: any = {};
reqBodyKeys.forEach((key) => {
const targetFieldSchema = targetTableSchema?.fields?.find(
@@ -95,4 +96,4 @@ module.exports = async function apiUpdateUser({
success: true,
payload: updateUser,
};
};
}
@@ -1,12 +0,0 @@
declare function _exports({ code, clientId, clientSecret, database, additionalFields, email, additionalData, }: {
code?: string;
clientId?: string;
clientSecret?: string;
database?: string;
additionalFields?: string[];
additionalData?: {
[x: string]: string | number;
};
email?: string;
}): Promise<import("../../../../types").APILoginFunctionReturn>;
export = _exports;
@@ -1,23 +1,22 @@
// @ts-check
import handleSocialDb from "../../social-login/handleSocialDb";
import githubLogin from "../../social-login/githubLogin";
import camelJoinedtoCamelSpace from "../../../../utils/camelJoinedtoCamelSpace";
import { APILoginFunctionReturn } from "../../../../types";
const handleSocialDb = require("../../social-login/handleSocialDb");
const githubLogin = require("../../social-login/githubLogin");
const camelJoinedtoCamelSpace = require("../../../../utils/camelJoinedtoCamelSpace");
type Param = {
code?: string;
clientId?: string;
clientSecret?: string;
database?: string;
additionalFields?: string[];
additionalData?: { [s: string]: string | number };
email?: string;
};
/**
* # Login with Github
* @param {object} param
* @param {string} [param.code]
* @param {string} [param.clientId]
* @param {string} [param.clientSecret]
* @param {string} [param.database]
* @param {string[]} [param.additionalFields]
* @param {Object<string,string|number>} [param.additionalData]
* @param {string} [param.email]
*
* @returns {Promise<import("../../../../types").APILoginFunctionReturn>}
* # API Login with Github
*/
module.exports = async function apiGithubLogin({
export default async function apiGithubLogin({
code,
clientId,
clientSecret,
@@ -25,7 +24,7 @@ module.exports = async function apiGithubLogin({
additionalFields,
email,
additionalData,
}) {
}: Param): Promise<APILoginFunctionReturn> {
if (!code || !clientId || !clientSecret || !database) {
return {
success: false,
@@ -101,4 +100,4 @@ module.exports = async function apiGithubLogin({
////////////////////////////////////////////////
return { ...loggedInGithubUser };
};
}
@@ -1,2 +0,0 @@
declare const _exports: import("../../../../types").APIGoogleLoginFunction;
export = _exports;
@@ -1,41 +1,47 @@
// @ts-check
import https from "https";
import handleSocialDb from "../../social-login/handleSocialDb";
import EJSON from "../../../../utils/ejson";
import {
APIGoogleLoginFunctionParams,
APILoginFunctionReturn,
GoogleOauth2User,
} from "../../../../types";
const https = require("https");
const handleSocialDb = require("../../social-login/handleSocialDb");
const EJSON = require("../../../../utils/ejson");
/** @type {import("../../../../types").APIGoogleLoginFunction} */
module.exports = async function apiGoogleLogin({
/**
* # API google login
*/
export default async function apiGoogleLogin({
token,
database,
additionalFields,
additionalData,
}) {
}: APIGoogleLoginFunctionParams): Promise<APILoginFunctionReturn> {
try {
/** @type {import("../../../../types").GoogleOauth2User | undefined} */
const gUser = await new Promise((resolve, reject) => {
https
.request(
{
method: "GET",
hostname: "www.googleapis.com",
path: "/oauth2/v3/userinfo",
headers: {
Authorization: `Bearer ${token}`,
const gUser: GoogleOauth2User | undefined = await new Promise(
(resolve, reject) => {
https
.request(
{
method: "GET",
hostname: "www.googleapis.com",
path: "/oauth2/v3/userinfo",
headers: {
Authorization: `Bearer ${token}`,
},
},
},
(res) => {
let data = "";
res.on("data", (chunk) => {
data += chunk;
});
res.on("end", () => {
resolve(/** @type {any} */ (EJSON.parse(data)));
});
}
)
.end();
});
(res) => {
let data = "";
res.on("data", (chunk) => {
data += chunk;
});
res.on("end", () => {
resolve(EJSON.parse(data) as any);
});
}
)
.end();
}
);
if (!gUser?.email_verified) throw new Error("No Google User.");
@@ -60,7 +66,7 @@ module.exports = async function apiGoogleLogin({
const { given_name, family_name, email, sub, picture } = gUser;
/** @type {Object<string, any>} */
let payloadObject = {
let payloadObject: { [s: string]: any } = {
email: email,
first_name: given_name,
last_name: family_name,
@@ -89,7 +95,7 @@ module.exports = async function apiGoogleLogin({
////////////////////////////////////////
return { ...loggedInGoogleUser };
} catch (/** @type {any} */ error) {
} catch (/** @type {any} */ error: any) {
console.log(`apo-google-login.js ERROR: ${error.message}`);
return {
@@ -98,4 +104,4 @@ module.exports = async function apiGoogleLogin({
msg: error.message,
};
}
};
}