Update version info, push last changes I had.

This commit is contained in:
Trenton Zimmer 2025-07-30 22:18:38 -04:00
parent 0ccf7d182a
commit 622a08536d
9 changed files with 234 additions and 80 deletions

View File

@ -1,7 +1,7 @@
VITE_APP_VERSION="3.0.22"
VITE_API_URL="http://10.5.7.5:8000/"
VITE_API_KEY="your_api_key_should_be_here"
VITE_ASSET_PATH="/assets"
VITE_GAME_ASSET_PATH="https://cdn.phaseii.network/file/PhaseII/game-assets"
VITE_DISCORD_OAUTH_URL="https://discord.com/oauth2/authorize?client_id=947985989421395988&response_type=code&redirect_uri=http%3A%2F%2Flocalhost%3A5173%2F%23%2Fprofile%2Fintegrate%2Fdiscord&scope=identify"
VITE_APP_VERSION="3.0.23"
VITE_API_URL="http://10.5.7.5:8000/"
VITE_API_KEY="your_api_key_should_be_here"
VITE_ASSET_PATH="/assets"
VITE_GAME_ASSET_PATH="https://cdn.phaseii.network/file/PhaseII/game-assets"
VITE_DISCORD_OAUTH_URL="https://discord.com/oauth2/authorize?client_id=947985989421395988&response_type=code&redirect_uri=http%3A%2F%2Flocalhost%3A5173%2F%23%2Fprofile%2Fintegrate%2Fdiscord&scope=identify"
VITE_TACHI_OAUTH_URL="https://kamai.tachi.ac/oauth/request-auth?clientID=CIb72d1ff81fcfdc001ead8bde3a0ae1a7e0663a37"

View File

@ -1,7 +1,7 @@
VITE_APP_VERSION="3.0.22"
VITE_API_URL="https://restfulsleep.phaseii.network"
VITE_API_KEY="your_api_key_should_be_here"
VITE_ASSET_PATH="https://cdn.phaseii.network/file/PhaseII/web-assets"
VITE_GAME_ASSET_PATH="https://cdn.phaseii.network/file/PhaseII/game-assets"
VITE_DISCORD_OAUTH_URL="https://discord.com/oauth2/authorize?client_id=947985989421395988&response_type=code&redirect_uri=https%3A%2F%2Fweb3.phaseii.network%2F%23%2Fprofile%2Fintegrate%2Fdiscord&scope=identify"
VITE_APP_VERSION="3.0.23"
VITE_API_URL="https://restfulsleep.phaseii.network"
VITE_API_KEY="your_api_key_should_be_here"
VITE_ASSET_PATH="https://cdn.phaseii.network/file/PhaseII/web-assets"
VITE_GAME_ASSET_PATH="https://cdn.phaseii.network/file/PhaseII/game-assets"
VITE_DISCORD_OAUTH_URL="https://discord.com/oauth2/authorize?client_id=947985989421395988&response_type=code&redirect_uri=https%3A%2F%2Fweb3.phaseii.network%2F%23%2Fprofile%2Fintegrate%2Fdiscord&scope=identify"
VITE_TACHI_OAUTH_URL="https://kamai.tachi.ac/oauth/request-auth?clientID=CIce4260e1939ceed11c8e48ee857a3aef2a87ba56"

View File

