generated from nhcarrigan/template
release: v0.4.0
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@elysium/api",
|
"name": "@elysium/api",
|
||||||
"version": "0.3.2",
|
"version": "0.4.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "./prod/src/index.js",
|
"main": "./prod/src/index.js",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@elysium/web",
|
"name": "@elysium/web",
|
||||||
"version": "0.3.2",
|
"version": "0.4.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
+150
@@ -0,0 +1,150 @@
|
|||||||
|
/**
|
||||||
|
* Dev Puppeteer script — intercepts /api/game/load and injects a fresh
|
||||||
|
* game state built from the actual compiled data files, so we can browse
|
||||||
|
* the game UI without auth or a real DB record.
|
||||||
|
*/
|
||||||
|
import puppeteer from "puppeteer";
|
||||||
|
import { createRequire } from "module";
|
||||||
|
|
||||||
|
const require = createRequire(import.meta.url);
|
||||||
|
|
||||||
|
// Load actual game data from compiled API output
|
||||||
|
const { defaultAchievements } = require("./apps/api/prod/src/data/achievements.js");
|
||||||
|
const { defaultEquipment } = require("./apps/api/prod/src/data/equipment.js");
|
||||||
|
const { defaultBosses } = require("./apps/api/prod/src/data/bosses.js");
|
||||||
|
const { defaultQuests } = require("./apps/api/prod/src/data/quests.js");
|
||||||
|
const { defaultAdventurers } = require("./apps/api/prod/src/data/adventurers.js");
|
||||||
|
const { defaultUpgrades } = require("./apps/api/prod/src/data/upgrades.js");
|
||||||
|
const { defaultZones } = require("./apps/api/prod/src/data/zones.js");
|
||||||
|
|
||||||
|
console.log("📦 Data loaded:");
|
||||||
|
console.log(` achievements : ${defaultAchievements.length}`);
|
||||||
|
console.log(` equipment : ${defaultEquipment.length}`);
|
||||||
|
console.log(` bosses : ${defaultBosses.length}`);
|
||||||
|
console.log(` quests : ${defaultQuests.length}`);
|
||||||
|
|
||||||
|
// Spot-check for our new items
|
||||||
|
const newEquipIds = [
|
||||||
|
"chaos_mantle", "titan_core", "expanse_blade", "void_armour_mk2",
|
||||||
|
"cosmos_blade", "reality_plate", "maelstrom_edge", "cosmic_plate",
|
||||||
|
"primeval_blade", "ancient_aegis", "absolute_blade", "eternity_plate",
|
||||||
|
"omniversal_core",
|
||||||
|
];
|
||||||
|
const foundNew = newEquipIds.filter(id => defaultEquipment.some(e => e.id === id));
|
||||||
|
const missingNew = newEquipIds.filter(id => !defaultEquipment.some(e => e.id === id));
|
||||||
|
console.log(`\n🗡️ New equipment found (${foundNew.length}/13): ${foundNew.join(", ")}`);
|
||||||
|
if (missingNew.length > 0) console.log(` ❌ Missing: ${missingNew.join(", ")}`);
|
||||||
|
|
||||||
|
const questEternal = defaultAchievements.find(a => a.id === "quest_eternal");
|
||||||
|
const fullyEquipped = defaultAchievements.find(a => a.id === "fully_equipped");
|
||||||
|
console.log(`\n🏆 quest_eternal condition amount : ${questEternal?.condition?.amount}`);
|
||||||
|
console.log(`🏆 fully_equipped condition amount: ${fullyEquipped?.condition?.amount}`);
|
||||||
|
|
||||||
|
// Build a minimal but valid mock game state
|
||||||
|
const mockState = {
|
||||||
|
achievements : defaultAchievements,
|
||||||
|
adventurers : defaultAdventurers,
|
||||||
|
baseClickPower: 1,
|
||||||
|
bosses : defaultBosses,
|
||||||
|
equipment : defaultEquipment,
|
||||||
|
lastTickAt : Date.now(),
|
||||||
|
player : {
|
||||||
|
avatar : null,
|
||||||
|
characterName : "Hikari Test",
|
||||||
|
createdAt : Date.now(),
|
||||||
|
discordId : "000000000000000001",
|
||||||
|
discriminator : "0",
|
||||||
|
lastSavedAt : Date.now(),
|
||||||
|
lifetimeAchievementsUnlocked: 0,
|
||||||
|
lifetimeAdventurersRecruited: 0,
|
||||||
|
lifetimeBossesDefeated : 0,
|
||||||
|
lifetimeClicks : 0,
|
||||||
|
lifetimeGoldEarned : 0,
|
||||||
|
lifetimeQuestsCompleted : 0,
|
||||||
|
totalClicks : 0,
|
||||||
|
totalGoldEarned : 0,
|
||||||
|
username : "HikariTest",
|
||||||
|
},
|
||||||
|
prestige : {
|
||||||
|
count : 0,
|
||||||
|
runestones : 0,
|
||||||
|
},
|
||||||
|
quests : defaultQuests,
|
||||||
|
resources : {
|
||||||
|
crystals : 0,
|
||||||
|
essence : 0,
|
||||||
|
gold : 0,
|
||||||
|
},
|
||||||
|
upgrades : defaultUpgrades,
|
||||||
|
zones : defaultZones,
|
||||||
|
};
|
||||||
|
|
||||||
|
const mockLoadResponse = {
|
||||||
|
currentSchemaVersion: 1,
|
||||||
|
inGuild : true,
|
||||||
|
loginBonus : null,
|
||||||
|
loginStreak : 0,
|
||||||
|
offlineEssence : 0,
|
||||||
|
offlineGold : 0,
|
||||||
|
offlineSeconds : 0,
|
||||||
|
schemaOutdated : false,
|
||||||
|
signature : undefined,
|
||||||
|
state : mockState,
|
||||||
|
};
|
||||||
|
|
||||||
|
console.log("\n🌐 Launching browser...");
|
||||||
|
const browser = await puppeteer.launch({
|
||||||
|
args : ["--no-sandbox", "--disable-setuid-sandbox"],
|
||||||
|
headless: false,
|
||||||
|
});
|
||||||
|
|
||||||
|
const page = await browser.newPage();
|
||||||
|
await page.setViewport({ height: 900, width: 1400 });
|
||||||
|
|
||||||
|
// Intercept the game load call and inject our mock state
|
||||||
|
await page.setRequestInterception(true);
|
||||||
|
page.on("request", (req) => {
|
||||||
|
if (req.url().includes("/api/game/load") && req.method() === "GET") {
|
||||||
|
console.log(" ↩️ Intercepted /api/game/load — injecting mock state");
|
||||||
|
req.respond({
|
||||||
|
body : JSON.stringify(mockLoadResponse),
|
||||||
|
contentType : "application/json",
|
||||||
|
headers : { "Content-Type": "application/json" },
|
||||||
|
status : 200,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
req.continue();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Set a fake token so the frontend thinks we're logged in
|
||||||
|
await page.evaluateOnNewDocument(() => {
|
||||||
|
localStorage.setItem("elysium_token", "dev.fake.token");
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(" 🔗 Navigating to http://localhost:5173 ...");
|
||||||
|
await page.goto("http://localhost:5173", { waitUntil: "networkidle2" });
|
||||||
|
|
||||||
|
// Give the game a moment to tick and render
|
||||||
|
await new Promise(r => setTimeout(r, 3000));
|
||||||
|
|
||||||
|
await page.screenshot({ path: "/tmp/elysium-01-game.png" });
|
||||||
|
console.log(" 📸 Screenshot: /tmp/elysium-01-game.png");
|
||||||
|
|
||||||
|
// Try to find the equipment panel
|
||||||
|
const equipmentTab = await page.$("button, a, [role='tab']");
|
||||||
|
console.log(`\n🔍 Checking page title: ${await page.title()}`);
|
||||||
|
|
||||||
|
// Log any visible text that mentions our new items
|
||||||
|
const pageText = await page.evaluate(() => document.body.innerText);
|
||||||
|
const newItemsVisible = newEquipIds.filter(id => pageText.toLowerCase().includes(id.replace(/_/g, " ").toLowerCase().slice(0, 8)));
|
||||||
|
console.log(`\n🗡️ New item names visible in UI: ${newItemsVisible.length > 0 ? newItemsVisible.join(", ") : "none yet (may need to navigate to equipment panel)"}`);
|
||||||
|
|
||||||
|
// Check achievement counts visible in page
|
||||||
|
const hasQuestEternal = pageText.includes("112");
|
||||||
|
const hasFullyEquipped = pageText.includes("78");
|
||||||
|
console.log(` quest_eternal (112) visible: ${hasQuestEternal}`);
|
||||||
|
console.log(` fully_equipped (78) visible: ${hasFullyEquipped}`);
|
||||||
|
|
||||||
|
console.log("\n✅ Browser open — take a look around! Close it when done.");
|
||||||
|
console.log(" (or Ctrl+C to exit)\n");
|
||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "elysium",
|
"name": "elysium",
|
||||||
"version": "0.3.2",
|
"version": "0.4.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@elysium/types",
|
"name": "@elysium/types",
|
||||||
"version": "0.3.2",
|
"version": "0.4.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "./prod/src/index.js",
|
"main": "./prod/src/index.js",
|
||||||
|
|||||||
Reference in New Issue
Block a user