forked from React-Group/interstellar_ai
Merge branch 'main' into main
This commit is contained in:
commit
157f4a2351
10 changed files with 859 additions and 664 deletions
|
@ -176,7 +176,7 @@ const InputOutputBackend: React.FC = () => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
setInputMessage("")
|
setInputMessage("")
|
||||||
postWorkerRef.current.postMessage({ messages: [...messages, { role: "user", content: inputValue }], ai_model: localStorage.getItem('model'), model_type: type, access_token: accessToken, api_key: api_key })
|
postWorkerRef.current.postMessage({ messages: [...messages, { role: "user", content: inputValue }], ai_model: "llama3.2", model_type: type, access_token: accessToken, api_key: api_key })
|
||||||
startGetWorker()
|
startGetWorker()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -226,6 +226,11 @@ const InputOutputBackend: React.FC = () => {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const handleStopClick = () => {
|
||||||
|
endGetWorker()
|
||||||
|
getNewToken()
|
||||||
|
}
|
||||||
|
|
||||||
const handleResendClick = () => {
|
const handleResendClick = () => {
|
||||||
var temporary_message = messages[messages.length - 2]['content']
|
var temporary_message = messages[messages.length - 2]['content']
|
||||||
const updatedMessages = messages.slice(0, -2)
|
const updatedMessages = messages.slice(0, -2)
|
||||||
|
@ -272,6 +277,7 @@ const InputOutputBackend: React.FC = () => {
|
||||||
<ConversationFrontend
|
<ConversationFrontend
|
||||||
ref={conversationRef}
|
ref={conversationRef}
|
||||||
messages={messages}
|
messages={messages}
|
||||||
|
onStopClick={handleStopClick}
|
||||||
onResendClick={handleResendClick}
|
onResendClick={handleResendClick}
|
||||||
onEditClick={handleEditClick}
|
onEditClick={handleEditClick}
|
||||||
onCopyClick={handleCopyClick}
|
onCopyClick={handleCopyClick}
|
||||||
|
|
|
@ -31,6 +31,19 @@ export const sendToDatabase = async (data: any): Promise<boolean> => {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const sendToDatabaseAndGetString = async (data: any): Promise<string> => {
|
||||||
|
try {
|
||||||
|
const response = await axios.post("http://localhost:5000/interstellar_ai/db", data);
|
||||||
|
const status = response.data.status;
|
||||||
|
const success = response.data.response;
|
||||||
|
postMessage({ status, success });
|
||||||
|
return success;
|
||||||
|
} catch (error) {
|
||||||
|
postMessage({ status: 500, success: false });
|
||||||
|
return "false";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// Functions for each action
|
// Functions for each action
|
||||||
export const createAccount = async (username: string, email: string, password: string) => {
|
export const createAccount = async (username: string, email: string, password: string) => {
|
||||||
const data = {
|
const data = {
|
||||||
|
@ -60,7 +73,27 @@ export const getData = async (usernameOrEmail: string, password: string) => {
|
||||||
email: usernameOrEmail.includes('@') ? usernameOrEmail : undefined,
|
email: usernameOrEmail.includes('@') ? usernameOrEmail : undefined,
|
||||||
password,
|
password,
|
||||||
};
|
};
|
||||||
return await sendToDatabase(data);
|
return await sendToDatabaseAndGetString(data);
|
||||||
|
};
|
||||||
|
|
||||||
|
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);
|
||||||
|
};
|
||||||
|
|
||||||
|
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);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const changeData = async (usernameOrEmail: string, password: string, newData: any) => {
|
export const changeData = async (usernameOrEmail: string, password: string, newData: any) => {
|
||||||
|
@ -81,7 +114,13 @@ export const checkCredentials = async (usernameOrEmail: string, password: string
|
||||||
email: usernameOrEmail.includes('@') ? usernameOrEmail : undefined,
|
email: usernameOrEmail.includes('@') ? usernameOrEmail : undefined,
|
||||||
password,
|
password,
|
||||||
};
|
};
|
||||||
return await sendToDatabase(data);
|
var sendBack = await sendToDatabase(data);
|
||||||
|
if (sendBack) {
|
||||||
|
localStorage.setItem("accountEmail", await getEmail(usernameOrEmail, password))
|
||||||
|
localStorage.setItem("accountName", await getName(usernameOrEmail, password))
|
||||||
|
localStorage.setItem("accountPassword", password)
|
||||||
|
}
|
||||||
|
return sendBack
|
||||||
};
|
};
|
||||||
|
|
||||||
export const deleteAccount = async (usernameOrEmail: string, password: string) => {
|
export const deleteAccount = async (usernameOrEmail: string, password: string) => {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import React, { ForwardedRef, useEffect, useRef } from 'react';
|
import React, { ForwardedRef, useState, useEffect, useRef } from 'react';
|
||||||
|
|
||||||
type Message = {
|
type Message = {
|
||||||
role: string
|
role: string
|
||||||
|
@ -7,6 +7,7 @@ type Message = {
|
||||||
|
|
||||||
interface ConversationProps {
|
interface ConversationProps {
|
||||||
messages: Message[];
|
messages: Message[];
|
||||||
|
onStopClick: () => void;
|
||||||
onResendClick: () => void;
|
onResendClick: () => void;
|
||||||
onEditClick: () => void;
|
onEditClick: () => void;
|
||||||
onCopyClick: () => void;
|
onCopyClick: () => void;
|
||||||
|
@ -14,13 +15,45 @@ interface ConversationProps {
|
||||||
}
|
}
|
||||||
|
|
||||||
const ConversationFrontend = React.forwardRef<HTMLDivElement, ConversationProps>(
|
const ConversationFrontend = React.forwardRef<HTMLDivElement, ConversationProps>(
|
||||||
({ messages, onResendClick, onEditClick, onCopyClick, isClicked }, ref: ForwardedRef<HTMLDivElement>) => {
|
({ messages, onStopClick, onResendClick, onEditClick, onCopyClick, isClicked }, ref: ForwardedRef<HTMLDivElement>) => {
|
||||||
|
const [isScrolling, setIsScrolling] = useState(true);
|
||||||
const messagesEndRef = useRef<HTMLDivElement | null>(null)
|
const messagesEndRef = useRef<HTMLDivElement | null>(null);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
messagesEndRef.current?.scrollIntoView()
|
const observer = new IntersectionObserver(
|
||||||
}, [messages])
|
(entries) => {
|
||||||
|
if (entries[0].isIntersecting) {
|
||||||
|
console.log('End of messages reached');
|
||||||
|
setIsScrolling(true);
|
||||||
|
} else {
|
||||||
|
console.log('End of messages not reached');
|
||||||
|
setIsScrolling(false);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
root: document.querySelector('.output'),
|
||||||
|
threshold: 1.0, // Ensure the whole element is visible
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
const endOfMessages = messagesEndRef.current;
|
||||||
|
if (endOfMessages) {
|
||||||
|
observer.observe(endOfMessages);
|
||||||
|
}
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
if (endOfMessages) {
|
||||||
|
observer.unobserve(endOfMessages);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}, [messages]);
|
||||||
|
|
||||||
|
// Scroll to bottom when new messages arrive
|
||||||
|
useEffect(() => {
|
||||||
|
if (isScrolling) {
|
||||||
|
messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' });
|
||||||
|
}
|
||||||
|
}, [messages, isScrolling]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="output" ref={ref}>
|
<div className="output" ref={ref}>
|
||||||
|
@ -40,19 +73,34 @@ const ConversationFrontend = React.forwardRef<HTMLDivElement, ConversationProps>
|
||||||
})}
|
})}
|
||||||
|
|
||||||
<div className="button-container">
|
<div className="button-container">
|
||||||
<button type="button" onClick={onResendClick}>
|
<div className="tooltip">
|
||||||
<img src="/img/resend.svg" alt="resend" />
|
<button type="button" onClick={onStopClick}>
|
||||||
</button>
|
<img src="/img/resend.svg" alt="stop" />
|
||||||
<button type="button" onClick={onEditClick}>
|
</button>
|
||||||
<img src="/img/edit.svg" alt="edit" />
|
<span className="tooltiptext">Stop</span>
|
||||||
</button>
|
</div>
|
||||||
<button type="button" onClick={onCopyClick}>
|
<div className="tooltip">
|
||||||
<img src="/img/copy.svg" alt="copy" />
|
<button type="button" onClick={onResendClick}>
|
||||||
</button>
|
<img src="/img/resend.svg" alt="resend" />
|
||||||
<p id="copiedText" style={{ opacity: isClicked ? "1" : "0", transition: "all 0.3s ease-in-out" }}>Copied!</p>
|
</button>
|
||||||
|
<span className="tooltiptext">Resend</span>
|
||||||
|
</div>
|
||||||
|
<div className="tooltip">
|
||||||
|
<button type="button" onClick={onEditClick}>
|
||||||
|
<img src="/img/edit.svg" alt="edit" />
|
||||||
|
</button>
|
||||||
|
<span className="tooltiptext">Edit</span>
|
||||||
|
</div>
|
||||||
|
<div className="tooltip">
|
||||||
|
<button type="button" onClick={onCopyClick}>
|
||||||
|
<img src="/img/copy.svg" alt="copy" />
|
||||||
|
</button>
|
||||||
|
<span className="tooltiptext">{isClicked?"Copied!": "Copy" }</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div ref={messagesEndRef} />
|
<div className={"endOfMessages"} ref={messagesEndRef} style={{height:"10px"}}/>
|
||||||
</div>
|
</div>
|
||||||
|
<button id="scrollToBottom" disabled={isScrolling?true:false} style={{visibility: isScrolling?"hidden":"visible"}} onClick={()=> setIsScrolling(true)}>Down</button>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,25 +50,11 @@ const Login: React.FC = () => {
|
||||||
|
|
||||||
// Function to handle login
|
// Function to handle login
|
||||||
const handleLogin = async () => {
|
const handleLogin = async () => {
|
||||||
const savedAccountEmail = localStorage.getItem('accountEmail');
|
if (accountName && password) {
|
||||||
const savedAccountPassword = localStorage.getItem('accountPassword');
|
const success = await checkCredentials(accountName, password);
|
||||||
const savedAccountName = localStorage.getItem('accountName');
|
|
||||||
|
|
||||||
// Check if savedAccountName or savedAccountEmail is not null before passing to checkCredentials
|
|
||||||
var accountIdentifier = savedAccountName || savedAccountEmail;
|
|
||||||
if (!accountIdentifier) {
|
|
||||||
accountIdentifier = accountName
|
|
||||||
}
|
|
||||||
|
|
||||||
if (accountIdentifier && password) {
|
|
||||||
const success = await checkCredentials(accountIdentifier, password);
|
|
||||||
if (success) {
|
if (success) {
|
||||||
setIsLoggedIn(true); // Successful login
|
setIsLoggedIn(true); // Successful login
|
||||||
setShowLoginPopup(false); // Close the login popup
|
setShowLoginPopup(false); // Close the login popup
|
||||||
// Save credentials to localStorage (optional in case of changes)
|
|
||||||
localStorage.setItem('accountName', savedAccountName || accountName);
|
|
||||||
localStorage.setItem('accountEmail', savedAccountEmail || email);
|
|
||||||
localStorage.setItem('accountPassword', savedAccountPassword || password);
|
|
||||||
} else {
|
} else {
|
||||||
alert('Incorrect credentials');
|
alert('Incorrect credentials');
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,9 +39,6 @@ const PrivacySettings: React.FC<PrivacySettingsProps> = ({ selectedOption, handl
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<br />
|
<br />
|
||||||
<p>
|
|
||||||
After changing the preferred settings, please reload the website so it can update itself properly.
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,5 +1,6 @@
|
||||||
/* Output Section */
|
/* Output Section */
|
||||||
.output {
|
.output {
|
||||||
|
scroll-behavior: smooth;
|
||||||
grid-column: 2;
|
grid-column: 2;
|
||||||
grid-row: 1 / 4;
|
grid-row: 1 / 4;
|
||||||
background-color: var(--output-background-color);
|
background-color: var(--output-background-color);
|
||||||
|
@ -13,6 +14,7 @@
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
width: calc(100% - 2em); /* Corrected calculation for width */
|
width: calc(100% - 2em); /* Corrected calculation for width */
|
||||||
height: 86dvh;
|
height: 86dvh;
|
||||||
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
#conversation {
|
#conversation {
|
||||||
|
@ -20,7 +22,7 @@
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
padding-left: 10px;
|
padding-left: 10px;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
max-height: 80vh;
|
height: 80vh;
|
||||||
background-color: var(--output-background-color);
|
background-color: var(--output-background-color);
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
scroll-behavior: smooth;
|
scroll-behavior: smooth;
|
||||||
|
@ -72,9 +74,71 @@
|
||||||
width: 20px;
|
width: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.tooltip {
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
margin: 5px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tooltip .tooltiptext {
|
||||||
|
visibility: hidden;
|
||||||
|
background-color: var(--user-message-background-color);
|
||||||
|
color: var(--text-color);
|
||||||
|
text-align: center;
|
||||||
|
padding: 5px;
|
||||||
|
border-radius: 4px;
|
||||||
|
font-size: calc(var(--font-size)*0.8);
|
||||||
|
|
||||||
|
/* Position the tooltip */
|
||||||
|
position: absolute;
|
||||||
|
top: 125%;
|
||||||
|
/* Adjusts tooltip to be below the button */
|
||||||
|
left: 50%;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
/* Center the tooltip */
|
||||||
|
white-space: nowrap;
|
||||||
|
/* Prevent line breaks */
|
||||||
|
|
||||||
|
/* Add smooth transition */
|
||||||
|
opacity: 0;
|
||||||
|
transition: all 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tooltip .tooltiptext::after {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
bottom: 100%;
|
||||||
|
/* Arrow on top of tooltip */
|
||||||
|
left: 50%;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
border-width: 5px;
|
||||||
|
border-style: solid;
|
||||||
|
border-color: transparent transparent var(--user-message-background-color) transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Show the tooltip on hover */
|
||||||
|
.tooltip:hover .tooltiptext {
|
||||||
|
visibility: visible;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
#copiedText{
|
#copiedText{
|
||||||
margin-top: 1em;
|
margin-top: 1em;
|
||||||
cursor:default;
|
cursor:default;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#scrollToBottom{
|
||||||
|
scroll-behavior: smooth;
|
||||||
|
visibility: hidden;
|
||||||
|
position: absolute;
|
||||||
|
height: 50px;
|
||||||
|
width: 50px;
|
||||||
|
margin: auto;
|
||||||
|
border-radius: 100%;
|
||||||
|
bottom: 16dvh;
|
||||||
|
left: 50%;
|
||||||
|
translate: -25px;
|
||||||
|
}
|
||||||
|
|
273
package-lock.json
generated
273
package-lock.json
generated
|
@ -72,15 +72,6 @@
|
||||||
"global-agent": "^3.0.0"
|
"global-agent": "^3.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@electron/get/node_modules/semver": {
|
|
||||||
"version": "6.3.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
|
||||||
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
|
||||||
"license": "ISC",
|
|
||||||
"bin": {
|
|
||||||
"semver": "bin/semver.js"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@eslint-community/eslint-utils": {
|
"node_modules/@eslint-community/eslint-utils": {
|
||||||
"version": "4.4.0",
|
"version": "4.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
|
||||||
|
@ -319,9 +310,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@mistralai/mistralai": {
|
"node_modules/@mistralai/mistralai": {
|
||||||
"version": "1.0.4",
|
"version": "1.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/@mistralai/mistralai/-/mistralai-1.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/@mistralai/mistralai/-/mistralai-1.1.0.tgz",
|
||||||
"integrity": "sha512-fLFBD8r4KvITCkKlKcq2ievnNyLd7Oob4xMY7MkY04BqR4nffkTS49DqapnVkemuldtrmHidwPzwD7UT+yFC4A==",
|
"integrity": "sha512-YueaIX+g4+QTX6ERLjZLZMOhlC0/EoqwpayWrUKfTM9EGTyiOPdxFLpLpg5B9PsaxOrmZDC88pOp4QgSMqVr8w==",
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"zod": ">= 3"
|
"zod": ">= 3"
|
||||||
}
|
}
|
||||||
|
@ -643,9 +634,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@types/node": {
|
"node_modules/@types/node": {
|
||||||
"version": "20.16.5",
|
"version": "20.16.10",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.5.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.10.tgz",
|
||||||
"integrity": "sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==",
|
"integrity": "sha512-vQUKgWTjEIRFCvK6CyriPH3MZYiYlNy0fKiEYHWbcoWLEgs4opurGGKlebrTLqdSMIbXImH6XExNiIyNUv3WpA==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"undici-types": "~6.19.2"
|
"undici-types": "~6.19.2"
|
||||||
|
@ -659,9 +650,9 @@
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@types/react": {
|
"node_modules/@types/react": {
|
||||||
"version": "18.3.7",
|
"version": "18.3.10",
|
||||||
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.7.tgz",
|
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.10.tgz",
|
||||||
"integrity": "sha512-KUnDCJF5+AiZd8owLIeVHqmW9yM4sqmDVf2JRJiBMFkGvkoZ4/WyV2lL4zVsoinmRS/W3FeEdZLEWFRofnT2FQ==",
|
"integrity": "sha512-02sAAlBnP39JgXwkAq3PeU9DVaaGpZyF3MGcC0MKgQVkZor5IiiDAipVaxQHtDJAmO4GIy/rVBy/LzVj76Cyqg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -699,17 +690,17 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/eslint-plugin": {
|
"node_modules/@typescript-eslint/eslint-plugin": {
|
||||||
"version": "8.6.0",
|
"version": "8.8.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.8.0.tgz",
|
||||||
"integrity": "sha512-UOaz/wFowmoh2G6Mr9gw60B1mm0MzUtm6Ic8G2yM1Le6gyj5Loi/N+O5mocugRGY+8OeeKmkMmbxNqUCq3B4Sg==",
|
"integrity": "sha512-wORFWjU30B2WJ/aXBfOm1LX9v9nyt9D3jsSOxC3cCaTQGCW5k4jNpmjFv3U7p/7s4yvdjHzwtv2Sd2dOyhjS0A==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@eslint-community/regexpp": "^4.10.0",
|
"@eslint-community/regexpp": "^4.10.0",
|
||||||
"@typescript-eslint/scope-manager": "8.6.0",
|
"@typescript-eslint/scope-manager": "8.8.0",
|
||||||
"@typescript-eslint/type-utils": "8.6.0",
|
"@typescript-eslint/type-utils": "8.8.0",
|
||||||
"@typescript-eslint/utils": "8.6.0",
|
"@typescript-eslint/utils": "8.8.0",
|
||||||
"@typescript-eslint/visitor-keys": "8.6.0",
|
"@typescript-eslint/visitor-keys": "8.8.0",
|
||||||
"graphemer": "^1.4.0",
|
"graphemer": "^1.4.0",
|
||||||
"ignore": "^5.3.1",
|
"ignore": "^5.3.1",
|
||||||
"natural-compare": "^1.4.0",
|
"natural-compare": "^1.4.0",
|
||||||
|
@ -733,16 +724,16 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/parser": {
|
"node_modules/@typescript-eslint/parser": {
|
||||||
"version": "8.6.0",
|
"version": "8.8.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.8.0.tgz",
|
||||||
"integrity": "sha512-eQcbCuA2Vmw45iGfcyG4y6rS7BhWfz9MQuk409WD47qMM+bKCGQWXxvoOs1DUp+T7UBMTtRTVT+kXr7Sh4O9Ow==",
|
"integrity": "sha512-uEFUsgR+tl8GmzmLjRqz+VrDv4eoaMqMXW7ruXfgThaAShO9JTciKpEsB+TvnfFfbg5IpujgMXVV36gOJRLtZg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "BSD-2-Clause",
|
"license": "BSD-2-Clause",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/scope-manager": "8.6.0",
|
"@typescript-eslint/scope-manager": "8.8.0",
|
||||||
"@typescript-eslint/types": "8.6.0",
|
"@typescript-eslint/types": "8.8.0",
|
||||||
"@typescript-eslint/typescript-estree": "8.6.0",
|
"@typescript-eslint/typescript-estree": "8.8.0",
|
||||||
"@typescript-eslint/visitor-keys": "8.6.0",
|
"@typescript-eslint/visitor-keys": "8.8.0",
|
||||||
"debug": "^4.3.4"
|
"debug": "^4.3.4"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
|
@ -762,14 +753,14 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/scope-manager": {
|
"node_modules/@typescript-eslint/scope-manager": {
|
||||||
"version": "8.6.0",
|
"version": "8.8.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.8.0.tgz",
|
||||||
"integrity": "sha512-ZuoutoS5y9UOxKvpc/GkvF4cuEmpokda4wRg64JEia27wX+PysIE9q+lzDtlHHgblwUWwo5/Qn+/WyTUvDwBHw==",
|
"integrity": "sha512-EL8eaGC6gx3jDd8GwEFEV091210U97J0jeEHrAYvIYosmEGet4wJ+g0SYmLu+oRiAwbSA5AVrt6DxLHfdd+bUg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/types": "8.6.0",
|
"@typescript-eslint/types": "8.8.0",
|
||||||
"@typescript-eslint/visitor-keys": "8.6.0"
|
"@typescript-eslint/visitor-keys": "8.8.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||||
|
@ -780,14 +771,14 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/type-utils": {
|
"node_modules/@typescript-eslint/type-utils": {
|
||||||
"version": "8.6.0",
|
"version": "8.8.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.8.0.tgz",
|
||||||
"integrity": "sha512-dtePl4gsuenXVwC7dVNlb4mGDcKjDT/Ropsk4za/ouMBPplCLyznIaR+W65mvCvsyS97dymoBRrioEXI7k0XIg==",
|
"integrity": "sha512-IKwJSS7bCqyCeG4NVGxnOP6lLT9Okc3Zj8hLO96bpMkJab+10HIfJbMouLrlpyOr3yrQ1cA413YPFiGd1mW9/Q==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/typescript-estree": "8.6.0",
|
"@typescript-eslint/typescript-estree": "8.8.0",
|
||||||
"@typescript-eslint/utils": "8.6.0",
|
"@typescript-eslint/utils": "8.8.0",
|
||||||
"debug": "^4.3.4",
|
"debug": "^4.3.4",
|
||||||
"ts-api-utils": "^1.3.0"
|
"ts-api-utils": "^1.3.0"
|
||||||
},
|
},
|
||||||
|
@ -805,9 +796,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/types": {
|
"node_modules/@typescript-eslint/types": {
|
||||||
"version": "8.6.0",
|
"version": "8.8.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.8.0.tgz",
|
||||||
"integrity": "sha512-rojqFZGd4MQxw33SrOy09qIDS8WEldM8JWtKQLAjf/X5mGSeEFh5ixQlxssMNyPslVIk9yzWqXCsV2eFhYrYUw==",
|
"integrity": "sha512-QJwc50hRCgBd/k12sTykOJbESe1RrzmX6COk8Y525C9l7oweZ+1lw9JiU56im7Amm8swlz00DRIlxMYLizr2Vw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
|
@ -819,14 +810,14 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/typescript-estree": {
|
"node_modules/@typescript-eslint/typescript-estree": {
|
||||||
"version": "8.6.0",
|
"version": "8.8.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.8.0.tgz",
|
||||||
"integrity": "sha512-MOVAzsKJIPIlLK239l5s06YXjNqpKTVhBVDnqUumQJja5+Y94V3+4VUFRA0G60y2jNnTVwRCkhyGQpavfsbq/g==",
|
"integrity": "sha512-ZaMJwc/0ckLz5DaAZ+pNLmHv8AMVGtfWxZe/x2JVEkD5LnmhWiQMMcYT7IY7gkdJuzJ9P14fRy28lUrlDSWYdw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "BSD-2-Clause",
|
"license": "BSD-2-Clause",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/types": "8.6.0",
|
"@typescript-eslint/types": "8.8.0",
|
||||||
"@typescript-eslint/visitor-keys": "8.6.0",
|
"@typescript-eslint/visitor-keys": "8.8.0",
|
||||||
"debug": "^4.3.4",
|
"debug": "^4.3.4",
|
||||||
"fast-glob": "^3.3.2",
|
"fast-glob": "^3.3.2",
|
||||||
"is-glob": "^4.0.3",
|
"is-glob": "^4.0.3",
|
||||||
|
@ -873,17 +864,30 @@
|
||||||
"url": "https://github.com/sponsors/isaacs"
|
"url": "https://github.com/sponsors/isaacs"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
|
||||||
|
"version": "7.6.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
|
||||||
|
"integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "ISC",
|
||||||
|
"bin": {
|
||||||
|
"semver": "bin/semver.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@typescript-eslint/utils": {
|
"node_modules/@typescript-eslint/utils": {
|
||||||
"version": "8.6.0",
|
"version": "8.8.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.8.0.tgz",
|
||||||
"integrity": "sha512-eNp9cWnYf36NaOVjkEUznf6fEgVy1TWpE0o52e4wtojjBx7D1UV2WAWGzR+8Y5lVFtpMLPwNbC67T83DWSph4A==",
|
"integrity": "sha512-QE2MgfOTem00qrlPgyByaCHay9yb1+9BjnMFnSFkUKQfu7adBXDTnCAivURnuPPAG/qiB+kzKkZKmKfaMT0zVg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@eslint-community/eslint-utils": "^4.4.0",
|
"@eslint-community/eslint-utils": "^4.4.0",
|
||||||
"@typescript-eslint/scope-manager": "8.6.0",
|
"@typescript-eslint/scope-manager": "8.8.0",
|
||||||
"@typescript-eslint/types": "8.6.0",
|
"@typescript-eslint/types": "8.8.0",
|
||||||
"@typescript-eslint/typescript-estree": "8.6.0"
|
"@typescript-eslint/typescript-estree": "8.8.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||||
|
@ -897,13 +901,13 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/visitor-keys": {
|
"node_modules/@typescript-eslint/visitor-keys": {
|
||||||
"version": "8.6.0",
|
"version": "8.8.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.8.0.tgz",
|
||||||
"integrity": "sha512-wapVFfZg9H0qOYh4grNVQiMklJGluQrOUiOhYRrQWhx7BY/+I1IYb8BczWNbbUpO+pqy0rDciv3lQH5E1bCLrg==",
|
"integrity": "sha512-8mq51Lx6Hpmd7HnA2fcHQo3YgfX1qbccxQOgZcb4tvasu//zXRaA1j5ZRFeCw/VRAdFi4mRM9DnZw0Nu0Q2d1g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/types": "8.6.0",
|
"@typescript-eslint/types": "8.8.0",
|
||||||
"eslint-visitor-keys": "^3.4.3"
|
"eslint-visitor-keys": "^3.4.3"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
|
@ -1389,9 +1393,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/caniuse-lite": {
|
"node_modules/caniuse-lite": {
|
||||||
"version": "1.0.30001660",
|
"version": "1.0.30001664",
|
||||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001660.tgz",
|
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001664.tgz",
|
||||||
"integrity": "sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==",
|
"integrity": "sha512-AmE7k4dXiNKQipgn7a2xg558IRqPN3jMQY/rOsbxDhrd0tyChwbITBfiwtnqz8bi2M5mIWbxAYBvk7W7QBUS2g==",
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
"type": "opencollective",
|
"type": "opencollective",
|
||||||
|
@ -2221,9 +2225,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/eslint-module-utils": {
|
"node_modules/eslint-module-utils": {
|
||||||
"version": "2.11.0",
|
"version": "2.12.0",
|
||||||
"resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.11.0.tgz",
|
"resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz",
|
||||||
"integrity": "sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ==",
|
"integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -2304,16 +2308,6 @@
|
||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/eslint-plugin-import/node_modules/semver": {
|
|
||||||
"version": "6.3.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
|
||||||
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
|
||||||
"dev": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"bin": {
|
|
||||||
"semver": "bin/semver.js"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/eslint-plugin-jsx-a11y": {
|
"node_modules/eslint-plugin-jsx-a11y": {
|
||||||
"version": "6.10.0",
|
"version": "6.10.0",
|
||||||
"resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.0.tgz",
|
"resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.0.tgz",
|
||||||
|
@ -2346,9 +2340,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/eslint-plugin-react": {
|
"node_modules/eslint-plugin-react": {
|
||||||
"version": "7.36.1",
|
"version": "7.37.1",
|
||||||
"resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.36.1.tgz",
|
"resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.1.tgz",
|
||||||
"integrity": "sha512-/qwbqNXZoq+VP30s1d4Nc1C5GTxjJQjk4Jzs4Wq2qzxFM7dSmuG2UkIjg2USMLh3A/aVcUNrK7v0J5U1XEGGwA==",
|
"integrity": "sha512-xwTnwDqzbDRA8uJ7BMxPs/EXRB3i8ZfnOIp8BsxEQkT0nHPp+WWceqGgo6rKb9ctNi8GJLDT4Go5HAWELa/WMg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -2422,16 +2416,6 @@
|
||||||
"url": "https://github.com/sponsors/ljharb"
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/eslint-plugin-react/node_modules/semver": {
|
|
||||||
"version": "6.3.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
|
||||||
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
|
||||||
"dev": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"bin": {
|
|
||||||
"semver": "bin/semver.js"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/eslint-scope": {
|
"node_modules/eslint-scope": {
|
||||||
"version": "7.2.2",
|
"version": "7.2.2",
|
||||||
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
|
||||||
|
@ -2969,6 +2953,19 @@
|
||||||
"node": ">=10.0"
|
"node": ">=10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/global-agent/node_modules/semver": {
|
||||||
|
"version": "7.6.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
|
||||||
|
"integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
|
||||||
|
"license": "ISC",
|
||||||
|
"optional": true,
|
||||||
|
"bin": {
|
||||||
|
"semver": "bin/semver.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/globals": {
|
"node_modules/globals": {
|
||||||
"version": "13.24.0",
|
"version": "13.24.0",
|
||||||
"resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
|
"resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
|
||||||
|
@ -3340,6 +3337,19 @@
|
||||||
"semver": "^7.6.3"
|
"semver": "^7.6.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/is-bun-module/node_modules/semver": {
|
||||||
|
"version": "7.6.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
|
||||||
|
"integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "ISC",
|
||||||
|
"bin": {
|
||||||
|
"semver": "bin/semver.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/is-callable": {
|
"node_modules/is-callable": {
|
||||||
"version": "1.2.7",
|
"version": "1.2.7",
|
||||||
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
|
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
|
||||||
|
@ -3526,13 +3536,12 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/is-number": {
|
"node_modules/is-number": {
|
||||||
"version": "7.0.0",
|
"version": "6.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/is-number/-/is-number-6.0.0.tgz",
|
||||||
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
|
"integrity": "sha512-Wu1VHeILBK8KAWJUAiSZQX94GmOE45Rg6/538fKwiloUu21KncEkYGPqob2oSZ5mUT73vLGrHQjKw3KMPwfDzg==",
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=0.12.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/is-number-object": {
|
"node_modules/is-number-object": {
|
||||||
|
@ -3563,15 +3572,6 @@
|
||||||
"node": ">=4"
|
"node": ">=4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/is-odd/node_modules/is-number": {
|
|
||||||
"version": "6.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-number/-/is-number-6.0.0.tgz",
|
|
||||||
"integrity": "sha512-Wu1VHeILBK8KAWJUAiSZQX94GmOE45Rg6/538fKwiloUu21KncEkYGPqob2oSZ5mUT73vLGrHQjKw3KMPwfDzg==",
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/is-path-inside": {
|
"node_modules/is-path-inside": {
|
||||||
"version": "3.0.3",
|
"version": "3.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
|
||||||
|
@ -4184,6 +4184,34 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/next/node_modules/postcss": {
|
||||||
|
"version": "8.4.31",
|
||||||
|
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
|
||||||
|
"integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "opencollective",
|
||||||
|
"url": "https://opencollective.com/postcss/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "tidelift",
|
||||||
|
"url": "https://tidelift.com/funding/github/npm/postcss"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/ai"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"nanoid": "^3.3.6",
|
||||||
|
"picocolors": "^1.0.0",
|
||||||
|
"source-map-js": "^1.0.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "^10 || ^12 || >=14"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/normalize-path": {
|
"node_modules/normalize-path": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
|
||||||
|
@ -4564,9 +4592,10 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/postcss": {
|
"node_modules/postcss": {
|
||||||
"version": "8.4.31",
|
"version": "8.4.47",
|
||||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
|
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz",
|
||||||
"integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
|
"integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==",
|
||||||
|
"dev": true,
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
"type": "opencollective",
|
"type": "opencollective",
|
||||||
|
@ -4583,9 +4612,9 @@
|
||||||
],
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"nanoid": "^3.3.6",
|
"nanoid": "^3.3.7",
|
||||||
"picocolors": "^1.0.0",
|
"picocolors": "^1.1.0",
|
||||||
"source-map-js": "^1.0.2"
|
"source-map-js": "^1.2.1"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^10 || ^12 || >=14"
|
"node": "^10 || ^12 || >=14"
|
||||||
|
@ -5138,16 +5167,12 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/semver": {
|
"node_modules/semver": {
|
||||||
"version": "7.6.3",
|
"version": "6.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
|
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
||||||
"integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
|
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
||||||
"devOptional": true,
|
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"bin": {
|
"bin": {
|
||||||
"semver": "bin/semver.js"
|
"semver": "bin/semver.js"
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/semver-compare": {
|
"node_modules/semver-compare": {
|
||||||
|
@ -5624,9 +5649,9 @@
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/tailwindcss": {
|
"node_modules/tailwindcss": {
|
||||||
"version": "3.4.12",
|
"version": "3.4.13",
|
||||||
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.12.tgz",
|
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.13.tgz",
|
||||||
"integrity": "sha512-Htf/gHj2+soPb9UayUNci/Ja3d8pTmu9ONTfh4QY8r3MATTZOzmv6UYWF7ZwikEIC8okpfqmGqrmDehua8mF8w==",
|
"integrity": "sha512-KqjHOJKogOUt5Bs752ykCeiwvi0fKVkr5oqsFNt/8px/tA8scFPIlkygsf6jXrfCqGHz7VflA6+yytWuM+XhFw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -5714,6 +5739,16 @@
|
||||||
"node": ">=8.0"
|
"node": ">=8.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/to-regex-range/node_modules/is-number": {
|
||||||
|
"version": "7.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
|
||||||
|
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.12.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/ts-api-utils": {
|
"node_modules/ts-api-utils": {
|
||||||
"version": "1.3.0",
|
"version": "1.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
|
||||||
|
|
|
@ -97,6 +97,7 @@ class API:
|
||||||
@self.app.route('/interstellar_ai/db', methods=['POST'])
|
@self.app.route('/interstellar_ai/db', methods=['POST'])
|
||||||
def db_manipulate():
|
def db_manipulate():
|
||||||
sent_data = request.get_json()
|
sent_data = request.get_json()
|
||||||
|
print(sent_data)
|
||||||
action = sent_data.get('action')
|
action = sent_data.get('action')
|
||||||
if action == "create_account":
|
if action == "create_account":
|
||||||
return jsonify({'status': 200, 'response': self.db.add_user(sent_data)})
|
return jsonify({'status': 200, 'response': self.db.add_user(sent_data)})
|
||||||
|
@ -110,6 +111,10 @@ class API:
|
||||||
return jsonify({'status': 200, 'response': self.db.check_credentials(sent_data)})
|
return jsonify({'status': 200, 'response': self.db.check_credentials(sent_data)})
|
||||||
elif action == "delete_account":
|
elif action == "delete_account":
|
||||||
return jsonify({'status': 200, 'response': self.db.delete_user(sent_data)})
|
return jsonify({'status': 200, 'response': self.db.delete_user(sent_data)})
|
||||||
|
elif action == "get_email":
|
||||||
|
return jsonify({'status': 200, 'response': self.db.get_email(sent_data)})
|
||||||
|
elif action == "get_name":
|
||||||
|
return jsonify({'status': 200, 'response': self.db.get_name(sent_data)})
|
||||||
|
|
||||||
return jsonify({'status': 401, 'response': "Invalid action"})
|
return jsonify({'status': 401, 'response': "Invalid action"})
|
||||||
|
|
||||||
|
|
28
py/db.py
28
py/db.py
|
@ -9,13 +9,9 @@ class DB:
|
||||||
self.database = {}
|
self.database = {}
|
||||||
|
|
||||||
def ensure_username(self, data):
|
def ensure_username(self, data):
|
||||||
print(data)
|
|
||||||
print(self.database)
|
|
||||||
if 'username' in data:
|
if 'username' in data:
|
||||||
print("usr")
|
|
||||||
return data.get('username')
|
return data.get('username')
|
||||||
elif 'email' in data:
|
elif 'email' in data:
|
||||||
print("email")
|
|
||||||
for index, entry in self.database:
|
for index, entry in self.database:
|
||||||
if entry.get('email') == data.get('email'):
|
if entry.get('email') == data.get('email'):
|
||||||
return index
|
return index
|
||||||
|
@ -34,15 +30,12 @@ class DB:
|
||||||
user_data = {"hashed_password": hashed_password, "email": email, "data": None}
|
user_data = {"hashed_password": hashed_password, "email": email, "data": None}
|
||||||
if username not in self.database:
|
if username not in self.database:
|
||||||
self.database[username] = user_data
|
self.database[username] = user_data
|
||||||
print("yes")
|
|
||||||
self.save_database()
|
self.save_database()
|
||||||
return True
|
return True
|
||||||
print("fail")
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def delete_user(self, data):
|
def delete_user(self, data):
|
||||||
username = self.ensure_username(data)
|
username = self.ensure_username(data)
|
||||||
data = data.get('data')
|
|
||||||
if not self.check_credentials(data):
|
if not self.check_credentials(data):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@ -52,11 +45,10 @@ class DB:
|
||||||
|
|
||||||
def change_data(self, data):
|
def change_data(self, data):
|
||||||
username = self.ensure_username(data)
|
username = self.ensure_username(data)
|
||||||
data = data.get('data')
|
|
||||||
if not self.check_credentials(data):
|
if not self.check_credentials(data):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
self.database[username]['data'] = data
|
self.database[username]['data'] = data.get('data')
|
||||||
self.save_database()
|
self.save_database()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
@ -75,8 +67,6 @@ class DB:
|
||||||
username = self.ensure_username(data)
|
username = self.ensure_username(data)
|
||||||
password = data.get('password')
|
password = data.get('password')
|
||||||
if username not in self.database:
|
if username not in self.database:
|
||||||
print("no username")
|
|
||||||
print(username)
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
stored_hashed_password = self.database[username]["hashed_password"]
|
stored_hashed_password = self.database[username]["hashed_password"]
|
||||||
|
@ -92,6 +82,22 @@ class DB:
|
||||||
send_back = self.database[username].get('data')
|
send_back = self.database[username].get('data')
|
||||||
return send_back
|
return send_back
|
||||||
|
|
||||||
|
def get_email(self, data):
|
||||||
|
username = self.ensure_username(data)
|
||||||
|
if not self.check_credentials(data):
|
||||||
|
return None
|
||||||
|
|
||||||
|
send_back = self.database[username].get('email')
|
||||||
|
return send_back
|
||||||
|
|
||||||
|
def get_name(self, data):
|
||||||
|
username = self.ensure_username(data)
|
||||||
|
if not self.check_credentials(data):
|
||||||
|
return None
|
||||||
|
|
||||||
|
send_back = self.ensure_username(data)
|
||||||
|
return send_back
|
||||||
|
|
||||||
def save_database(self):
|
def save_database(self):
|
||||||
if os.environ.get('PRODUCTION') == "YES":
|
if os.environ.get('PRODUCTION') == "YES":
|
||||||
server = pycouchdb.Server("http://admin:admin@localhost:5984/")
|
server = pycouchdb.Server("http://admin:admin@localhost:5984/")
|
||||||
|
|
Loading…
Reference in a new issue