@ -1,25 +1,26 @@
{
"3.0.1": ["- (Feature) Added update popup", "- (Optimization) Disabled ParticlesJS for the time being. This will be returned as an option in the future.", "- (Optimization) Fill in more score table data for GFDM.", "- (soon™) I've started rival support, but it's not ready just yet. Stay tuned!"],
"3.0.2": ["- (Feature) Added new greetings", "- (Feature) Added new user background", "- (Feature) Added toggle for disabling/enabling this popup", "- (Feature) Added version info to footer", "- (Feature) Fill in more profile data on personal profile view", "- (Fix) DDR stats now work again", "- (Fix) DDR player weight can now be set (kinda)"],
"3.0.3": ["- (Feature) Discord avatars are now reactive!", "- (Feature) New profile badges! I'll be working on a backend for these soon™", "- (Optimization) Fix this box's formatting on mobile."],
"3.0.4": ["- (Feature) Add performance event flag settings for SOUND VOLTEX EXCEED GEAR"],
"3.0.5": ["- (Feature) Add profile badges based on Discord server roles. Expands Discord linking capabilities."],
"3.0.6": ["- (Major) Replace non-standard game cards with a standardized and new header card. May break some layouts so PLEASE REPORT BUGS!", "- (Feature) Create song detail page, not yet completed or reactive.", "- (Bugfix) Fix issue where deleteSession fails if the session has already been deleted.", "- (Minor) Edit ring color on red buttons", "- (Admin) Add Arcades admin page", "- (Bugfix) Fix incorrect prop types for Notes Radar"],
"3.0.7": ["- (Major) Song data page now loads data. This data is quite broken for a few games so EXPECT BUGS!", "- (Optimization) Add in table data for games, still missing some data but the basics are complete now."],
"3.0.8": ["- (Minor) Added game event options for Classic IIDX versions"],
"3.0.8-shrimplinks": ["- (Bugfix) Fix broken session."],
"3.0.9": ["- (Minor) Add additional data to the dashboard, including today stats and score stats. Add score stats to chart."],
"3.0.10": ["- (Major) Add experimental records pages, work on score processing.", "- (Bugfix) Clean up new dashboard data."],
"3.0.11": ["- (Bugfix) Fix broken chart sorting for certain games.", "- (Bugfix) Add spacing on mobile for personal records user buttons."],
"3.0.12": ["- (Feature) Add new game event settings to SILENT SCOPE: BONE EATER and beatmaniaIIDX EPOLIS."],
"3.0.13": ["- (Feature) Add new game event settings to beatmaniaIIDX EPOLIS."],
"3.0.14": ["- (Minor) Fix footer buttons on tables, add generic export table button for every table."],
"3.0.15": ["- (Minor) Add beta support for Pinky Crush, clean up gameDB a little.", "- (Optimization) Convert dashboard to a more modular backend.", "- (Bugfix) Fix warnings on auth pages."],
"3.0.16": ["- (Major) Add multiple new admin features for network management.", "- (Optimization) Optimize backend for arcade operations.", "- (Bugfix) Fix possible backend issues with better type enforcing.", "- (Bugfix) Fix event data and game data for IIDX Pinky Crush.", "- (Minor) Add assets for Nostalgia."],
"3.0.17": ["- (Major) Add initial public profile support.", "- (Minor) Lay groundwork for public profile page", "- (Optimization) Clean up admin pages", "- (Bugfix) Clean up random 500 errors."],
"3.0.18": ["- (Admin) Adds the ability to add and remove managers from an arcade.", "- (Minor) Lay groundwork for avatars in tables.", "- (Minor) Add new profile customizations."],
"3.0.19": ["- (Admin) Finish admin arcade and machine pages.", "- (Minor) Add new greetings."],
"3.0.20": ["- (Major) Add read state to network news.", "- (Minor) Add new greetings.", "- (Minor) Add information to linked services", "- (Minor) Add session info and button to remove all sessions", "- (Minor) Add text gradient animation backend, needs ported to text once finished."],
"3.0.21": ["- (Admin) Finish admin machine/arcade pages", "- (Major) Finish initial public profile page", "- (Minor) Change table right-click behavior", "- (Admin) Finish admin News pages", "- (Admin) Add search for user via card ID"],
"3.0.22": ["- (Major) Finish first implementation of the public profile page", "- (Minor) Clean up dashboard game stat box", "- (Minor) Load profile name in game stat box"]
{
"3.0.1": ["- (Feature) Added update popup", "- (Optimization) Disabled ParticlesJS for the time being. This will be returned as an option in the future.", "- (Optimization) Fill in more score table data for GFDM.", "- (soon™) I've started rival support, but it's not ready just yet. Stay tuned!"],
"3.0.2": ["- (Feature) Added new greetings", "- (Feature) Added new user background", "- (Feature) Added toggle for disabling/enabling this popup", "- (Feature) Added version info to footer", "- (Feature) Fill in more profile data on personal profile view", "- (Fix) DDR stats now work again", "- (Fix) DDR player weight can now be set (kinda)"],
"3.0.3": ["- (Feature) Discord avatars are now reactive!", "- (Feature) New profile badges! I'll be working on a backend for these soon™", "- (Optimization) Fix this box's formatting on mobile."],
"3.0.4": ["- (Feature) Add performance event flag settings for SOUND VOLTEX EXCEED GEAR"],
"3.0.5": ["- (Feature) Add profile badges based on Discord server roles. Expands Discord linking capabilities."],
"3.0.6": ["- (Major) Replace non-standard game cards with a standardized and new header card. May break some layouts so PLEASE REPORT BUGS!", "- (Feature) Create song detail page, not yet completed or reactive.", "- (Bugfix) Fix issue where deleteSession fails if the session has already been deleted.", "- (Minor) Edit ring color on red buttons", "- (Admin) Add Arcades admin page", "- (Bugfix) Fix incorrect prop types for Notes Radar"],
"3.0.7": ["- (Major) Song data page now loads data. This data is quite broken for a few games so EXPECT BUGS!", "- (Optimization) Add in table data for games, still missing some data but the basics are complete now."],
"3.0.8": ["- (Minor) Added game event options for Classic IIDX versions"],
"3.0.8-shrimplinks": ["- (Bugfix) Fix broken session."],
"3.0.9": ["- (Minor) Add additional data to the dashboard, including today stats and score stats. Add score stats to chart."],
"3.0.10": ["- (Major) Add experimental records pages, work on score processing.", "- (Bugfix) Clean up new dashboard data."],
"3.0.11": ["- (Bugfix) Fix broken chart sorting for certain games.", "- (Bugfix) Add spacing on mobile for personal records user buttons."],
"3.0.12": ["- (Feature) Add new game event settings to SILENT SCOPE: BONE EATER and beatmaniaIIDX EPOLIS."],
"3.0.13": ["- (Feature) Add new game event settings to beatmaniaIIDX EPOLIS."],
"3.0.14": ["- (Minor) Fix footer buttons on tables, add generic export table button for every table."],
"3.0.15": ["- (Minor) Add beta support for Pinky Crush, clean up gameDB a little.", "- (Optimization) Convert dashboard to a more modular backend.", "- (Bugfix) Fix warnings on auth pages."],
"3.0.16": ["- (Major) Add multiple new admin features for network management.", "- (Optimization) Optimize backend for arcade operations.", "- (Bugfix) Fix possible backend issues with better type enforcing.", "- (Bugfix) Fix event data and game data for IIDX Pinky Crush.", "- (Minor) Add assets for Nostalgia."],
"3.0.17": ["- (Major) Add initial public profile support.", "- (Minor) Lay groundwork for public profile page", "- (Optimization) Clean up admin pages", "- (Bugfix) Clean up random 500 errors."],
"3.0.18": ["- (Admin) Adds the ability to add and remove managers from an arcade.", "- (Minor) Lay groundwork for avatars in tables.", "- (Minor) Add new profile customizations."],
"3.0.19": ["- (Admin) Finish admin arcade and machine pages.", "- (Minor) Add new greetings."],
"3.0.20": ["- (Major) Add read state to network news.", "- (Minor) Add new greetings.", "- (Minor) Add information to linked services", "- (Minor) Add session info and button to remove all sessions", "- (Minor) Add text gradient animation backend, needs ported to text once finished."],
"3.0.21": ["- (Admin) Finish admin machine/arcade pages", "- (Major) Finish initial public profile page", "- (Minor) Change table right-click behavior", "- (Admin) Finish admin News pages", "- (Admin) Add search for user via card ID"],
"3.0.22": ["- (Major) Finish first implementation of the public profile page", "- (Minor) Clean up dashboard game stat box", "- (Minor) Load profile name in game stat box"],
"3.0.23": ["- (Major) Moved to Tailwind V4 (SoftieTechCat)", "- (Major) Updated all dependencies (SoftieTechCat)", "- (Bugfix) Fix bug if user has no read news", "- (Backend) Insane optimization with user loading, data loading, cache parsing.", "- (Minor) Add new greetings."]
}

View File

@ -497,8 +497,8 @@
},
{
"author": "Anonymous",
"header": "Hey <username>, keep it 100!",
"comment": "No misses, only MFCs today."
"header": "Hey <username>, keep it 1,000,000!",
"comment": "No perfects, only MFCs today."
},
{
"author": "Anonymous",
@ -524,5 +524,45 @@
"author": "SoftieTechCat",
"header": "My name is <username>, yo.",
"comment": "I'm the GOAT of PhaseII, yo. Uhuh."
},
{
"author": "DDR X",
"header": "All this waiting around, <username>",
"comment": "What is this, a golf tournament? FOUR."
},
{
"author": "DDR X",
"header": "We're not playing cards here, <username>",
"comment": "We're dancing. Come on."
},
{
"author": "DDR X",
"header": "Fresh, <username>.",
"comment": "Straight up fresh."
},
{
"author": "DDR X",
"header": "I don't know, <username>",
"comment": "Have you got the stamina?"
},
{
"author": "DDR X",
"header": "Come on, <username>",
"comment": "Let's dance already."
},
{
"author": "DDR X",
"header": "So what, <username>?",
"comment": "We gonna dance or what?"
},
{
"author": "DDR X",
"header": "Sure, <username>",
"comment": "I guess we can take a break..."
},
{
"author": "DDR X",
"header": "You gotta step quick, <username>",
"comment": "Watch out for the shock arrow!"
}
]

