From 1ab41929b2625b3db419882c270af085bccbbca4 Mon Sep 17 00:00:00 2001 From: Benjamin Toby Date: Fri, 6 Dec 2024 11:35:59 +0100 Subject: [PATCH] Save before potential major change --- index.d.ts | 52 + .../functions/api/users/api-get-user.d.ts | 2 + .../functions/backend/serverError.d.ts | 14 + .../backend/varDatabaseDbHandler.d.ts | 7 + package-shared/types/index.ts | 1378 +++++++++++++++++ package-shared/utils/grab-host-names.d.ts | 24 + users/get-user.d.ts | 31 + 7 files changed, 1508 insertions(+) create mode 100644 index.d.ts create mode 100644 package-shared/functions/api/users/api-get-user.d.ts create mode 100644 package-shared/functions/backend/serverError.d.ts create mode 100644 package-shared/functions/backend/varDatabaseDbHandler.d.ts create mode 100644 package-shared/types/index.ts create mode 100644 package-shared/utils/grab-host-names.d.ts create mode 100644 users/get-user.d.ts diff --git a/index.d.ts b/index.d.ts new file mode 100644 index 0000000..dad38a0 --- /dev/null +++ b/index.d.ts @@ -0,0 +1,52 @@ +import get = require("./utils/get"); +import post = require("./utils/post"); +export namespace media { + export { uploadImage }; + export { uploadFile }; + export { deleteFile }; +} +export namespace user { + export { createUser }; + export { loginUser }; + export { sendEmailCode }; + export { logoutUser }; + export { userAuth }; + export { reAuthUser }; + export { updateUser }; + export { getUser }; + export { getToken }; + export { validateToken }; + export namespace social { + export { loginWithGoogle }; + export { loginWithGithub }; + } +} +import getSchema = require("./utils/get-schema"); +import sanitizeSql = require("./utils/functions/sanitizeSql"); +import datasquirelClient = require("./client"); +export namespace sql { + export { sqlGenerator }; + export { sqlInsertGenerator }; + export { sqlDeleteGenerator }; + export { trimSql as trim }; +} +import uploadImage = require("./utils/upload-image"); +import uploadFile = require("./utils/upload-file"); +import deleteFile = require("./utils/delete-file"); +import createUser = require("./users/add-user"); +import loginUser = require("./users/login-user"); +import sendEmailCode = require("./users/send-email-code"); +import logoutUser = require("./users/logout-user"); +import userAuth = require("./users/user-auth"); +import reAuthUser = require("./users/reauth-user"); +import updateUser = require("./users/update-user"); +import getUser = require("./users/get-user"); +import getToken = require("./users/get-token"); +import validateToken = require("./users/validate-token"); +import loginWithGoogle = require("./users/social/google-auth"); +import loginWithGithub = require("./users/social/github-auth"); +import sqlGenerator = require("./package-shared/functions/dsql/sql/sql-generator"); +import sqlInsertGenerator = require("./package-shared/functions/dsql/sql/sql-insert-generator"); +import sqlDeleteGenerator = require("./package-shared/functions/dsql/sql/sql-delete-generator"); +import trimSql = require("./package-shared/utils/trim-sql"); +export { get, post, getSchema, sanitizeSql, datasquirelClient as client }; diff --git a/package-shared/functions/api/users/api-get-user.d.ts b/package-shared/functions/api/users/api-get-user.d.ts new file mode 100644 index 0000000..fb49dc2 --- /dev/null +++ b/package-shared/functions/api/users/api-get-user.d.ts @@ -0,0 +1,2 @@ +declare const _exports: import("../../../types").APIGetUserFunction; +export = _exports; diff --git a/package-shared/functions/backend/serverError.d.ts b/package-shared/functions/backend/serverError.d.ts new file mode 100644 index 0000000..c1688ba --- /dev/null +++ b/package-shared/functions/backend/serverError.d.ts @@ -0,0 +1,14 @@ +declare function _exports({ user, message, component, noMail, req, }: { + user?: { + id?: number | string; + first_name?: string; + last_name?: string; + email?: string; + } & any; + message: string; + component?: string; + noMail?: boolean; + req?: import("next").NextApiRequest & IncomingMessage; +}): Promise; +export = _exports; +import { IncomingMessage } from "http"; diff --git a/package-shared/functions/backend/varDatabaseDbHandler.d.ts b/package-shared/functions/backend/varDatabaseDbHandler.d.ts new file mode 100644 index 0000000..5dfd99e --- /dev/null +++ b/package-shared/functions/backend/varDatabaseDbHandler.d.ts @@ -0,0 +1,7 @@ +declare function _exports({ queryString, queryValuesArray, database, tableSchema, }: { + queryString: string; + queryValuesArray?: any[]; + database?: string; + tableSchema?: import("../../types").DSQL_TableSchemaType; +}): Promise; +export = _exports; diff --git a/package-shared/types/index.ts b/package-shared/types/index.ts new file mode 100644 index 0000000..8f454bf --- /dev/null +++ b/package-shared/types/index.ts @@ -0,0 +1,1378 @@ +import type { IncomingMessage, ServerResponse } from "http"; + +import { Editor } from "tinymce"; +export type DSQL_DatabaseFullName = string; + +//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// + +export interface DSQL_DatabaseSchemaType { + dbName: string; + dbSlug: string; + dbFullName: string; + dbDescription?: string; + dbImage?: string; + tables: DSQL_TableSchemaType[]; + childrenDatabases?: DSQL_ChildrenDatabaseObject[]; + childDatabase?: boolean; + childDatabaseDbFullName?: string; + updateData?: boolean; +} + +export interface DSQL_ChildrenDatabaseObject { + dbFullName: string; +} + +//////////////////////////////////////// + +export interface DSQL_TableSchemaType { + tableName: string; + tableFullName: string; + tableDescription?: string; + fields: DSQL_FieldSchemaType[]; + indexes?: DSQL_IndexSchemaType[]; + childrenTables?: DSQL_ChildrenTablesType[]; + childTable?: boolean; + updateData?: boolean; + childTableName?: string; + childTableDbFullName?: string; + tableNameOld?: string; +} + +export interface DSQL_ChildrenTablesType { + dbNameFull: string; + tableName: string; + tableNameFull?: string; +} + +//////////////////////////////////////// + +export interface DSQL_FieldSchemaType { + fieldName?: string; + originName?: string; + updatedField?: boolean; + dataType?: string; + nullValue?: boolean; + notNullValue?: boolean; + primaryKey?: boolean; + encrypted?: boolean; + autoIncrement?: boolean; + defaultValue?: string | number; + defaultValueLiteral?: string; + foreignKey?: DSQL_ForeignKeyType; + richText?: boolean; + json?: boolean; + yaml?: boolean; + html?: boolean; + css?: boolean; + javascript?: boolean; + shell?: boolean; + newTempField?: boolean; + defaultField?: boolean; + plainText?: boolean; + unique?: boolean; + pattern?: string; + patternFlags?: string; + onUpdate?: string; + onUpdateLiteral?: string; + onDelete?: string; + onDeleteLiteral?: string; + cssFiles?: string[]; +} + +export interface DSQL_ForeignKeyType { + foreignKeyName?: string; + destinationTableName?: string; + destinationTableColumnName?: string; + destinationTableColumnType?: string; + cascadeDelete?: boolean; + cascadeUpdate?: boolean; +} + +//////////////////////////////////////// + +export interface DSQL_IndexSchemaType { + indexName?: string; + indexType?: string; + indexTableFields?: DSQL_IndexTableFieldType[]; + alias?: string; + newTempIndex?: boolean; +} + +export interface DSQL_IndexTableFieldType { + value: string; + dataType: string; +} + +export interface DSQL_MYSQL_SHOW_INDEXES_Type { + Key_name: string; + Table: string; + Column_name: string; + Collation: string; + Index_type: string; + Cardinality: string; + Index_comment: string; + Comment: string; +} + +//////////////////////////////////////// + +export interface DSQL_MYSQL_SHOW_COLUMNS_Type { + Field: string; + Type: string; + Null: string; + Key: string; + Default: string; + Extra: string; +} + +//////////////////////////////////////// + +export interface DSQL_MYSQL_FOREIGN_KEYS_Type { + CONSTRAINT_NAME: string; + CONSTRAINT_SCHEMA: string; + TABLE_NAME: string; +} + +//////////////////////////////////////// + +export interface DSQL_MYSQL_user_databases_Type { + id: number; + user_id: number; + db_full_name: string; + db_name: string; + db_slug: string; + db_image: string; + db_description: string; + active_clone: number; + active_clone_parent_db: string; + remote_connected?: number; + remote_db_full_name?: string; + remote_connection_host?: string; + remote_connection_key?: string; + remote_connection_type?: string; + user_priviledge?: string; + date_created?: string; + image_thumbnail?: string; + first_name?: string; + last_name?: string; + email?: string; +} + +export interface PackageUserLoginRequestBody { + encryptionKey: string; + payload: any; + database: string; + additionalFields?: string[]; + email_login?: boolean; + email_login_code?: string; + email_login_field?: string; + token?: boolean; + social?: boolean; + dbSchema?: DSQL_DatabaseSchemaType; + skipPassword?: boolean; +} + +export interface PackageUserLoginLocalBody { + payload: any; + additionalFields?: string[]; + email_login?: boolean; + email_login_code?: string; + email_login_field?: string; + token?: boolean; + social?: boolean; + dbSchema?: DSQL_DatabaseSchemaType; + skipPassword?: boolean; +} + +type Request = IncomingMessage; + +type Response = ServerResponse; + +type ImageInputFileToBase64FunctionReturn = { + imageBase64: string; + imageBase64Full: string; + imageName: string; + imageSize: number; +}; + +export interface GetReqQueryObject { + db: string; + query: string; + queryValues?: string; + tableName?: string; +} + +type SerializeQueryFnType = (param0: SerializeQueryParams) => string; + +export interface SerializeQueryParams { + query: any; +} + +// @ts-check + +export type DATASQUIREL_LoggedInUser = { + id?: number; + first_name: string; + last_name: string; + email: string; + phone?: string; + user_type?: string; + username?: string; + image?: string; + image_thumbnail?: string; + address?: string; + city?: string; + state?: string; + country?: string; + zip_code?: string; + social_login?: number; + social_platform?: string; + social_id?: string; + more_user_data?: string; + verification_status?: number; + loan_officer_id?: number; + is_admin?: number; + admin_level?: number; + admin_permissions?: string; + uuid?: string; + temp_login_code?: string; + date_created?: string; + date_created_code?: number; + date_created_timestamp?: string; + date_updated?: string; + date_updated_code?: number; + date_updated_timestamp?: string; + csrf_k?: string; + logged_in_status?: boolean; + date?: number; + more_data?: any; +} & { + [key: string]: any; +}; + +export interface AuthenticatedUser { + success: boolean; + payload: DATASQUIREL_LoggedInUser | null; + msg?: string; + userId?: number; +} + +export interface SuccessUserObject { + id: number; + first_name: string; + last_name: string; + email: string; +} + +export interface AddUserFunctionReturn { + success: boolean; + payload?: SuccessUserObject | null; + msg?: string; + sqlResult?: any; +} + +export interface GoogleIdentityPromptNotification { + getMomentType: () => string; + getDismissedReason: () => string; + getNotDisplayedReason: () => string; + getSkippedReason: () => string; + isDismissedMoment: () => boolean; + isDisplayMoment: () => boolean; + isDisplayed: () => boolean; + isNotDisplayed: () => boolean; + isSkippedMoment: () => boolean; +} + +export type UserDataPayload = { + first_name: string; + last_name: string; + email: string; + password: string; + username: string; +} & { + [key: string]: any; +}; + +export interface GetUserFunctionReturn { + success: boolean; + payload: { + id: number; + first_name: string; + last_name: string; + username: string; + email: string; + phone: string; + social_id: [string]; + image: string; + image_thumbnail: string; + verification_status: [number]; + } | null; +} + +export interface ReauthUserFunctionReturn { + success: boolean; + payload: DATASQUIREL_LoggedInUser | null; + msg?: string; + userId?: number; + token?: string; +} + +export interface UpdateUserFunctionReturn { + success: boolean; + payload?: Object[] | string; +} + +export interface GetReturn { + success: boolean; + payload?: any; + msg?: string; + error?: string; + schema?: DSQL_TableSchemaType; +} + +export interface GetSchemaRequestQuery { + database?: string; + table?: string; + field?: string; + user_id?: string | number; +} + +export interface GetSchemaAPICredentialsParam { + key: string; +} + +export type GetSchemaAPIParam = GetSchemaRequestQuery & + GetSchemaAPICredentialsParam; + +export interface PostReturn { + success: boolean; + payload?: Object[] | string | PostInsertReturn; + msg?: string; + error?: any; + schema?: DSQL_TableSchemaType; +} + +export interface PostDataPayload { + action: "insert" | "update" | "delete"; + table: string; + data?: object; + identifierColumnName?: string; + identifierValue?: string; + duplicateColumnName?: string; + duplicateColumnValue?: string; + update?: boolean; +} + +export interface LocalPostReturn { + success: boolean; + payload?: any; + msg?: string; + error?: string; +} + +export interface LocalPostQueryObject { + query: string | PostDataPayload; + tableName?: string; + queryValues?: string[]; +} + +export interface PostInsertReturn { + fieldCount: number; + affectedRows: number; + insertId: number; + serverStatus: number; + warningCount: number; + message: string; + protocol41: boolean; + changedRows: number; +} + +export interface UserType { + id: number; + stripe_id?: string; + first_name: string; + last_name: string; + email: string; + bio?: string; + username?: string; + image: string; + image_thumbnail: string; + social_id?: string; + verification_status?: number; + social_platform?: string; + social_login?: number; + date?: number; + phone?: number | string; + csrf_k: string; + logged_in_status: boolean; +} + +export interface ApiKeyDef { + name: string; + scope: string; + date_created: string; + apiKeyPayload: string; +} + +export interface MetricsType { + dbCount: number; + tablesCount: number; + mediaCount: number; + apiKeysCount: number; +} + +export interface DashboardContextType { + user?: UserType; + databases?: DSQL_MYSQL_user_databases_Type[]; + setTargetDatabase?: React.Dispatch< + React.SetStateAction + >; + targetDatabase?: DSQL_MYSQL_user_databases_Type; + metrics?: MetricsType; +} + +export interface AddDbContextType { + user?: UserType; + databases?: DSQL_MYSQL_user_databases_Type[]; + dbImage?: string | null | ImageObjectType; + setDbImage?: React.Dispatch< + React.SetStateAction + >; + query?: any; + duplicateDb?: DSQL_MYSQL_user_databases_Type; +} + +export interface EditDbContextType { + user?: UserType; + database?: DSQL_MYSQL_user_databases_Type; + dbImage?: string | null | ImageObjectType; + setDbImage?: React.Dispatch< + React.SetStateAction + >; +} + +export interface RichTextEditorsRefArray { + fieldName: string; + ref: React.MutableRefObject; +} + +export interface JSONTextEditorsRefArray { + fieldName: string; + ref: React.MutableRefObject; +} + +export interface TableEntriesContextType { + user: UserType; + database: DSQL_MYSQL_user_databases_Type; + table: DSQL_TableSchemaType; + dbSchemaData: DSQL_DatabaseSchemaType[]; + entries: any[]; + targetEntry?: any; + setTargetEntry: React.Dispatch>; + richTextEditors: React.MutableRefObject; + jsonTextEditors: React.MutableRefObject; + query?: any; + confirmedDelegetedUser?: any; + activeEntries: any[] | null; + setActiveEntries: React.Dispatch>; + targetField: React.MutableRefObject; + searchTerm: React.MutableRefObject; + entriesCount: number; +} + +export interface AddEntryContextType { + user: UserType; + database: DSQL_MYSQL_user_databases_Type; + table: DSQL_TableSchemaType; + dbSchemaData: DSQL_DatabaseSchemaType[]; + richTextEditors: React.MutableRefObject; + jsonTextEditors: React.MutableRefObject; + query: any; + duplicateEntry?: any; + confirmedDelegetedUser: any; +} + +export interface UserDatabasesContextType { + user: UserType; + users: any[]; + targetUser: any; + setTargetUser: React.Dispatch>; + databases: DSQL_MYSQL_user_databases_Type[]; +} + +export interface SettingsPageContextType { + user: UserType; + image: any; + setImage: React.Dispatch>; + activeUser: any; +} + +export interface MediaFolderPageContextType { + user: UserType; + media: any[]; + targetMedia: any; + setTargetMedia: React.Dispatch>; + folders: any[]; + query: any; + staticHost: string; + folder: string; +} + +export interface TablesContextType { + user: UserType; + database: DSQL_MYSQL_user_databases_Type; + tables: MYSQL_user_database_tables_table_def[]; + targetTable: MYSQL_user_database_tables_table_def | null; + setTargetTable: React.Dispatch< + React.SetStateAction + >; + query: any; + confirmedDelegetedUser: any; +} + +export interface EditTableContextType { + user: UserType; + database: DSQL_MYSQL_user_databases_Type; + table: DSQL_TableSchemaType; + tableFields: DSQL_FieldSchemaType[]; + setTableFields: React.Dispatch< + React.SetStateAction + >; + targetField: DSQL_FieldSchemaType | null; + setTargetField: React.Dispatch< + React.SetStateAction + >; + pageRefresh: number; + setPageRefresh: React.Dispatch>; + refreshFieldsListRef: React.MutableRefObject< + React.Dispatch> | undefined + >; + dbSchemaData: DSQL_DatabaseSchemaType[]; + query: any; + confirmedDelegetedUser: any; +} + +export interface SingleDatabaseContextType { + user: UserType; + database: DSQL_MYSQL_user_databases_Type; + tables: MYSQL_user_database_tables_table_def[]; + targetTable: MYSQL_user_database_tables_table_def | null; + setTargetTable: React.Dispatch< + React.SetStateAction + >; + query: any; + confirmedDelegetedUser: any; +} + +export interface ApiKeysContextType { + user: UserType; + apiKeys: any[]; + setApiKeys: React.Dispatch>; + targetApiKey: any | null; + setTargetApiKey: React.Dispatch>; + newApiKey: any | null; + setNewApiKey: React.Dispatch>; +} + +export interface LoginFormContextType { + user?: UserType | null; + loading: boolean; + setLoading: React.Dispatch>; + alert: string | boolean; + setAlert: React.Dispatch>; +} + +export interface CreateAccountContextType { + user?: UserType | null; + query: CreateAccountQueryType; + invitingUser: any; +} + +export interface CreateAccountQueryType { + invite?: number; + database_access?: string; + priviledge?: string; + email?: string; +} + +export interface DocsAsidePageObject { + id: number; + title: string; + slug: string; + parent_id?: number; + level?: number; +} + +export interface AllUserUsersContextType { + user: UserType; + users: MYSQL_delegated_users_table_def[]; + targetUser: MYSQL_user_users_table_def | null; + setTargetUser: React.Dispatch< + React.SetStateAction + >; + databases: DSQL_MYSQL_user_databases_Type[]; + pendingInvitations: MYSQL_invitations_table_def[]; + pendingInvitationsReceived: any[]; + adminUsers: any[]; + invitedAccounts: any[]; +} + +export interface AddSocialLoginContextType { + user: UserType; + database: DSQL_MYSQL_user_databases_Type; + query: any; + socialLogins: SocialLoginObjectType[]; +} + +export interface DelegatedDbContextType { + user: UserType; + users: MYSQL_user_users_table_def[]; + targetUser: MYSQL_user_users_table_def | null; + setTargetUser: React.Dispatch< + React.SetStateAction + >; + database: DSQL_MYSQL_user_databases_Type; +} + +export interface AddUserUserContextType { + user: UserType; + database: DSQL_MYSQL_user_databases_Type; + table: DSQL_TableSchemaType; + query: any; + confirmedDelegetedUser: any; +} + +export interface UserUsersContextType { + user: UserType; + users: MYSQL_user_users_table_def[]; + targetUser: MYSQL_user_users_table_def; + setTargetUser: React.Dispatch< + React.SetStateAction + >; + database: DSQL_MYSQL_user_databases_Type; + table: DSQL_TableSchemaType; + dbSchemaData: DSQL_DatabaseSchemaType[]; + query: any; + confirmedDelegetedUser: any; +} + +export interface DatabaseSingleUserContextType { + user: UserType; + database: DSQL_MYSQL_user_databases_Type; + singleUser: MYSQL_user_users_table_def; + table: DSQL_TableSchemaType; + dbSchemaData: DSQL_DatabaseSchemaType[]; + query: any; + confirmedDelegetedUser: any; +} + +export interface SingleUserUserContextType { + user: UserType; + singleUser: MYSQL_user_users_table_def; +} + +export interface AddUserContextType { + user: UserType; + users: MYSQL_delegated_users_table_def[]; + databases: DSQL_MYSQL_user_databases_Type[]; + query: any; +} + +export interface MediaContextType { + user: UserType; + media: MYSQL_user_media_table_def[]; + targetMedia: MYSQL_user_media_table_def | null; + setTargetMedia: React.Dispatch< + React.SetStateAction + >; + folders: string[]; + staticHost: string; +} + +export interface MediaSubFolderContextType { + user: UserType; + media: MYSQL_user_media_table_def[]; + targetMedia: MYSQL_user_media_table_def | null; + setTargetMedia: React.Dispatch< + React.SetStateAction + >; + folders: string[]; + query: any; + folder: string; + staticHost: string; +} + +export interface FieldsContextType { + user: UserType; + database: DSQL_MYSQL_user_databases_Type; + table: DSQL_TableSchemaType; + dbSchemaData: DSQL_DatabaseSchemaType[]; + targetField: DSQL_FieldSchemaType | null; + setTargetField: React.Dispatch< + React.SetStateAction + >; + refreshFieldsListRef: React.MutableRefObject< + React.Dispatch> | undefined + >; + tableFields: DSQL_FieldSchemaType[]; + setTableFields: React.Dispatch< + React.SetStateAction + >; + updateTableAfterFieldsUpdateFunction: () => void; + query: any; + confirmedDelegetedUser: any; +} + +export interface SingleTableContextType { + user: UserType; + database: DSQL_MYSQL_user_databases_Type; + table: DSQL_TableSchemaType; + tableRecord: MYSQL_user_database_tables_table_def; + tableFields: DSQL_FieldSchemaType[]; + setTableFields: React.Dispatch< + React.SetStateAction + >; + tableIndexes: DSQL_IndexSchemaType[]; + setTableIndexes: React.Dispatch< + React.SetStateAction + >; + dbSchemaData: DSQL_DatabaseSchemaType[]; + entries: any[]; + targetEntry: any; + setTargetEntry: React.Dispatch>; + richTextEditors: React.MutableRefObject; + jsonTextEditors: React.MutableRefObject; + query: any; + confirmedDelegetedUser: any; + targetField: DSQL_FieldSchemaType | null; + setTargetField: React.Dispatch< + React.SetStateAction + >; + refreshFieldsListRef: React.MutableRefObject< + React.Dispatch> + >; + updateTableAfterFieldsUpdateFunction: () => void; + entriesCount: number; +} + +export interface SingleEntryContextType { + user: UserType; + database: DSQL_MYSQL_user_databases_Type; + table: DSQL_TableSchemaType; + dbSchemaData: DSQL_DatabaseSchemaType[]; + entry: any; + targetEntry: any; + setTargetEntry: React.Dispatch>; + richTextEditors: React.MutableRefObject; + jsonTextEditors: React.MutableRefObject; + query: any; + confirmedDelegetedUser: any; + prevEntry: any; + nextEntry: any; +} + +export interface UserSchemaContextType { + user: UserType; + dbSchemaData: DSQL_DatabaseSchemaType[]; +} + +export interface ConnectContextType { + user: UserType; + query: any; + mariadbUserCred: MariaDBUserCredType; + mariadbUsers: MYSQL_mariadb_users_table_def[]; + targetMariadbUser: MYSQL_mariadb_users_table_def | null; + setTargetMariadbUser: React.Dispatch< + React.SetStateAction + >; + refresh: number; + setRefresh: React.Dispatch>; +} + +export interface MYSQL_mariadb_users_table_def { + id?: number; + user_id?: number; + username?: string; + host?: string; + password?: string; + primary?: number; + grants?: string; + date_created?: string; + date_created_code?: number; + date_created_timestamp?: string; + date_updated?: string; + date_updated_code?: number; + date_updated_timestamp?: string; +} + +export interface DbContextType { + user?: UserType; + databases?: DSQL_MYSQL_user_databases_Type[]; + targetDatabase?: DSQL_MYSQL_user_databases_Type; + setTargetDatabase?: React.Dispatch< + React.SetStateAction + >; +} + +export interface MariaDBUserCredType { + mariadb_user?: string; + mariadb_host?: string; + mariadb_pass?: string; +} + +export interface AddTableContextType { + user: UserType; + dbSchemaData: DSQL_DatabaseSchemaType[]; + database: DSQL_MYSQL_user_databases_Type; + tables: DSQL_TableSchemaType[]; + tableFields: DSQL_FieldSchemaType[]; + setTableFields: React.Dispatch< + React.SetStateAction + >; + targetField: DSQL_FieldSchemaType | null; + setTargetField: React.Dispatch< + React.SetStateAction + >; + pageRefresh: number | null; + setPageRefresh: React.Dispatch>; + refreshFieldsListRef: React.MutableRefObject< + React.Dispatch> + >; + query: any; +} + +export interface DbSchemaContextType { + user: UserType; + database: DSQL_MYSQL_user_databases_Type; + dbImage: string; + setDbImage: React.Dispatch>; + dbSchemaData: DSQL_DatabaseSchemaType[]; + tables: any[]; +} + +export interface DbShellContextType { + user?: UserType; + database?: DSQL_MYSQL_user_databases_Type; + dbImage?: string; + setDbImage?: React.Dispatch>; + dbSchemaData?: DSQL_DatabaseSchemaType[]; + tables?: any[]; +} + +export interface DbConnectContextType { + user: UserType; + database: DSQL_MYSQL_user_databases_Type; + targetDbSchema: DSQL_DatabaseSchemaType; + query: any; +} + +export interface ImageObjectType { + imageName?: string; + mimeType?: string; + imageSize?: number; + private?: boolean; + imageBase64?: string; + imageBase64Full?: string; +} + +export interface FileObjectType { + fileName?: string; + private?: boolean; + fileType?: string; + fileSize?: number; + fileBase64?: string; + fileBase64Full?: string; +} + +export interface SocialLoginObjectType { + platform?: string; + paradigm?: string; + clientId?: string; + clientSecret?: string; + callbackUrl?: string; + domain1?: string; + domain2?: string; + domain3?: string; +} + +export interface DbConnectType { + url: string; + key: string; + database: DSQL_MYSQL_user_databases_Type; + dbSchema: DSQL_DatabaseSchemaType; + type: "pull" | "push"; + remoteDbs?: DSQL_DatabaseSchemaType[]; + targetDb?: DSQL_DatabaseSchemaType; +} + +export interface MYSQL_MediaType { + id?: number; + user_id?: number; + media_name?: string; + folder?: string; + media_url?: string; + media_thumbnail_url?: string; + media_type?: string; + width?: string; + height?: string; + size?: string; + private?: string; +} + +export interface UserFileObject { + title?: string; + path?: string; + data?: string; +} + +export interface UserFileObject2 { + type?: string; + name?: string; + root?: string; + content?: UserFileObject2[]; +} + +export interface MYSQL_user_users_table_def { + id?: number; + user_id?: number; + invited_user_id?: number; + database?: string; + database_access?: string; + first_name?: string; + last_name?: string; + email?: string; + username?: string; + password?: string; + phone?: string; + user_type?: string; + user_priviledge?: string; + image?: string; + image_thumbnail?: string; + city?: string; + state?: string; + country?: string; + zip_code?: string; + address?: string; + social_login?: number; + social_platform?: string; + social_id?: string; + verification_status?: number; + more_user_data?: string; + date_created?: string; + date_created_code?: number; + date_created_timestamp?: string; + date_updated?: string; + date_updated_code?: number; + date_updated_timestamp?: string; + inviteeFirstName?: string; + inviteeLastName?: string; + inviteeEmail?: string; + inviteeImage?: string; +} + +export interface MYSQL_user_database_tables_table_def { + id?: number; + user_id?: number; + db_id?: number; + db_slug?: string; + table_name?: string; + table_slug?: string; + table_description?: string; + child_table?: number; + child_table_parent_database?: string; + child_table_parent_table?: string; + date_created?: string; + date_created_code?: number; + date_created_timestamp?: string; + date_updated?: string; + date_updated_code?: number; + date_updated_timestamp?: string; +} + +export interface MYSQL_user_media_table_def { + id?: number; + user_id?: number; + media_name?: string; + folder?: string; + media_url?: string; + media_thumbnail_url?: string; + media_path?: string; + media_thumbnail_path?: string; + media_type?: string; + width?: number; + height?: number; + size?: number; + private?: number; + date_created?: string; + date_created_code?: number; + date_created_timestamp?: string; + date_updated?: string; + date_updated_code?: number; + date_updated_timestamp?: string; +} + +export interface MYSQL_delegated_users_table_def { + id?: number; + user_id?: number; + delegated_user_id?: number; + permissions?: string; + permission_level_code?: number; + date_created?: string; + date_created_code?: number; + date_created_timestamp?: string; + date_updated?: string; + date_updated_code?: number; + date_updated_timestamp?: string; +} + +export interface MYSQL_invitations_table_def { + id?: number; + inviting_user_id?: number; + invited_user_email?: string; + invitation_status?: string; + database_access?: string; + priviledge?: string; + db_tables_data?: string; + date_created?: string; + date_created_code?: number; + date_created_timestamp?: string; + date_updated?: string; + date_updated_code?: number; + date_updated_timestamp?: string; +} + +export interface MYSQL_docs_pages_table_def { + id?: number; + title?: string; + slug?: string; + description?: string; + content?: string; + text_content?: string; + level?: number; + page_order?: number; + parent_id?: number; + date_created?: string; + date_created_code?: number; + date_created_timestamp?: string; + date_updated?: string; + date_updated_code?: number; + date_updated_timestamp?: string; +} + +export interface MYSQL_delegated_user_tables_table_def { + id?: number; + delegated_user_id?: number; + root_user_id?: number; + database?: string; + table?: string; + priviledge?: string; + date_created?: string; + date_created_code?: number; + date_created_timestamp?: string; + date_updated?: string; + date_updated_code?: number; + date_updated_timestamp?: string; +} + +export type ApiKeyObject = { + user_id: string | number; + full_access?: boolean; + sign: string; + date_code: number; + target_database?: string; + target_table?: string; +}; + +export type AddApiKeyRequestBody = { + api_key_name: string; + api_key_slug: string; + api_key_scope?: "fullAccess" | "readOnly"; + target_database?: string; + target_table?: string; +}; + +export type CheckApiCredentialsFn = ( + param: CheckApiCredentialsFnParam +) => ApiKeyObject | null | undefined; +export type CheckApiCredentialsFnParam = { + key?: string; + database?: string; + table?: string; + user_id?: string | number; +}; + +export type FetchApiFn = ( + url: string, + options?: FetchApiOptions, + contentType?: "json" | "text" | "html" | "blob" | "file" +) => Promise; + +export type FetchApiOptions = RequestInit & { + method: + | "POST" + | "GET" + | "DELETE" + | "PUT" + | "PATCH" + | "post" + | "get" + | "delete" + | "put" + | "patch"; + body?: object | string; + headers?: FetchHeader; + query?: { [key: string]: any }; +}; + +export type AuthCsrfHeaderName = "x-csrf-auth"; + +type FetchHeader = HeadersInit & { + [key in AuthCsrfHeaderName]?: string | null; +} & { + [key: string]: any; +}; + +export type FetchApiReturn = { + success: boolean; + payload: any; + msg?: string; + [key: string]: any; +}; + +export type ServerQueryParam = { + selectFields?: string[]; + query?: ServerQueryQueryObject; + limit?: number; + order?: { + field: string; + strategy: "ASC" | "DESC"; + }; + searchOperator?: "AND" | "OR"; + searchEquality?: "EQUAL" | "LIKE"; + addUserId?: { + fieldName: string; + }; + join?: ServerQueryParamsJoin[]; +} & { + [key: string]: any; +}; + +export type ServerQueryQueryObject = + { + [key in keyof T]: { + value: string | string[]; + operator?: "AND" | "OR"; + equality?: "EQUAL" | "LIKE"; + tableName?: string; + }; + }; + +export type FetchDataParams = { + path: string; + method?: "GET" | "POST" | "PATCH" | "PUT" | "DELETE"; + body?: object | string; + query?: AuthFetchQuery; + tableName?: string; +}; + +export type AuthFetchQuery = ServerQueryParam & { + [key: string]: any; +}; + +export type ServerQueryParamsJoin< + Table extends string = string, + Field extends object = { [key: string]: any } +> = { + joinType: "INNER JOIN" | "JOIN" | "LEFT JOIN" | "RIGHT JOIN"; + tableName: Table; + match?: + | ServerQueryParamsJoinMatchObject + | ServerQueryParamsJoinMatchObject[]; + selectFields?: ( + | keyof Field + | { + field: keyof Field; + alias?: string; + } + )[]; +}; + +export type ServerQueryParamsJoinMatchObject< + Field extends object = { [key: string]: any } +> = { + /** Field name from the **Root Table** */ + source: string | ServerQueryParamsJoinMatchSourceTargetObject; + /** Field name from the **Join Table** */ + target?: keyof Field | ServerQueryParamsJoinMatchSourceTargetObject; + /** A literal value: No source and target Needed! */ + targetLiteral?: string; +}; + +export type ServerQueryParamsJoinMatchSourceTargetObject = { + tableName: string; + fieldName: string; +}; + +export type SqlGeneratorFn = (Param0: { + genObject?: ServerQueryParam; + tableName: string; +}) => + | { + string: string; + values: string[]; + } + | undefined; + +export type ApiConnectBody = { + url: string; + key: string; + database: DSQL_MYSQL_user_databases_Type; + dbSchema: DSQL_DatabaseSchemaType; + type: "pull" | "push"; + user_id?: string | number; +}; + +export type SuUserType = { + email: string; + password: string; + authKey: string; + logged_in_status: boolean; + date: number; +}; + +export type MariadbRemoteServerObject = { + host: string; + port: number; + primary?: boolean; + loadBalanced?: boolean; + users?: MariadbRemoteServerUserObject[]; +}; + +export type MariadbRemoteServerUserObject = { + name: string; + password: string; + host: string; +}; + +export type APILoginFunctionParams = { + encryptionKey: string; + email: string; + username?: string; + password?: string; + database: string; + additionalFields?: string[]; + email_login?: boolean; + email_login_code?: string; + email_login_field?: string; + token?: boolean; + skipPassword?: boolean; + social?: boolean; +}; +export type APILoginFunctionReturn = { + success: boolean; + msg?: string; + payload?: DATASQUIREL_LoggedInUser | null; + userId?: number | string; +}; +export type APILoginFunction = ( + params: APILoginFunctionParams +) => Promise; + +export type APICreateUserFunctionParams = { + encryptionKey: string; + payload: any; + database: string; + userId?: string | number; +}; + +export type APICreateUserFunction = ( + params: APICreateUserFunctionParams +) => Promise; + +/** + * API Get User Function + */ +export type APIGetUserFunctionParams = { + fields: string[]; + dbFullName: string; + userId: string | number; +}; + +export type APIGetUserFunction = ( + params: APIGetUserFunctionParams +) => Promise; + +/** + * API Google Login Function + */ +export type APIGoogleLoginFunctionParams = { + clientId: string; + token: string; + database: string; + userId: string | number; + additionalFields?: { [key: string]: any }; + res: any; +}; + +export type APIGoogleLoginFunctionReturn = { + dsqlUserId?: number | string; +} & HandleSocialDbFunctionReturn; + +export type APIGoogleLoginFunction = ( + params: APIGoogleLoginFunctionParams +) => Promise; + +/** + * Handle Social DB Function + */ +export type HandleSocialDbFunctionParams = { + database?: string; + social_id: string | number; + email: string; + social_platform: string; + payload: any; + res?: ServerResponse; + invitation?: any; + supEmail?: string; + additionalFields?: object; +}; + +export type HandleSocialDbFunctionReturn = { + success: boolean; + user?: null; + msg?: string; + social_id?: string | number; + social_platform?: string; + payload?: any; + alert?: boolean; + newUser?: any; + error?: any; +} | null; + +/** + * Handle Social User Auth on Datasquirel Database + * ============================================================================== + * + * @description This function handles all social login logic after the social user + * has been authenticated and userpayload is present. The payload MUST contain the + * specified fields because this funciton will create a new user if the authenticated + * user does not exist. + * + * @param {HandleSocialDbFunctionParams} params - function parameters inside an object + * + * @returns {Promise} - Response object + */ +export type HandleSocialDbFunction = ( + params: HandleSocialDbFunctionParams +) => Promise; + +export type ApiReauthUserReturn = { + success: boolean; + payload?: { [key: string]: any } | null; + msg?: string; + userId?: string | number; +}; diff --git a/package-shared/utils/grab-host-names.d.ts b/package-shared/utils/grab-host-names.d.ts new file mode 100644 index 0000000..66354cb --- /dev/null +++ b/package-shared/utils/grab-host-names.d.ts @@ -0,0 +1,24 @@ +export = grabHostNames; +/** + * @typedef {object} GrabHostNamesReturn + * @property {string} host + * @property {number | string} port + * @property {typeof http | typeof https} scheme + * @property {string | number} user_id + */ +/** + * # Grab Names For Query + * @returns {GrabHostNamesReturn} + */ +declare function grabHostNames(): GrabHostNamesReturn; +declare namespace grabHostNames { + export { GrabHostNamesReturn }; +} +type GrabHostNamesReturn = { + host: string; + port: number | string; + scheme: typeof http | typeof https; + user_id: string | number; +}; +import http = require("http"); +import https = require("https"); diff --git a/users/get-user.d.ts b/users/get-user.d.ts new file mode 100644 index 0000000..63e4479 --- /dev/null +++ b/users/get-user.d.ts @@ -0,0 +1,31 @@ +export = getUser; +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** ****************************************************************************** */ +/** + * ============================================================================== + * Main Function + * ============================================================================== + * @async + * + * @param {object} params - Single Param object containing params + * @param {String} params.key - API Key + * @param {String} params.database - Target Database + * @param {number} params.userId - user id + * @param {string[]} [params.fields] - fields to select + * @param {boolean} [params.user_id] - User ID + * @param {boolean} [params.useLocal] - Whether to use a remote database instead of API + * + * @returns { Promise} + */ +declare function getUser({ key, userId, database, fields, user_id, useLocal }: { + key: string; + database: string; + userId: number; + fields?: string[]; + user_id?: boolean; + useLocal?: boolean; +}): Promise;