forked from React-Group/interstellar_ai
		
	Reviewed-on: https://interstellardevelopment.org/code/code/React-Group/interstellar_ai/pulls/137 Reviewed-by: Patrick <patrick_pluto@noreply.localhost> Co-authored-by: sageTheDM <info@photofuel.tech> Co-committed-by: sageTheDM <info@photofuel.tech>
		
			
				
	
	
		
			152 lines
		
	
	
	
		
			5.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			152 lines
		
	
	
	
		
			5.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import axios from "axios";
 | 
						|
 | 
						|
// Construct the base API URL based on the environment
 | 
						|
const apiURL = new URL("http://localhost:5000/interstellar_ai/db");
 | 
						|
if (typeof window !== 'undefined') {
 | 
						|
  apiURL.hostname = window.location.hostname; // Set hostname for browsers
 | 
						|
} else {
 | 
						|
  apiURL.hostname = "localhost"; // Default to localhost for non-browser environments
 | 
						|
}
 | 
						|
 | 
						|
// Function to send data to the database and return a success status
 | 
						|
export const sendToDatabase = async (data: object): Promise<boolean> => {
 | 
						|
  try {
 | 
						|
    const response = await axios.post(apiURL.href, data);
 | 
						|
    const status = response.data.status;
 | 
						|
    const success = response.data.response;
 | 
						|
    postMessage({ status, success }); // Send status back to the main thread
 | 
						|
    return success; // Return success status
 | 
						|
  } catch (error) {
 | 
						|
    postMessage({ status: 500, success: false }); // Handle errors
 | 
						|
    console.log(error);
 | 
						|
    return false; // Return false on error
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
// Function to send data and get a string response
 | 
						|
export const sendToDatabaseAndGetString = async (data: object): Promise<string> => {
 | 
						|
  try {
 | 
						|
    const response = await axios.post(apiURL.href, data);
 | 
						|
    const status = response.data.status;
 | 
						|
    const success = response.data.response;
 | 
						|
    postMessage({ status, success });
 | 
						|
    return success; // Return response string
 | 
						|
  } catch (error) {
 | 
						|
    postMessage({ status: 500, success: false });
 | 
						|
    console.log(error);
 | 
						|
    return "false"; // Return "false" on error
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
// Functions for each action
 | 
						|
export const createAccount = async (username: string, email: string, password: string) => {
 | 
						|
  const data = {
 | 
						|
    action: "create_account",
 | 
						|
    username: username,
 | 
						|
    email: email,
 | 
						|
    password: password,
 | 
						|
  };
 | 
						|
  return await sendToDatabase(data); // Send account creation request
 | 
						|
};
 | 
						|
 | 
						|
export const changePassword = async (usernameOrEmail: string, password: string, newPassword: string) => {
 | 
						|
  const data = {
 | 
						|
    action: "change_password",
 | 
						|
    username: usernameOrEmail.includes('@') ? undefined : usernameOrEmail,
 | 
						|
    email: usernameOrEmail.includes('@') ? usernameOrEmail : undefined,
 | 
						|
    password,
 | 
						|
    new_password: newPassword,
 | 
						|
  };
 | 
						|
  return await sendToDatabase(data); // Send password change request
 | 
						|
};
 | 
						|
 | 
						|
export const getSettings = async (usernameOrEmail: string, password: string) => {
 | 
						|
  const data = {
 | 
						|
    action: "get_settings",
 | 
						|
    username: usernameOrEmail.includes('@') ? undefined : usernameOrEmail,
 | 
						|
    email: usernameOrEmail.includes('@') ? usernameOrEmail : undefined,
 | 
						|
    password,
 | 
						|
  };
 | 
						|
  return await sendToDatabaseAndGetString(data); // Get user settings
 | 
						|
};
 | 
						|
 | 
						|
export const changeSettings = async (usernameOrEmail: string, password: string, newData: object) => {
 | 
						|
  const data = {
 | 
						|
    action: "change_settings",
 | 
						|
    username: usernameOrEmail.includes('@') ? undefined : usernameOrEmail,
 | 
						|
    email: usernameOrEmail.includes('@') ? usernameOrEmail : undefined,
 | 
						|
    password,
 | 
						|
    data: newData,
 | 
						|
  };
 | 
						|
  return await sendToDatabase(data); // Send settings change request
 | 
						|
};
 | 
						|
 | 
						|
export const getHistory = async (usernameOrEmail: string, password: string) => {
 | 
						|
  const data = {
 | 
						|
    action: "get_history",
 | 
						|
    username: usernameOrEmail.includes('@') ? undefined : usernameOrEmail,
 | 
						|
    email: usernameOrEmail.includes('@') ? usernameOrEmail : undefined,
 | 
						|
    password,
 | 
						|
  };
 | 
						|
  return await sendToDatabaseAndGetString(data); // Get user history
 | 
						|
};
 | 
						|
 | 
						|
export const changeHistory = async (usernameOrEmail: string, password: string, newData: object) => {
 | 
						|
  const data = {
 | 
						|
    action: "change_history",
 | 
						|
    username: usernameOrEmail.includes('@') ? undefined : usernameOrEmail,
 | 
						|
    email: usernameOrEmail.includes('@') ? usernameOrEmail : undefined,
 | 
						|
    password,
 | 
						|
    data: newData,
 | 
						|
  };
 | 
						|
  return await sendToDatabase(data); // Send history change request
 | 
						|
};
 | 
						|
 | 
						|
export const getEmail = async (usernameOrEmail: string, password: string): Promise<string> => {
 | 
						|
  const data = {
 | 
						|
    action: "get_email",
 | 
						|
    username: usernameOrEmail.includes('@') ? undefined : usernameOrEmail,
 | 
						|
    email: usernameOrEmail.includes('@') ? usernameOrEmail : undefined,
 | 
						|
    password,
 | 
						|
  };
 | 
						|
  return await sendToDatabaseAndGetString(data); // Get user email
 | 
						|
};
 | 
						|
 | 
						|
export const getName = async (usernameOrEmail: string, password: string): Promise<string> => {
 | 
						|
  const data = {
 | 
						|
    action: "get_name",
 | 
						|
    username: usernameOrEmail.includes('@') ? undefined : usernameOrEmail,
 | 
						|
    email: usernameOrEmail.includes('@') ? usernameOrEmail : undefined,
 | 
						|
    password,
 | 
						|
  };
 | 
						|
  return await sendToDatabaseAndGetString(data); // Get user name
 | 
						|
};
 | 
						|
 | 
						|
export const checkCredentials = async (usernameOrEmail: string, password: string) => {
 | 
						|
  const data = {
 | 
						|
    action: "check_credentials",
 | 
						|
    username: usernameOrEmail.includes('@') ? undefined : usernameOrEmail,
 | 
						|
    email: usernameOrEmail.includes('@') ? usernameOrEmail : undefined,
 | 
						|
    password,
 | 
						|
  };
 | 
						|
  const sendBack = await sendToDatabase(data); // Check user credentials
 | 
						|
  if (sendBack) {
 | 
						|
    if (typeof localStorage !== 'undefined') {
 | 
						|
      // Store user data in localStorage if credentials are valid
 | 
						|
      localStorage.setItem("accountEmail", await getEmail(usernameOrEmail, password));
 | 
						|
      localStorage.setItem("accountName", await getName(usernameOrEmail, password));
 | 
						|
      localStorage.setItem("accountPassword", password);
 | 
						|
    }
 | 
						|
  }
 | 
						|
  return sendBack; // Return success status
 | 
						|
};
 | 
						|
 | 
						|
export const deleteAccount = async (usernameOrEmail: string, password: string) => {
 | 
						|
  const data = {
 | 
						|
    action: "delete_account",
 | 
						|
    username: usernameOrEmail.includes('@') ? undefined : usernameOrEmail,
 | 
						|
    email: usernameOrEmail.includes('@') ? usernameOrEmail : undefined,
 | 
						|
    password,
 | 
						|
  };
 | 
						|
  return await sendToDatabase(data); // Send account deletion request
 | 
						|
};
 |