View File

@ -25,6 +25,7 @@ import AsideMenu from "@/components/Menus/AsideMenu.vue";
import FooterBar from "@/components/FooterBar.vue";
import { loadUserAuthKey, deleteUserAuthKey } from "@/stores/auth";
import { gameData } from "@/constants";
// import BaseButton from "@/components/BaseButton.vue";
const router = useRouter();
const route = useRoute();
@ -274,7 +275,15 @@ const menuAside = computed(() => {
>
<BaseIcon :path="mdiMenu" size="24" />
</NavBarItemPlain>
<NavBarItemPlain use-margin> </NavBarItemPlain>
<div class="h-full flex place-items-center ml-4 gap-4">
<!-- <span>You can add up to 4 buttons here</span>
<BaseButton small label="QuickNav" color="info" />
<BaseButton small label="QuickNav" color="success" />
<BaseButton small label="QuickNav" color="warning" />
<BaseButton small label="QuickNav" color="danger" />
<span>They're sticky!</span> -->
</div>
</NavBar>
<AsideMenu
:is-aside-mobile-expanded="isAsideMobileExpanded"

View File

@ -38,15 +38,6 @@ export default [
},
],
},
// {
// to: "/goals",
// icon: mdiFlagCheckered,
// label: "Goals",
// },
// {
// icon: mdiCogs,
// label: "Edit Dashboard",
// },
{
icon: mdiLogout,
label: "Log out",

View File

@ -10,6 +10,16 @@ export async function APIAdminDashboard() {
}
}
export async function APIAdminAudit() {
try {
const data = await mainStore.callApi(`/admin/audit`);
return data.data;
} catch (error) {
console.log("Error loading admin audit:", error);
throw error;
}
}
export async function APIAdminArcades() {
try {
const data = await mainStore.callApi(`/admin/arcades`);

View File

@ -1,20 +1,20 @@
<script setup>
import { ref, onMounted } from "vue";
import { mdiFlagCheckered, mdiCashEdit } from "@mdi/js";
import { mdiFlagCheckered, mdiCashEdit, mdiExclamationThick } from "@mdi/js";
import SectionMain from "@/components/SectionMain.vue";
import CardBox from "@/components/CardBox.vue";
import LayoutAuthenticated from "@/layouts/LayoutAuthenticated.vue";
import SectionTitleLine from "@/components/SectionTitleLine.vue";
import GeneralTable from "@/components/GeneralTable.vue";
import { APIAdminDashboard } from "@/stores/api/admin";
const dashboardData = ref({});
import { APIAdminAudit } from "@/stores/api/admin";
const auditData = ref({});
const loading = ref(true);
onMounted(async () => {
try {
const data = await APIAdminDashboard();
dashboardData.value = data;
const data = await APIAdminAudit();
auditData.value = data;
loading.value = false;
} catch (error) {
console.log("Failed to fetch admin data:", error);
@ -82,36 +82,116 @@ const transactionHeaders = [
},
];
function formatTransactions(events) {
var formattedItems = [];
for (var item of events) {
if (item.type == "paseli_transaction") {
if (item.timestamp) {
const date = new Date(item.timestamp * 1000);
item.date = date.toLocaleString();
}
const updaterHeaders = [
{
text: "Timestamp",
value: "date",
width: 120,
},
{
text: "PCBID",
value: "data.pcbid",
width: 120,
},
{
text: "Name",
value: "data.name",
width: 120,
},
{
text: "Value",
value: "data.value",
width: 120,
},
{
text: "Model",
value: "data.model",
width: 120,
},
];
formattedItems.push(item);
const exceptionHeaders = [
{
text: "Timestamp",
value: "date",
width: 120,
},
{
text: "Service",
value: "data.service",
width: 120,
},
{
text: "PCBID",
value: "data.pcbid",
width: 120,
},
{
text: "Model",
value: "data.model",
width: 120,
},
{
text: "Request",
value: "data.requestName",
width: 120,
},
{
text: "Method",
value: "data.method",
width: 120,
},
{
text: "Traceback",
value: "data.traceback",
width: 120,
},
];
const unhandledHeaders = [
{
text: "Timestamp",
value: "date",
width: 120,
},
{
text: "Request",
value: "data.request",
width: 120,
},
];
function formatData(events) {
return events.map((item) => {
if (item.timestamp) {
const date = new Date(item.timestamp * 1000);
item.date = date.toLocaleString();
}
}
return formattedItems;
if (item?.data?.service === "xrpc" && item?.data?.request) {
const extracted = extractExceptionData(item.data.request);
item.data.pcbid = extracted.pcbid;
item.data.model = extracted.model;
item.data.requestName = extracted.requestName;
item.data.method = extracted.method;
}
return item;
});
}
function formatEvents(events) {
var formattedItems = [];
for (var item of events) {
if (item.type == "pcbevent") {
if (item.timestamp) {
const date = new Date(item.timestamp * 1000);
item.date = date.toLocaleString();
}
function extractExceptionData(xmlString) {
const modelMatch = xmlString.match(/<call[^>]*model="([^"]+)"/);
const pcbidMatch = xmlString.match(/<call[^>]*srcid="([^"]+)"/);
const methodMatch = xmlString.match(/<([^ >]+)[^>]*method="([^"]+)"/);
const requestNameMatch = xmlString.match(/<call[^>]*>\s*<([^ >]+)/);
formattedItems.push(item);
}
}
return formattedItems;
return {
model: modelMatch?.[1] || null,
pcbid: pcbidMatch?.[1] || null,
requestName: requestNameMatch?.[1] || null,
method: methodMatch?.[2] || null,
};
}
</script>
@ -123,6 +203,25 @@ function formatEvents(events) {
<h1 class="text-3xl">Service Logs</h1>
</CardBox>
<SectionTitleLine
:icon="mdiExclamationThick"
title="Recent Tracebacks"
color="text-red-400"
main
/>
<CardBox has-table class="mb-4">
<div
class="bg-white dark:bg-slate-900/95 rounded-2xl lg:flex lg:justify-between"
>
<div class="w-full">
<GeneralTable
:headers="exceptionHeaders"
:items="formatData(auditData?.exception)"
/>
</div>
</div>
</CardBox>
<SectionTitleLine
:icon="mdiFlagCheckered"
title="Recent PCB Events"
@ -136,7 +235,7 @@ function formatEvents(events) {
<div class="w-full">
<GeneralTable
:headers="eventHeaders"
:items="formatEvents(dashboardData?.audit)"
:items="formatData(auditData?.pcbevent)"
/>
</div>
</div>
@ -155,7 +254,7 @@ function formatEvents(events) {
<div class="w-full">
<GeneralTable
:headers="transactionHeaders"
:items="formatTransactions(dashboardData?.audit)"
:items="formatData(auditData?.paseli_transaction)"
/>
</div>
</div>

View File

@ -235,7 +235,11 @@ const cardBoxes = ref([
:content="news.body"
:date="humanReadableTime(news.timestamp)"
:cover="news.data.img"
:read="mainStore?.userData?.seen_news[news.id] ?? false"
:read="
mainStore?.userData?.seen_news
? mainStore?.userData?.seen_news[news.id]
: false
"
class="w-full h-full"
/>
</div>