From 3c11d27916e8718e89ef6f02561ad20cefcc35d4 Mon Sep 17 00:00:00 2001
From: Robert MacRae
Date: Sun, 29 Mar 2026 00:16:10 -0300
Subject: [PATCH] full re-write now ready for proper share
---
.gitignore | 157 +-
API/.env.example | 21 -
API/config/database.js | 19 -
API/config/production.js | 131 -
API/middleware/errorHandler.js | 134 -
API/models/GameServer.js | 134 -
API/models/Inventory.js | 306 -
API/models/Player.js | 155 -
API/models/PlayerData.js | 31 -
API/models/Ship.js | 189 -
API/package-lock.json | 6068 ---------
API/package.json | 50 +-
API/routes/auth.js | 214 -
API/routes/payments.js | 173 -
API/routes/servers.js | 419 -
API/scripts/createTestServer.js | 67 -
API/scripts/migrate.js | 50 -
API/scripts/migratePasswords.js | 71 -
API/scripts/seed.js | 196 -
API/server.js | 253 -
API/tests/api.test.js | 220 -
API/utils/ErrorReporter.js | 119 -
API/utils/logger.js | 27 -
Client/data/starbase-layout.json | 120 -
Client/electron-main.js | 480 -
Client/index.html | 10810 +---------------
Client/js/GameInitializer.js | 1274 --
Client/js/SaveSystemIntegration.js | 325 -
Client/js/SmartSaveManager.js | 228 -
Client/js/core/DebugLogger.js | 179 -
Client/js/core/Economy.js | 905 --
Client/js/core/GameEngine.js | 753 --
Client/js/core/Inventory.js | 1086 --
Client/js/core/Logger.js | 304 -
Client/js/core/Player.js | 965 --
Client/js/core/TextureManager.js | 142 -
Client/js/data/GameData.js | 125 -
Client/js/main.js | 718 -
Client/js/systems/BaseSystem.js | 2195 ----
Client/js/systems/CraftingSystem.js | 403 -
Client/js/systems/DungeonSystem.js | 832 --
Client/js/systems/IdleSystem.js | 378 -
Client/js/systems/ItemSystem.js | 468 -
Client/js/systems/QuestSystem.js | 2193 ----
Client/js/systems/ShipSystem.js | 247 -
Client/js/systems/SkillSystem.js | 407 -
Client/js/systems/StarbaseWorld.js | 1059 --
Client/js/ui/LiveMainMenu.js | 1202 --
Client/js/ui/MainMenu.js | 1251 --
Client/js/ui/UIManager.js | 2733 ----
Client/locales/de.json | 175 -
Client/locales/en.json | 175 -
Client/locales/es.json | 175 -
Client/locales/fr.json | 175 -
Client/locales/ja.json | 175 -
Client/locales/ko.json | 175 -
Client/locales/pt.json | 175 -
Client/locales/zh.json | 175 -
Client/package-lock.json | 4688 -------
Client/package.json | 144 +-
Client/preload.js | 33 -
Client/styles/components.css | 216 -
Client/styles/main.css | 606 -
Client/styles/tables.css | 185 -
GameServer/.env.example | 19 -
GameServer/assets/images/ui/placeholder.png | Bin 188 -> 0 bytes
GameServer/config/database.js | 17 -
GameServer/create_placeholders.js | 191 -
.../data/gso/alliance/research_tree.json | 28 -
.../data/gso/category/quests/daily.json | 31 -
.../data/gso/category/quests/main_story.json | 39 -
.../data/gso/category/quests/monthly.json | 23 -
.../data/gso/category/quests/weekly.json | 27 -
GameServer/data/gso/dungeons/alien_ruins.json | 50 -
.../data/gso/dungeons/asteroid_mine.json | 50 -
.../data/gso/dungeons/corrupted_vault.json | 56 -
GameServer/data/gso/dungeons/dungeons.json | 97 -
GameServer/data/gso/dungeons/enemies.json | 15 -
.../data/gso/dungeons/nebula_anomaly.json | 50 -
GameServer/data/gso/dungeons/pirate_lair.json | 50 -
GameServer/data/gso/dungeons/void_rift.json | 111 -
.../data/gso/enemies/alien_guardian.json | 15 -
.../data/gso/enemies/ancient_drone.json | 15 -
GameServer/data/gso/enemies/corrupted_ai.json | 15 -
.../data/gso/enemies/crystal_golem.json | 15 -
.../data/gso/enemies/defense_turret.json | 11 -
GameServer/data/gso/enemies/energy_being.json | 15 -
GameServer/data/gso/enemies/mining_drone.json | 15 -
.../data/gso/enemies/phase_shifter.json | 15 -
.../data/gso/enemies/pirate_captain.json | 15 -
.../data/gso/enemies/quantum_entity.json | 16 -
.../data/gso/enemies/rock_creature.json | 15 -
.../data/gso/enemies/security_drone.json | 15 -
GameServer/data/gso/enemies/space_pirate.json | 15 -
.../data/gso/enemies/training_drone.json | 12 -
.../data/gso/enemies/virus_program.json | 15 -
.../items/armours/backpack_basic_common.json | 30 -
.../items/armours/backpack_field_rare.json | 28 -
.../items/armours/backpack_reactor_epic.json | 28 -
.../gso/items/armours/body_basic_common.json | 29 -
.../gso/items/armours/body_exosuit_epic.json | 28 -
.../gso/items/armours/body_plated_rare.json | 29 -
.../gso/items/armours/boots_assault_rare.json | 28 -
.../gso/items/armours/boots_basic_common.json | 29 -
.../gso/items/armours/boots_gravity_epic.json | 28 -
.../items/armours/gloves_basic_common.json | 29 -
.../gso/items/armours/hands_basic_common.json | 28 -
.../gso/items/armours/hands_combat_rare.json | 28 -
.../gso/items/armours/hands_elite_epic.json | 28 -
.../items/armours/helmet_basic_common.json | 29 -
.../items/armours/helmet_reinforced_rare.json | 29 -
.../items/armours/helmet_tactical_epic.json | 28 -
.../gso/items/armours/pants_basic_common.json | 29 -
.../gso/items/armours/pants_exo_epic.json | 28 -
.../items/armours/pants_reinforced_rare.json | 28 -
.../items/consumables/credit_multiplier.json | 26 -
.../items/consumables/energy_boost_large.json | 25 -
.../items/consumables/energy_boost_small.json | 26 -
.../data/gso/items/consumables/fuel_cell.json | 27 -
.../items/consumables/health_kit_large.json | 22 -
.../items/consumables/health_kit_small.json | 26 -
.../items/consumables/scrap_pack_small.json | 36 -
.../gso/items/consumables/starter_crate.json | 40 -
.../gso/items/consumables/xp_booster.json | 26 -
.../gso/items/decorations/room_armory.json | 24 -
.../items/decorations/room_operations.json | 24 -
.../items/decorations/room_research_lab.json | 24 -
.../gso/items/decorations/room_throne.json | 24 -
.../gso/items/decorations/room_vault.json | 24 -
.../gso/items/decorations/wp_alien_ruins.json | 33 -
.../items/decorations/wp_arctic_station.json | 12 -
.../gso/items/decorations/wp_deep_ocean.json | 12 -
.../items/decorations/wp_golden_empire.json | 33 -
.../gso/items/decorations/wp_lava_forge.json | 33 -
.../gso/items/decorations/wp_nebula_dawn.json | 12 -
.../gso/items/decorations/wp_void_black.json | 33 -
.../gso/items/decorations/wp_void_rift.json | 33 -
.../misc/ballistic_alloy_common.json | 28 -
.../carbon_titanium_composite_common.json | 28 -
.../hullPlating/misc/chrono_alloy_common.json | 28 -
.../misc/dimensional_alloy_common.json | 28 -
.../misc/flux_core_alloy_common.json | 28 -
.../misc/neutronium_composite_common.json | 28 -
.../hullPlating/misc/phase_alloy_common.json | 28 -
.../misc/plasma_channel_alloy_common.json | 28 -
.../misc/reinforced_steel_common.json | 28 -
.../misc/superconductive_alloy_common.json | 28 -
.../hullPlating/misc/voidsteel_common.json | 28 -
.../plating/ablative_plating_common.json | 28 -
.../plating/quantum_hull_plate.json | 18 -
.../section/advanced_hull_section_common.json | 28 -
.../section/armor_hull_section_common.json | 28 -
.../battleship_hull_section_legendary.json | 18 -
.../section/exotic_hull_section_common.json | 28 -
.../section/heavy_hull_section_common.json | 28 -
.../section/light_hull_section_common.json | 28 -
.../section/standard_hull_section_common.json | 28 -
GameServer/data/gso/items/manifest.json | 21 -
.../gso/items/materials/bio/bio_pulp.json | 26 -
.../materials/bio/organic_insulation.json | 26 -
.../gso/items/materials/bio/plant_matter.json | 26 -
.../materials/chemical/aluminum_alloy.json | 26 -
.../chemical/bio_composite_material.json | 26 -
.../chemical/carbon_nanotube_alloy.json | 26 -
.../chemical/carbon_titanium_composite.json | 19 -
.../materials/chemical/ceramic_composite.json | 26 -
.../materials/chemical/chrono_alloy.json | 19 -
.../materials/chemical/dimensional_alloy.json | 19 -
.../chemical/explosive_compound.json | 26 -
.../items/materials/chemical/flex_alloy.json | 26 -
.../materials/chemical/flux_core_alloy.json | 19 -
.../chemical/fusion_rated_alloy.json | 26 -
.../materials/chemical/glass_composite.json | 26 -
.../chemical/neutronium_composite.json | 19 -
.../items/materials/chemical/phase_alloy.json | 19 -
.../chemical/radiation_shield_alloy.json | 26 -
.../chemical/reactive_armor_alloy.json | 26 -
.../materials/chemical/reinforced_steel.json | 16 -
.../gso/items/materials/chemical/resin.json | 26 -
.../materials/chemical/rubber_polymer.json | 26 -
.../items/materials/chemical/servo_alloy.json | 26 -
.../items/materials/chemical/steel_alloy.json | 26 -
.../materials/chemical/titanium_alloy.json | 26 -
.../materials/chemical/transparent_alloy.json | 26 -
.../materials/chemical/tungsten_alloy.json | 26 -
.../items/materials/chemical/voidsteel.json | 19 -
.../electronics/advanced_circuit_board.json | 18 -
.../electronics/ai_core_circuit.json | 26 -
.../materials/electronics/basic_circuit.json | 26 -
.../electronics/control_circuit.json | 26 -
.../dimensional_logic_circuit.json | 26 -
.../electronics/high_density_circuit.json | 26 -
.../materials/electronics/logic_circuit.json | 26 -
.../electronics/navigation_circuit.json | 26 -
.../materials/electronics/power_circuit.json | 26 -
.../electronics/processor_circuit.json | 26 -
.../electronics/quantum_circuit.json | 26 -
.../electronics/reactor_control_circuit.json | 26 -
.../electronics/sensor_array_circuit.json | 26 -
.../electronics/sentient_core_circuit.json | 26 -
.../electronics/shield_control_circuit.json | 26 -
.../electronics/stealth_circuit.json | 26 -
.../electronics/warp_navigation_circuit.json | 26 -
.../electronics/weapon_control_circuit.json | 26 -
.../items/materials/fabric/plant_cloth.json | 26 -
.../items/materials/fabric/plant_fiber.json | 26 -
.../data/gso/items/materials/food/bread.json | 26 -
.../data/gso/items/materials/food/fish.json | 26 -
.../gso/items/materials/food/fish_meat.json | 26 -
.../data/gso/items/materials/food/flour.json | 26 -
.../gso/items/materials/food/fruit_plant.json | 26 -
.../data/gso/items/materials/food/grain.json | 26 -
.../gso/items/materials/food/grain_crop.json | 26 -
.../gso/items/materials/food/meat_stew.json | 26 -
.../gso/items/materials/food/ration_pack.json | 26 -
.../items/materials/food/vegetable_plant.json | 26 -
.../items/materials/food/vegetable_stew.json | 26 -
.../items/materials/ingot/aluminum_ingot.json | 26 -
.../items/materials/ingot/carbon_ingot.json | 26 -
.../items/materials/ingot/chromium_ingot.json | 26 -
.../items/materials/ingot/chronium_ingot.json | 26 -
.../items/materials/ingot/copper_ingot.json | 26 -
.../materials/ingot/darksteel_ingot.json | 26 -
.../gso/items/materials/ingot/gold_ingot.json | 26 -
.../gso/items/materials/ingot/iron_ingot.json | 26 -
.../materials/ingot/magnesium_ingot.json | 26 -
.../materials/ingot/neutronium_ingot.json | 26 -
.../items/materials/ingot/platinum_ingot.json | 26 -
.../items/materials/ingot/silver_ingot.json | 26 -
.../items/materials/ingot/titanium_ingot.json | 26 -
.../items/materials/ingot/tungsten_ingot.json | 26 -
.../gso/items/materials/liquid/water.json | 26 -
.../materials/misc/aerospace_aluminum.json | 26 -
.../materials/misc/alien_fauna_sample.json | 26 -
.../items/materials/misc/alien_protein.json | 26 -
.../items/materials/misc/animal_carcass.json | 26 -
.../gso/items/materials/misc/bandage.json | 26 -
.../gso/items/materials/misc/body_exotic.json | 26 -
.../gso/items/materials/misc/body_light.json | 26 -
.../items/materials/misc/body_military.json | 26 -
.../items/materials/misc/body_standard.json | 26 -
.../gso/items/materials/misc/boots_light.json | 26 -
.../items/materials/misc/boots_magnetic.json | 26 -
.../items/materials/misc/boots_military.json | 26 -
.../items/materials/misc/boots_standard.json | 26 -
.../items/materials/misc/carbon_shale.json | 26 -
.../items/materials/misc/chromium_steel.json | 26 -
.../gso/items/materials/misc/cooked_fish.json | 26 -
.../gso/items/materials/misc/cooked_meat.json | 26 -
.../items/materials/misc/crystal_glass.json | 26 -
.../data/gso/items/materials/misc/dough.json | 26 -
.../items/materials/misc/flux_crystal.json | 26 -
.../materials/misc/gloves_industrial.json | 26 -
.../items/materials/misc/gloves_light.json | 26 -
.../items/materials/misc/gloves_military.json | 26 -
.../items/materials/misc/gloves_standard.json | 26 -
.../items/materials/misc/helmet_exotic.json | 26 -
.../items/materials/misc/helmet_light.json | 26 -
.../items/materials/misc/helmet_military.json | 26 -
.../items/materials/misc/helmet_standard.json | 26 -
.../misc/hydroponic_growth_medium.json | 26 -
.../gso/items/materials/misc/ice_chunk.json | 26 -
.../items/materials/misc/iron_ore_common.json | 16 -
.../materials/misc/life_support_basic.json | 26 -
.../materials/misc/life_support_exotic.json | 26 -
.../materials/misc/life_support_military.json | 26 -
.../materials/misc/life_support_standard.json | 26 -
.../gso/items/materials/misc/luxury_meal.json | 26 -
.../items/materials/misc/magnetic_coil.json | 26 -
.../items/materials/misc/medical_pack.json | 26 -
.../items/materials/misc/military_ration.json | 26 -
.../materials/misc/neutronium_shard.json | 26 -
.../items/materials/misc/nutrient_paste.json | 26 -
.../items/materials/misc/pants_exotic.json | 26 -
.../gso/items/materials/misc/pants_heavy.json | 26 -
.../gso/items/materials/misc/pants_light.json | 26 -
.../items/materials/misc/pants_standard.json | 26 -
.../items/materials/misc/phase_crystal.json | 26 -
.../items/materials/misc/processed_wood.json | 26 -
.../gso/items/materials/misc/protein_bar.json | 26 -
.../gso/items/materials/misc/raw_fruits.json | 26 -
.../gso/items/materials/misc/raw_meat.json | 26 -
.../items/materials/misc/raw_vegetables.json | 26 -
.../gso/items/materials/misc/raw_wood.json | 26 -
.../items/materials/misc/silicon_wafer.json | 26 -
.../data/gso/items/materials/misc/tree.json | 26 -
.../gso/items/materials/misc/tree_sap.json | 26 -
.../items/materials/misc/tungsten_steel.json | 26 -
.../items/materials/misc/void_capacitor.json | 18 -
.../items/materials/misc/void_crystal.json | 26 -
.../items/materials/misc/void_residue.json | 26 -
.../materials/misc/wooden_components.json | 26 -
.../gso/items/materials/ore/bauxite_ore.json | 26 -
.../gso/items/materials/ore/chromium_ore.json | 26 -
.../gso/items/materials/ore/chronite_ore.json | 26 -
.../gso/items/materials/ore/copper_ore.json | 26 -
.../items/materials/ore/dark_iron_ore.json | 26 -
.../gso/items/materials/ore/gold_ore.json | 26 -
.../gso/items/materials/ore/iron_ore.json | 26 -
.../items/materials/ore/magnesium_ore.json | 26 -
.../gso/items/materials/ore/platinum_ore.json | 26 -
.../gso/items/materials/ore/silver_ore.json | 26 -
.../gso/items/materials/ore/titanium_ore.json | 26 -
.../gso/items/materials/ore/tungsten_ore.json | 26 -
.../gso/items/materials/stone/fluxstone.json | 26 -
.../gso/items/materials/wood/wood_planks.json | 26 -
.../items/ships/dreadnought_legendary.json | 27 -
.../gso/items/ships/heavy_cruiser_rare.json | 28 -
.../gso/items/ships/interceptor_common.json | 28 -
.../gso/items/ships/interceptor_uncommon.json | 28 -
.../data/gso/items/ships/phantom_epic.json | 27 -
.../items/ships/starter_cruiser_common.json | 28 -
.../gso/items/ships/starter_cruiser_rare.json | 28 -
.../items/ships/starter_cruiser_uncommon.json | 28 -
.../items/weapons/assault_rifle_common.json | 27 -
.../gso/items/weapons/assault_rifle_epic.json | 27 -
.../gso/items/weapons/assault_rifle_rare.json | 27 -
.../gso/items/weapons/dual_pistol_common.json | 27 -
.../gso/items/weapons/dual_pistol_epic.json | 27 -
.../gso/items/weapons/dual_pistol_rare.json | 27 -
.../gso/items/weapons/laser_bow_common.json | 27 -
.../gso/items/weapons/laser_bow_epic.json | 26 -
.../gso/items/weapons/laser_bow_rare.json | 27 -
.../items/weapons/laser_crossbow_common.json | 27 -
.../items/weapons/laser_crossbow_epic.json | 27 -
.../items/weapons/laser_crossbow_rare.json | 27 -
.../items/weapons/pistol_marksman_rare.json | 27 -
.../items/weapons/pistol_overcharge_epic.json | 27 -
.../items/weapons/pistol_standard_common.json | 27 -
.../items/weapons/plasma_cutter_common.json | 27 -
.../gso/items/weapons/plasma_cutter_epic.json | 27 -
.../gso/items/weapons/plasma_cutter_rare.json | 27 -
.../items/weapons/rocket_launcher_common.json | 27 -
.../items/weapons/rocket_launcher_epic.json | 27 -
.../items/weapons/rocket_launcher_rare.json | 27 -
.../data/gso/items/weapons/sniper_common.json | 27 -
.../data/gso/items/weapons/sniper_epic.json | 27 -
.../data/gso/items/weapons/sniper_rare.json | 27 -
.../gso/items/weapons/starter_blaster.json | 27 -
.../data/gso/missions/faction_missions.json | 12 -
.../data/gso/quests/daily/d_craft_3.json | 46 -
.../gso/quests/daily/d_customize_ship.json | 44 -
.../data/gso/quests/daily/d_decor_10.json | 46 -
.../data/gso/quests/daily/d_dungeons_3.json | 44 -
.../data/gso/quests/daily/d_explore_30.json | 35 -
.../gso/quests/daily/d_kill_pirates_10.json | 46 -
.../data/gso/quests/daily/d_login_5.json | 44 -
.../data/gso/quests/daily/d_smelt_5.json | 46 -
.../quests/daily/d_travel_planet_1000.json | 37 -
.../gso/quests/main_story/ms_ch1_001.json | 78 -
.../gso/quests/main_story/ms_ch1_002.json | 65 -
.../gso/quests/main_story/ms_ch1_003.json | 63 -
.../gso/quests/main_story/ms_ch2_001.json | 67 -
.../gso/quests/main_story/ms_ch2_002.json | 63 -
.../gso/quests/main_story/ms_ch2_003.json | 63 -
.../gso/quests/main_story/ms_ch3_001.json | 63 -
.../gso/quests/main_story/ms_ch3_002.json | 72 -
GameServer/data/gso/quests/manifest.json | 12 -
.../data/gso/quests/monthly/m_craft_100.json | 50 -
.../data/gso/quests/monthly/m_decor_100.json | 46 -
.../gso/quests/monthly/m_dungeons_50.json | 52 -
.../gso/quests/monthly/m_guild_fight_10.json | 48 -
.../data/gso/quests/monthly/m_hire_5.json | 50 -
.../gso/quests/monthly/m_lightyears_100.json | 44 -
.../data/gso/quests/monthly/m_raids_20.json | 48 -
.../data/gso/quests/monthly/m_void_run.json | 50 -
.../data/gso/quests/weekly/w_craft_20.json | 55 -
.../data/gso/quests/weekly/w_dungeons_10.json | 48 -
.../quests/weekly/w_explore_planets_3.json | 48 -
.../data/gso/quests/weekly/w_friends_5.json | 39 -
.../data/gso/quests/weekly/w_gather_50.json | 50 -
.../gso/quests/weekly/w_guild_fight_3.json | 44 -
.../gso/quests/weekly/w_lightyears_25.json | 44 -
.../data/gso/quests/weekly/w_raids_3.json | 48 -
.../quests/weekly/w_survive_hardcore_7.json | 39 -
.../gso/recipes/alloys/ablative_plating.json | 18 -
.../recipes/alloys/aerospace_aluminum.json | 18 -
.../gso/recipes/alloys/ballistic_alloy.json | 18 -
.../alloys/carbon_titanium_composite.json | 18 -
.../gso/recipes/alloys/chromium_steel.json | 18 -
.../data/gso/recipes/alloys/chrono_alloy.json | 19 -
.../gso/recipes/alloys/dimensional_alloy.json | 19 -
.../gso/recipes/alloys/flux_core_alloy.json | 19 -
.../recipes/alloys/fusion_rated_alloy.json | 18 -
.../recipes/alloys/neutronium_composite.json | 19 -
.../data/gso/recipes/alloys/phase_alloy.json | 18 -
.../recipes/alloys/reactive_armor_alloy.json | 18 -
.../gso/recipes/alloys/reinforced_steel.json | 18 -
.../data/gso/recipes/alloys/steel_alloy.json | 18 -
.../recipes/alloys/superconductive_alloy.json | 19 -
.../gso/recipes/alloys/titanium_alloy.json | 18 -
.../gso/recipes/alloys/tungsten_steel.json | 18 -
.../data/gso/recipes/alloys/voidsteel.json | 19 -
.../data/gso/recipes/armours/body_basic.json | 18 -
.../data/gso/recipes/armours/body_plated.json | 18 -
.../data/gso/recipes/armours/boots_basic.json | 18 -
.../gso/recipes/armours/gloves_basic.json | 18 -
.../gso/recipes/armours/helmet_basic.json | 18 -
.../data/gso/recipes/armours/pants_basic.json | 18 -
.../circuits/advanced_circuit_board.json | 19 -
.../gso/recipes/circuits/ai_core_circuit.json | 18 -
.../gso/recipes/circuits/basic_circuit.json | 18 -
.../gso/recipes/circuits/control_circuit.json | 18 -
.../circuits/dimensional_logic_circuit.json | 19 -
.../circuits/high_density_circuit.json | 18 -
.../gso/recipes/circuits/logic_circuit.json | 18 -
.../recipes/circuits/navigation_circuit.json | 18 -
.../gso/recipes/circuits/power_circuit.json | 19 -
.../recipes/circuits/processor_circuit.json | 19 -
.../gso/recipes/circuits/quantum_circuit.json | 19 -
.../circuits/reactor_control_circuit.json | 18 -
.../circuits/sensor_array_circuit.json | 18 -
.../circuits/sentient_core_circuit.json | 19 -
.../circuits/shield_control_circuit.json | 18 -
.../gso/recipes/circuits/stealth_circuit.json | 18 -
.../gso/recipes/circuits/void_capacitor.json | 19 -
.../circuits/warp_navigation_circuit.json | 18 -
.../circuits/weapon_control_circuit.json | 18 -
.../consumables/energy_boost_small.json | 18 -
.../gso/recipes/consumables/fuel_cell.json | 18 -
.../recipes/consumables/health_kit_large.json | 18 -
.../recipes/consumables/health_kit_small.json | 18 -
.../data/gso/recipes/crafting_tabs.json | 212 -
.../recipes/food_organics/alien_protein.json | 17 -
.../data/gso/recipes/food_organics/bread.json | 17 -
.../recipes/food_organics/cooked_fish.json | 17 -
.../recipes/food_organics/cooked_meat.json | 17 -
.../data/gso/recipes/food_organics/dough.json | 18 -
.../gso/recipes/food_organics/fish_meat.json | 17 -
.../data/gso/recipes/food_organics/flour.json | 17 -
.../data/gso/recipes/food_organics/grain.json | 17 -
.../hydroponic_growth_medium.json | 19 -
.../recipes/food_organics/luxury_meal.json | 19 -
.../gso/recipes/food_organics/meat_stew.json | 19 -
.../food_organics/military_ration.json | 18 -
.../recipes/food_organics/nutrient_paste.json | 18 -
.../recipes/food_organics/protein_bar.json | 18 -
.../recipes/food_organics/ration_pack.json | 18 -
.../gso/recipes/food_organics/raw_fruits.json | 17 -
.../gso/recipes/food_organics/raw_meat.json | 17 -
.../recipes/food_organics/raw_vegetables.json | 17 -
.../recipes/food_organics/vegetable_stew.json | 18 -
.../data/gso/recipes/food_organics/water.json | 17 -
.../hull_sections/advanced_hull_section.json | 18 -
.../hull_sections/armor_hull_section.json | 18 -
.../battleship_hull_section.json | 20 -
.../hull_sections/exotic_hull_section.json | 18 -
.../hull_sections/heavy_hull_section.json | 18 -
.../hull_sections/light_hull_section.json | 18 -
.../hull_sections/standard_hull_section.json | 18 -
.../recipes/hulls/ablative_armor_hull.json | 15 -
.../data/gso/recipes/hulls/advanced_hull.json | 18 -
.../data/gso/recipes/hulls/armor_hull.json | 18 -
.../recipes/hulls/chrono_stabilized_hull.json | 15 -
.../hulls/dimensional_anchor_hull.json | 15 -
.../gso/recipes/hulls/dreadframe_hull.json | 19 -
.../data/gso/recipes/hulls/heavy_hull.json | 18 -
.../gso/recipes/hulls/industrial_hull.json | 15 -
.../gso/recipes/hulls/lightframe_hull.json | 18 -
.../gso/recipes/hulls/phase_locked_hull.json | 19 -
.../recipes/hulls/plasma_resistant_hull.json | 15 -
.../gso/recipes/hulls/quantum_hull_plate.json | 20 -
.../hulls/reinforced_plating_hull.json | 15 -
.../data/gso/recipes/hulls/standard_hull.json | 18 -
.../hulls/standard_structural_hull.json | 15 -
.../recipes/hulls/superconductive_hull.json | 15 -
.../hulls/titanium_aerospace_hull.json | 15 -
.../gso/recipes/hulls/voidsteel_hull.json | 18 -
GameServer/data/gso/recipes/manifest.json | 21 -
.../data/gso/recipes/organics/bandage.json | 18 -
.../organics/bio_composite_material.json | 19 -
.../data/gso/recipes/organics/bio_pulp.json | 17 -
.../gso/recipes/organics/medical_pack.json | 18 -
.../recipes/organics/organic_insulation.json | 18 -
.../gso/recipes/organics/plant_cloth.json | 17 -
.../gso/recipes/organics/plant_fiber.json | 17 -
.../gso/recipes/organics/processed_wood.json | 17 -
.../data/gso/recipes/organics/raw_wood.json | 17 -
.../data/gso/recipes/organics/resin.json | 17 -
.../data/gso/recipes/organics/tree_sap.json | 17 -
.../gso/recipes/organics/wood_planks.json | 17 -
.../recipes/organics/wooden_components.json | 18 -
.../gso/recipes/smelting/aluminum_ingot.json | 17 -
.../gso/recipes/smelting/carbon_ingot.json | 18 -
.../gso/recipes/smelting/chromium_ingot.json | 17 -
.../gso/recipes/smelting/chronium_ingot.json | 17 -
.../gso/recipes/smelting/copper_ingot.json | 17 -
.../gso/recipes/smelting/darksteel_ingot.json | 18 -
.../data/gso/recipes/smelting/gold_ingot.json | 17 -
.../data/gso/recipes/smelting/iron_ingot.json | 17 -
.../gso/recipes/smelting/magnesium_ingot.json | 17 -
.../recipes/smelting/neutronium_ingot.json | 17 -
.../gso/recipes/smelting/platinum_ingot.json | 17 -
.../gso/recipes/smelting/silver_ingot.json | 17 -
.../gso/recipes/smelting/titanium_ingot.json | 17 -
.../gso/recipes/smelting/tungsten_ingot.json | 17 -
.../recipes/spacesuit_parts/body_exotic.json | 19 -
.../recipes/spacesuit_parts/body_light.json | 18 -
.../spacesuit_parts/body_military.json | 19 -
.../spacesuit_parts/body_standard.json | 19 -
.../recipes/spacesuit_parts/boots_light.json | 18 -
.../spacesuit_parts/boots_magnetic.json | 19 -
.../spacesuit_parts/boots_military.json | 19 -
.../spacesuit_parts/boots_standard.json | 19 -
.../spacesuit_parts/gloves_industrial.json | 19 -
.../recipes/spacesuit_parts/gloves_light.json | 18 -
.../spacesuit_parts/gloves_military.json | 19 -
.../spacesuit_parts/gloves_standard.json | 19 -
.../spacesuit_parts/helmet_exotic.json | 19 -
.../recipes/spacesuit_parts/helmet_light.json | 19 -
.../spacesuit_parts/helmet_military.json | 20 -
.../spacesuit_parts/helmet_standard.json | 20 -
.../spacesuit_parts/life_support_basic.json | 19 -
.../spacesuit_parts/life_support_exotic.json | 19 -
.../life_support_military.json | 19 -
.../life_support_standard.json | 20 -
.../recipes/spacesuit_parts/pants_exotic.json | 19 -
.../recipes/spacesuit_parts/pants_heavy.json | 19 -
.../recipes/spacesuit_parts/pants_light.json | 18 -
.../spacesuit_parts/pants_standard.json | 19 -
.../gso/recipes/weapons/assault_rifle.json | 19 -
.../gso/recipes/weapons/plasma_cutter.json | 19 -
.../gso/recipes/weapons/sniper_rifle.json | 19 -
.../gso/recipes/weapons/standard_pistol.json | 18 -
.../gso/recipes/weapons/starter_blaster.json | 18 -
.../gso/skills/combat/defense_training.json | 15 -
.../data/gso/skills/combat/piloting.json | 15 -
.../gso/skills/combat/speed_reflexes.json | 15 -
.../gso/skills/combat/tactical_analysis.json | 15 -
.../gso/skills/combat/weapons_mastery.json | 15 -
.../gso/skills/crafting/armor_crafting.json | 15 -
.../skills/crafting/circuit_fabrication.json | 17 -
.../skills/crafting/resource_extraction.json | 15 -
.../gso/skills/crafting/ship_engineering.json | 17 -
.../gso/skills/crafting/smelting_mastery.json | 15 -
.../gso/skills/crafting/weapons_crafting.json | 15 -
GameServer/data/gso/skills/manifest.json | 10 -
.../gso/skills/science/alien_technology.json | 15 -
.../gso/skills/science/bio_engineering.json | 15 -
.../skills/science/energy_manipulation.json | 14 -
.../data/gso/skills/science/engineering.json | 14 -
.../gso/skills/science/quantum_physics.json | 15 -
GameServer/data/mods.db | Bin 40960 -> 0 bytes
GameServer/generate_assets.js | 209 -
GameServer/middleware/errorHandler.js | 40 -
GameServer/models/PlayerData.js | 203 -
GameServer/package-lock.json | 3293 -----
GameServer/package.json | 40 -
GameServer/routes/base.js | 243 -
GameServer/routes/crafting.js | 212 -
GameServer/routes/dungeons.js | 380 -
GameServer/routes/idle.js | 282 -
GameServer/routes/quests.js | 232 -
GameServer/routes/ships.js | 452 -
GameServer/routes/skills.js | 187 -
GameServer/server.js | 4204 ------
.../services/ServerRegistrationService.js | 161 -
GameServer/systems/AllianceSystem.js | 177 -
GameServer/systems/AllianceWarSystem.js | 207 -
GameServer/systems/AnalyticsSystem.js | 257 -
GameServer/systems/BaseSystem.js | 512 -
GameServer/systems/ContentLoader.js | 315 -
GameServer/systems/CraftingSystem.js | 160 -
GameServer/systems/DungeonSystem.js | 214 -
GameServer/systems/FleetSystem.js | 60 -
GameServer/systems/GalaxyEventSystem.js | 122 -
GameServer/systems/GalaxySystem.js | 142 -
GameServer/systems/GameSystem.js | 284 -
GameServer/systems/IdleSystem.js | 326 -
GameServer/systems/ItemSystem.js | 210 -
GameServer/systems/MarketSystem.js | 294 -
GameServer/systems/MissionSystem.js | 240 -
GameServer/systems/QuestSystem.js | 61 -
GameServer/systems/RaidSystem.js | 267 -
GameServer/systems/ReputationSystem.js | 96 -
GameServer/systems/ResearchSystem.js | 158 -
GameServer/systems/ResourceSystem.js | 162 -
GameServer/systems/SeasonSystem.js | 121 -
GameServer/systems/ShipSystem.js | 488 -
GameServer/systems/SkillSystem.js | 237 -
GameServer/systems/SocialSystem.js | 158 -
GameServer/tests/run.js | 140 -
GameServer/utils/ErrorReporter.js | 119 -
GameServer/utils/logger.js | 27 -
api/src/config/config.js | 15 +
api/src/controllers/authController.js | 25 +
api/src/controllers/serverController.js | 74 +
api/src/db/db.js | 19 +
api/src/index.js | 33 +
api/src/middleware/authMiddleware.js | 32 +
api/src/models/GameServer.js | 12 +
api/src/models/User.js | 37 +
api/src/routes/authRoutes.js | 7 +
api/src/routes/serverRoutes.js | 9 +
api/src/routes/userRoutes.js | 10 +
api/src/services/authService.js | 59 +
api/src/services/serverService.js | 58 +
client/.gitignore | 24 +
client/README.md | 16 +
client/eslint.config.js | 29 +
client/public/vite.svg | 1 +
client/src/App.jsx | 137 +
client/src/assets/react.svg | 1 +
client/src/components/Console/Console.css | 86 +
client/src/components/Console/Console.jsx | 121 +
client/src/components/ui/Button.jsx | 27 +
client/src/components/ui/Card.jsx | 14 +
client/src/components/ui/Input.jsx | 20 +
client/src/components/ui/styles/Button.css | 116 +
client/src/context/AuthContext.jsx | 72 +
client/src/context/SocketContext.jsx | 73 +
client/src/hooks/useAuth.js | 10 +
client/src/hooks/useSocket.js | 12 +
client/src/main.jsx | 18 +
client/src/services/ConsoleManager.js | 103 +
client/src/services/GameDataManager.js | 190 +
client/src/services/socket.js | 10 +
client/src/styles/App.css | 314 +
client/src/styles/components.css | 1780 +++
client/src/styles/index.css | 42 +
client/src/styles/main.css | 137 +
client/src/styles/tables.css | 842 ++
.../.gitkeep => client/src/views/GameHUD.jsx | 0
.../src/views/GameInterface/GameInterface.css | 33 +
.../src/views/GameInterface/GameInterface.jsx | 113 +
.../components/CategorySelector.css | 54 +
.../components/CategorySelector.jsx | 20 +
.../components/DungeonScreen.css | 368 +
.../components/DungeonScreen.jsx | 183 +
.../GameInterface/components/GameHeader.css | 76 +
.../GameInterface/components/GameHeader.jsx | 52 +
.../GameInterface/components/Navigation.css | 98 +
.../GameInterface/components/Navigation.jsx | 36 +
.../src/views/GameInterface/tabs/BaseTab.jsx | 40 +
.../views/GameInterface/tabs/CraftingTab.jsx | 183 +
.../views/GameInterface/tabs/DashboardTab.jsx | 137 +
.../views/GameInterface/tabs/DungeonsTab.jsx | 130 +
.../views/GameInterface/tabs/InventoryTab.jsx | 206 +
.../views/GameInterface/tabs/QuestsTab.jsx | 34 +
.../src/views/GameInterface/tabs/ShopTab.jsx | 46 +
.../views/GameInterface/tabs/SkillsTab.jsx | 160 +
.../tabs/components/CraftModal.css | 204 +
.../tabs/components/CraftModal.jsx | 111 +
.../tabs/components/ItemModal.css | 45 +
.../tabs/components/ItemModal.jsx | 43 +
.../GameInterface/tabs/styles/BaseTab.css | 0
.../GameInterface/tabs/styles/CraftingTab.css | 109 +
.../tabs/styles/DashboardTab.css | 239 +
.../GameInterface/tabs/styles/DungeonsTab.css | 352 +
.../tabs/styles/InventoryTab.css | 312 +
.../GameInterface/tabs/styles/QuestsTab.css | 0
.../GameInterface/tabs/styles/ShopTab.css | 42 +
.../GameInterface/tabs/styles/SkillsTab.css | 42 +
client/src/views/LoadingScreen.jsx | 0
.../src/views/LoadingScreen/LoadingScreen.css | 60 +
.../src/views/LoadingScreen/LoadingScreen.jsx | 26 +
client/src/views/MainMenu/MainMenu.css | 141 +
client/src/views/MainMenu/MainMenu.jsx | 65 +
.../views/MainMenu/sections/LoginSection.css | 56 +
.../views/MainMenu/sections/LoginSection.jsx | 140 +
.../MainMenu/sections/OptionsSection.css | 136 +
.../MainMenu/sections/OptionsSection.jsx | 76 +
.../sections/ServerConfirmSection.jsx | 49 +
.../sections/ServerConfirmationSection.css | 59 +
.../views/MainMenu/sections/ServerSection.css | 234 +
.../views/MainMenu/sections/ServerSection.jsx | 153 +
client/vite.config.js | 7 +
.../original/assets/languages/en_US.json | 110 +
.../original/assets/languages/fr_FR.json | 110 +
.../assets/textures/materials/ore/Gold.png | Bin 0 -> 12204 bytes
.../assets/textures/materials/ore/Ilunite.png | Bin 0 -> 19149 bytes
.../assets/textures/materials/ore/bauxite.png | Bin 0 -> 42495 bytes
.../textures/materials/ore/chronite.png | Bin 0 -> 15436 bytes
.../assets/textures/materials/ore/coal.png | Bin 0 -> 10142 bytes
.../assets/textures/materials/ore/copper.png | Bin 0 -> 11762 bytes
.../assets/textures/materials/ore/iron.png | Bin 0 -> 9335 bytes
.../textures/materials/ore/wolfrinite.png | Bin 0 -> 22597 bytes
.../dungeons/pirates/pirates_outpost.json | 15 +
.../data/dungeons/tutorial/tutorial.json | 20 +
.../hostiles/pirates/black_mark_cruiser.json | 13 +
.../hostiles/pirates/raider_frigate.json | 13 +
.../enemies/hostiles/pirates/scout_drone.json | 13 +
.../tutorial/tutorial_boss_hostile.json | 13 +
.../hostiles/tutorial/tutorial_hostile.json | 13 +
.../rooms/pirates/pirate_ambush_zone.json | 12 +
.../rooms/pirates/pirate_boss_bridge.json | 8 +
.../rooms/pirates/pirate_patrol_room.json | 11 +
.../rooms/pirates/pirate_supply_bay.json | 9 +
.../enemies/rooms/tutorial/tutorial_boss.json | 8 +
.../rooms/tutorial/tutorial_enemy_room.json | 8 +
.../rooms/tutorial/tutorial_loot_room.json | 6 +
.../armour/backpack/backpack_advanced.json | 19 +
.../items/armour/backpack/backpack_basic.json | 19 +
.../items/armour/backpack/backpack_elite.json | 19 +
.../hullPlating/ship/basic_ship_plating.json | 19 +
.../data/items/materials/alloys/steel.json | 11 +
.../data/items/materials/bio/bio_pulp.json | 11 +
.../data/items/materials/ingots/aluminum.json | 11 +
.../data/items/materials/ingots/chronite.json | 11 +
.../data/items/materials/ingots/copper.json | 11 +
.../data/items/materials/ingots/gold.json | 11 +
.../data/items/materials/ingots/iron.json | 11 +
.../data/items/materials/ingots/titanium.json | 11 +
.../data/items/materials/ingots/tungsten.json | 11 +
.../data/items/materials/ores/bauxite.json | 11 +
.../data/items/materials/ores/chronite.json | 11 +
.../data/items/materials/ores/coal.json | 11 +
.../data/items/materials/ores/copper.json | 11 +
.../data/items/materials/ores/gold.json | 11 +
.../data/items/materials/ores/ilmenite.json | 11 +
.../data/items/materials/ores/iron.json | 11 +
.../data/items/materials/ores/wolfrinite.json | 11 +
.../original/data/recipes/alloys/steel.json | 19 +
.../data/recipes/ingots/aluminum.json | 19 +
.../data/recipes/ingots/chronite.json | 19 +
.../original/data/recipes/ingots/copper.json | 19 +
.../original/data/recipes/ingots/gold.json | 19 +
.../original/data/recipes/ingots/iron.json | 19 +
.../data/recipes/ingots/titanium.json | 19 +
.../data/recipes/ingots/tungsten.json | 19 +
.../data/skills/combat/weapon_effiency.json | 15 +
.../data/skills/crafting/alloying.json | 15 +
.../data/skills/crafting/forging.json | 15 +
.../data/skills/science/alien_technology.json | 15 +
.../skills/science/biology_engineering.json | 15 +
game-server/datapacks/original/manifest.json | 52 +
game-server/package.json | 28 +
game-server/src/config/config.js | 12 +
game-server/src/config/db.js | 35 +
game-server/src/game/DatapackLoader.js | 202 +
game-server/src/game/EconomyService.js | 71 +
game-server/src/game/SessionManager.js | 78 +
game-server/src/index.js | 89 +
game-server/src/models/Inventory.js | 28 +
game-server/src/models/Item.js | 26 +
game-server/src/models/Player.js | 55 +
game-server/src/models/SubItems.js | 61 +
game-server/src/models/index.js | 12 +
.../src/sockets/handlers/adminHandler.js | 99 +
.../src/sockets/handlers/connectionHandler.js | 76 +
.../src/sockets/handlers/craftingHandler.js | 80 +
.../src/sockets/handlers/dungeonHandler.js | 151 +
.../src/sockets/handlers/inventoryHandler.js | 104 +
.../src/sockets/middleware/authMiddleware.js | 20 +
game-server/src/sockets/socket.js | 20 +
node_modules.zip | Bin 14527973 -> 0 bytes
test/assets/languages/en_us.json | 41 +
.../armour/backpack/backpack_basic.png | Bin 0 -> 47122 bytes
.../hullPlating/ship/ship_plating.png | Bin 0 -> 30865 bytes
.../textures/materials/bio/bio_pulp.png | Bin 0 -> 29359 bytes
.../dungeons/pirates/pirates_outpost.json | 18 +
.../hostiles/pirates/black_mark_cruiser.json | 13 +
.../hostiles/pirates/raider_frigate.json | 13 +
.../enemies/hostiles/pirates/scout_drone.json | 13 +
.../rooms/pirates/pirate_ambush_zone.json | 12 +
.../rooms/pirates/pirate_boss_bridge.json | 8 +
.../rooms/pirates/pirate_patrol_room.json | 11 +
.../rooms/pirates/pirate_supply_bay.json | 9 +
.../items/armour/backpack/backpack_basic.json | 19 +
.../items/hullPlating/ship/ship_plating.json | 19 +
test/data/items/materials/bio/bio_pulp.json | 11 +
.../data/recipes/alloys/ablative_plating.json | 21 +
test/data/skills/crafting/alien_tech.json | 15 +
test/manifest.json | 52 +
764 files changed, 11783 insertions(+), 76166 deletions(-)
delete mode 100644 API/.env.example
delete mode 100644 API/config/database.js
delete mode 100644 API/config/production.js
delete mode 100644 API/middleware/errorHandler.js
delete mode 100644 API/models/GameServer.js
delete mode 100644 API/models/Inventory.js
delete mode 100644 API/models/Player.js
delete mode 100644 API/models/PlayerData.js
delete mode 100644 API/models/Ship.js
delete mode 100644 API/package-lock.json
delete mode 100644 API/routes/auth.js
delete mode 100644 API/routes/payments.js
delete mode 100644 API/routes/servers.js
delete mode 100644 API/scripts/createTestServer.js
delete mode 100644 API/scripts/migrate.js
delete mode 100644 API/scripts/migratePasswords.js
delete mode 100644 API/scripts/seed.js
delete mode 100644 API/server.js
delete mode 100644 API/tests/api.test.js
delete mode 100644 API/utils/ErrorReporter.js
delete mode 100644 API/utils/logger.js
delete mode 100644 Client/data/starbase-layout.json
delete mode 100644 Client/electron-main.js
delete mode 100644 Client/js/GameInitializer.js
delete mode 100644 Client/js/SaveSystemIntegration.js
delete mode 100644 Client/js/SmartSaveManager.js
delete mode 100644 Client/js/core/DebugLogger.js
delete mode 100644 Client/js/core/Economy.js
delete mode 100644 Client/js/core/GameEngine.js
delete mode 100644 Client/js/core/Inventory.js
delete mode 100644 Client/js/core/Logger.js
delete mode 100644 Client/js/core/Player.js
delete mode 100644 Client/js/core/TextureManager.js
delete mode 100644 Client/js/data/GameData.js
delete mode 100644 Client/js/main.js
delete mode 100644 Client/js/systems/BaseSystem.js
delete mode 100644 Client/js/systems/CraftingSystem.js
delete mode 100644 Client/js/systems/DungeonSystem.js
delete mode 100644 Client/js/systems/IdleSystem.js
delete mode 100644 Client/js/systems/ItemSystem.js
delete mode 100644 Client/js/systems/QuestSystem.js
delete mode 100644 Client/js/systems/ShipSystem.js
delete mode 100644 Client/js/systems/SkillSystem.js
delete mode 100644 Client/js/systems/StarbaseWorld.js
delete mode 100644 Client/js/ui/LiveMainMenu.js
delete mode 100644 Client/js/ui/MainMenu.js
delete mode 100644 Client/js/ui/UIManager.js
delete mode 100644 Client/locales/de.json
delete mode 100644 Client/locales/en.json
delete mode 100644 Client/locales/es.json
delete mode 100644 Client/locales/fr.json
delete mode 100644 Client/locales/ja.json
delete mode 100644 Client/locales/ko.json
delete mode 100644 Client/locales/pt.json
delete mode 100644 Client/locales/zh.json
delete mode 100644 Client/package-lock.json
delete mode 100644 Client/preload.js
delete mode 100644 Client/styles/components.css
delete mode 100644 Client/styles/main.css
delete mode 100644 Client/styles/tables.css
delete mode 100644 GameServer/.env.example
delete mode 100644 GameServer/assets/images/ui/placeholder.png
delete mode 100644 GameServer/config/database.js
delete mode 100644 GameServer/create_placeholders.js
delete mode 100644 GameServer/data/gso/alliance/research_tree.json
delete mode 100644 GameServer/data/gso/category/quests/daily.json
delete mode 100644 GameServer/data/gso/category/quests/main_story.json
delete mode 100644 GameServer/data/gso/category/quests/monthly.json
delete mode 100644 GameServer/data/gso/category/quests/weekly.json
delete mode 100644 GameServer/data/gso/dungeons/alien_ruins.json
delete mode 100644 GameServer/data/gso/dungeons/asteroid_mine.json
delete mode 100644 GameServer/data/gso/dungeons/corrupted_vault.json
delete mode 100644 GameServer/data/gso/dungeons/dungeons.json
delete mode 100644 GameServer/data/gso/dungeons/enemies.json
delete mode 100644 GameServer/data/gso/dungeons/nebula_anomaly.json
delete mode 100644 GameServer/data/gso/dungeons/pirate_lair.json
delete mode 100644 GameServer/data/gso/dungeons/void_rift.json
delete mode 100644 GameServer/data/gso/enemies/alien_guardian.json
delete mode 100644 GameServer/data/gso/enemies/ancient_drone.json
delete mode 100644 GameServer/data/gso/enemies/corrupted_ai.json
delete mode 100644 GameServer/data/gso/enemies/crystal_golem.json
delete mode 100644 GameServer/data/gso/enemies/defense_turret.json
delete mode 100644 GameServer/data/gso/enemies/energy_being.json
delete mode 100644 GameServer/data/gso/enemies/mining_drone.json
delete mode 100644 GameServer/data/gso/enemies/phase_shifter.json
delete mode 100644 GameServer/data/gso/enemies/pirate_captain.json
delete mode 100644 GameServer/data/gso/enemies/quantum_entity.json
delete mode 100644 GameServer/data/gso/enemies/rock_creature.json
delete mode 100644 GameServer/data/gso/enemies/security_drone.json
delete mode 100644 GameServer/data/gso/enemies/space_pirate.json
delete mode 100644 GameServer/data/gso/enemies/training_drone.json
delete mode 100644 GameServer/data/gso/enemies/virus_program.json
delete mode 100644 GameServer/data/gso/items/armours/backpack_basic_common.json
delete mode 100644 GameServer/data/gso/items/armours/backpack_field_rare.json
delete mode 100644 GameServer/data/gso/items/armours/backpack_reactor_epic.json
delete mode 100644 GameServer/data/gso/items/armours/body_basic_common.json
delete mode 100644 GameServer/data/gso/items/armours/body_exosuit_epic.json
delete mode 100644 GameServer/data/gso/items/armours/body_plated_rare.json
delete mode 100644 GameServer/data/gso/items/armours/boots_assault_rare.json
delete mode 100644 GameServer/data/gso/items/armours/boots_basic_common.json
delete mode 100644 GameServer/data/gso/items/armours/boots_gravity_epic.json
delete mode 100644 GameServer/data/gso/items/armours/gloves_basic_common.json
delete mode 100644 GameServer/data/gso/items/armours/hands_basic_common.json
delete mode 100644 GameServer/data/gso/items/armours/hands_combat_rare.json
delete mode 100644 GameServer/data/gso/items/armours/hands_elite_epic.json
delete mode 100644 GameServer/data/gso/items/armours/helmet_basic_common.json
delete mode 100644 GameServer/data/gso/items/armours/helmet_reinforced_rare.json
delete mode 100644 GameServer/data/gso/items/armours/helmet_tactical_epic.json
delete mode 100644 GameServer/data/gso/items/armours/pants_basic_common.json
delete mode 100644 GameServer/data/gso/items/armours/pants_exo_epic.json
delete mode 100644 GameServer/data/gso/items/armours/pants_reinforced_rare.json
delete mode 100644 GameServer/data/gso/items/consumables/credit_multiplier.json
delete mode 100644 GameServer/data/gso/items/consumables/energy_boost_large.json
delete mode 100644 GameServer/data/gso/items/consumables/energy_boost_small.json
delete mode 100644 GameServer/data/gso/items/consumables/fuel_cell.json
delete mode 100644 GameServer/data/gso/items/consumables/health_kit_large.json
delete mode 100644 GameServer/data/gso/items/consumables/health_kit_small.json
delete mode 100644 GameServer/data/gso/items/consumables/scrap_pack_small.json
delete mode 100644 GameServer/data/gso/items/consumables/starter_crate.json
delete mode 100644 GameServer/data/gso/items/consumables/xp_booster.json
delete mode 100644 GameServer/data/gso/items/decorations/room_armory.json
delete mode 100644 GameServer/data/gso/items/decorations/room_operations.json
delete mode 100644 GameServer/data/gso/items/decorations/room_research_lab.json
delete mode 100644 GameServer/data/gso/items/decorations/room_throne.json
delete mode 100644 GameServer/data/gso/items/decorations/room_vault.json
delete mode 100644 GameServer/data/gso/items/decorations/wp_alien_ruins.json
delete mode 100644 GameServer/data/gso/items/decorations/wp_arctic_station.json
delete mode 100644 GameServer/data/gso/items/decorations/wp_deep_ocean.json
delete mode 100644 GameServer/data/gso/items/decorations/wp_golden_empire.json
delete mode 100644 GameServer/data/gso/items/decorations/wp_lava_forge.json
delete mode 100644 GameServer/data/gso/items/decorations/wp_nebula_dawn.json
delete mode 100644 GameServer/data/gso/items/decorations/wp_void_black.json
delete mode 100644 GameServer/data/gso/items/decorations/wp_void_rift.json
delete mode 100644 GameServer/data/gso/items/hullPlating/misc/ballistic_alloy_common.json
delete mode 100644 GameServer/data/gso/items/hullPlating/misc/carbon_titanium_composite_common.json
delete mode 100644 GameServer/data/gso/items/hullPlating/misc/chrono_alloy_common.json
delete mode 100644 GameServer/data/gso/items/hullPlating/misc/dimensional_alloy_common.json
delete mode 100644 GameServer/data/gso/items/hullPlating/misc/flux_core_alloy_common.json
delete mode 100644 GameServer/data/gso/items/hullPlating/misc/neutronium_composite_common.json
delete mode 100644 GameServer/data/gso/items/hullPlating/misc/phase_alloy_common.json
delete mode 100644 GameServer/data/gso/items/hullPlating/misc/plasma_channel_alloy_common.json
delete mode 100644 GameServer/data/gso/items/hullPlating/misc/reinforced_steel_common.json
delete mode 100644 GameServer/data/gso/items/hullPlating/misc/superconductive_alloy_common.json
delete mode 100644 GameServer/data/gso/items/hullPlating/misc/voidsteel_common.json
delete mode 100644 GameServer/data/gso/items/hullPlating/plating/ablative_plating_common.json
delete mode 100644 GameServer/data/gso/items/hullPlating/plating/quantum_hull_plate.json
delete mode 100644 GameServer/data/gso/items/hullPlating/section/advanced_hull_section_common.json
delete mode 100644 GameServer/data/gso/items/hullPlating/section/armor_hull_section_common.json
delete mode 100644 GameServer/data/gso/items/hullPlating/section/battleship_hull_section_legendary.json
delete mode 100644 GameServer/data/gso/items/hullPlating/section/exotic_hull_section_common.json
delete mode 100644 GameServer/data/gso/items/hullPlating/section/heavy_hull_section_common.json
delete mode 100644 GameServer/data/gso/items/hullPlating/section/light_hull_section_common.json
delete mode 100644 GameServer/data/gso/items/hullPlating/section/standard_hull_section_common.json
delete mode 100644 GameServer/data/gso/items/manifest.json
delete mode 100644 GameServer/data/gso/items/materials/bio/bio_pulp.json
delete mode 100644 GameServer/data/gso/items/materials/bio/organic_insulation.json
delete mode 100644 GameServer/data/gso/items/materials/bio/plant_matter.json
delete mode 100644 GameServer/data/gso/items/materials/chemical/aluminum_alloy.json
delete mode 100644 GameServer/data/gso/items/materials/chemical/bio_composite_material.json
delete mode 100644 GameServer/data/gso/items/materials/chemical/carbon_nanotube_alloy.json
delete mode 100644 GameServer/data/gso/items/materials/chemical/carbon_titanium_composite.json
delete mode 100644 GameServer/data/gso/items/materials/chemical/ceramic_composite.json
delete mode 100644 GameServer/data/gso/items/materials/chemical/chrono_alloy.json
delete mode 100644 GameServer/data/gso/items/materials/chemical/dimensional_alloy.json
delete mode 100644 GameServer/data/gso/items/materials/chemical/explosive_compound.json
delete mode 100644 GameServer/data/gso/items/materials/chemical/flex_alloy.json
delete mode 100644 GameServer/data/gso/items/materials/chemical/flux_core_alloy.json
delete mode 100644 GameServer/data/gso/items/materials/chemical/fusion_rated_alloy.json
delete mode 100644 GameServer/data/gso/items/materials/chemical/glass_composite.json
delete mode 100644 GameServer/data/gso/items/materials/chemical/neutronium_composite.json
delete mode 100644 GameServer/data/gso/items/materials/chemical/phase_alloy.json
delete mode 100644 GameServer/data/gso/items/materials/chemical/radiation_shield_alloy.json
delete mode 100644 GameServer/data/gso/items/materials/chemical/reactive_armor_alloy.json
delete mode 100644 GameServer/data/gso/items/materials/chemical/reinforced_steel.json
delete mode 100644 GameServer/data/gso/items/materials/chemical/resin.json
delete mode 100644 GameServer/data/gso/items/materials/chemical/rubber_polymer.json
delete mode 100644 GameServer/data/gso/items/materials/chemical/servo_alloy.json
delete mode 100644 GameServer/data/gso/items/materials/chemical/steel_alloy.json
delete mode 100644 GameServer/data/gso/items/materials/chemical/titanium_alloy.json
delete mode 100644 GameServer/data/gso/items/materials/chemical/transparent_alloy.json
delete mode 100644 GameServer/data/gso/items/materials/chemical/tungsten_alloy.json
delete mode 100644 GameServer/data/gso/items/materials/chemical/voidsteel.json
delete mode 100644 GameServer/data/gso/items/materials/electronics/advanced_circuit_board.json
delete mode 100644 GameServer/data/gso/items/materials/electronics/ai_core_circuit.json
delete mode 100644 GameServer/data/gso/items/materials/electronics/basic_circuit.json
delete mode 100644 GameServer/data/gso/items/materials/electronics/control_circuit.json
delete mode 100644 GameServer/data/gso/items/materials/electronics/dimensional_logic_circuit.json
delete mode 100644 GameServer/data/gso/items/materials/electronics/high_density_circuit.json
delete mode 100644 GameServer/data/gso/items/materials/electronics/logic_circuit.json
delete mode 100644 GameServer/data/gso/items/materials/electronics/navigation_circuit.json
delete mode 100644 GameServer/data/gso/items/materials/electronics/power_circuit.json
delete mode 100644 GameServer/data/gso/items/materials/electronics/processor_circuit.json
delete mode 100644 GameServer/data/gso/items/materials/electronics/quantum_circuit.json
delete mode 100644 GameServer/data/gso/items/materials/electronics/reactor_control_circuit.json
delete mode 100644 GameServer/data/gso/items/materials/electronics/sensor_array_circuit.json
delete mode 100644 GameServer/data/gso/items/materials/electronics/sentient_core_circuit.json
delete mode 100644 GameServer/data/gso/items/materials/electronics/shield_control_circuit.json
delete mode 100644 GameServer/data/gso/items/materials/electronics/stealth_circuit.json
delete mode 100644 GameServer/data/gso/items/materials/electronics/warp_navigation_circuit.json
delete mode 100644 GameServer/data/gso/items/materials/electronics/weapon_control_circuit.json
delete mode 100644 GameServer/data/gso/items/materials/fabric/plant_cloth.json
delete mode 100644 GameServer/data/gso/items/materials/fabric/plant_fiber.json
delete mode 100644 GameServer/data/gso/items/materials/food/bread.json
delete mode 100644 GameServer/data/gso/items/materials/food/fish.json
delete mode 100644 GameServer/data/gso/items/materials/food/fish_meat.json
delete mode 100644 GameServer/data/gso/items/materials/food/flour.json
delete mode 100644 GameServer/data/gso/items/materials/food/fruit_plant.json
delete mode 100644 GameServer/data/gso/items/materials/food/grain.json
delete mode 100644 GameServer/data/gso/items/materials/food/grain_crop.json
delete mode 100644 GameServer/data/gso/items/materials/food/meat_stew.json
delete mode 100644 GameServer/data/gso/items/materials/food/ration_pack.json
delete mode 100644 GameServer/data/gso/items/materials/food/vegetable_plant.json
delete mode 100644 GameServer/data/gso/items/materials/food/vegetable_stew.json
delete mode 100644 GameServer/data/gso/items/materials/ingot/aluminum_ingot.json
delete mode 100644 GameServer/data/gso/items/materials/ingot/carbon_ingot.json
delete mode 100644 GameServer/data/gso/items/materials/ingot/chromium_ingot.json
delete mode 100644 GameServer/data/gso/items/materials/ingot/chronium_ingot.json
delete mode 100644 GameServer/data/gso/items/materials/ingot/copper_ingot.json
delete mode 100644 GameServer/data/gso/items/materials/ingot/darksteel_ingot.json
delete mode 100644 GameServer/data/gso/items/materials/ingot/gold_ingot.json
delete mode 100644 GameServer/data/gso/items/materials/ingot/iron_ingot.json
delete mode 100644 GameServer/data/gso/items/materials/ingot/magnesium_ingot.json
delete mode 100644 GameServer/data/gso/items/materials/ingot/neutronium_ingot.json
delete mode 100644 GameServer/data/gso/items/materials/ingot/platinum_ingot.json
delete mode 100644 GameServer/data/gso/items/materials/ingot/silver_ingot.json
delete mode 100644 GameServer/data/gso/items/materials/ingot/titanium_ingot.json
delete mode 100644 GameServer/data/gso/items/materials/ingot/tungsten_ingot.json
delete mode 100644 GameServer/data/gso/items/materials/liquid/water.json
delete mode 100644 GameServer/data/gso/items/materials/misc/aerospace_aluminum.json
delete mode 100644 GameServer/data/gso/items/materials/misc/alien_fauna_sample.json
delete mode 100644 GameServer/data/gso/items/materials/misc/alien_protein.json
delete mode 100644 GameServer/data/gso/items/materials/misc/animal_carcass.json
delete mode 100644 GameServer/data/gso/items/materials/misc/bandage.json
delete mode 100644 GameServer/data/gso/items/materials/misc/body_exotic.json
delete mode 100644 GameServer/data/gso/items/materials/misc/body_light.json
delete mode 100644 GameServer/data/gso/items/materials/misc/body_military.json
delete mode 100644 GameServer/data/gso/items/materials/misc/body_standard.json
delete mode 100644 GameServer/data/gso/items/materials/misc/boots_light.json
delete mode 100644 GameServer/data/gso/items/materials/misc/boots_magnetic.json
delete mode 100644 GameServer/data/gso/items/materials/misc/boots_military.json
delete mode 100644 GameServer/data/gso/items/materials/misc/boots_standard.json
delete mode 100644 GameServer/data/gso/items/materials/misc/carbon_shale.json
delete mode 100644 GameServer/data/gso/items/materials/misc/chromium_steel.json
delete mode 100644 GameServer/data/gso/items/materials/misc/cooked_fish.json
delete mode 100644 GameServer/data/gso/items/materials/misc/cooked_meat.json
delete mode 100644 GameServer/data/gso/items/materials/misc/crystal_glass.json
delete mode 100644 GameServer/data/gso/items/materials/misc/dough.json
delete mode 100644 GameServer/data/gso/items/materials/misc/flux_crystal.json
delete mode 100644 GameServer/data/gso/items/materials/misc/gloves_industrial.json
delete mode 100644 GameServer/data/gso/items/materials/misc/gloves_light.json
delete mode 100644 GameServer/data/gso/items/materials/misc/gloves_military.json
delete mode 100644 GameServer/data/gso/items/materials/misc/gloves_standard.json
delete mode 100644 GameServer/data/gso/items/materials/misc/helmet_exotic.json
delete mode 100644 GameServer/data/gso/items/materials/misc/helmet_light.json
delete mode 100644 GameServer/data/gso/items/materials/misc/helmet_military.json
delete mode 100644 GameServer/data/gso/items/materials/misc/helmet_standard.json
delete mode 100644 GameServer/data/gso/items/materials/misc/hydroponic_growth_medium.json
delete mode 100644 GameServer/data/gso/items/materials/misc/ice_chunk.json
delete mode 100644 GameServer/data/gso/items/materials/misc/iron_ore_common.json
delete mode 100644 GameServer/data/gso/items/materials/misc/life_support_basic.json
delete mode 100644 GameServer/data/gso/items/materials/misc/life_support_exotic.json
delete mode 100644 GameServer/data/gso/items/materials/misc/life_support_military.json
delete mode 100644 GameServer/data/gso/items/materials/misc/life_support_standard.json
delete mode 100644 GameServer/data/gso/items/materials/misc/luxury_meal.json
delete mode 100644 GameServer/data/gso/items/materials/misc/magnetic_coil.json
delete mode 100644 GameServer/data/gso/items/materials/misc/medical_pack.json
delete mode 100644 GameServer/data/gso/items/materials/misc/military_ration.json
delete mode 100644 GameServer/data/gso/items/materials/misc/neutronium_shard.json
delete mode 100644 GameServer/data/gso/items/materials/misc/nutrient_paste.json
delete mode 100644 GameServer/data/gso/items/materials/misc/pants_exotic.json
delete mode 100644 GameServer/data/gso/items/materials/misc/pants_heavy.json
delete mode 100644 GameServer/data/gso/items/materials/misc/pants_light.json
delete mode 100644 GameServer/data/gso/items/materials/misc/pants_standard.json
delete mode 100644 GameServer/data/gso/items/materials/misc/phase_crystal.json
delete mode 100644 GameServer/data/gso/items/materials/misc/processed_wood.json
delete mode 100644 GameServer/data/gso/items/materials/misc/protein_bar.json
delete mode 100644 GameServer/data/gso/items/materials/misc/raw_fruits.json
delete mode 100644 GameServer/data/gso/items/materials/misc/raw_meat.json
delete mode 100644 GameServer/data/gso/items/materials/misc/raw_vegetables.json
delete mode 100644 GameServer/data/gso/items/materials/misc/raw_wood.json
delete mode 100644 GameServer/data/gso/items/materials/misc/silicon_wafer.json
delete mode 100644 GameServer/data/gso/items/materials/misc/tree.json
delete mode 100644 GameServer/data/gso/items/materials/misc/tree_sap.json
delete mode 100644 GameServer/data/gso/items/materials/misc/tungsten_steel.json
delete mode 100644 GameServer/data/gso/items/materials/misc/void_capacitor.json
delete mode 100644 GameServer/data/gso/items/materials/misc/void_crystal.json
delete mode 100644 GameServer/data/gso/items/materials/misc/void_residue.json
delete mode 100644 GameServer/data/gso/items/materials/misc/wooden_components.json
delete mode 100644 GameServer/data/gso/items/materials/ore/bauxite_ore.json
delete mode 100644 GameServer/data/gso/items/materials/ore/chromium_ore.json
delete mode 100644 GameServer/data/gso/items/materials/ore/chronite_ore.json
delete mode 100644 GameServer/data/gso/items/materials/ore/copper_ore.json
delete mode 100644 GameServer/data/gso/items/materials/ore/dark_iron_ore.json
delete mode 100644 GameServer/data/gso/items/materials/ore/gold_ore.json
delete mode 100644 GameServer/data/gso/items/materials/ore/iron_ore.json
delete mode 100644 GameServer/data/gso/items/materials/ore/magnesium_ore.json
delete mode 100644 GameServer/data/gso/items/materials/ore/platinum_ore.json
delete mode 100644 GameServer/data/gso/items/materials/ore/silver_ore.json
delete mode 100644 GameServer/data/gso/items/materials/ore/titanium_ore.json
delete mode 100644 GameServer/data/gso/items/materials/ore/tungsten_ore.json
delete mode 100644 GameServer/data/gso/items/materials/stone/fluxstone.json
delete mode 100644 GameServer/data/gso/items/materials/wood/wood_planks.json
delete mode 100644 GameServer/data/gso/items/ships/dreadnought_legendary.json
delete mode 100644 GameServer/data/gso/items/ships/heavy_cruiser_rare.json
delete mode 100644 GameServer/data/gso/items/ships/interceptor_common.json
delete mode 100644 GameServer/data/gso/items/ships/interceptor_uncommon.json
delete mode 100644 GameServer/data/gso/items/ships/phantom_epic.json
delete mode 100644 GameServer/data/gso/items/ships/starter_cruiser_common.json
delete mode 100644 GameServer/data/gso/items/ships/starter_cruiser_rare.json
delete mode 100644 GameServer/data/gso/items/ships/starter_cruiser_uncommon.json
delete mode 100644 GameServer/data/gso/items/weapons/assault_rifle_common.json
delete mode 100644 GameServer/data/gso/items/weapons/assault_rifle_epic.json
delete mode 100644 GameServer/data/gso/items/weapons/assault_rifle_rare.json
delete mode 100644 GameServer/data/gso/items/weapons/dual_pistol_common.json
delete mode 100644 GameServer/data/gso/items/weapons/dual_pistol_epic.json
delete mode 100644 GameServer/data/gso/items/weapons/dual_pistol_rare.json
delete mode 100644 GameServer/data/gso/items/weapons/laser_bow_common.json
delete mode 100644 GameServer/data/gso/items/weapons/laser_bow_epic.json
delete mode 100644 GameServer/data/gso/items/weapons/laser_bow_rare.json
delete mode 100644 GameServer/data/gso/items/weapons/laser_crossbow_common.json
delete mode 100644 GameServer/data/gso/items/weapons/laser_crossbow_epic.json
delete mode 100644 GameServer/data/gso/items/weapons/laser_crossbow_rare.json
delete mode 100644 GameServer/data/gso/items/weapons/pistol_marksman_rare.json
delete mode 100644 GameServer/data/gso/items/weapons/pistol_overcharge_epic.json
delete mode 100644 GameServer/data/gso/items/weapons/pistol_standard_common.json
delete mode 100644 GameServer/data/gso/items/weapons/plasma_cutter_common.json
delete mode 100644 GameServer/data/gso/items/weapons/plasma_cutter_epic.json
delete mode 100644 GameServer/data/gso/items/weapons/plasma_cutter_rare.json
delete mode 100644 GameServer/data/gso/items/weapons/rocket_launcher_common.json
delete mode 100644 GameServer/data/gso/items/weapons/rocket_launcher_epic.json
delete mode 100644 GameServer/data/gso/items/weapons/rocket_launcher_rare.json
delete mode 100644 GameServer/data/gso/items/weapons/sniper_common.json
delete mode 100644 GameServer/data/gso/items/weapons/sniper_epic.json
delete mode 100644 GameServer/data/gso/items/weapons/sniper_rare.json
delete mode 100644 GameServer/data/gso/items/weapons/starter_blaster.json
delete mode 100644 GameServer/data/gso/missions/faction_missions.json
delete mode 100644 GameServer/data/gso/quests/daily/d_craft_3.json
delete mode 100644 GameServer/data/gso/quests/daily/d_customize_ship.json
delete mode 100644 GameServer/data/gso/quests/daily/d_decor_10.json
delete mode 100644 GameServer/data/gso/quests/daily/d_dungeons_3.json
delete mode 100644 GameServer/data/gso/quests/daily/d_explore_30.json
delete mode 100644 GameServer/data/gso/quests/daily/d_kill_pirates_10.json
delete mode 100644 GameServer/data/gso/quests/daily/d_login_5.json
delete mode 100644 GameServer/data/gso/quests/daily/d_smelt_5.json
delete mode 100644 GameServer/data/gso/quests/daily/d_travel_planet_1000.json
delete mode 100644 GameServer/data/gso/quests/main_story/ms_ch1_001.json
delete mode 100644 GameServer/data/gso/quests/main_story/ms_ch1_002.json
delete mode 100644 GameServer/data/gso/quests/main_story/ms_ch1_003.json
delete mode 100644 GameServer/data/gso/quests/main_story/ms_ch2_001.json
delete mode 100644 GameServer/data/gso/quests/main_story/ms_ch2_002.json
delete mode 100644 GameServer/data/gso/quests/main_story/ms_ch2_003.json
delete mode 100644 GameServer/data/gso/quests/main_story/ms_ch3_001.json
delete mode 100644 GameServer/data/gso/quests/main_story/ms_ch3_002.json
delete mode 100644 GameServer/data/gso/quests/manifest.json
delete mode 100644 GameServer/data/gso/quests/monthly/m_craft_100.json
delete mode 100644 GameServer/data/gso/quests/monthly/m_decor_100.json
delete mode 100644 GameServer/data/gso/quests/monthly/m_dungeons_50.json
delete mode 100644 GameServer/data/gso/quests/monthly/m_guild_fight_10.json
delete mode 100644 GameServer/data/gso/quests/monthly/m_hire_5.json
delete mode 100644 GameServer/data/gso/quests/monthly/m_lightyears_100.json
delete mode 100644 GameServer/data/gso/quests/monthly/m_raids_20.json
delete mode 100644 GameServer/data/gso/quests/monthly/m_void_run.json
delete mode 100644 GameServer/data/gso/quests/weekly/w_craft_20.json
delete mode 100644 GameServer/data/gso/quests/weekly/w_dungeons_10.json
delete mode 100644 GameServer/data/gso/quests/weekly/w_explore_planets_3.json
delete mode 100644 GameServer/data/gso/quests/weekly/w_friends_5.json
delete mode 100644 GameServer/data/gso/quests/weekly/w_gather_50.json
delete mode 100644 GameServer/data/gso/quests/weekly/w_guild_fight_3.json
delete mode 100644 GameServer/data/gso/quests/weekly/w_lightyears_25.json
delete mode 100644 GameServer/data/gso/quests/weekly/w_raids_3.json
delete mode 100644 GameServer/data/gso/quests/weekly/w_survive_hardcore_7.json
delete mode 100644 GameServer/data/gso/recipes/alloys/ablative_plating.json
delete mode 100644 GameServer/data/gso/recipes/alloys/aerospace_aluminum.json
delete mode 100644 GameServer/data/gso/recipes/alloys/ballistic_alloy.json
delete mode 100644 GameServer/data/gso/recipes/alloys/carbon_titanium_composite.json
delete mode 100644 GameServer/data/gso/recipes/alloys/chromium_steel.json
delete mode 100644 GameServer/data/gso/recipes/alloys/chrono_alloy.json
delete mode 100644 GameServer/data/gso/recipes/alloys/dimensional_alloy.json
delete mode 100644 GameServer/data/gso/recipes/alloys/flux_core_alloy.json
delete mode 100644 GameServer/data/gso/recipes/alloys/fusion_rated_alloy.json
delete mode 100644 GameServer/data/gso/recipes/alloys/neutronium_composite.json
delete mode 100644 GameServer/data/gso/recipes/alloys/phase_alloy.json
delete mode 100644 GameServer/data/gso/recipes/alloys/reactive_armor_alloy.json
delete mode 100644 GameServer/data/gso/recipes/alloys/reinforced_steel.json
delete mode 100644 GameServer/data/gso/recipes/alloys/steel_alloy.json
delete mode 100644 GameServer/data/gso/recipes/alloys/superconductive_alloy.json
delete mode 100644 GameServer/data/gso/recipes/alloys/titanium_alloy.json
delete mode 100644 GameServer/data/gso/recipes/alloys/tungsten_steel.json
delete mode 100644 GameServer/data/gso/recipes/alloys/voidsteel.json
delete mode 100644 GameServer/data/gso/recipes/armours/body_basic.json
delete mode 100644 GameServer/data/gso/recipes/armours/body_plated.json
delete mode 100644 GameServer/data/gso/recipes/armours/boots_basic.json
delete mode 100644 GameServer/data/gso/recipes/armours/gloves_basic.json
delete mode 100644 GameServer/data/gso/recipes/armours/helmet_basic.json
delete mode 100644 GameServer/data/gso/recipes/armours/pants_basic.json
delete mode 100644 GameServer/data/gso/recipes/circuits/advanced_circuit_board.json
delete mode 100644 GameServer/data/gso/recipes/circuits/ai_core_circuit.json
delete mode 100644 GameServer/data/gso/recipes/circuits/basic_circuit.json
delete mode 100644 GameServer/data/gso/recipes/circuits/control_circuit.json
delete mode 100644 GameServer/data/gso/recipes/circuits/dimensional_logic_circuit.json
delete mode 100644 GameServer/data/gso/recipes/circuits/high_density_circuit.json
delete mode 100644 GameServer/data/gso/recipes/circuits/logic_circuit.json
delete mode 100644 GameServer/data/gso/recipes/circuits/navigation_circuit.json
delete mode 100644 GameServer/data/gso/recipes/circuits/power_circuit.json
delete mode 100644 GameServer/data/gso/recipes/circuits/processor_circuit.json
delete mode 100644 GameServer/data/gso/recipes/circuits/quantum_circuit.json
delete mode 100644 GameServer/data/gso/recipes/circuits/reactor_control_circuit.json
delete mode 100644 GameServer/data/gso/recipes/circuits/sensor_array_circuit.json
delete mode 100644 GameServer/data/gso/recipes/circuits/sentient_core_circuit.json
delete mode 100644 GameServer/data/gso/recipes/circuits/shield_control_circuit.json
delete mode 100644 GameServer/data/gso/recipes/circuits/stealth_circuit.json
delete mode 100644 GameServer/data/gso/recipes/circuits/void_capacitor.json
delete mode 100644 GameServer/data/gso/recipes/circuits/warp_navigation_circuit.json
delete mode 100644 GameServer/data/gso/recipes/circuits/weapon_control_circuit.json
delete mode 100644 GameServer/data/gso/recipes/consumables/energy_boost_small.json
delete mode 100644 GameServer/data/gso/recipes/consumables/fuel_cell.json
delete mode 100644 GameServer/data/gso/recipes/consumables/health_kit_large.json
delete mode 100644 GameServer/data/gso/recipes/consumables/health_kit_small.json
delete mode 100644 GameServer/data/gso/recipes/crafting_tabs.json
delete mode 100644 GameServer/data/gso/recipes/food_organics/alien_protein.json
delete mode 100644 GameServer/data/gso/recipes/food_organics/bread.json
delete mode 100644 GameServer/data/gso/recipes/food_organics/cooked_fish.json
delete mode 100644 GameServer/data/gso/recipes/food_organics/cooked_meat.json
delete mode 100644 GameServer/data/gso/recipes/food_organics/dough.json
delete mode 100644 GameServer/data/gso/recipes/food_organics/fish_meat.json
delete mode 100644 GameServer/data/gso/recipes/food_organics/flour.json
delete mode 100644 GameServer/data/gso/recipes/food_organics/grain.json
delete mode 100644 GameServer/data/gso/recipes/food_organics/hydroponic_growth_medium.json
delete mode 100644 GameServer/data/gso/recipes/food_organics/luxury_meal.json
delete mode 100644 GameServer/data/gso/recipes/food_organics/meat_stew.json
delete mode 100644 GameServer/data/gso/recipes/food_organics/military_ration.json
delete mode 100644 GameServer/data/gso/recipes/food_organics/nutrient_paste.json
delete mode 100644 GameServer/data/gso/recipes/food_organics/protein_bar.json
delete mode 100644 GameServer/data/gso/recipes/food_organics/ration_pack.json
delete mode 100644 GameServer/data/gso/recipes/food_organics/raw_fruits.json
delete mode 100644 GameServer/data/gso/recipes/food_organics/raw_meat.json
delete mode 100644 GameServer/data/gso/recipes/food_organics/raw_vegetables.json
delete mode 100644 GameServer/data/gso/recipes/food_organics/vegetable_stew.json
delete mode 100644 GameServer/data/gso/recipes/food_organics/water.json
delete mode 100644 GameServer/data/gso/recipes/hull_sections/advanced_hull_section.json
delete mode 100644 GameServer/data/gso/recipes/hull_sections/armor_hull_section.json
delete mode 100644 GameServer/data/gso/recipes/hull_sections/battleship_hull_section.json
delete mode 100644 GameServer/data/gso/recipes/hull_sections/exotic_hull_section.json
delete mode 100644 GameServer/data/gso/recipes/hull_sections/heavy_hull_section.json
delete mode 100644 GameServer/data/gso/recipes/hull_sections/light_hull_section.json
delete mode 100644 GameServer/data/gso/recipes/hull_sections/standard_hull_section.json
delete mode 100644 GameServer/data/gso/recipes/hulls/ablative_armor_hull.json
delete mode 100644 GameServer/data/gso/recipes/hulls/advanced_hull.json
delete mode 100644 GameServer/data/gso/recipes/hulls/armor_hull.json
delete mode 100644 GameServer/data/gso/recipes/hulls/chrono_stabilized_hull.json
delete mode 100644 GameServer/data/gso/recipes/hulls/dimensional_anchor_hull.json
delete mode 100644 GameServer/data/gso/recipes/hulls/dreadframe_hull.json
delete mode 100644 GameServer/data/gso/recipes/hulls/heavy_hull.json
delete mode 100644 GameServer/data/gso/recipes/hulls/industrial_hull.json
delete mode 100644 GameServer/data/gso/recipes/hulls/lightframe_hull.json
delete mode 100644 GameServer/data/gso/recipes/hulls/phase_locked_hull.json
delete mode 100644 GameServer/data/gso/recipes/hulls/plasma_resistant_hull.json
delete mode 100644 GameServer/data/gso/recipes/hulls/quantum_hull_plate.json
delete mode 100644 GameServer/data/gso/recipes/hulls/reinforced_plating_hull.json
delete mode 100644 GameServer/data/gso/recipes/hulls/standard_hull.json
delete mode 100644 GameServer/data/gso/recipes/hulls/standard_structural_hull.json
delete mode 100644 GameServer/data/gso/recipes/hulls/superconductive_hull.json
delete mode 100644 GameServer/data/gso/recipes/hulls/titanium_aerospace_hull.json
delete mode 100644 GameServer/data/gso/recipes/hulls/voidsteel_hull.json
delete mode 100644 GameServer/data/gso/recipes/manifest.json
delete mode 100644 GameServer/data/gso/recipes/organics/bandage.json
delete mode 100644 GameServer/data/gso/recipes/organics/bio_composite_material.json
delete mode 100644 GameServer/data/gso/recipes/organics/bio_pulp.json
delete mode 100644 GameServer/data/gso/recipes/organics/medical_pack.json
delete mode 100644 GameServer/data/gso/recipes/organics/organic_insulation.json
delete mode 100644 GameServer/data/gso/recipes/organics/plant_cloth.json
delete mode 100644 GameServer/data/gso/recipes/organics/plant_fiber.json
delete mode 100644 GameServer/data/gso/recipes/organics/processed_wood.json
delete mode 100644 GameServer/data/gso/recipes/organics/raw_wood.json
delete mode 100644 GameServer/data/gso/recipes/organics/resin.json
delete mode 100644 GameServer/data/gso/recipes/organics/tree_sap.json
delete mode 100644 GameServer/data/gso/recipes/organics/wood_planks.json
delete mode 100644 GameServer/data/gso/recipes/organics/wooden_components.json
delete mode 100644 GameServer/data/gso/recipes/smelting/aluminum_ingot.json
delete mode 100644 GameServer/data/gso/recipes/smelting/carbon_ingot.json
delete mode 100644 GameServer/data/gso/recipes/smelting/chromium_ingot.json
delete mode 100644 GameServer/data/gso/recipes/smelting/chronium_ingot.json
delete mode 100644 GameServer/data/gso/recipes/smelting/copper_ingot.json
delete mode 100644 GameServer/data/gso/recipes/smelting/darksteel_ingot.json
delete mode 100644 GameServer/data/gso/recipes/smelting/gold_ingot.json
delete mode 100644 GameServer/data/gso/recipes/smelting/iron_ingot.json
delete mode 100644 GameServer/data/gso/recipes/smelting/magnesium_ingot.json
delete mode 100644 GameServer/data/gso/recipes/smelting/neutronium_ingot.json
delete mode 100644 GameServer/data/gso/recipes/smelting/platinum_ingot.json
delete mode 100644 GameServer/data/gso/recipes/smelting/silver_ingot.json
delete mode 100644 GameServer/data/gso/recipes/smelting/titanium_ingot.json
delete mode 100644 GameServer/data/gso/recipes/smelting/tungsten_ingot.json
delete mode 100644 GameServer/data/gso/recipes/spacesuit_parts/body_exotic.json
delete mode 100644 GameServer/data/gso/recipes/spacesuit_parts/body_light.json
delete mode 100644 GameServer/data/gso/recipes/spacesuit_parts/body_military.json
delete mode 100644 GameServer/data/gso/recipes/spacesuit_parts/body_standard.json
delete mode 100644 GameServer/data/gso/recipes/spacesuit_parts/boots_light.json
delete mode 100644 GameServer/data/gso/recipes/spacesuit_parts/boots_magnetic.json
delete mode 100644 GameServer/data/gso/recipes/spacesuit_parts/boots_military.json
delete mode 100644 GameServer/data/gso/recipes/spacesuit_parts/boots_standard.json
delete mode 100644 GameServer/data/gso/recipes/spacesuit_parts/gloves_industrial.json
delete mode 100644 GameServer/data/gso/recipes/spacesuit_parts/gloves_light.json
delete mode 100644 GameServer/data/gso/recipes/spacesuit_parts/gloves_military.json
delete mode 100644 GameServer/data/gso/recipes/spacesuit_parts/gloves_standard.json
delete mode 100644 GameServer/data/gso/recipes/spacesuit_parts/helmet_exotic.json
delete mode 100644 GameServer/data/gso/recipes/spacesuit_parts/helmet_light.json
delete mode 100644 GameServer/data/gso/recipes/spacesuit_parts/helmet_military.json
delete mode 100644 GameServer/data/gso/recipes/spacesuit_parts/helmet_standard.json
delete mode 100644 GameServer/data/gso/recipes/spacesuit_parts/life_support_basic.json
delete mode 100644 GameServer/data/gso/recipes/spacesuit_parts/life_support_exotic.json
delete mode 100644 GameServer/data/gso/recipes/spacesuit_parts/life_support_military.json
delete mode 100644 GameServer/data/gso/recipes/spacesuit_parts/life_support_standard.json
delete mode 100644 GameServer/data/gso/recipes/spacesuit_parts/pants_exotic.json
delete mode 100644 GameServer/data/gso/recipes/spacesuit_parts/pants_heavy.json
delete mode 100644 GameServer/data/gso/recipes/spacesuit_parts/pants_light.json
delete mode 100644 GameServer/data/gso/recipes/spacesuit_parts/pants_standard.json
delete mode 100644 GameServer/data/gso/recipes/weapons/assault_rifle.json
delete mode 100644 GameServer/data/gso/recipes/weapons/plasma_cutter.json
delete mode 100644 GameServer/data/gso/recipes/weapons/sniper_rifle.json
delete mode 100644 GameServer/data/gso/recipes/weapons/standard_pistol.json
delete mode 100644 GameServer/data/gso/recipes/weapons/starter_blaster.json
delete mode 100644 GameServer/data/gso/skills/combat/defense_training.json
delete mode 100644 GameServer/data/gso/skills/combat/piloting.json
delete mode 100644 GameServer/data/gso/skills/combat/speed_reflexes.json
delete mode 100644 GameServer/data/gso/skills/combat/tactical_analysis.json
delete mode 100644 GameServer/data/gso/skills/combat/weapons_mastery.json
delete mode 100644 GameServer/data/gso/skills/crafting/armor_crafting.json
delete mode 100644 GameServer/data/gso/skills/crafting/circuit_fabrication.json
delete mode 100644 GameServer/data/gso/skills/crafting/resource_extraction.json
delete mode 100644 GameServer/data/gso/skills/crafting/ship_engineering.json
delete mode 100644 GameServer/data/gso/skills/crafting/smelting_mastery.json
delete mode 100644 GameServer/data/gso/skills/crafting/weapons_crafting.json
delete mode 100644 GameServer/data/gso/skills/manifest.json
delete mode 100644 GameServer/data/gso/skills/science/alien_technology.json
delete mode 100644 GameServer/data/gso/skills/science/bio_engineering.json
delete mode 100644 GameServer/data/gso/skills/science/energy_manipulation.json
delete mode 100644 GameServer/data/gso/skills/science/engineering.json
delete mode 100644 GameServer/data/gso/skills/science/quantum_physics.json
delete mode 100644 GameServer/data/mods.db
delete mode 100644 GameServer/generate_assets.js
delete mode 100644 GameServer/middleware/errorHandler.js
delete mode 100644 GameServer/models/PlayerData.js
delete mode 100644 GameServer/package-lock.json
delete mode 100644 GameServer/package.json
delete mode 100644 GameServer/routes/base.js
delete mode 100644 GameServer/routes/crafting.js
delete mode 100644 GameServer/routes/dungeons.js
delete mode 100644 GameServer/routes/idle.js
delete mode 100644 GameServer/routes/quests.js
delete mode 100644 GameServer/routes/ships.js
delete mode 100644 GameServer/routes/skills.js
delete mode 100644 GameServer/server.js
delete mode 100644 GameServer/services/ServerRegistrationService.js
delete mode 100644 GameServer/systems/AllianceSystem.js
delete mode 100644 GameServer/systems/AllianceWarSystem.js
delete mode 100644 GameServer/systems/AnalyticsSystem.js
delete mode 100644 GameServer/systems/BaseSystem.js
delete mode 100644 GameServer/systems/ContentLoader.js
delete mode 100644 GameServer/systems/CraftingSystem.js
delete mode 100644 GameServer/systems/DungeonSystem.js
delete mode 100644 GameServer/systems/FleetSystem.js
delete mode 100644 GameServer/systems/GalaxyEventSystem.js
delete mode 100644 GameServer/systems/GalaxySystem.js
delete mode 100644 GameServer/systems/GameSystem.js
delete mode 100644 GameServer/systems/IdleSystem.js
delete mode 100644 GameServer/systems/ItemSystem.js
delete mode 100644 GameServer/systems/MarketSystem.js
delete mode 100644 GameServer/systems/MissionSystem.js
delete mode 100644 GameServer/systems/QuestSystem.js
delete mode 100644 GameServer/systems/RaidSystem.js
delete mode 100644 GameServer/systems/ReputationSystem.js
delete mode 100644 GameServer/systems/ResearchSystem.js
delete mode 100644 GameServer/systems/ResourceSystem.js
delete mode 100644 GameServer/systems/SeasonSystem.js
delete mode 100644 GameServer/systems/ShipSystem.js
delete mode 100644 GameServer/systems/SkillSystem.js
delete mode 100644 GameServer/systems/SocialSystem.js
delete mode 100644 GameServer/tests/run.js
delete mode 100644 GameServer/utils/ErrorReporter.js
delete mode 100644 GameServer/utils/logger.js
create mode 100644 api/src/config/config.js
create mode 100644 api/src/controllers/authController.js
create mode 100644 api/src/controllers/serverController.js
create mode 100644 api/src/db/db.js
create mode 100644 api/src/index.js
create mode 100644 api/src/middleware/authMiddleware.js
create mode 100644 api/src/models/GameServer.js
create mode 100644 api/src/models/User.js
create mode 100644 api/src/routes/authRoutes.js
create mode 100644 api/src/routes/serverRoutes.js
create mode 100644 api/src/routes/userRoutes.js
create mode 100644 api/src/services/authService.js
create mode 100644 api/src/services/serverService.js
create mode 100644 client/.gitignore
create mode 100644 client/README.md
create mode 100644 client/eslint.config.js
create mode 100644 client/public/vite.svg
create mode 100644 client/src/App.jsx
create mode 100644 client/src/assets/react.svg
create mode 100644 client/src/components/Console/Console.css
create mode 100644 client/src/components/Console/Console.jsx
create mode 100644 client/src/components/ui/Button.jsx
create mode 100644 client/src/components/ui/Card.jsx
create mode 100644 client/src/components/ui/Input.jsx
create mode 100644 client/src/components/ui/styles/Button.css
create mode 100644 client/src/context/AuthContext.jsx
create mode 100644 client/src/context/SocketContext.jsx
create mode 100644 client/src/hooks/useAuth.js
create mode 100644 client/src/hooks/useSocket.js
create mode 100644 client/src/main.jsx
create mode 100644 client/src/services/ConsoleManager.js
create mode 100644 client/src/services/GameDataManager.js
create mode 100644 client/src/services/socket.js
create mode 100644 client/src/styles/App.css
create mode 100644 client/src/styles/components.css
create mode 100644 client/src/styles/index.css
create mode 100644 client/src/styles/main.css
create mode 100644 client/src/styles/tables.css
rename GameServer/data/gso/items/.gitkeep => client/src/views/GameHUD.jsx (100%)
create mode 100644 client/src/views/GameInterface/GameInterface.css
create mode 100644 client/src/views/GameInterface/GameInterface.jsx
create mode 100644 client/src/views/GameInterface/components/CategorySelector.css
create mode 100644 client/src/views/GameInterface/components/CategorySelector.jsx
create mode 100644 client/src/views/GameInterface/components/DungeonScreen.css
create mode 100644 client/src/views/GameInterface/components/DungeonScreen.jsx
create mode 100644 client/src/views/GameInterface/components/GameHeader.css
create mode 100644 client/src/views/GameInterface/components/GameHeader.jsx
create mode 100644 client/src/views/GameInterface/components/Navigation.css
create mode 100644 client/src/views/GameInterface/components/Navigation.jsx
create mode 100644 client/src/views/GameInterface/tabs/BaseTab.jsx
create mode 100644 client/src/views/GameInterface/tabs/CraftingTab.jsx
create mode 100644 client/src/views/GameInterface/tabs/DashboardTab.jsx
create mode 100644 client/src/views/GameInterface/tabs/DungeonsTab.jsx
create mode 100644 client/src/views/GameInterface/tabs/InventoryTab.jsx
create mode 100644 client/src/views/GameInterface/tabs/QuestsTab.jsx
create mode 100644 client/src/views/GameInterface/tabs/ShopTab.jsx
create mode 100644 client/src/views/GameInterface/tabs/SkillsTab.jsx
create mode 100644 client/src/views/GameInterface/tabs/components/CraftModal.css
create mode 100644 client/src/views/GameInterface/tabs/components/CraftModal.jsx
create mode 100644 client/src/views/GameInterface/tabs/components/ItemModal.css
create mode 100644 client/src/views/GameInterface/tabs/components/ItemModal.jsx
rename GameServer/data/gso/recipes/.gitkeep => client/src/views/GameInterface/tabs/styles/BaseTab.css (100%)
create mode 100644 client/src/views/GameInterface/tabs/styles/CraftingTab.css
create mode 100644 client/src/views/GameInterface/tabs/styles/DashboardTab.css
create mode 100644 client/src/views/GameInterface/tabs/styles/DungeonsTab.css
create mode 100644 client/src/views/GameInterface/tabs/styles/InventoryTab.css
create mode 100644 client/src/views/GameInterface/tabs/styles/QuestsTab.css
create mode 100644 client/src/views/GameInterface/tabs/styles/ShopTab.css
create mode 100644 client/src/views/GameInterface/tabs/styles/SkillsTab.css
create mode 100644 client/src/views/LoadingScreen.jsx
create mode 100644 client/src/views/LoadingScreen/LoadingScreen.css
create mode 100644 client/src/views/LoadingScreen/LoadingScreen.jsx
create mode 100644 client/src/views/MainMenu/MainMenu.css
create mode 100644 client/src/views/MainMenu/MainMenu.jsx
create mode 100644 client/src/views/MainMenu/sections/LoginSection.css
create mode 100644 client/src/views/MainMenu/sections/LoginSection.jsx
create mode 100644 client/src/views/MainMenu/sections/OptionsSection.css
create mode 100644 client/src/views/MainMenu/sections/OptionsSection.jsx
create mode 100644 client/src/views/MainMenu/sections/ServerConfirmSection.jsx
create mode 100644 client/src/views/MainMenu/sections/ServerConfirmationSection.css
create mode 100644 client/src/views/MainMenu/sections/ServerSection.css
create mode 100644 client/src/views/MainMenu/sections/ServerSection.jsx
create mode 100644 client/vite.config.js
create mode 100644 game-server/datapacks/original/assets/languages/en_US.json
create mode 100644 game-server/datapacks/original/assets/languages/fr_FR.json
create mode 100644 game-server/datapacks/original/assets/textures/materials/ore/Gold.png
create mode 100644 game-server/datapacks/original/assets/textures/materials/ore/Ilunite.png
create mode 100644 game-server/datapacks/original/assets/textures/materials/ore/bauxite.png
create mode 100644 game-server/datapacks/original/assets/textures/materials/ore/chronite.png
create mode 100644 game-server/datapacks/original/assets/textures/materials/ore/coal.png
create mode 100644 game-server/datapacks/original/assets/textures/materials/ore/copper.png
create mode 100644 game-server/datapacks/original/assets/textures/materials/ore/iron.png
create mode 100644 game-server/datapacks/original/assets/textures/materials/ore/wolfrinite.png
create mode 100644 game-server/datapacks/original/data/dungeons/pirates/pirates_outpost.json
create mode 100644 game-server/datapacks/original/data/dungeons/tutorial/tutorial.json
create mode 100644 game-server/datapacks/original/data/enemies/hostiles/pirates/black_mark_cruiser.json
create mode 100644 game-server/datapacks/original/data/enemies/hostiles/pirates/raider_frigate.json
create mode 100644 game-server/datapacks/original/data/enemies/hostiles/pirates/scout_drone.json
create mode 100644 game-server/datapacks/original/data/enemies/hostiles/tutorial/tutorial_boss_hostile.json
create mode 100644 game-server/datapacks/original/data/enemies/hostiles/tutorial/tutorial_hostile.json
create mode 100644 game-server/datapacks/original/data/enemies/rooms/pirates/pirate_ambush_zone.json
create mode 100644 game-server/datapacks/original/data/enemies/rooms/pirates/pirate_boss_bridge.json
create mode 100644 game-server/datapacks/original/data/enemies/rooms/pirates/pirate_patrol_room.json
create mode 100644 game-server/datapacks/original/data/enemies/rooms/pirates/pirate_supply_bay.json
create mode 100644 game-server/datapacks/original/data/enemies/rooms/tutorial/tutorial_boss.json
create mode 100644 game-server/datapacks/original/data/enemies/rooms/tutorial/tutorial_enemy_room.json
create mode 100644 game-server/datapacks/original/data/enemies/rooms/tutorial/tutorial_loot_room.json
create mode 100644 game-server/datapacks/original/data/items/armour/backpack/backpack_advanced.json
create mode 100644 game-server/datapacks/original/data/items/armour/backpack/backpack_basic.json
create mode 100644 game-server/datapacks/original/data/items/armour/backpack/backpack_elite.json
create mode 100644 game-server/datapacks/original/data/items/hullPlating/ship/basic_ship_plating.json
create mode 100644 game-server/datapacks/original/data/items/materials/alloys/steel.json
create mode 100644 game-server/datapacks/original/data/items/materials/bio/bio_pulp.json
create mode 100644 game-server/datapacks/original/data/items/materials/ingots/aluminum.json
create mode 100644 game-server/datapacks/original/data/items/materials/ingots/chronite.json
create mode 100644 game-server/datapacks/original/data/items/materials/ingots/copper.json
create mode 100644 game-server/datapacks/original/data/items/materials/ingots/gold.json
create mode 100644 game-server/datapacks/original/data/items/materials/ingots/iron.json
create mode 100644 game-server/datapacks/original/data/items/materials/ingots/titanium.json
create mode 100644 game-server/datapacks/original/data/items/materials/ingots/tungsten.json
create mode 100644 game-server/datapacks/original/data/items/materials/ores/bauxite.json
create mode 100644 game-server/datapacks/original/data/items/materials/ores/chronite.json
create mode 100644 game-server/datapacks/original/data/items/materials/ores/coal.json
create mode 100644 game-server/datapacks/original/data/items/materials/ores/copper.json
create mode 100644 game-server/datapacks/original/data/items/materials/ores/gold.json
create mode 100644 game-server/datapacks/original/data/items/materials/ores/ilmenite.json
create mode 100644 game-server/datapacks/original/data/items/materials/ores/iron.json
create mode 100644 game-server/datapacks/original/data/items/materials/ores/wolfrinite.json
create mode 100644 game-server/datapacks/original/data/recipes/alloys/steel.json
create mode 100644 game-server/datapacks/original/data/recipes/ingots/aluminum.json
create mode 100644 game-server/datapacks/original/data/recipes/ingots/chronite.json
create mode 100644 game-server/datapacks/original/data/recipes/ingots/copper.json
create mode 100644 game-server/datapacks/original/data/recipes/ingots/gold.json
create mode 100644 game-server/datapacks/original/data/recipes/ingots/iron.json
create mode 100644 game-server/datapacks/original/data/recipes/ingots/titanium.json
create mode 100644 game-server/datapacks/original/data/recipes/ingots/tungsten.json
create mode 100644 game-server/datapacks/original/data/skills/combat/weapon_effiency.json
create mode 100644 game-server/datapacks/original/data/skills/crafting/alloying.json
create mode 100644 game-server/datapacks/original/data/skills/crafting/forging.json
create mode 100644 game-server/datapacks/original/data/skills/science/alien_technology.json
create mode 100644 game-server/datapacks/original/data/skills/science/biology_engineering.json
create mode 100644 game-server/datapacks/original/manifest.json
create mode 100644 game-server/package.json
create mode 100644 game-server/src/config/config.js
create mode 100644 game-server/src/config/db.js
create mode 100644 game-server/src/game/DatapackLoader.js
create mode 100644 game-server/src/game/EconomyService.js
create mode 100644 game-server/src/game/SessionManager.js
create mode 100644 game-server/src/index.js
create mode 100644 game-server/src/models/Inventory.js
create mode 100644 game-server/src/models/Item.js
create mode 100644 game-server/src/models/Player.js
create mode 100644 game-server/src/models/SubItems.js
create mode 100644 game-server/src/models/index.js
create mode 100644 game-server/src/sockets/handlers/adminHandler.js
create mode 100644 game-server/src/sockets/handlers/connectionHandler.js
create mode 100644 game-server/src/sockets/handlers/craftingHandler.js
create mode 100644 game-server/src/sockets/handlers/dungeonHandler.js
create mode 100644 game-server/src/sockets/handlers/inventoryHandler.js
create mode 100644 game-server/src/sockets/middleware/authMiddleware.js
create mode 100644 game-server/src/sockets/socket.js
delete mode 100644 node_modules.zip
create mode 100644 test/assets/languages/en_us.json
create mode 100644 test/assets/textures/armour/backpack/backpack_basic.png
create mode 100644 test/assets/textures/hullPlating/ship/ship_plating.png
create mode 100644 test/assets/textures/materials/bio/bio_pulp.png
create mode 100644 test/data/dungeons/pirates/pirates_outpost.json
create mode 100644 test/data/enemies/hostiles/pirates/black_mark_cruiser.json
create mode 100644 test/data/enemies/hostiles/pirates/raider_frigate.json
create mode 100644 test/data/enemies/hostiles/pirates/scout_drone.json
create mode 100644 test/data/enemies/rooms/pirates/pirate_ambush_zone.json
create mode 100644 test/data/enemies/rooms/pirates/pirate_boss_bridge.json
create mode 100644 test/data/enemies/rooms/pirates/pirate_patrol_room.json
create mode 100644 test/data/enemies/rooms/pirates/pirate_supply_bay.json
create mode 100644 test/data/items/armour/backpack/backpack_basic.json
create mode 100644 test/data/items/hullPlating/ship/ship_plating.json
create mode 100644 test/data/items/materials/bio/bio_pulp.json
create mode 100644 test/data/recipes/alloys/ablative_plating.json
create mode 100644 test/data/skills/crafting/alien_tech.json
create mode 100644 test/manifest.json
diff --git a/.gitignore b/.gitignore
index 9a5aced..6557809 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,139 +1,24 @@
-# Logs
-logs
+**/node_modules/
+**/package-lock.json
+**/npm-debug.log*
+**/yarn-error.log*
+
+game-server/*.sqlite
+game-server/*.sqlite-shm
+game-server/*.sqlite-wal
+
+**/.env
+**/.env.local
+**/.env.development.local
+**/.env.test.local
+**/.env.production.local
+
+**/logs
*.log
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-lerna-debug.log*
+.DS_Store
+Thumbs.db
-# Diagnostic reports (https://nodejs.org/api/report.html)
-report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
+client/dist/
+client/build/
-# Runtime data
-pids
-*.pid
-*.seed
-*.pid.lock
-
-# Directory for instrumented libs generated by jscoverage/JSCover
-lib-cov
-
-# Coverage directory used by tools like istanbul
-coverage
-*.lcov
-
-# nyc test coverage
-.nyc_output
-
-# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
-.grunt
-
-# Bower dependency directory (https://bower.io/)
-bower_components
-
-# node-waf configuration
-.lock-wscript
-
-# Compiled binary addons (https://nodejs.org/api/addons.html)
-build/Release
-
-# Dependency directories
-node_modules/
-jspm_packages/
-
-# Snowpack dependency directory (https://snowpack.dev/)
-web_modules/
-
-# TypeScript cache
-*.tsbuildinfo
-
-# Optional npm cache directory
-.npm
-
-# Optional eslint cache
-.eslintcache
-
-# Optional stylelint cache
-.stylelintcache
-
-# Optional REPL history
-.node_repl_history
-
-# Output of 'npm pack'
-*.tgz
-
-# Yarn Integrity file
-.yarn-integrity
-
-# dotenv environment variable files
-.env
-.env.*
-!.env.example
-
-# parcel-bundler cache (https://parceljs.org/)
-.cache
-.parcel-cache
-
-# Next.js build output
-.next
-out
-
-# Nuxt.js build / generate output
-.nuxt
-dist
-
-# Gatsby files
-.cache/
-# Comment in the public line in if your project uses Gatsby and not Next.js
-# https://nextjs.org/blog/next-9-1#public-directory-support
-# public
-
-# vuepress build output
-.vuepress/dist
-
-# vuepress v2.x temp and cache directory
-.temp
-.cache
-
-# Sveltekit cache directory
-.svelte-kit/
-
-# vitepress build output
-**/.vitepress/dist
-
-# vitepress cache directory
-**/.vitepress/cache
-
-# Docusaurus cache and generated files
-.docusaurus
-
-# Serverless directories
-.serverless/
-
-# FuseBox cache
-.fusebox/
-
-# DynamoDB Local files
-.dynamodb/
-
-# Firebase cache directory
-.firebase/
-
-# TernJS port file
-.tern-port
-
-# Stores VSCode versions used for testing VSCode extensions
-.vscode-test
-
-# yarn v3
-.pnp.*
-.yarn/*
-!.yarn/patches
-!.yarn/plugins
-!.yarn/releases
-!.yarn/sdks
-!.yarn/versions
-
-# Vite logs files
-vite.config.js.timestamp-*
-vite.config.ts.timestamp-*
+game-server-*
\ No newline at end of file
diff --git a/API/.env.example b/API/.env.example
deleted file mode 100644
index cd30a87..0000000
--- a/API/.env.example
+++ /dev/null
@@ -1,21 +0,0 @@
-# Galaxy Strike Online - API Server Environment
-# Copy to .env and fill in values
-
-# Server
-PORT=3001
-NODE_ENV=development
-
-# Database
-MONGODB_URI=mongodb://localhost:27017/galaxystrikeonline
-
-# Auth
-JWT_SECRET=your-super-secret-jwt-key-change-in-production
-
-# Game Server URL (for server browser)
-GAME_SERVER_URL=http://localhost:3002
-
-# Client URL (for CORS)
-CLIENT_URL=http://localhost:3000
-
-# Logging
-LOG_LEVEL=info
diff --git a/API/config/database.js b/API/config/database.js
deleted file mode 100644
index 25558f4..0000000
--- a/API/config/database.js
+++ /dev/null
@@ -1,19 +0,0 @@
-const mongoose = require('mongoose');
-const logger = require('../utils/logger');
-
-const connectDB = async () => {
- try {
- const mongoUri = process.env.MONGODB_URI || 'mongodb://localhost:27017/galaxystrikeonline';
-
- const conn = await mongoose.connect(mongoUri, {
- // Remove deprecated options for newer MongoDB versions
- });
-
- logger.info(`MongoDB Connected: ${conn.connection.host}`);
- } catch (error) {
- logger.error('Database connection error:', error);
- process.exit(1);
- }
-};
-
-module.exports = connectDB;
diff --git a/API/config/production.js b/API/config/production.js
deleted file mode 100644
index 05f5364..0000000
--- a/API/config/production.js
+++ /dev/null
@@ -1,131 +0,0 @@
-const logger = require('../utils/logger');
-
-const productionConfig = {
- // Server settings
- port: process.env.PORT || 3001,
-
- // Database settings
- database: {
- uri: process.env.MONGODB_URI || 'mongodb://localhost:27017/galaxystrikeonline',
- options: {
- useNewUrlParser: true,
- useUnifiedTopology: true,
- maxPoolSize: 10,
- serverSelectionTimeoutMS: 5000,
- socketTimeoutMS: 45000,
- }
- },
-
- // JWT settings
- jwt: {
- secret: process.env.JWT_SECRET,
- expiresIn: '24h',
- refreshExpiresIn: '7d'
- },
-
- // Redis settings (for sessions and caching)
- redis: {
- url: process.env.REDIS_URL || 'redis://localhost:6379',
- options: {
- retryDelayOnFailover: 100,
- maxRetriesPerRequest: 3,
- }
- },
-
- // CORS settings
- cors: {
- origin: process.env.CLIENT_URL || 'http://localhost:3000',
- credentials: true,
- methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
- allowedHeaders: ['Content-Type', 'Authorization']
- },
-
- // Rate limiting
- rateLimit: {
- windowMs: 15 * 60 * 1000, // 15 minutes
- max: 100, // limit each IP to 100 requests per windowMs
- message: 'Too many requests from this IP, please try again later.',
- standardHeaders: true,
- legacyHeaders: false,
- },
-
- // Socket.IO settings
- socketio: {
- cors: {
- origin: process.env.CLIENT_URL || 'http://localhost:3000',
- methods: ['GET', 'POST']
- },
- pingTimeout: 60000,
- pingInterval: 25000,
- maxHttpBufferSize: 1e8, // 100 MB
- },
-
- // Logging settings
- logging: {
- level: process.env.LOG_LEVEL || 'info',
- format: process.env.NODE_ENV === 'production' ? 'json' : 'simple',
- file: {
- enabled: true,
- filename: 'logs/app.log',
- maxsize: 10485760, // 10MB
- maxFiles: 5,
- }
- },
-
- // Security settings
- security: {
- helmet: {
- contentSecurityPolicy: {
- directives: {
- defaultSrc: ["'self'"],
- styleSrc: ["'self'", "'unsafe-inline'"],
- scriptSrc: ["'self'"],
- imgSrc: ["'self'", "data:", "https:"],
- },
- },
- hsts: {
- maxAge: 31536000,
- includeSubDomains: true,
- preload: true
- }
- },
- compression: {
- level: 6,
- threshold: 1024,
- }
- },
-
- // Game settings
- game: {
- maxPlayersPerServer: 50,
- serverCleanupInterval: 300000, // 5 minutes
- inactivePlayerTimeout: 1800000, // 30 minutes
- autoSaveInterval: 60000, // 1 minute
- }
-};
-
-// Validate required environment variables
-const validateConfig = () => {
- const required = ['JWT_SECRET'];
- const missing = required.filter(key => !process.env[key]);
-
- if (missing.length > 0) {
- logger.error(`Missing required environment variables: ${missing.join(', ')}`);
- process.exit(1);
- }
-
- if (process.env.NODE_ENV === 'production') {
- const prodRequired = ['MONGODB_URI', 'CLIENT_URL'];
- const prodMissing = prodRequired.filter(key => !process.env[key]);
-
- if (prodMissing.length > 0) {
- logger.error(`Missing required production environment variables: ${prodMissing.join(', ')}`);
- process.exit(1);
- }
- }
-};
-
-module.exports = {
- ...productionConfig,
- validateConfig
-};
diff --git a/API/middleware/errorHandler.js b/API/middleware/errorHandler.js
deleted file mode 100644
index 97ff3ac..0000000
--- a/API/middleware/errorHandler.js
+++ /dev/null
@@ -1,134 +0,0 @@
-const logger = require('../utils/logger');
-
-// Custom error classes
-class AppError extends Error {
- constructor(message, statusCode) {
- super(message);
- this.statusCode = statusCode;
- this.status = `${statusCode}`.startsWith('4') ? 'fail' : 'error';
- this.isOperational = true;
-
- Error.captureStackTrace(this, this.constructor);
- }
-}
-
-class ValidationError extends AppError {
- constructor(message) {
- super(message, 400);
- }
-}
-
-class AuthenticationError extends AppError {
- constructor(message = 'Authentication failed') {
- super(message, 401);
- }
-}
-
-class AuthorizationError extends AppError {
- constructor(message = 'Access denied') {
- super(message, 403);
- }
-}
-
-class NotFoundError extends AppError {
- constructor(message = 'Resource not found') {
- super(message, 404);
- }
-}
-
-class ConflictError extends AppError {
- constructor(message = 'Resource conflict') {
- super(message, 409);
- }
-}
-
-class DatabaseError extends AppError {
- constructor(message = 'Database operation failed') {
- super(message, 500);
- }
-}
-
-// Error handling middleware
-const errorHandler = (err, req, res, next) => {
- let error = { ...err };
- error.message = err.message;
-
- // Log error
- logger.error({
- error: err,
- request: {
- method: req.method,
- url: req.url,
- ip: req.ip,
- userAgent: req.get('User-Agent'),
- userId: req.userId
- }
- });
-
- // Mongoose validation error
- if (err.name === 'ValidationError') {
- const message = Object.values(err.errors).map(val => val.message).join(', ');
- error = new ValidationError(message);
- }
-
- // Mongoose duplicate key error
- if (err.code === 11000) {
- const field = Object.keys(err.keyValue)[0];
- const value = err.keyValue[field];
- error = new ConflictError(`${field} '${value}' already exists`);
- }
-
- // Mongoose cast error
- if (err.name === 'CastError') {
- error = new ValidationError(`Invalid ${err.path}: ${err.value}`);
- }
-
- // JWT errors
- if (err.name === 'JsonWebTokenError') {
- error = new AuthenticationError('Invalid token');
- }
-
- if (err.name === 'TokenExpiredError') {
- error = new AuthenticationError('Token expired');
- }
-
- // Default error
- if (!error.isOperational) {
- error = new AppError('Something went wrong', 500);
- }
-
- res.status(error.statusCode || 500).json({
- status: error.status || 'error',
- message: error.message,
- ...(process.env.NODE_ENV === 'development' && {
- stack: error.stack,
- error: err
- })
- });
-};
-
-// Async error wrapper
-const catchAsync = (fn) => {
- return (req, res, next) => {
- Promise.resolve(fn(req, res, next)).catch(next);
- };
-};
-
-// 404 handler
-const notFound = (req, res, next) => {
- const error = new NotFoundError(`Route ${req.originalUrl} not found`);
- next(error);
-};
-
-module.exports = {
- AppError,
- ValidationError,
- AuthenticationError,
- AuthorizationError,
- NotFoundError,
- ConflictError,
- DatabaseError,
- errorHandler,
- catchAsync,
- notFound
-};
diff --git a/API/models/GameServer.js b/API/models/GameServer.js
deleted file mode 100644
index a41c33c..0000000
--- a/API/models/GameServer.js
+++ /dev/null
@@ -1,134 +0,0 @@
-const mongoose = require('mongoose');
-
-const gameServerSchema = new mongoose.Schema({
- serverId: {
- type: String,
- required: true,
- unique: true
- },
- name: {
- type: String,
- required: true
- },
- type: {
- type: String,
- enum: ['public', 'private'],
- default: 'public'
- },
- region: {
- type: String,
- default: 'us-east'
- },
- maxPlayers: {
- type: Number,
- default: 10,
- min: 1,
- max: 100
- },
- currentPlayers: {
- type: Number,
- default: 0
- },
- owner: {
- userId: { type: String, required: true },
- username: { type: String, required: true }
- },
- settings: {
- password: { type: String, default: null },
- description: { type: String, default: '' },
- tags: [{ type: String }]
- },
- status: {
- type: String,
- enum: ['waiting', 'active', 'full', 'offline'],
- default: 'waiting'
- },
- gameServerUrl: {
- type: String,
- default: null
- },
- createdAt: {
- type: Date,
- default: Date.now
- },
- lastActivity: {
- type: Date,
- default: Date.now
- }
-}, {
- timestamps: true
-});
-
-// Indexes for performance (only for non-unique fields)
-gameServerSchema.index({ type: 1 });
-gameServerSchema.index({ region: 1 });
-gameServerSchema.index({ status: 1 });
-gameServerSchema.index({ 'owner.userId': 1 });
-
-// Methods
-gameServerSchema.methods.addPlayer = function() {
- if (this.currentPlayers < this.maxPlayers) {
- this.currentPlayers += 1;
- this.lastActivity = new Date();
-
- if (this.currentPlayers >= this.maxPlayers) {
- this.status = 'full';
- } else if (this.currentPlayers > 0) {
- this.status = 'active';
- }
-
- return true;
- }
- return false;
-};
-
-gameServerSchema.methods.removePlayer = function() {
- if (this.currentPlayers > 0) {
- this.currentPlayers -= 1;
- this.lastActivity = new Date();
-
- if (this.currentPlayers === 0) {
- this.status = 'waiting';
- } else if (this.currentPlayers < this.maxPlayers) {
- this.status = 'active';
- }
-
- return true;
- }
- return false;
-};
-
-gameServerSchema.methods.isFull = function() {
- return this.currentPlayers >= this.maxPlayers;
-};
-
-gameServerSchema.methods.canJoin = function() {
- return this.status !== 'offline' && !this.isFull();
-};
-
-// Static methods
-gameServerSchema.statics.findAvailableServers = function(filters = {}) {
- const query = { status: { $ne: 'offline' } };
-
- if (filters.type) {
- query.type = filters.type;
- }
-
- if (filters.region) {
- query.region = filters.region;
- }
-
- return this.find(query).sort({ lastActivity: -1 });
-};
-
-gameServerSchema.statics.cleanupOldServers = function(maxAge = 24 * 60 * 60 * 1000) { // 24 hours
- const cutoffTime = new Date(Date.now() - maxAge);
- return this.deleteMany({
- $or: [
- { lastActivity: { $lt: cutoffTime }, currentPlayers: 0 },
- { status: 'offline', lastActivity: { $lt: cutoffTime } }
- ]
- });
-};
-
-module.exports = mongoose.model('GameServer', gameServerSchema);
diff --git a/API/models/Inventory.js b/API/models/Inventory.js
deleted file mode 100644
index 005beb9..0000000
--- a/API/models/Inventory.js
+++ /dev/null
@@ -1,306 +0,0 @@
-const mongoose = require('mongoose');
-
-const inventorySchema = new mongoose.Schema({
- userId: {
- type: String,
- required: true,
- ref: 'Player'
- },
-
- // Inventory settings
- maxSlots: {
- type: Number,
- default: 50
- },
-
- // Items array
- items: [{
- id: {
- type: String,
- required: true
- },
- name: {
- type: String,
- required: true
- },
- type: {
- type: String,
- required: true,
- enum: ['weapon', 'armor', 'material', 'consumable']
- },
- rarity: {
- type: String,
- enum: ['common', 'uncommon', 'rare', 'epic', 'legendary'],
- default: 'common'
- },
- quantity: {
- type: Number,
- default: 1,
- min: 1
- },
-
- // Item stats (for weapons/armor)
- stats: {
- attack: { type: Number, default: 0 },
- defense: { type: Number, default: 0 },
- speed: { type: Number, default: 0 },
- criticalChance: { type: Number, default: 0 },
- criticalDamage: { type: Number, default: 1.5 },
- damage: { type: Number, default: 0 },
- fireRate: { type: Number, default: 0 },
- range: { type: Number, default: 0 },
- energy: { type: Number, default: 0 },
- health: { type: Number, default: 0 },
- maxHealth: { type: Number, default: 0 },
- durability: { type: Number, default: 0 },
- weight: { type: Number, default: 0 },
- energyShield: { type: Number, default: 0 }
- },
-
- // Item properties
- description: {
- type: String,
- default: ''
- },
-
- // Equipment properties
- equipable: {
- type: Boolean,
- default: false
- },
- slot: {
- type: String,
- enum: ['weapon', 'armor', 'engine', 'shield', 'special'],
- default: null
- },
- isEquipped: {
- type: Boolean,
- default: false
- },
-
- // Consumable properties
- consumable: {
- type: Boolean,
- default: false
- },
- effect: {
- health: { type: Number, default: 0 },
- energy: { type: Number, default: 0 },
- attack: { type: Number, default: 0 },
- defense: { type: Number, default: 0 },
- speed: { type: Number, default: 0 },
- duration: { type: Number, default: 0 }
- },
-
- // Stackable items
- stackable: {
- type: Boolean,
- default: false
- },
-
- // Timestamps
- acquiredAt: {
- type: Date,
- default: Date.now
- },
- lastUsed: {
- type: Date,
- default: null
- }
- }],
-
- // Equipped items
- equippedItems: {
- weapon: { type: String, default: null },
- armor: { type: String, default: null },
- engine: { type: String, default: null },
- shield: { type: String, default: null },
- special: { type: String, default: null }
- },
-
- // Timestamps
- updatedAt: {
- type: Date,
- default: Date.now
- }
-}, {
- timestamps: true
-});
-
-// Indexes for performance
-inventorySchema.index({ userId: 1 });
-inventorySchema.index({ 'items.id': 1 });
-inventorySchema.index({ 'items.type': 1 });
-
-// Methods
-inventorySchema.methods.addItem = function(itemData) {
- // Check if item already exists and is stackable
- const existingItem = this.items.find(item =>
- item.id === itemData.id &&
- item.type === itemData.type &&
- item.stackable
- );
-
- if (existingItem) {
- existingItem.quantity += itemData.quantity || 1;
- } else {
- // Add new item
- const newItem = {
- ...itemData,
- quantity: itemData.quantity || 1,
- acquiredAt: new Date()
- };
-
- this.items.push(newItem);
- }
-
- this.updatedAt = new Date();
- return this.save();
-};
-
-inventorySchema.methods.removeItem = function(itemId, quantity = 1) {
- const itemIndex = this.items.findIndex(item => item.id === itemId);
-
- if (itemIndex === -1) {
- throw new Error('Item not found in inventory');
- }
-
- const item = this.items[itemIndex];
-
- if (item.quantity > quantity) {
- item.quantity -= quantity;
- } else {
- // Remove item completely
- this.items.splice(itemIndex, 1);
-
- // Unequip if it was equipped
- Object.keys(this.equippedItems).forEach(slot => {
- if (this.equippedItems[slot] === itemId) {
- this.equippedItems[slot] = null;
- }
- });
- }
-
- this.updatedAt = new Date();
- return this.save();
-};
-
-inventorySchema.methods.hasItem = function(itemId, quantity = 1) {
- const item = this.items.find(item => item.id === itemId);
- return item && item.quantity >= quantity;
-};
-
-inventorySchema.methods.getItemCount = function(itemId) {
- const item = this.items.find(item => item.id === itemId);
- return item ? item.quantity : 0;
-};
-
-inventorySchema.methods.equipItem = function(itemId, slot) {
- const item = this.items.find(item => item.id === itemId);
-
- if (!item) {
- throw new Error('Item not found in inventory');
- }
-
- if (!item.equipable) {
- throw new Error('Item is not equipable');
- }
-
- if (item.slot !== slot) {
- throw new Error('Item cannot be equipped in this slot');
- }
-
- // Unequip current item in slot
- if (this.equippedItems[slot]) {
- const currentItem = this.items.find(item => item.id === this.equippedItems[slot]);
- if (currentItem) {
- currentItem.isEquipped = false;
- }
- }
-
- // Equip new item
- this.equippedItems[slot] = itemId;
- item.isEquipped = true;
- item.lastUsed = new Date();
-
- this.updatedAt = new Date();
- return this.save();
-};
-
-inventorySchema.methods.unequipItem = function(slot) {
- const itemId = this.equippedItems[slot];
-
- if (!itemId) {
- throw new Error('No item equipped in this slot');
- }
-
- const item = this.items.find(item => item.id === itemId);
- if (item) {
- item.isEquipped = false;
- }
-
- this.equippedItems[slot] = null;
- this.updatedAt = new Date();
- return this.save();
-};
-
-inventorySchema.methods.useConsumable = function(itemId) {
- const item = this.items.find(item => item.id === itemId);
-
- if (!item) {
- throw new Error('Item not found in inventory');
- }
-
- if (!item.consumable) {
- throw new Error('Item is not consumable');
- }
-
- if (item.quantity <= 0) {
- throw new Error('No quantity left');
- }
-
- // Apply effects
- const effects = { ...item.effect };
-
- // Remove one from quantity
- item.quantity -= 1;
- item.lastUsed = new Date();
-
- // Remove item if quantity is 0
- if (item.quantity === 0) {
- const itemIndex = this.items.findIndex(item => item.id === itemId);
- this.items.splice(itemIndex, 1);
- }
-
- this.updatedAt = new Date();
- this.save();
-
- return effects;
-};
-
-inventorySchema.methods.getInventorySummary = function() {
- const summary = {
- totalItems: this.items.length,
- usedSlots: this.items.length,
- maxSlots: this.maxSlots,
- itemsByType: {},
- equippedItems: this.equippedItems
- };
-
- // Count items by type
- this.items.forEach(item => {
- summary.itemsByType[item.type] = (summary.itemsByType[item.type] || 0) + item.quantity;
- });
-
- return summary;
-};
-
-inventorySchema.methods.getItemsByType = function(type) {
- return this.items.filter(item => item.type === type);
-};
-
-inventorySchema.methods.getItemsByRarity = function(rarity) {
- return this.items.filter(item => item.rarity === rarity);
-};
-
-module.exports = mongoose.model('Inventory', inventorySchema);
diff --git a/API/models/Player.js b/API/models/Player.js
deleted file mode 100644
index a8eaab0..0000000
--- a/API/models/Player.js
+++ /dev/null
@@ -1,155 +0,0 @@
-const mongoose = require('mongoose');
-
-const playerSchema = new mongoose.Schema({
- userId: {
- type: String,
- required: true,
- unique: true
- },
- username: {
- type: String,
- required: true
- },
- email: {
- type: String,
- required: true,
- unique: true
- },
-
- // Authentication
- password: {
- type: String,
- required: true,
- select: false // Don't include password in queries by default
- },
-
- // Player stats (simplified for API server)
- stats: {
- level: { type: Number, default: 1 },
- experience: { type: Number, default: 0 },
- credits: { type: Number, default: 1000 },
- dungeonsCleared: { type: Number, default: 0 },
- playTime: { type: Number, default: 0 },
- lastLogin: { type: Date, default: Date.now }
- },
-
- // Base attributes
- attributes: {
- health: { type: Number, default: 100 },
- maxHealth: { type: Number, default: 100 },
- energy: { type: Number, default: 100 },
- maxEnergy: { type: Number, default: 100 },
- attack: { type: Number, default: 10 },
- defense: { type: Number, default: 5 },
- speed: { type: Number, default: 10 },
- criticalChance: { type: Number, default: 0.05 },
- criticalDamage: { type: Number, default: 1.5 }
- },
-
- // Player info
- info: {
- name: { type: String, default: 'Commander' },
- title: { type: String, default: 'Rookie Pilot' },
- guild: { type: String, default: null },
- rank: { type: String, default: 'Cadet' }
- },
-
- // Current ship
- currentShip: {
- type: mongoose.Schema.Types.ObjectId,
- ref: 'Ship'
- },
-
- // Settings
- settings: {
- autoSave: { type: Boolean, default: true },
- notifications: { type: Boolean, default: true },
- soundEffects: { type: Boolean, default: true },
- music: { type: Boolean, default: false },
- discordIntegration: { type: Boolean, default: false }
- },
-
- // Daily rewards
- dailyRewards: {
- lastClaim: { type: Date, default: null },
- consecutiveDays: { type: Number, default: 0 }
- },
-
- // Server info
- currentServer: { type: String, default: null },
-
- // Timestamps
- createdAt: { type: Date, default: Date.now },
- updatedAt: { type: Date, default: Date.now }
-}, {
- timestamps: true
-});
-
-// Indexes for performance (only for non-unique fields)
-playerSchema.index({ 'stats.level': 1 });
-playerSchema.index({ currentServer: 1 });
-
-// Methods (simplified for API server)
-playerSchema.methods.addExperience = function(amount) {
- this.stats.experience += amount;
- return this.stats.experience;
-};
-
-playerSchema.methods.addCredits = function(amount) {
- this.stats.credits += amount;
- return this.stats.credits;
-};
-
-playerSchema.methods.canAfford = function(cost) {
- return this.stats.credits >= cost;
-};
-
-playerSchema.methods.spendCredits = function(cost) {
- if (this.canAfford(cost)) {
- this.stats.credits -= cost;
- return true;
- }
- return false;
-};
-
-playerSchema.methods.updatePlayTime = function(sessionTime) {
- this.stats.playTime += sessionTime;
- this.stats.lastLogin = new Date();
-};
-
-playerSchema.methods.claimDailyReward = function() {
- const today = new Date();
- const lastClaim = this.dailyRewards.lastClaim;
-
- // Check if already claimed today
- if (lastClaim && lastClaim.toDateString() === today.toDateString()) {
- return { success: false, message: 'Daily reward already claimed today' };
- }
-
- // Check consecutive days
- const yesterday = new Date(today);
- yesterday.setDate(yesterday.getDate() - 1);
-
- if (lastClaim && lastClaim.toDateString() === yesterday.toDateString()) {
- this.dailyRewards.consecutiveDays += 1;
- } else {
- this.dailyRewards.consecutiveDays = 1;
- }
-
- this.dailyRewards.lastClaim = today;
-
- // Calculate reward based on consecutive days
- const baseReward = 100;
- const consecutiveBonus = (this.dailyRewards.consecutiveDays - 1) * 50;
- const totalReward = baseReward + consecutiveBonus;
-
- this.addCredits(totalReward);
-
- return {
- success: true,
- reward: totalReward,
- consecutiveDays: this.dailyRewards.consecutiveDays
- };
-};
-
-module.exports = mongoose.model('Player', playerSchema);
diff --git a/API/models/PlayerData.js b/API/models/PlayerData.js
deleted file mode 100644
index 80fd04d..0000000
--- a/API/models/PlayerData.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * API/models/PlayerData.js
- *
- * Minimal PlayerData model for the API server — only what the payment webhook
- * needs to read and credit gems. Shares the 'playerdatas' collection with
- * the GameServer's full PlayerData model (same MongoDB, same schema name).
- *
- * Do NOT add complex game logic here — that belongs in GameServer.
- */
-
-const mongoose = require('mongoose');
-
-// Minimal schema — Mixed types let us read/write without strict field validation
-const playerDataSchema = new mongoose.Schema({
- userId: { type: String, required: true, unique: true },
- username: { type: String },
- stats: { type: mongoose.Schema.Types.Mixed, default: {} },
-}, {
- strict: false, // allow all fields to be stored (don't strip unknown fields)
- timestamps: true,
-});
-
-// Prevent model re-registration error on hot-reload
-let PlayerData;
-try {
- PlayerData = mongoose.model('PlayerData');
-} catch (e) {
- PlayerData = mongoose.model('PlayerData', playerDataSchema);
-}
-
-module.exports = PlayerData;
diff --git a/API/models/Ship.js b/API/models/Ship.js
deleted file mode 100644
index 270ca97..0000000
--- a/API/models/Ship.js
+++ /dev/null
@@ -1,189 +0,0 @@
-const mongoose = require('mongoose');
-
-const shipSchema = new mongoose.Schema({
- userId: {
- type: String,
- required: true,
- ref: 'Player'
- },
-
- // Ship identification
- id: {
- type: String,
- required: true,
- unique: true
- },
- name: {
- type: String,
- required: true
- },
- class: {
- type: String,
- required: true,
- enum: ['Fighter', 'Cruiser', 'Battleship', 'Carrier', 'Explorer']
- },
- level: {
- type: Number,
- default: 1
- },
-
- // Ship stats
- stats: {
- health: { type: Number, required: true },
- maxHealth: { type: Number, required: true },
- attack: { type: Number, required: true },
- defense: { type: Number, required: true },
- speed: { type: Number, required: true },
- criticalChance: { type: Number, default: 0.05 },
- criticalDamage: { type: Number, default: 1.5 },
- hull: { type: Number, required: true }
- },
-
- // Ship appearance
- texture: {
- type: String,
- required: true
- },
-
- // Ship progression
- experience: {
- type: Number,
- default: 0
- },
- requiredExp: {
- type: Number,
- default: 100
- },
- upgrades: [{
- type: String
- }],
-
- // Ship status
- isEquipped: {
- type: Boolean,
- default: false
- },
- isCurrent: {
- type: Boolean,
- default: false
- },
-
- // Shop information (if purchased)
- price: {
- type: Number,
- default: 0
- },
- rarity: {
- type: String,
- enum: ['common', 'uncommon', 'rare', 'epic', 'legendary'],
- default: 'common'
- },
- description: {
- type: String,
- default: ''
- },
-
- // Timestamps
- acquiredAt: {
- type: Date,
- default: Date.now
- },
- lastUsed: {
- type: Date,
- default: Date.now
- }
-}, {
- timestamps: true
-});
-
-// Indexes for performance
-shipSchema.index({ userId: 1 });
-shipSchema.index({ id: 1 });
-shipSchema.index({ isEquipped: 1 });
-shipSchema.index({ isCurrent: 1 });
-
-// Methods
-shipSchema.methods.addExperience = function(amount) {
- this.experience += amount;
-
- // Level up logic
- while (this.experience >= this.requiredExp) {
- this.experience -= this.requiredExp;
- this.level += 1;
- this.requiredExp = this.level * 100;
-
- // Increase stats on level up
- this.stats.maxHealth += 10;
- this.stats.health = this.stats.maxHealth;
- this.stats.attack += 2;
- this.stats.defense += 1;
- this.stats.speed += 1;
- }
-
- return this.level;
-};
-
-shipSchema.methods.takeDamage = function(damage) {
- const actualDamage = Math.max(0, damage - this.stats.defense);
- this.stats.health = Math.max(0, this.stats.health - actualDamage);
-
- if (this.stats.health === 0) {
- this.isDestroyed = true;
- }
-
- return actualDamage;
-};
-
-shipSchema.methods.heal = function(amount) {
- const healAmount = Math.min(amount, this.stats.maxHealth - this.stats.health);
- this.stats.health += healAmount;
- this.isDestroyed = false;
-
- return healAmount;
-};
-
-shipSchema.methods.isAlive = function() {
- return this.stats.health > 0;
-};
-
-shipSchema.methods.getStatSummary = function() {
- return {
- name: this.name,
- class: this.class,
- level: this.level,
- health: `${this.stats.health}/${this.stats.maxHealth}`,
- attack: this.stats.attack,
- defense: this.stats.defense,
- speed: this.stats.speed,
- criticalChance: `${(this.stats.criticalChance * 100).toFixed(1)}%`,
- criticalDamage: `${this.stats.criticalDamage}x`
- };
-};
-
-shipSchema.methods.upgrade = function(upgradeType) {
- switch (upgradeType) {
- case 'health':
- this.stats.maxHealth += 20;
- this.stats.health = this.stats.maxHealth;
- break;
- case 'attack':
- this.stats.attack += 5;
- break;
- case 'defense':
- this.stats.defense += 3;
- break;
- case 'speed':
- this.stats.speed += 2;
- break;
- default:
- throw new Error('Unknown upgrade type');
- }
-
- if (!this.upgrades.includes(upgradeType)) {
- this.upgrades.push(upgradeType);
- }
-
- this.lastUsed = new Date();
-};
-
-module.exports = mongoose.model('Ship', shipSchema);
diff --git a/API/package-lock.json b/API/package-lock.json
deleted file mode 100644
index 60160b4..0000000
--- a/API/package-lock.json
+++ /dev/null
@@ -1,6068 +0,0 @@
-{
- "name": "galaxystrikeonline-server",
- "version": "1.0.0",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "name": "galaxystrikeonline-server",
- "version": "1.0.0",
- "license": "MIT",
- "dependencies": {
- "bcryptjs": "^2.4.3",
- "compression": "^1.7.4",
- "cors": "^2.8.5",
- "dotenv": "^16.3.1",
- "express": "^4.18.2",
- "helmet": "^7.1.0",
- "joi": "^17.11.0",
- "jsonwebtoken": "^9.0.2",
- "mongoose": "^8.0.3",
- "rate-limiter-flexible": "^2.4.2",
- "redis": "^4.6.11",
- "socket.io": "^4.7.4",
- "winston": "^3.11.0"
- },
- "devDependencies": {
- "jest": "^29.7.0",
- "nodemon": "^3.0.2",
- "supertest": "^6.3.3"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@babel/code-frame": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
- "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-validator-identifier": "^7.27.1",
- "js-tokens": "^4.0.0",
- "picocolors": "^1.1.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/compat-data": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz",
- "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/core": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz",
- "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@babel/code-frame": "^7.27.1",
- "@babel/generator": "^7.28.5",
- "@babel/helper-compilation-targets": "^7.27.2",
- "@babel/helper-module-transforms": "^7.28.3",
- "@babel/helpers": "^7.28.4",
- "@babel/parser": "^7.28.5",
- "@babel/template": "^7.27.2",
- "@babel/traverse": "^7.28.5",
- "@babel/types": "^7.28.5",
- "@jridgewell/remapping": "^2.3.5",
- "convert-source-map": "^2.0.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.2",
- "json5": "^2.2.3",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/babel"
- }
- },
- "node_modules/@babel/core/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/@babel/core/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@babel/generator": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz",
- "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/parser": "^7.28.5",
- "@babel/types": "^7.28.5",
- "@jridgewell/gen-mapping": "^0.3.12",
- "@jridgewell/trace-mapping": "^0.3.28",
- "jsesc": "^3.0.2"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-compilation-targets": {
- "version": "7.27.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz",
- "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/compat-data": "^7.27.2",
- "@babel/helper-validator-option": "^7.27.1",
- "browserslist": "^4.24.0",
- "lru-cache": "^5.1.1",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-globals": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
- "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-module-imports": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz",
- "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/traverse": "^7.27.1",
- "@babel/types": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-module-transforms": {
- "version": "7.28.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz",
- "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-module-imports": "^7.27.1",
- "@babel/helper-validator-identifier": "^7.27.1",
- "@babel/traverse": "^7.28.3"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-plugin-utils": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz",
- "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-string-parser": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
- "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-validator-identifier": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
- "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-validator-option": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
- "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helpers": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz",
- "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/template": "^7.27.2",
- "@babel/types": "^7.28.4"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/parser": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz",
- "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.28.5"
- },
- "bin": {
- "parser": "bin/babel-parser.js"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@babel/plugin-syntax-async-generators": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
- "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-bigint": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
- "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-class-properties": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
- "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.12.13"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-class-static-block": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
- "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-import-attributes": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz",
- "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-import-meta": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
- "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-json-strings": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
- "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-jsx": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz",
- "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-logical-assignment-operators": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
- "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
- "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-numeric-separator": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
- "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-object-rest-spread": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
- "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-optional-catch-binding": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
- "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-optional-chaining": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
- "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-private-property-in-object": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
- "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-top-level-await": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
- "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-typescript": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz",
- "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/template": {
- "version": "7.27.2",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz",
- "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.27.1",
- "@babel/parser": "^7.27.2",
- "@babel/types": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/traverse": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz",
- "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.27.1",
- "@babel/generator": "^7.28.5",
- "@babel/helper-globals": "^7.28.0",
- "@babel/parser": "^7.28.5",
- "@babel/template": "^7.27.2",
- "@babel/types": "^7.28.5",
- "debug": "^4.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/traverse/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/@babel/traverse/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@babel/types": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz",
- "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-string-parser": "^7.27.1",
- "@babel/helper-validator-identifier": "^7.28.5"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@bcoe/v8-coverage": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
- "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@colors/colors": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz",
- "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==",
- "license": "MIT",
- "engines": {
- "node": ">=0.1.90"
- }
- },
- "node_modules/@dabh/diagnostics": {
- "version": "2.0.8",
- "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.8.tgz",
- "integrity": "sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==",
- "license": "MIT",
- "dependencies": {
- "@so-ric/colorspace": "^1.1.6",
- "enabled": "2.0.x",
- "kuler": "^2.0.0"
- }
- },
- "node_modules/@hapi/hoek": {
- "version": "9.3.0",
- "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz",
- "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==",
- "license": "BSD-3-Clause"
- },
- "node_modules/@hapi/topo": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz",
- "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "@hapi/hoek": "^9.0.0"
- }
- },
- "node_modules/@istanbuljs/load-nyc-config": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
- "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "camelcase": "^5.3.1",
- "find-up": "^4.1.0",
- "get-package-type": "^0.1.0",
- "js-yaml": "^3.13.1",
- "resolve-from": "^5.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@istanbuljs/schema": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
- "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@jest/console": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz",
- "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/types": "^29.6.3",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "jest-message-util": "^29.7.0",
- "jest-util": "^29.7.0",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/core": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz",
- "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/console": "^29.7.0",
- "@jest/reporters": "^29.7.0",
- "@jest/test-result": "^29.7.0",
- "@jest/transform": "^29.7.0",
- "@jest/types": "^29.6.3",
- "@types/node": "*",
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.0.0",
- "ci-info": "^3.2.0",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.9",
- "jest-changed-files": "^29.7.0",
- "jest-config": "^29.7.0",
- "jest-haste-map": "^29.7.0",
- "jest-message-util": "^29.7.0",
- "jest-regex-util": "^29.6.3",
- "jest-resolve": "^29.7.0",
- "jest-resolve-dependencies": "^29.7.0",
- "jest-runner": "^29.7.0",
- "jest-runtime": "^29.7.0",
- "jest-snapshot": "^29.7.0",
- "jest-util": "^29.7.0",
- "jest-validate": "^29.7.0",
- "jest-watcher": "^29.7.0",
- "micromatch": "^4.0.4",
- "pretty-format": "^29.7.0",
- "slash": "^3.0.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "peerDependencies": {
- "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
- },
- "peerDependenciesMeta": {
- "node-notifier": {
- "optional": true
- }
- }
- },
- "node_modules/@jest/environment": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz",
- "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/fake-timers": "^29.7.0",
- "@jest/types": "^29.6.3",
- "@types/node": "*",
- "jest-mock": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/expect": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz",
- "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "expect": "^29.7.0",
- "jest-snapshot": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/expect-utils": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz",
- "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "jest-get-type": "^29.6.3"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/fake-timers": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz",
- "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/types": "^29.6.3",
- "@sinonjs/fake-timers": "^10.0.2",
- "@types/node": "*",
- "jest-message-util": "^29.7.0",
- "jest-mock": "^29.7.0",
- "jest-util": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/globals": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz",
- "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/environment": "^29.7.0",
- "@jest/expect": "^29.7.0",
- "@jest/types": "^29.6.3",
- "jest-mock": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/reporters": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz",
- "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@bcoe/v8-coverage": "^0.2.3",
- "@jest/console": "^29.7.0",
- "@jest/test-result": "^29.7.0",
- "@jest/transform": "^29.7.0",
- "@jest/types": "^29.6.3",
- "@jridgewell/trace-mapping": "^0.3.18",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "collect-v8-coverage": "^1.0.0",
- "exit": "^0.1.2",
- "glob": "^7.1.3",
- "graceful-fs": "^4.2.9",
- "istanbul-lib-coverage": "^3.0.0",
- "istanbul-lib-instrument": "^6.0.0",
- "istanbul-lib-report": "^3.0.0",
- "istanbul-lib-source-maps": "^4.0.0",
- "istanbul-reports": "^3.1.3",
- "jest-message-util": "^29.7.0",
- "jest-util": "^29.7.0",
- "jest-worker": "^29.7.0",
- "slash": "^3.0.0",
- "string-length": "^4.0.1",
- "strip-ansi": "^6.0.0",
- "v8-to-istanbul": "^9.0.1"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "peerDependencies": {
- "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
- },
- "peerDependenciesMeta": {
- "node-notifier": {
- "optional": true
- }
- }
- },
- "node_modules/@jest/schemas": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
- "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@sinclair/typebox": "^0.27.8"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/source-map": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz",
- "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jridgewell/trace-mapping": "^0.3.18",
- "callsites": "^3.0.0",
- "graceful-fs": "^4.2.9"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/test-result": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz",
- "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/console": "^29.7.0",
- "@jest/types": "^29.6.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "collect-v8-coverage": "^1.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/test-sequencer": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz",
- "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/test-result": "^29.7.0",
- "graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.7.0",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/transform": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz",
- "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/core": "^7.11.6",
- "@jest/types": "^29.6.3",
- "@jridgewell/trace-mapping": "^0.3.18",
- "babel-plugin-istanbul": "^6.1.1",
- "chalk": "^4.0.0",
- "convert-source-map": "^2.0.0",
- "fast-json-stable-stringify": "^2.1.0",
- "graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.7.0",
- "jest-regex-util": "^29.6.3",
- "jest-util": "^29.7.0",
- "micromatch": "^4.0.4",
- "pirates": "^4.0.4",
- "slash": "^3.0.0",
- "write-file-atomic": "^4.0.2"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/types": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
- "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/schemas": "^29.6.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.13",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
- "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jridgewell/sourcemap-codec": "^1.5.0",
- "@jridgewell/trace-mapping": "^0.3.24"
- }
- },
- "node_modules/@jridgewell/remapping": {
- "version": "2.3.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
- "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.24"
- }
- },
- "node_modules/@jridgewell/resolve-uri": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
- "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.5.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
- "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.31",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
- "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jridgewell/resolve-uri": "^3.1.0",
- "@jridgewell/sourcemap-codec": "^1.4.14"
- }
- },
- "node_modules/@mongodb-js/saslprep": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.4.4.tgz",
- "integrity": "sha512-p7X/ytJDIdwUfFL/CLOhKgdfJe1Fa8uw9seJYvdOmnP9JBWGWHW69HkOixXS6Wy9yvGf1MbhcS6lVmrhy4jm2g==",
- "license": "MIT",
- "dependencies": {
- "sparse-bitfield": "^3.0.3"
- }
- },
- "node_modules/@noble/hashes": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz",
- "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^14.21.3 || >=16"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- }
- },
- "node_modules/@paralleldrive/cuid2": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.3.1.tgz",
- "integrity": "sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@noble/hashes": "^1.1.5"
- }
- },
- "node_modules/@redis/bloom": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-1.2.0.tgz",
- "integrity": "sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==",
- "license": "MIT",
- "peerDependencies": {
- "@redis/client": "^1.0.0"
- }
- },
- "node_modules/@redis/client": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/@redis/client/-/client-1.6.1.tgz",
- "integrity": "sha512-/KCsg3xSlR+nCK8/8ZYSknYxvXHwubJrU82F3Lm1Fp6789VQ0/3RJKfsmRXjqfaTA++23CvC3hqmqe/2GEt6Kw==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "cluster-key-slot": "1.1.2",
- "generic-pool": "3.9.0",
- "yallist": "4.0.0"
- },
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@redis/client/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "license": "ISC"
- },
- "node_modules/@redis/graph": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@redis/graph/-/graph-1.1.1.tgz",
- "integrity": "sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw==",
- "license": "MIT",
- "peerDependencies": {
- "@redis/client": "^1.0.0"
- }
- },
- "node_modules/@redis/json": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/@redis/json/-/json-1.0.7.tgz",
- "integrity": "sha512-6UyXfjVaTBTJtKNG4/9Z8PSpKE6XgSyEb8iwaqDcy+uKrd/DGYHTWkUdnQDyzm727V7p21WUMhsqz5oy65kPcQ==",
- "license": "MIT",
- "peerDependencies": {
- "@redis/client": "^1.0.0"
- }
- },
- "node_modules/@redis/search": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@redis/search/-/search-1.2.0.tgz",
- "integrity": "sha512-tYoDBbtqOVigEDMAcTGsRlMycIIjwMCgD8eR2t0NANeQmgK/lvxNAvYyb6bZDD4frHRhIHkJu2TBRvB0ERkOmw==",
- "license": "MIT",
- "peerDependencies": {
- "@redis/client": "^1.0.0"
- }
- },
- "node_modules/@redis/time-series": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-1.1.0.tgz",
- "integrity": "sha512-c1Q99M5ljsIuc4YdaCwfUEXsofakb9c8+Zse2qxTadu8TalLXuAESzLvFAvNVbkmSlvlzIQOLpBCmWI9wTOt+g==",
- "license": "MIT",
- "peerDependencies": {
- "@redis/client": "^1.0.0"
- }
- },
- "node_modules/@sideway/address": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz",
- "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "@hapi/hoek": "^9.0.0"
- }
- },
- "node_modules/@sideway/formula": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz",
- "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==",
- "license": "BSD-3-Clause"
- },
- "node_modules/@sideway/pinpoint": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz",
- "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==",
- "license": "BSD-3-Clause"
- },
- "node_modules/@sinclair/typebox": {
- "version": "0.27.8",
- "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
- "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@sinonjs/commons": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
- "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "type-detect": "4.0.8"
- }
- },
- "node_modules/@sinonjs/fake-timers": {
- "version": "10.3.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz",
- "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@sinonjs/commons": "^3.0.0"
- }
- },
- "node_modules/@so-ric/colorspace": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/@so-ric/colorspace/-/colorspace-1.1.6.tgz",
- "integrity": "sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==",
- "license": "MIT",
- "dependencies": {
- "color": "^5.0.2",
- "text-hex": "1.0.x"
- }
- },
- "node_modules/@socket.io/component-emitter": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz",
- "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==",
- "license": "MIT"
- },
- "node_modules/@types/babel__core": {
- "version": "7.20.5",
- "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
- "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/parser": "^7.20.7",
- "@babel/types": "^7.20.7",
- "@types/babel__generator": "*",
- "@types/babel__template": "*",
- "@types/babel__traverse": "*"
- }
- },
- "node_modules/@types/babel__generator": {
- "version": "7.27.0",
- "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz",
- "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.0.0"
- }
- },
- "node_modules/@types/babel__template": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
- "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/parser": "^7.1.0",
- "@babel/types": "^7.0.0"
- }
- },
- "node_modules/@types/babel__traverse": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz",
- "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.28.2"
- }
- },
- "node_modules/@types/cors": {
- "version": "2.8.19",
- "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz",
- "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==",
- "license": "MIT",
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@types/graceful-fs": {
- "version": "4.1.9",
- "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz",
- "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@types/istanbul-lib-coverage": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
- "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/istanbul-lib-report": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz",
- "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/istanbul-lib-coverage": "*"
- }
- },
- "node_modules/@types/istanbul-reports": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
- "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/istanbul-lib-report": "*"
- }
- },
- "node_modules/@types/node": {
- "version": "25.0.3",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.3.tgz",
- "integrity": "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==",
- "license": "MIT",
- "dependencies": {
- "undici-types": "~7.16.0"
- }
- },
- "node_modules/@types/stack-utils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz",
- "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/triple-beam": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz",
- "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==",
- "license": "MIT"
- },
- "node_modules/@types/webidl-conversions": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz",
- "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==",
- "license": "MIT"
- },
- "node_modules/@types/whatwg-url": {
- "version": "11.0.5",
- "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz",
- "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==",
- "license": "MIT",
- "dependencies": {
- "@types/webidl-conversions": "*"
- }
- },
- "node_modules/@types/yargs": {
- "version": "17.0.35",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
- "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/yargs-parser": "*"
- }
- },
- "node_modules/@types/yargs-parser": {
- "version": "21.0.3",
- "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz",
- "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/accepts": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
- "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
- "license": "MIT",
- "dependencies": {
- "mime-types": "~2.1.34",
- "negotiator": "0.6.3"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/accepts/node_modules/negotiator": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
- "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/ansi-escapes": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
- "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "type-fest": "^0.21.3"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/anymatch": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
- "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "sprintf-js": "~1.0.2"
- }
- },
- "node_modules/array-flatten": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
- "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
- "license": "MIT"
- },
- "node_modules/asap": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
- "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/async": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
- "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
- "license": "MIT"
- },
- "node_modules/asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/babel-jest": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz",
- "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/transform": "^29.7.0",
- "@types/babel__core": "^7.1.14",
- "babel-plugin-istanbul": "^6.1.1",
- "babel-preset-jest": "^29.6.3",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.9",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.8.0"
- }
- },
- "node_modules/babel-plugin-istanbul": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
- "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@istanbuljs/load-nyc-config": "^1.0.0",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-instrument": "^5.0.4",
- "test-exclude": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
- "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@babel/core": "^7.12.3",
- "@babel/parser": "^7.14.7",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-coverage": "^3.2.0",
- "semver": "^6.3.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/babel-plugin-jest-hoist": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz",
- "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/template": "^7.3.3",
- "@babel/types": "^7.3.3",
- "@types/babel__core": "^7.1.14",
- "@types/babel__traverse": "^7.0.6"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/babel-preset-current-node-syntax": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz",
- "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/plugin-syntax-async-generators": "^7.8.4",
- "@babel/plugin-syntax-bigint": "^7.8.3",
- "@babel/plugin-syntax-class-properties": "^7.12.13",
- "@babel/plugin-syntax-class-static-block": "^7.14.5",
- "@babel/plugin-syntax-import-attributes": "^7.24.7",
- "@babel/plugin-syntax-import-meta": "^7.10.4",
- "@babel/plugin-syntax-json-strings": "^7.8.3",
- "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
- "@babel/plugin-syntax-numeric-separator": "^7.10.4",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3",
- "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
- "@babel/plugin-syntax-top-level-await": "^7.14.5"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0 || ^8.0.0-0"
- }
- },
- "node_modules/babel-preset-jest": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz",
- "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "babel-plugin-jest-hoist": "^29.6.3",
- "babel-preset-current-node-syntax": "^1.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/base64id": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
- "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
- "license": "MIT",
- "engines": {
- "node": "^4.5.0 || >= 5.9"
- }
- },
- "node_modules/baseline-browser-mapping": {
- "version": "2.9.10",
- "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.10.tgz",
- "integrity": "sha512-2VIKvDx8Z1a9rTB2eCkdPE5nSe28XnA+qivGnWHoB40hMMt/h1hSz0960Zqsn6ZyxWXUie0EBdElKv8may20AA==",
- "dev": true,
- "license": "Apache-2.0",
- "bin": {
- "baseline-browser-mapping": "dist/cli.js"
- }
- },
- "node_modules/bcryptjs": {
- "version": "2.4.3",
- "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz",
- "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==",
- "license": "MIT"
- },
- "node_modules/binary-extensions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
- "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/body-parser": {
- "version": "1.20.4",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz",
- "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==",
- "license": "MIT",
- "dependencies": {
- "bytes": "~3.1.2",
- "content-type": "~1.0.5",
- "debug": "2.6.9",
- "depd": "2.0.0",
- "destroy": "~1.2.0",
- "http-errors": "~2.0.1",
- "iconv-lite": "~0.4.24",
- "on-finished": "~2.4.1",
- "qs": "~6.14.0",
- "raw-body": "~2.5.3",
- "type-is": "~1.6.18",
- "unpipe": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8",
- "npm": "1.2.8000 || >= 1.4.16"
- }
- },
- "node_modules/brace-expansion": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/braces": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
- "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fill-range": "^7.1.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/browserslist": {
- "version": "4.28.1",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz",
- "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "baseline-browser-mapping": "^2.9.0",
- "caniuse-lite": "^1.0.30001759",
- "electron-to-chromium": "^1.5.263",
- "node-releases": "^2.0.27",
- "update-browserslist-db": "^1.2.0"
- },
- "bin": {
- "browserslist": "cli.js"
- },
- "engines": {
- "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
- }
- },
- "node_modules/bser": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
- "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "node-int64": "^0.4.0"
- }
- },
- "node_modules/bson": {
- "version": "6.10.4",
- "resolved": "https://registry.npmjs.org/bson/-/bson-6.10.4.tgz",
- "integrity": "sha512-WIsKqkSC0ABoBJuT1LEX+2HEvNmNKKgnTAyd0fL8qzK4SH2i9NXg+t08YtdZp/V9IZ33cxe3iV4yM0qg8lMQng==",
- "license": "Apache-2.0",
- "engines": {
- "node": ">=16.20.1"
- }
- },
- "node_modules/buffer-equal-constant-time": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
- "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==",
- "license": "BSD-3-Clause"
- },
- "node_modules/buffer-from": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
- "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/bytes": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
- "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/call-bind-apply-helpers": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
- "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/call-bound": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
- "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.2",
- "get-intrinsic": "^1.3.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/caniuse-lite": {
- "version": "1.0.30001760",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001760.tgz",
- "integrity": "sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "CC-BY-4.0"
- },
- "node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/char-regex": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
- "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/chokidar": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
- "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- },
- "engines": {
- "node": ">= 8.10.0"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/ci-info": {
- "version": "3.9.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
- "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/sibiraj-s"
- }
- ],
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cjs-module-lexer": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz",
- "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/cliui": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
- "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.1",
- "wrap-ansi": "^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/cluster-key-slot": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz",
- "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==",
- "license": "Apache-2.0",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/co": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
- "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "iojs": ">= 1.0.0",
- "node": ">= 0.12.0"
- }
- },
- "node_modules/collect-v8-coverage": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz",
- "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/color": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/color/-/color-5.0.3.tgz",
- "integrity": "sha512-ezmVcLR3xAVp8kYOm4GS45ZLLgIE6SPAFoduLr6hTDajwb3KZ2F46gulK3XpcwRFb5KKGCSezCBAY4Dw4HsyXA==",
- "license": "MIT",
- "dependencies": {
- "color-convert": "^3.1.3",
- "color-string": "^2.1.3"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/color-string": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/color-string/-/color-string-2.1.4.tgz",
- "integrity": "sha512-Bb6Cq8oq0IjDOe8wJmi4JeNn763Xs9cfrBcaylK1tPypWzyoy2G3l90v9k64kjphl/ZJjPIShFztenRomi8WTg==",
- "license": "MIT",
- "dependencies": {
- "color-name": "^2.0.0"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/color-string/node_modules/color-name": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.0.tgz",
- "integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==",
- "license": "MIT",
- "engines": {
- "node": ">=12.20"
- }
- },
- "node_modules/color/node_modules/color-convert": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-3.1.3.tgz",
- "integrity": "sha512-fasDH2ont2GqF5HpyO4w0+BcewlhHEZOFn9c1ckZdHpJ56Qb7MHhH/IcJZbBGgvdtwdwNbLvxiBEdg336iA9Sg==",
- "license": "MIT",
- "dependencies": {
- "color-name": "^2.0.0"
- },
- "engines": {
- "node": ">=14.6"
- }
- },
- "node_modules/color/node_modules/color-name": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.0.tgz",
- "integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==",
- "license": "MIT",
- "engines": {
- "node": ">=12.20"
- }
- },
- "node_modules/combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "delayed-stream": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/component-emitter": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz",
- "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/compressible": {
- "version": "2.0.18",
- "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
- "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
- "license": "MIT",
- "dependencies": {
- "mime-db": ">= 1.43.0 < 2"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/compression": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz",
- "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==",
- "license": "MIT",
- "dependencies": {
- "bytes": "3.1.2",
- "compressible": "~2.0.18",
- "debug": "2.6.9",
- "negotiator": "~0.6.4",
- "on-headers": "~1.1.0",
- "safe-buffer": "5.2.1",
- "vary": "~1.1.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/content-disposition": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
- "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "5.2.1"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/content-type": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
- "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/convert-source-map": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
- "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/cookie": {
- "version": "0.7.2",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
- "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/cookie-signature": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz",
- "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==",
- "license": "MIT"
- },
- "node_modules/cookiejar": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz",
- "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/cors": {
- "version": "2.8.5",
- "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
- "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
- "license": "MIT",
- "dependencies": {
- "object-assign": "^4",
- "vary": "^1"
- },
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/create-jest": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz",
- "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/types": "^29.6.3",
- "chalk": "^4.0.0",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.9",
- "jest-config": "^29.7.0",
- "jest-util": "^29.7.0",
- "prompts": "^2.0.1"
- },
- "bin": {
- "create-jest": "bin/create-jest.js"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/cross-spawn": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
- "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "license": "MIT",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/dedent": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.1.tgz",
- "integrity": "sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "babel-plugin-macros": "^3.1.0"
- },
- "peerDependenciesMeta": {
- "babel-plugin-macros": {
- "optional": true
- }
- }
- },
- "node_modules/deepmerge": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
- "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/depd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/destroy": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
- "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8",
- "npm": "1.2.8000 || >= 1.4.16"
- }
- },
- "node_modules/detect-newline": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
- "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/dezalgo": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz",
- "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "asap": "^2.0.0",
- "wrappy": "1"
- }
- },
- "node_modules/diff-sequences": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz",
- "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/dotenv": {
- "version": "16.6.1",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz",
- "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==",
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://dotenvx.com"
- }
- },
- "node_modules/dunder-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
- "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.1",
- "es-errors": "^1.3.0",
- "gopd": "^1.2.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/ecdsa-sig-formatter": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
- "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
- "license": "Apache-2.0",
- "dependencies": {
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/ee-first": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
- "license": "MIT"
- },
- "node_modules/electron-to-chromium": {
- "version": "1.5.267",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz",
- "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/emittery": {
- "version": "0.13.1",
- "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
- "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/emittery?sponsor=1"
- }
- },
- "node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/enabled": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz",
- "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==",
- "license": "MIT"
- },
- "node_modules/encodeurl": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
- "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/engine.io": {
- "version": "6.6.4",
- "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.4.tgz",
- "integrity": "sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==",
- "license": "MIT",
- "dependencies": {
- "@types/cors": "^2.8.12",
- "@types/node": ">=10.0.0",
- "accepts": "~1.3.4",
- "base64id": "2.0.0",
- "cookie": "~0.7.2",
- "cors": "~2.8.5",
- "debug": "~4.3.1",
- "engine.io-parser": "~5.2.1",
- "ws": "~8.17.1"
- },
- "engines": {
- "node": ">=10.2.0"
- }
- },
- "node_modules/engine.io-parser": {
- "version": "5.2.3",
- "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz",
- "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==",
- "license": "MIT",
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/engine.io/node_modules/debug": {
- "version": "4.3.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
- "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/engine.io/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "license": "MIT"
- },
- "node_modules/error-ex": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz",
- "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-arrayish": "^0.2.1"
- }
- },
- "node_modules/es-define-property": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
- "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-errors": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
- "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-object-atoms": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
- "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-set-tostringtag": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
- "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6",
- "has-tostringtag": "^1.0.2",
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/escalade": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
- "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
- "license": "MIT"
- },
- "node_modules/escape-string-regexp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
- "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true,
- "license": "BSD-2-Clause",
- "bin": {
- "esparse": "bin/esparse.js",
- "esvalidate": "bin/esvalidate.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/etag": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/execa": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
- "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cross-spawn": "^7.0.3",
- "get-stream": "^6.0.0",
- "human-signals": "^2.1.0",
- "is-stream": "^2.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^4.0.1",
- "onetime": "^5.1.2",
- "signal-exit": "^3.0.3",
- "strip-final-newline": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/execa?sponsor=1"
- }
- },
- "node_modules/exit": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
- "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
- "dev": true,
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/expect": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz",
- "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/expect-utils": "^29.7.0",
- "jest-get-type": "^29.6.3",
- "jest-matcher-utils": "^29.7.0",
- "jest-message-util": "^29.7.0",
- "jest-util": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/express": {
- "version": "4.22.1",
- "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz",
- "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==",
- "license": "MIT",
- "dependencies": {
- "accepts": "~1.3.8",
- "array-flatten": "1.1.1",
- "body-parser": "~1.20.3",
- "content-disposition": "~0.5.4",
- "content-type": "~1.0.4",
- "cookie": "~0.7.1",
- "cookie-signature": "~1.0.6",
- "debug": "2.6.9",
- "depd": "2.0.0",
- "encodeurl": "~2.0.0",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "finalhandler": "~1.3.1",
- "fresh": "~0.5.2",
- "http-errors": "~2.0.0",
- "merge-descriptors": "1.0.3",
- "methods": "~1.1.2",
- "on-finished": "~2.4.1",
- "parseurl": "~1.3.3",
- "path-to-regexp": "~0.1.12",
- "proxy-addr": "~2.0.7",
- "qs": "~6.14.0",
- "range-parser": "~1.2.1",
- "safe-buffer": "5.2.1",
- "send": "~0.19.0",
- "serve-static": "~1.16.2",
- "setprototypeof": "1.2.0",
- "statuses": "~2.0.1",
- "type-is": "~1.6.18",
- "utils-merge": "1.0.1",
- "vary": "~1.1.2"
- },
- "engines": {
- "node": ">= 0.10.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/express"
- }
- },
- "node_modules/fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/fast-safe-stringify": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
- "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/fb-watchman": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
- "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "bser": "2.1.1"
- }
- },
- "node_modules/fecha": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz",
- "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==",
- "license": "MIT"
- },
- "node_modules/fill-range": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
- "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/finalhandler": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz",
- "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==",
- "license": "MIT",
- "dependencies": {
- "debug": "2.6.9",
- "encodeurl": "~2.0.0",
- "escape-html": "~1.0.3",
- "on-finished": "~2.4.1",
- "parseurl": "~1.3.3",
- "statuses": "~2.0.2",
- "unpipe": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/fn.name": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz",
- "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==",
- "license": "MIT"
- },
- "node_modules/form-data": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz",
- "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "es-set-tostringtag": "^2.1.0",
- "hasown": "^2.0.2",
- "mime-types": "^2.1.12"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/formidable": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.5.tgz",
- "integrity": "sha512-Oz5Hwvwak/DCaXVVUtPn4oLMLLy1CdclLKO1LFgU7XzDpVMUU5UjlSLpGMocyQNNk8F6IJW9M/YdooSn2MRI+Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@paralleldrive/cuid2": "^2.2.2",
- "dezalgo": "^1.0.4",
- "once": "^1.4.0",
- "qs": "^6.11.0"
- },
- "funding": {
- "url": "https://ko-fi.com/tunnckoCore/commissions"
- }
- },
- "node_modules/forwarded": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
- "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/fresh": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/function-bind": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/generic-pool": {
- "version": "3.9.0",
- "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.9.0.tgz",
- "integrity": "sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==",
- "license": "MIT",
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/gensync": {
- "version": "1.0.0-beta.2",
- "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
- "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/get-intrinsic": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
- "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.2",
- "es-define-property": "^1.0.1",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.1.1",
- "function-bind": "^1.1.2",
- "get-proto": "^1.0.1",
- "gopd": "^1.2.0",
- "has-symbols": "^1.1.0",
- "hasown": "^2.0.2",
- "math-intrinsics": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-package-type": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
- "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/get-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
- "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
- "license": "MIT",
- "dependencies": {
- "dunder-proto": "^1.0.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/get-stream": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
- "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/gopd": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
- "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/graceful-fs": {
- "version": "4.2.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
- "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/has-symbols": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
- "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-tostringtag": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
- "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-symbols": "^1.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/hasown": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
- "license": "MIT",
- "dependencies": {
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/helmet": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/helmet/-/helmet-7.2.0.tgz",
- "integrity": "sha512-ZRiwvN089JfMXokizgqEPXsl2Guk094yExfoDXR0cBYWxtBbaSww/w+vT4WEJsBW2iTUi1GgZ6swmoug3Oy4Xw==",
- "license": "MIT",
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/html-escaper": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
- "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/http-errors": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
- "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
- "license": "MIT",
- "dependencies": {
- "depd": "~2.0.0",
- "inherits": "~2.0.4",
- "setprototypeof": "~1.2.0",
- "statuses": "~2.0.2",
- "toidentifier": "~1.0.1"
- },
- "engines": {
- "node": ">= 0.8"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/express"
- }
- },
- "node_modules/human-signals": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
- "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=10.17.0"
- }
- },
- "node_modules/iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "license": "MIT",
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ignore-by-default": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
- "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/import-local": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz",
- "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "pkg-dir": "^4.2.0",
- "resolve-cwd": "^3.0.0"
- },
- "bin": {
- "import-local-fixture": "fixtures/cli.js"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.8.19"
- }
- },
- "node_modules/inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "license": "ISC"
- },
- "node_modules/ipaddr.js": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
- "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "binary-extensions": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-core-module": {
- "version": "2.16.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
- "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-generator-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
- "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "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/is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/istanbul-lib-coverage": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
- "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/istanbul-lib-instrument": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz",
- "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@babel/core": "^7.23.9",
- "@babel/parser": "^7.23.9",
- "@istanbuljs/schema": "^0.1.3",
- "istanbul-lib-coverage": "^3.2.0",
- "semver": "^7.5.4"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/istanbul-lib-instrument/node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/istanbul-lib-report": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
- "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "istanbul-lib-coverage": "^3.0.0",
- "make-dir": "^4.0.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/istanbul-lib-source-maps": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
- "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "debug": "^4.1.1",
- "istanbul-lib-coverage": "^3.0.0",
- "source-map": "^0.6.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/istanbul-lib-source-maps/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/istanbul-lib-source-maps/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/istanbul-reports": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz",
- "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "html-escaper": "^2.0.0",
- "istanbul-lib-report": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz",
- "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/core": "^29.7.0",
- "@jest/types": "^29.6.3",
- "import-local": "^3.0.2",
- "jest-cli": "^29.7.0"
- },
- "bin": {
- "jest": "bin/jest.js"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "peerDependencies": {
- "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
- },
- "peerDependenciesMeta": {
- "node-notifier": {
- "optional": true
- }
- }
- },
- "node_modules/jest-changed-files": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz",
- "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "execa": "^5.0.0",
- "jest-util": "^29.7.0",
- "p-limit": "^3.1.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-circus": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz",
- "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/environment": "^29.7.0",
- "@jest/expect": "^29.7.0",
- "@jest/test-result": "^29.7.0",
- "@jest/types": "^29.6.3",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "co": "^4.6.0",
- "dedent": "^1.0.0",
- "is-generator-fn": "^2.0.0",
- "jest-each": "^29.7.0",
- "jest-matcher-utils": "^29.7.0",
- "jest-message-util": "^29.7.0",
- "jest-runtime": "^29.7.0",
- "jest-snapshot": "^29.7.0",
- "jest-util": "^29.7.0",
- "p-limit": "^3.1.0",
- "pretty-format": "^29.7.0",
- "pure-rand": "^6.0.0",
- "slash": "^3.0.0",
- "stack-utils": "^2.0.3"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-cli": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz",
- "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/core": "^29.7.0",
- "@jest/test-result": "^29.7.0",
- "@jest/types": "^29.6.3",
- "chalk": "^4.0.0",
- "create-jest": "^29.7.0",
- "exit": "^0.1.2",
- "import-local": "^3.0.2",
- "jest-config": "^29.7.0",
- "jest-util": "^29.7.0",
- "jest-validate": "^29.7.0",
- "yargs": "^17.3.1"
- },
- "bin": {
- "jest": "bin/jest.js"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "peerDependencies": {
- "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
- },
- "peerDependenciesMeta": {
- "node-notifier": {
- "optional": true
- }
- }
- },
- "node_modules/jest-config": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz",
- "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/core": "^7.11.6",
- "@jest/test-sequencer": "^29.7.0",
- "@jest/types": "^29.6.3",
- "babel-jest": "^29.7.0",
- "chalk": "^4.0.0",
- "ci-info": "^3.2.0",
- "deepmerge": "^4.2.2",
- "glob": "^7.1.3",
- "graceful-fs": "^4.2.9",
- "jest-circus": "^29.7.0",
- "jest-environment-node": "^29.7.0",
- "jest-get-type": "^29.6.3",
- "jest-regex-util": "^29.6.3",
- "jest-resolve": "^29.7.0",
- "jest-runner": "^29.7.0",
- "jest-util": "^29.7.0",
- "jest-validate": "^29.7.0",
- "micromatch": "^4.0.4",
- "parse-json": "^5.2.0",
- "pretty-format": "^29.7.0",
- "slash": "^3.0.0",
- "strip-json-comments": "^3.1.1"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "peerDependencies": {
- "@types/node": "*",
- "ts-node": ">=9.0.0"
- },
- "peerDependenciesMeta": {
- "@types/node": {
- "optional": true
- },
- "ts-node": {
- "optional": true
- }
- }
- },
- "node_modules/jest-diff": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz",
- "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "chalk": "^4.0.0",
- "diff-sequences": "^29.6.3",
- "jest-get-type": "^29.6.3",
- "pretty-format": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-docblock": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz",
- "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "detect-newline": "^3.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-each": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz",
- "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/types": "^29.6.3",
- "chalk": "^4.0.0",
- "jest-get-type": "^29.6.3",
- "jest-util": "^29.7.0",
- "pretty-format": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-environment-node": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz",
- "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/environment": "^29.7.0",
- "@jest/fake-timers": "^29.7.0",
- "@jest/types": "^29.6.3",
- "@types/node": "*",
- "jest-mock": "^29.7.0",
- "jest-util": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-get-type": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
- "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-haste-map": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz",
- "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/types": "^29.6.3",
- "@types/graceful-fs": "^4.1.3",
- "@types/node": "*",
- "anymatch": "^3.0.3",
- "fb-watchman": "^2.0.0",
- "graceful-fs": "^4.2.9",
- "jest-regex-util": "^29.6.3",
- "jest-util": "^29.7.0",
- "jest-worker": "^29.7.0",
- "micromatch": "^4.0.4",
- "walker": "^1.0.8"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "optionalDependencies": {
- "fsevents": "^2.3.2"
- }
- },
- "node_modules/jest-leak-detector": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz",
- "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "jest-get-type": "^29.6.3",
- "pretty-format": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-matcher-utils": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz",
- "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "chalk": "^4.0.0",
- "jest-diff": "^29.7.0",
- "jest-get-type": "^29.6.3",
- "pretty-format": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-message-util": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz",
- "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.12.13",
- "@jest/types": "^29.6.3",
- "@types/stack-utils": "^2.0.0",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.9",
- "micromatch": "^4.0.4",
- "pretty-format": "^29.7.0",
- "slash": "^3.0.0",
- "stack-utils": "^2.0.3"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-mock": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz",
- "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/types": "^29.6.3",
- "@types/node": "*",
- "jest-util": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-pnp-resolver": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
- "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- },
- "peerDependencies": {
- "jest-resolve": "*"
- },
- "peerDependenciesMeta": {
- "jest-resolve": {
- "optional": true
- }
- }
- },
- "node_modules/jest-regex-util": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz",
- "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-resolve": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz",
- "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.7.0",
- "jest-pnp-resolver": "^1.2.2",
- "jest-util": "^29.7.0",
- "jest-validate": "^29.7.0",
- "resolve": "^1.20.0",
- "resolve.exports": "^2.0.0",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-resolve-dependencies": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz",
- "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "jest-regex-util": "^29.6.3",
- "jest-snapshot": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-runner": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz",
- "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/console": "^29.7.0",
- "@jest/environment": "^29.7.0",
- "@jest/test-result": "^29.7.0",
- "@jest/transform": "^29.7.0",
- "@jest/types": "^29.6.3",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "emittery": "^0.13.1",
- "graceful-fs": "^4.2.9",
- "jest-docblock": "^29.7.0",
- "jest-environment-node": "^29.7.0",
- "jest-haste-map": "^29.7.0",
- "jest-leak-detector": "^29.7.0",
- "jest-message-util": "^29.7.0",
- "jest-resolve": "^29.7.0",
- "jest-runtime": "^29.7.0",
- "jest-util": "^29.7.0",
- "jest-watcher": "^29.7.0",
- "jest-worker": "^29.7.0",
- "p-limit": "^3.1.0",
- "source-map-support": "0.5.13"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-runtime": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz",
- "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/environment": "^29.7.0",
- "@jest/fake-timers": "^29.7.0",
- "@jest/globals": "^29.7.0",
- "@jest/source-map": "^29.6.3",
- "@jest/test-result": "^29.7.0",
- "@jest/transform": "^29.7.0",
- "@jest/types": "^29.6.3",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "cjs-module-lexer": "^1.0.0",
- "collect-v8-coverage": "^1.0.0",
- "glob": "^7.1.3",
- "graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.7.0",
- "jest-message-util": "^29.7.0",
- "jest-mock": "^29.7.0",
- "jest-regex-util": "^29.6.3",
- "jest-resolve": "^29.7.0",
- "jest-snapshot": "^29.7.0",
- "jest-util": "^29.7.0",
- "slash": "^3.0.0",
- "strip-bom": "^4.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-snapshot": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz",
- "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/core": "^7.11.6",
- "@babel/generator": "^7.7.2",
- "@babel/plugin-syntax-jsx": "^7.7.2",
- "@babel/plugin-syntax-typescript": "^7.7.2",
- "@babel/types": "^7.3.3",
- "@jest/expect-utils": "^29.7.0",
- "@jest/transform": "^29.7.0",
- "@jest/types": "^29.6.3",
- "babel-preset-current-node-syntax": "^1.0.0",
- "chalk": "^4.0.0",
- "expect": "^29.7.0",
- "graceful-fs": "^4.2.9",
- "jest-diff": "^29.7.0",
- "jest-get-type": "^29.6.3",
- "jest-matcher-utils": "^29.7.0",
- "jest-message-util": "^29.7.0",
- "jest-util": "^29.7.0",
- "natural-compare": "^1.4.0",
- "pretty-format": "^29.7.0",
- "semver": "^7.5.3"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-snapshot/node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/jest-util": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
- "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/types": "^29.6.3",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "ci-info": "^3.2.0",
- "graceful-fs": "^4.2.9",
- "picomatch": "^2.2.3"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-validate": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
- "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/types": "^29.6.3",
- "camelcase": "^6.2.0",
- "chalk": "^4.0.0",
- "jest-get-type": "^29.6.3",
- "leven": "^3.1.0",
- "pretty-format": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-validate/node_modules/camelcase": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/jest-watcher": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz",
- "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/test-result": "^29.7.0",
- "@jest/types": "^29.6.3",
- "@types/node": "*",
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.0.0",
- "emittery": "^0.13.1",
- "jest-util": "^29.7.0",
- "string-length": "^4.0.1"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-worker": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
- "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/node": "*",
- "jest-util": "^29.7.0",
- "merge-stream": "^2.0.0",
- "supports-color": "^8.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-worker/node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
- "node_modules/joi": {
- "version": "17.13.3",
- "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz",
- "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "@hapi/hoek": "^9.3.0",
- "@hapi/topo": "^5.1.0",
- "@sideway/address": "^4.1.5",
- "@sideway/formula": "^3.0.1",
- "@sideway/pinpoint": "^2.0.0"
- }
- },
- "node_modules/js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/js-yaml": {
- "version": "3.14.2",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz",
- "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/jsesc": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
- "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "jsesc": "bin/jsesc"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/json-parse-even-better-errors": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
- "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/json5": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
- "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "json5": "lib/cli.js"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/jsonwebtoken": {
- "version": "9.0.3",
- "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz",
- "integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==",
- "license": "MIT",
- "dependencies": {
- "jws": "^4.0.1",
- "lodash.includes": "^4.3.0",
- "lodash.isboolean": "^3.0.3",
- "lodash.isinteger": "^4.0.4",
- "lodash.isnumber": "^3.0.3",
- "lodash.isplainobject": "^4.0.6",
- "lodash.isstring": "^4.0.1",
- "lodash.once": "^4.0.0",
- "ms": "^2.1.1",
- "semver": "^7.5.4"
- },
- "engines": {
- "node": ">=12",
- "npm": ">=6"
- }
- },
- "node_modules/jsonwebtoken/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "license": "MIT"
- },
- "node_modules/jsonwebtoken/node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/jwa": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz",
- "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==",
- "license": "MIT",
- "dependencies": {
- "buffer-equal-constant-time": "^1.0.1",
- "ecdsa-sig-formatter": "1.0.11",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/jws": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz",
- "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==",
- "license": "MIT",
- "dependencies": {
- "jwa": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/kareem": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz",
- "integrity": "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==",
- "license": "Apache-2.0",
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/kleur": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
- "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/kuler": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz",
- "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==",
- "license": "MIT"
- },
- "node_modules/leven": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
- "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/lines-and-columns": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
- "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-locate": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/lodash.includes": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
- "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==",
- "license": "MIT"
- },
- "node_modules/lodash.isboolean": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
- "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==",
- "license": "MIT"
- },
- "node_modules/lodash.isinteger": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
- "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==",
- "license": "MIT"
- },
- "node_modules/lodash.isnumber": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
- "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==",
- "license": "MIT"
- },
- "node_modules/lodash.isplainobject": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
- "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
- "license": "MIT"
- },
- "node_modules/lodash.isstring": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
- "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==",
- "license": "MIT"
- },
- "node_modules/lodash.once": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
- "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==",
- "license": "MIT"
- },
- "node_modules/logform": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz",
- "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==",
- "license": "MIT",
- "dependencies": {
- "@colors/colors": "1.6.0",
- "@types/triple-beam": "^1.3.2",
- "fecha": "^4.2.0",
- "ms": "^2.1.1",
- "safe-stable-stringify": "^2.3.1",
- "triple-beam": "^1.3.0"
- },
- "engines": {
- "node": ">= 12.0.0"
- }
- },
- "node_modules/logform/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "license": "MIT"
- },
- "node_modules/lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "yallist": "^3.0.2"
- }
- },
- "node_modules/make-dir": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
- "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "semver": "^7.5.3"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/make-dir/node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/makeerror": {
- "version": "1.0.12",
- "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
- "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "tmpl": "1.0.5"
- }
- },
- "node_modules/math-intrinsics": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
- "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/media-typer": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
- "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/memory-pager": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
- "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==",
- "license": "MIT"
- },
- "node_modules/merge-descriptors": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
- "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/merge-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/methods": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
- "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/micromatch": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
- "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "braces": "^3.0.3",
- "picomatch": "^2.3.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
- "license": "MIT",
- "bin": {
- "mime": "cli.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/mime-db": {
- "version": "1.54.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
- "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mime-types": {
- "version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "license": "MIT",
- "dependencies": {
- "mime-db": "1.52.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mime-types/node_modules/mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/mongodb": {
- "version": "6.20.0",
- "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.20.0.tgz",
- "integrity": "sha512-Tl6MEIU3K4Rq3TSHd+sZQqRBoGlFsOgNrH5ltAcFBV62Re3Fd+FcaVf8uSEQFOJ51SDowDVttBTONMfoYWrWlQ==",
- "license": "Apache-2.0",
- "dependencies": {
- "@mongodb-js/saslprep": "^1.3.0",
- "bson": "^6.10.4",
- "mongodb-connection-string-url": "^3.0.2"
- },
- "engines": {
- "node": ">=16.20.1"
- },
- "peerDependencies": {
- "@aws-sdk/credential-providers": "^3.188.0",
- "@mongodb-js/zstd": "^1.1.0 || ^2.0.0",
- "gcp-metadata": "^5.2.0",
- "kerberos": "^2.0.1",
- "mongodb-client-encryption": ">=6.0.0 <7",
- "snappy": "^7.3.2",
- "socks": "^2.7.1"
- },
- "peerDependenciesMeta": {
- "@aws-sdk/credential-providers": {
- "optional": true
- },
- "@mongodb-js/zstd": {
- "optional": true
- },
- "gcp-metadata": {
- "optional": true
- },
- "kerberos": {
- "optional": true
- },
- "mongodb-client-encryption": {
- "optional": true
- },
- "snappy": {
- "optional": true
- },
- "socks": {
- "optional": true
- }
- }
- },
- "node_modules/mongodb-connection-string-url": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.2.tgz",
- "integrity": "sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA==",
- "license": "Apache-2.0",
- "dependencies": {
- "@types/whatwg-url": "^11.0.2",
- "whatwg-url": "^14.1.0 || ^13.0.0"
- }
- },
- "node_modules/mongoose": {
- "version": "8.20.4",
- "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.20.4.tgz",
- "integrity": "sha512-o4ABeT3IEk1Z4dGt3XjHJ0x9OjyWvakC1+btPpzWqCovqyidKGdbB05/g87cdh7AuWXFQKHOxt+L/OZOBps4hw==",
- "license": "MIT",
- "dependencies": {
- "bson": "^6.10.4",
- "kareem": "2.6.3",
- "mongodb": "~6.20.0",
- "mpath": "0.9.0",
- "mquery": "5.0.0",
- "ms": "2.1.3",
- "sift": "17.1.3"
- },
- "engines": {
- "node": ">=16.20.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/mongoose"
- }
- },
- "node_modules/mongoose/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "license": "MIT"
- },
- "node_modules/mpath": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz",
- "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==",
- "license": "MIT",
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/mquery": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz",
- "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==",
- "license": "MIT",
- "dependencies": {
- "debug": "4.x"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/mquery/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/mquery/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "license": "MIT"
- },
- "node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "license": "MIT"
- },
- "node_modules/natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/negotiator": {
- "version": "0.6.4",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz",
- "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/node-int64": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
- "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/node-releases": {
- "version": "2.0.27",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz",
- "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/nodemon": {
- "version": "3.1.11",
- "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.11.tgz",
- "integrity": "sha512-is96t8F/1//UHAjNPHpbsNY46ELPpftGUoSVNXwUfMk/qdjSylYrWSu1XavVTBOn526kFiOR733ATgNBCQyH0g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "chokidar": "^3.5.2",
- "debug": "^4",
- "ignore-by-default": "^1.0.1",
- "minimatch": "^3.1.2",
- "pstree.remy": "^1.1.8",
- "semver": "^7.5.3",
- "simple-update-notifier": "^2.0.0",
- "supports-color": "^5.5.0",
- "touch": "^3.1.0",
- "undefsafe": "^2.0.5"
- },
- "bin": {
- "nodemon": "bin/nodemon.js"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/nodemon"
- }
- },
- "node_modules/nodemon/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/nodemon/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/nodemon/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/nodemon/node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/nodemon/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm-run-path": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
- "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "path-key": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-inspect": {
- "version": "1.13.4",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
- "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/on-finished": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
- "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
- "license": "MIT",
- "dependencies": {
- "ee-first": "1.1.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/on-headers": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz",
- "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/one-time": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz",
- "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==",
- "license": "MIT",
- "dependencies": {
- "fn.name": "1.x.x"
- }
- },
- "node_modules/onetime": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "mimic-fn": "^2.1.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/p-locate/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/parse-json": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
- "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/parseurl": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
- "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/path-to-regexp": {
- "version": "0.1.12",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
- "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==",
- "license": "MIT"
- },
- "node_modules/picocolors": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/pirates": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
- "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "find-up": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pretty-format": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
- "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/schemas": "^29.6.3",
- "ansi-styles": "^5.0.0",
- "react-is": "^18.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/pretty-format/node_modules/ansi-styles": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
- "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/prompts": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
- "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "kleur": "^3.0.3",
- "sisteransi": "^1.0.5"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/proxy-addr": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
- "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
- "license": "MIT",
- "dependencies": {
- "forwarded": "0.2.0",
- "ipaddr.js": "1.9.1"
- },
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/pstree.remy": {
- "version": "1.1.8",
- "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
- "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/punycode": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
- "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/pure-rand": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz",
- "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://github.com/sponsors/dubzzz"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/fast-check"
- }
- ],
- "license": "MIT"
- },
- "node_modules/qs": {
- "version": "6.14.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz",
- "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "side-channel": "^1.1.0"
- },
- "engines": {
- "node": ">=0.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/range-parser": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
- "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/rate-limiter-flexible": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/rate-limiter-flexible/-/rate-limiter-flexible-2.4.2.tgz",
- "integrity": "sha512-rMATGGOdO1suFyf/mI5LYhts71g1sbdhmd6YvdiXO2gJnd42Tt6QS4JUKJKSWVVkMtBacm6l40FR7Trjo6Iruw==",
- "license": "ISC"
- },
- "node_modules/raw-body": {
- "version": "2.5.3",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz",
- "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==",
- "license": "MIT",
- "dependencies": {
- "bytes": "~3.1.2",
- "http-errors": "~2.0.1",
- "iconv-lite": "~0.4.24",
- "unpipe": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/react-is": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
- "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "license": "MIT",
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "picomatch": "^2.2.1"
- },
- "engines": {
- "node": ">=8.10.0"
- }
- },
- "node_modules/redis": {
- "version": "4.7.1",
- "resolved": "https://registry.npmjs.org/redis/-/redis-4.7.1.tgz",
- "integrity": "sha512-S1bJDnqLftzHXHP8JsT5II/CtHWQrASX5K96REjWjlmWKrviSOLWmM7QnRLstAWsu1VBBV1ffV6DzCvxNP0UJQ==",
- "license": "MIT",
- "workspaces": [
- "./packages/*"
- ],
- "dependencies": {
- "@redis/bloom": "1.2.0",
- "@redis/client": "1.6.1",
- "@redis/graph": "1.1.1",
- "@redis/json": "1.0.7",
- "@redis/search": "1.2.0",
- "@redis/time-series": "1.1.0"
- }
- },
- "node_modules/require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/resolve": {
- "version": "1.22.11",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz",
- "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-core-module": "^2.16.1",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/resolve-cwd": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
- "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "resolve-from": "^5.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/resolve-from": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/resolve.exports": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz",
- "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
- "node_modules/safe-stable-stringify": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz",
- "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==",
- "license": "MIT",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "license": "MIT"
- },
- "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/send": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz",
- "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==",
- "license": "MIT",
- "dependencies": {
- "debug": "2.6.9",
- "depd": "2.0.0",
- "destroy": "1.2.0",
- "encodeurl": "~2.0.0",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "fresh": "~0.5.2",
- "http-errors": "~2.0.1",
- "mime": "1.6.0",
- "ms": "2.1.3",
- "on-finished": "~2.4.1",
- "range-parser": "~1.2.1",
- "statuses": "~2.0.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/send/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "license": "MIT"
- },
- "node_modules/serve-static": {
- "version": "1.16.3",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz",
- "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==",
- "license": "MIT",
- "dependencies": {
- "encodeurl": "~2.0.0",
- "escape-html": "~1.0.3",
- "parseurl": "~1.3.3",
- "send": "~0.19.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/setprototypeof": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
- "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
- "license": "ISC"
- },
- "node_modules/shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "shebang-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/side-channel": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
- "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "object-inspect": "^1.13.3",
- "side-channel-list": "^1.0.0",
- "side-channel-map": "^1.0.1",
- "side-channel-weakmap": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel-list": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
- "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "object-inspect": "^1.13.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel-map": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
- "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.5",
- "object-inspect": "^1.13.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel-weakmap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
- "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.5",
- "object-inspect": "^1.13.3",
- "side-channel-map": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/sift": {
- "version": "17.1.3",
- "resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz",
- "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==",
- "license": "MIT"
- },
- "node_modules/signal-exit": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/simple-update-notifier": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz",
- "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "semver": "^7.5.3"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/simple-update-notifier/node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/sisteransi": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
- "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/socket.io": {
- "version": "4.8.1",
- "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz",
- "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==",
- "license": "MIT",
- "dependencies": {
- "accepts": "~1.3.4",
- "base64id": "~2.0.0",
- "cors": "~2.8.5",
- "debug": "~4.3.2",
- "engine.io": "~6.6.0",
- "socket.io-adapter": "~2.5.2",
- "socket.io-parser": "~4.2.4"
- },
- "engines": {
- "node": ">=10.2.0"
- }
- },
- "node_modules/socket.io-adapter": {
- "version": "2.5.5",
- "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz",
- "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==",
- "license": "MIT",
- "dependencies": {
- "debug": "~4.3.4",
- "ws": "~8.17.1"
- }
- },
- "node_modules/socket.io-adapter/node_modules/debug": {
- "version": "4.3.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
- "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/socket.io-adapter/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "license": "MIT"
- },
- "node_modules/socket.io-parser": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz",
- "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==",
- "license": "MIT",
- "dependencies": {
- "@socket.io/component-emitter": "~3.1.0",
- "debug": "~4.3.1"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/socket.io-parser/node_modules/debug": {
- "version": "4.3.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
- "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/socket.io-parser/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "license": "MIT"
- },
- "node_modules/socket.io/node_modules/debug": {
- "version": "4.3.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
- "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/socket.io/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "license": "MIT"
- },
- "node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/source-map-support": {
- "version": "0.5.13",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
- "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "node_modules/sparse-bitfield": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
- "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==",
- "license": "MIT",
- "dependencies": {
- "memory-pager": "^1.0.2"
- }
- },
- "node_modules/sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
- "dev": true,
- "license": "BSD-3-Clause"
- },
- "node_modules/stack-trace": {
- "version": "0.0.10",
- "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
- "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==",
- "license": "MIT",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/stack-utils": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
- "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "escape-string-regexp": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/statuses": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
- "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "~5.2.0"
- }
- },
- "node_modules/string-length": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
- "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "char-regex": "^1.0.2",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-bom": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
- "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-final-newline": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
- "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/superagent": {
- "version": "8.1.2",
- "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz",
- "integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==",
- "deprecated": "Please upgrade to superagent v10.2.2+, see release notes at https://github.com/forwardemail/superagent/releases/tag/v10.2.2 - maintenance is supported by Forward Email @ https://forwardemail.net",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "component-emitter": "^1.3.0",
- "cookiejar": "^2.1.4",
- "debug": "^4.3.4",
- "fast-safe-stringify": "^2.1.1",
- "form-data": "^4.0.0",
- "formidable": "^2.1.2",
- "methods": "^1.1.2",
- "mime": "2.6.0",
- "qs": "^6.11.0",
- "semver": "^7.3.8"
- },
- "engines": {
- "node": ">=6.4.0 <13 || >=14"
- }
- },
- "node_modules/superagent/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/superagent/node_modules/mime": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
- "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "mime": "cli.js"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/superagent/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/superagent/node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/supertest": {
- "version": "6.3.4",
- "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz",
- "integrity": "sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==",
- "deprecated": "Please upgrade to supertest v7.1.3+, see release notes at https://github.com/forwardemail/supertest/releases/tag/v7.1.3 - maintenance is supported by Forward Email @ https://forwardemail.net",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "methods": "^1.1.2",
- "superagent": "^8.1.2"
- },
- "engines": {
- "node": ">=6.4.0"
- }
- },
- "node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/test-exclude": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
- "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "@istanbuljs/schema": "^0.1.2",
- "glob": "^7.1.4",
- "minimatch": "^3.0.4"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/text-hex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz",
- "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==",
- "license": "MIT"
- },
- "node_modules/tmpl": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
- "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
- "dev": true,
- "license": "BSD-3-Clause"
- },
- "node_modules/to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/toidentifier": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
- "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
- "license": "MIT",
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/touch": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz",
- "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "nodetouch": "bin/nodetouch.js"
- }
- },
- "node_modules/tr46": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz",
- "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==",
- "license": "MIT",
- "dependencies": {
- "punycode": "^2.3.1"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/triple-beam": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz",
- "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==",
- "license": "MIT",
- "engines": {
- "node": ">= 14.0.0"
- }
- },
- "node_modules/type-detect": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
- "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/type-fest": {
- "version": "0.21.3",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
- "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
- "dev": true,
- "license": "(MIT OR CC0-1.0)",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/type-is": {
- "version": "1.6.18",
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
- "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
- "license": "MIT",
- "dependencies": {
- "media-typer": "0.3.0",
- "mime-types": "~2.1.24"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/undefsafe": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz",
- "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/undici-types": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
- "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
- "license": "MIT"
- },
- "node_modules/unpipe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/update-browserslist-db": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
- "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "escalade": "^3.2.0",
- "picocolors": "^1.1.1"
- },
- "bin": {
- "update-browserslist-db": "cli.js"
- },
- "peerDependencies": {
- "browserslist": ">= 4.21.0"
- }
- },
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
- "license": "MIT"
- },
- "node_modules/utils-merge": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
- "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/v8-to-istanbul": {
- "version": "9.3.0",
- "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz",
- "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "@jridgewell/trace-mapping": "^0.3.12",
- "@types/istanbul-lib-coverage": "^2.0.1",
- "convert-source-map": "^2.0.0"
- },
- "engines": {
- "node": ">=10.12.0"
- }
- },
- "node_modules/vary": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/walker": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
- "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "makeerror": "1.0.12"
- }
- },
- "node_modules/webidl-conversions": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
- "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/whatwg-url": {
- "version": "14.2.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz",
- "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==",
- "license": "MIT",
- "dependencies": {
- "tr46": "^5.1.0",
- "webidl-conversions": "^7.0.0"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/winston": {
- "version": "3.19.0",
- "resolved": "https://registry.npmjs.org/winston/-/winston-3.19.0.tgz",
- "integrity": "sha512-LZNJgPzfKR+/J3cHkxcpHKpKKvGfDZVPS4hfJCc4cCG0CgYzvlD6yE/S3CIL/Yt91ak327YCpiF/0MyeZHEHKA==",
- "license": "MIT",
- "dependencies": {
- "@colors/colors": "^1.6.0",
- "@dabh/diagnostics": "^2.0.8",
- "async": "^3.2.3",
- "is-stream": "^2.0.0",
- "logform": "^2.7.0",
- "one-time": "^1.0.0",
- "readable-stream": "^3.4.0",
- "safe-stable-stringify": "^2.3.1",
- "stack-trace": "0.0.x",
- "triple-beam": "^1.3.0",
- "winston-transport": "^4.9.0"
- },
- "engines": {
- "node": ">= 12.0.0"
- }
- },
- "node_modules/winston-transport": {
- "version": "4.9.0",
- "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz",
- "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==",
- "license": "MIT",
- "dependencies": {
- "logform": "^2.7.0",
- "readable-stream": "^3.6.2",
- "triple-beam": "^1.3.0"
- },
- "engines": {
- "node": ">= 12.0.0"
- }
- },
- "node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/write-file-atomic": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz",
- "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "imurmurhash": "^0.1.4",
- "signal-exit": "^3.0.7"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/ws": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
- "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
- "license": "MIT",
- "engines": {
- "node": ">=10.0.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": ">=5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
- }
- },
- "node_modules/y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/yargs": {
- "version": "17.7.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
- "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cliui": "^8.0.1",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.3",
- "y18n": "^5.0.5",
- "yargs-parser": "^21.1.1"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/yargs-parser": {
- "version": "21.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
- "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- }
- }
-}
diff --git a/API/package.json b/API/package.json
index 8d5c3c5..68159f2 100644
--- a/API/package.json
+++ b/API/package.json
@@ -1,39 +1,23 @@
{
- "name": "galaxystrikeonline-server",
+ "name": "api",
"version": "1.0.0",
- "description": "Galaxy Strike Online - Server Backend",
- "license": "MIT",
- "author": "Korvarix Studios",
- "type": "commonjs",
- "main": "server.js",
+ "description": "",
+ "main": "index.js",
"scripts": {
- "start": "node server.js",
- "dev": "nodemon server.js",
- "debug": "node --inspect server.js",
- "test": "jest",
- "migrate": "node scripts/migrate.js",
- "seed": "node scripts/seed.js"
+ "test": "echo \"Error: no test specified\" && exit 1",
+ "start": "node ./src/index.js"
},
- "keywords": ["game", "server", "mmorpg", "api", "websocket"],
+ "keywords": [],
+ "author": "",
+ "license": "ISC",
+ "type": "commonjs",
"dependencies": {
- "express": "^4.18.2",
- "cors": "^2.8.5",
- "helmet": "^7.1.0",
- "dotenv": "^16.3.1",
- "bcryptjs": "^2.4.3",
- "jsonwebtoken": "^9.0.2",
- "mongoose": "^8.0.3",
- "winston": "^3.11.0",
- "joi": "^17.11.0",
- "rate-limiter-flexible": "^2.4.2",
- "compression": "^1.7.4"
- },
- "devDependencies": {
- "nodemon": "^3.0.2",
- "jest": "^29.7.0",
- "supertest": "^6.3.3"
- },
- "engines": {
- "node": ">=18.0.0"
+ "bcryptjs": "^3.0.3",
+ "cors": "^2.8.6",
+ "dotenv": "^17.3.1",
+ "express": "^5.2.1",
+ "jsonwebtoken": "^9.0.3",
+ "mongoose": "^9.3.0",
+ "socket.io": "^4.8.3"
}
-}
\ No newline at end of file
+}
diff --git a/API/routes/auth.js b/API/routes/auth.js
deleted file mode 100644
index 1cc0372..0000000
--- a/API/routes/auth.js
+++ /dev/null
@@ -1,214 +0,0 @@
-const express = require('express');
-const bcrypt = require('bcryptjs');
-const jwt = require('jsonwebtoken');
-const Joi = require('joi');
-const { RateLimiterMemory } = require('rate-limiter-flexible');
-const Player = require('../models/Player');
-const logger = require('../utils/logger');
-
-const router = express.Router();
-
-// Rate limiting for auth routes
-const authLimiter = new RateLimiterMemory({
- keyGenerator: (req) => req.ip,
- points: 5, // Number of requests
- duration: 900, // Per 15 minutes (900 seconds)
- blockDuration: 900, // Block for 15 minutes
- message: 'Too many authentication attempts, please try again later.'
-});
-
-// Validation schemas
-const registerSchema = Joi.object({
- username: Joi.string().min(3).max(30).required(),
- email: Joi.string().email().required(),
- password: Joi.string().min(6).required()
-});
-
-const loginSchema = Joi.object({
- email: Joi.string().email().required(),
- password: Joi.string().required()
-});
-
-// Register route
-router.post('/register', async (req, res) => {
- try {
- // Rate limiting check
- const resLimiter = await authLimiter.consume(req.ip);
- if (!resLimiter.remainingPoints) {
- return res.status(429).json({ error: 'Too many authentication attempts, please try again later.' });
- }
-
- const { error } = registerSchema.validate(req.body);
- if (error) {
- return res.status(400).json({ error: error.details[0].message });
- }
-
- const { username, email, password } = req.body;
-
- // Check if user already exists
- const existingUser = await Player.findOne({
- $or: [{ email }, { username }]
- });
-
- if (existingUser) {
- return res.status(400).json({
- error: 'User with this email or username already exists'
- });
- }
-
- // Hash password
- const salt = await bcrypt.genSalt(10);
- const hashedPassword = await bcrypt.hash(password, salt);
-
- // Create new player
- const player = new Player({
- userId: `user_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,
- username,
- email,
- password: hashedPassword,
- createdAt: new Date(),
- lastLogin: new Date()
- });
-
- await player.save();
-
- // Create JWT token
- const token = jwt.sign(
- { userId: player.userId, email: player.email },
- process.env.JWT_SECRET || 'fallback_secret',
- { expiresIn: '24h' }
- );
-
- logger.info(`New user registered: ${email}`);
-
- res.status(201).json({
- message: 'User registered successfully',
- token,
- user: {
- userId: player.userId,
- username: player.username,
- email: player.email,
- stats: player.stats
- }
- });
-
- } catch (error) {
- logger.error('Registration error:', error);
- res.status(500).json({ error: 'Internal server error' });
- }
-});
-
-// Login route
-router.post('/login', async (req, res) => {
- try {
- // Rate limiting check
- const resLimiter = await authLimiter.consume(req.ip);
- if (!resLimiter.remainingPoints) {
- return res.status(429).json({ error: 'Too many authentication attempts, please try again later.' });
- }
-
- const { error } = loginSchema.validate(req.body);
- if (error) {
- return res.status(400).json({ error: error.details[0].message });
- }
-
- const { email, password } = req.body;
-
- // Find user
- const player = await Player.findOne({ email }).select('+password');
- if (!player) {
- return res.status(401).json({ error: 'Invalid credentials' });
- }
-
- // Check if password exists (for backward compatibility with existing users)
- if (!player.password) {
- logger.error('Player password field is missing for user:', email);
- return res.status(401).json({
- error: 'Account migration required. Please re-register your account.',
- requiresMigration: true
- });
- }
-
- // Check password
- const isPasswordValid = await bcrypt.compare(password, player.password);
- if (!isPasswordValid) {
- return res.status(401).json({ error: 'Invalid credentials' });
- }
-
- // Update last login
- player.stats.lastLogin = new Date();
- await player.save();
-
- // Create JWT token
- const token = jwt.sign(
- { userId: player.userId, email: player.email },
- process.env.JWT_SECRET || 'fallback_secret',
- { expiresIn: '24h' }
- );
-
- logger.info(`User logged in: ${email}`);
-
- res.json({
- message: 'Login successful',
- token,
- user: {
- userId: player.userId,
- username: player.username,
- email: player.email,
- stats: player.stats,
- info: player.info
- }
- });
-
- } catch (error) {
- logger.error('Login error:', error);
- res.status(500).json({ error: 'Internal server error' });
- }
-});
-
-// Verify token route
-router.get('/verify', async (req, res) => {
- try {
- const token = req.header('Authorization')?.replace('Bearer ', '');
-
- if (!token) {
- return res.status(401).json({ error: 'No token provided' });
- }
-
- const decoded = jwt.verify(token, process.env.JWT_SECRET || 'fallback_secret');
-
- const player = await Player.findOne({ userId: decoded.userId });
- if (!player) {
- return res.status(401).json({ error: 'Invalid token' });
- }
-
- res.json({
- valid: true,
- user: {
- userId: player.userId,
- username: player.username,
- email: player.email,
- stats: player.stats,
- info: player.info
- }
- });
-
- } catch (error) {
- logger.error('Token verification error:', error);
- res.status(401).json({ error: 'Invalid token' });
- }
-});
-
-// Logout route
-router.post('/logout', async (req, res) => {
- try {
- // In a real implementation, you might want to blacklist the token
- // For now, we'll just return success
- res.json({ message: 'Logout successful' });
- } catch (error) {
- logger.error('Logout error:', error);
- res.status(500).json({ error: 'Internal server error' });
- }
-});
-
-module.exports = router;
diff --git a/API/routes/payments.js b/API/routes/payments.js
deleted file mode 100644
index 32bba28..0000000
--- a/API/routes/payments.js
+++ /dev/null
@@ -1,173 +0,0 @@
-/**
- * routes/payments.js — GSO Premium Gem Store (GDD Phase 3 Monetisation)
- *
- * Endpoints:
- * POST /api/payments/create-checkout — create Stripe Checkout session
- * POST /api/payments/webhook — Stripe webhook (payment confirmation)
- * GET /api/payments/products — list purchasable gem packages
- *
- * Requires ENV vars:
- * STRIPE_SECRET_KEY — sk_live_... (or sk_test_... for development)
- * STRIPE_WEBHOOK_SECRET — whsec_... (from Stripe Dashboard → Webhooks)
- * CLIENT_URL — https://galaxystrike.online (for redirect URLs)
- *
- * Stripe is loaded lazily so the server starts even if the package isn't installed yet.
- * Run: npm install stripe in the API directory before going live.
- */
-
-const express = require('express');
-const router = express.Router();
-
-// ── Gem packages available for purchase ────────────────────────────────────────
-const GEM_PACKAGES = [
- { id: 'gems_80', gems: 80, priceUSD: 0.99, label: 'Starter Pack', bonus: 0, popular: false },
- { id: 'gems_200', gems: 200, priceUSD: 1.99, label: 'Pilot Pack', bonus: 0, popular: false },
- { id: 'gems_500', gems: 500, priceUSD: 4.99, label: 'Commander Pack', bonus: 50, popular: true },
- { id: 'gems_1200', gems: 1200, priceUSD: 9.99, label: 'Admiral Pack', bonus: 200,popular: false },
- { id: 'gems_2500', gems: 2500, priceUSD: 19.99, label: 'Fleet Admiral', bonus: 500,popular: false },
- { id: 'gems_6500', gems: 6500, priceUSD: 49.99, label: 'Grand Admiral', bonus: 1500,popular: false},
-];
-
-// ── Helper: load Stripe lazily ────────────────────────────────────────────────
-function getStripe() {
- if (!process.env.STRIPE_SECRET_KEY) throw new Error('STRIPE_SECRET_KEY not configured');
- // eslint-disable-next-line global-require
- return require('stripe')(process.env.STRIPE_SECRET_KEY);
-}
-
-// ── GET /api/payments/products ────────────────────────────────────────────────
-router.get('/products', (req, res) => {
- res.json({ packages: GEM_PACKAGES });
-});
-
-// ── POST /api/payments/create-checkout ────────────────────────────────────────
-// Body: { packageId, userId, username }
-router.post('/create-checkout', async (req, res) => {
- try {
- const { packageId, userId, username } = req.body;
- if (!packageId || !userId) return res.status(400).json({ error: 'packageId and userId required' });
-
- const pkg = GEM_PACKAGES.find(p => p.id === packageId);
- if (!pkg) return res.status(404).json({ error: 'Unknown package' });
-
- const stripe = getStripe();
- const totalGems = pkg.gems + pkg.bonus;
- const clientUrl = process.env.CLIENT_URL || 'http://localhost:3000';
-
- const session = await stripe.checkout.sessions.create({
- mode: 'payment',
- payment_method_types: ['card'],
- line_items: [{
- price_data: {
- currency: 'usd',
- unit_amount: Math.round(pkg.priceUSD * 100), // cents
- product_data: {
- name: `${pkg.label} — ${totalGems} 💎 Gems`,
- description: pkg.bonus > 0
- ? `${pkg.gems} gems + ${pkg.bonus} bonus gems (${totalGems} total)`
- : `${pkg.gems} Galaxy Strike Online gems`,
- metadata: { packageId: pkg.id },
- },
- },
- quantity: 1,
- }],
- client_reference_id: userId,
- customer_email: req.body.email || undefined,
- metadata: {
- userId,
- username: username || 'unknown',
- packageId: pkg.id,
- gems: String(totalGems),
- },
- success_url: `${clientUrl}/payment-success?session={CHECKOUT_SESSION_ID}`,
- cancel_url: `${clientUrl}/payment-cancel`,
- });
-
- res.json({ sessionId: session.id, url: session.url });
- } catch (err) {
- console.error('[PAYMENTS] create-checkout error:', err.message);
- res.status(500).json({ error: err.message });
- }
-});
-
-// ── POST /api/payments/webhook ────────────────────────────────────────────────
-// Stripe sends raw body — must use express.raw() middleware for this route.
-router.post('/webhook', express.raw({ type: 'application/json' }), async (req, res) => {
- const sig = req.headers['stripe-signature'];
- const secret = process.env.STRIPE_WEBHOOK_SECRET;
-
- if (!secret) {
- console.error('[PAYMENTS] STRIPE_WEBHOOK_SECRET not set — webhook rejected');
- return res.status(400).send('Webhook secret not configured');
- }
-
- let event;
- try {
- const stripe = getStripe();
- event = stripe.webhooks.constructEvent(req.body, sig, secret);
- } catch (err) {
- console.error('[PAYMENTS] Webhook signature verification failed:', err.message);
- return res.status(400).send(`Webhook Error: ${err.message}`);
- }
-
- if (event.type === 'checkout.session.completed') {
- const session = event.data.object;
- const { userId, username, packageId, gems } = session.metadata || {};
-
- if (!userId || !gems) {
- console.error('[PAYMENTS] Webhook missing metadata', session.metadata);
- return res.json({ received: true });
- }
-
- const gemCount = parseInt(gems, 10);
- const amountCents = session.amount_total || 0;
-
- console.log(`[PAYMENTS] ✅ Payment confirmed: ${username} (${userId}) — ${gemCount} gems — $${(amountCents/100).toFixed(2)}`);
-
- // Credit gems in the database directly
- try {
- const PlayerData = require('../models/PlayerData');
- const player = await PlayerData.findOne({ userId });
- if (player) {
- player.stats.gems = (player.stats.gems || 0) + gemCount;
- player.markModified('stats');
- await player.save();
- console.log(`[PAYMENTS] Credited ${gemCount} gems to ${username}. New balance: ${player.stats.gems}`);
- } else {
- console.warn(`[PAYMENTS] Player not found for userId: ${userId}`);
- }
- } catch (dbErr) {
- console.error('[PAYMENTS] DB credit error:', dbErr.message);
- // Return 200 to Stripe regardless — Stripe will retry on 5xx
- }
-
- // Attempt to push live notification to game server via internal HTTP
- // (Game server will push 'gems_credited' to the player's socket if online)
- const gameServerUrl = process.env.GAME_SERVER_URL || 'http://localhost:3002';
- try {
- const http = require('http');
- const body = JSON.stringify({ userId, gems: gemCount, packageId, amountCents });
- const options = {
- hostname: new URL(gameServerUrl).hostname,
- port: new URL(gameServerUrl).port || 3002,
- path: '/internal/credit-gems',
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- 'Content-Length': Buffer.byteLength(body),
- 'X-Internal-Key': process.env.INTERNAL_API_KEY || 'gso-internal',
- },
- };
- const req2 = http.request(options);
- req2.write(body);
- req2.end();
- } catch (notifyErr) {
- // Non-fatal — player will see updated gems on next login
- }
- }
-
- res.json({ received: true });
-});
-
-module.exports = router;
-module.exports.GEM_PACKAGES = GEM_PACKAGES;
diff --git a/API/routes/servers.js b/API/routes/servers.js
deleted file mode 100644
index 47de7d5..0000000
--- a/API/routes/servers.js
+++ /dev/null
@@ -1,419 +0,0 @@
-const express = require('express');
-const jwt = require('jsonwebtoken');
-const GameServer = require('../models/GameServer');
-const logger = require('../utils/logger');
-
-const router = express.Router();
-
-// Middleware to authenticate JWT token
-const authenticateToken = (req, res, next) => {
- const token = req.header('Authorization')?.replace('Bearer ', '');
-
- if (!token) {
- return res.status(401).json({ error: 'Access token required' });
- }
-
- try {
- const decoded = jwt.verify(token, process.env.JWT_SECRET || 'fallback_secret');
- req.userId = decoded.userId;
- next();
- } catch (error) {
- res.status(401).json({ error: 'Invalid token' });
- }
-};
-
-// Register new game server (for GameServer instances to register themselves)
-router.post('/register', async (req, res) => {
- try {
- const { serverId, name, type, region, maxPlayers, currentPlayers, gameServerUrl, owner } = req.body;
-
- logger.info(`[API SERVER] Game server registration request:`, {
- serverId, name, type, region, maxPlayers, currentPlayers, gameServerUrl, owner
- });
-
- // Check if server already exists
- const existingServer = await GameServer.findOne({ serverId });
- if (existingServer) {
- // Update existing server
- existingServer.name = name || existingServer.name;
- existingServer.type = type || existingServer.type;
- existingServer.region = region || existingServer.region;
- existingServer.maxPlayers = maxPlayers || existingServer.maxPlayers;
- existingServer.currentPlayers = currentPlayers !== undefined ? currentPlayers : existingServer.currentPlayers;
- existingServer.gameServerUrl = gameServerUrl || existingServer.gameServerUrl;
- existingServer.status = 'waiting';
- existingServer.lastActivity = new Date();
-
- await existingServer.save();
- logger.info(`[API SERVER] Updated existing server: ${serverId} with ${existingServer.currentPlayers} players`);
-
- return res.json({
- success: true,
- message: 'Server updated successfully',
- server: existingServer
- });
- }
-
- // Create new server
- const newServer = new GameServer({
- serverId,
- name: name || `Game Server ${serverId}`,
- type: type || 'public',
- region: region || 'us-east',
- maxPlayers: maxPlayers || 10,
- currentPlayers: currentPlayers !== undefined ? currentPlayers : 0,
- owner: owner || {
- userId: 'system',
- username: 'System'
- },
- status: 'waiting',
- gameServerUrl,
- createdAt: new Date(),
- lastActivity: new Date()
- });
-
- await newServer.save();
- logger.info(`[API SERVER] Registered new server: ${serverId}`);
-
- res.status(201).json({
- success: true,
- message: 'Server registered successfully',
- server: newServer
- });
-
- } catch (error) {
- logger.error('[API SERVER] Error registering server:', error);
- res.status(500).json({
- success: false,
- error: 'Failed to register server'
- });
- }
-});
-
-// Update server status (for GameServer instances to update their status)
-router.post('/update-status/:serverId', async (req, res) => {
- try {
- const { serverId } = req.params;
- const { currentPlayers, status } = req.body;
-
- const server = await GameServer.findOne({ serverId });
- if (!server) {
- return res.status(404).json({
- success: false,
- error: 'Server not found'
- });
- }
-
- if (currentPlayers !== undefined) {
- server.currentPlayers = currentPlayers;
- }
-
- if (status) {
- server.status = status;
- }
-
- server.lastActivity = new Date();
- await server.save();
-
- logger.info(`[API SERVER] Updated server ${serverId} status:`, {
- currentPlayers: server.currentPlayers,
- status: server.status
- });
-
- res.json({
- success: true,
- message: 'Server status updated successfully'
- });
-
- } catch (error) {
- logger.error('[API SERVER] Error updating server status:', error);
- res.status(500).json({
- success: false,
- error: 'Failed to update server status'
- });
- }
-});
-
-// Unregister game server (for GameServer instances to unregister themselves)
-router.delete('/unregister/:serverId', async (req, res) => {
- try {
- const { serverId } = req.params;
-
- logger.info(`[API SERVER] Game server unregistration request:`, { serverId });
-
- // Find and remove server
- const server = await GameServer.findOneAndDelete({ serverId });
-
- if (!server) {
- return res.status(404).json({
- success: false,
- error: 'Server not found'
- });
- }
-
- logger.info(`[API SERVER] Unregistered server: ${serverId}`);
-
- res.json({
- success: true,
- message: 'Server unregistered successfully'
- });
-
- } catch (error) {
- logger.error('[API SERVER] Error unregistering server:', error);
- res.status(500).json({
- success: false,
- error: 'Failed to unregister server'
- });
- }
-});
-
-// Get server list
-router.get('/', authenticateToken, async (req, res) => {
- try {
- const { type, region } = req.query;
-
- // Build filters
- const filters = {};
- if (type) filters.type = type;
- if (region) filters.region = region;
-
- logger.info(`[API SERVER] Fetching servers for user ${req.userId} with filters:`, filters);
-
- // Get available servers from database
- const servers = await GameServer.findAvailableServers(filters);
-
- logger.info(`[API SERVER] Found ${servers.length} servers in database`);
-
- // Format server list for client
- const serverList = servers.map(server => ({
- id: server.serverId,
- name: server.name,
- type: server.type,
- region: server.region,
- currentPlayers: server.currentPlayers,
- maxPlayers: server.maxPlayers,
- status: server.status,
- ownerName: server.owner.username,
- createdAt: server.createdAt,
- lastActivity: server.lastActivity
- }));
-
- logger.info(`[API SERVER] Returning ${serverList.length} servers to client`);
-
- res.json({
- success: true,
- servers: serverList,
- totalServers: serverList.length
- });
-
- } catch (error) {
- logger.error('Error getting server list:', error);
- res.status(500).json({ error: 'Internal server error' });
- }
-});
-
-// Create new server
-router.post('/create', authenticateToken, async (req, res) => {
- try {
- const { name, type = 'public', maxPlayers = 10, region = 'us-east', settings = {} } = req.body;
-
- if (!name) {
- return res.status(400).json({ error: 'Server name required' });
- }
-
- // Generate unique server ID
- const serverId = `server_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
-
- // Get user info from token (you might want to fetch full user data)
- const ownerUsername = req.body.username || 'Unknown'; // This should come from user data
-
- // Create new server in database
- const newServer = new GameServer({
- serverId,
- name,
- type,
- region,
- maxPlayers,
- owner: {
- userId: req.userId,
- username: ownerUsername
- },
- settings,
- gameServerUrl: process.env.GAME_SERVER_URL || 'https://api.korvarix.com'
- });
-
- await newServer.save();
-
- logger.info(`Server created: ${serverId} by user ${req.userId}`);
-
- res.status(201).json({
- message: 'Server created successfully',
- server: {
- id: newServer.serverId,
- name: newServer.name,
- type: newServer.type,
- region: newServer.region,
- currentPlayers: newServer.currentPlayers,
- maxPlayers: newServer.maxPlayers,
- status: newServer.status,
- ownerName: newServer.owner.username,
- createdAt: newServer.createdAt
- }
- });
-
- } catch (error) {
- logger.error('Error creating server:', error);
- res.status(500).json({ error: 'Internal server error' });
- }
-});
-
-// Join server
-router.post('/:serverId/join', authenticateToken, async (req, res) => {
- try {
- const { serverId } = req.params;
-
- // Find server in database
- const server = await GameServer.findOne({ serverId });
-
- if (!server) {
- return res.status(404).json({ error: 'Server not found' });
- }
-
- // Check if server can be joined
- if (!server.canJoin()) {
- return res.status(400).json({ error: 'Server is full or offline' });
- }
-
- // Add player to server
- const playerAdded = server.addPlayer();
- if (!playerAdded) {
- return res.status(400).json({ error: 'Server is full' });
- }
-
- await server.save();
-
- logger.info(`User ${req.userId} joined server ${serverId}`);
-
- res.json({
- message: 'Joined server successfully',
- server: {
- id: server.serverId,
- name: server.name,
- currentPlayers: server.currentPlayers,
- maxPlayers: server.maxPlayers,
- gameServerUrl: server.gameServerUrl
- }
- });
-
- } catch (error) {
- logger.error('Error joining server:', error);
- res.status(500).json({ error: 'Internal server error' });
- }
-});
-
-// Leave server
-router.post('/:serverId/leave', authenticateToken, async (req, res) => {
- try {
- const { serverId } = req.params;
-
- // Find server in database
- const server = await GameServer.findOne({ serverId });
-
- if (!server) {
- return res.status(404).json({ error: 'Server not found' });
- }
-
- // Remove player from server
- const playerRemoved = server.removePlayer();
- if (playerRemoved) {
- await server.save();
- logger.info(`User ${req.userId} left server ${serverId}`);
- }
-
- // Update player's current server
- const Player = require('../models/Player');
- await Player.findOneAndUpdate(
- { userId: req.userId },
- { currentServer: null }
- );
-
- res.json({
- message: 'Left server successfully'
- });
-
- } catch (error) {
- logger.error('Error leaving server:', error);
- res.status(500).json({ error: 'Internal server error' });
- }
-});
-
-// Get server details
-router.get('/:serverId', authenticateToken, async (req, res) => {
- try {
- const { serverId } = req.params;
-
- const server = await GameServer.findOne({ serverId });
-
- if (!server) {
- return res.status(404).json({ error: 'Server not found' });
- }
-
- res.json({
- server: {
- id: server.serverId,
- name: server.name,
- type: server.type,
- region: server.region,
- currentPlayers: server.currentPlayers,
- maxPlayers: server.maxPlayers,
- status: server.status,
- ownerName: server.owner.username,
- settings: server.settings,
- createdAt: server.createdAt,
- lastActivity: server.lastActivity
- }
- });
-
- } catch (error) {
- logger.error('Error getting server details:', error);
- res.status(500).json({ error: 'Internal server error' });
- }
-});
-
-// Get user's current server
-router.get('/user/current', authenticateToken, async (req, res) => {
- try {
- const Player = require('../models/Player');
- const player = await Player.findOne({ userId: req.userId });
-
- if (!player || !player.currentServer) {
- return res.json({ currentServer: null });
- }
-
- const server = await GameServer.findOne({ serverId: player.currentServer });
-
- if (!server) {
- // Clear invalid server reference
- await Player.findOneAndUpdate(
- { userId: req.userId },
- { currentServer: null }
- );
- return res.json({ currentServer: null });
- }
-
- res.json({
- currentServer: {
- id: server.serverId,
- name: server.name,
- currentPlayers: server.currentPlayers,
- maxPlayers: server.maxPlayers
- }
- });
-
- } catch (error) {
- logger.error('Error getting current server:', error);
- res.status(500).json({ error: 'Internal server error' });
- }
-});
-
-module.exports = router;
diff --git a/API/scripts/createTestServer.js b/API/scripts/createTestServer.js
deleted file mode 100644
index a60f454..0000000
--- a/API/scripts/createTestServer.js
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * Create Test Server Script
- * Adds a test server to the database for testing the server browser
- */
-
-const mongoose = require('mongoose');
-const GameServer = require('../models/GameServer');
-require('dotenv').config();
-
-async function createTestServer() {
- try {
- // Connect to database
- await mongoose.connect(process.env.MONGODB_URI);
- console.log('Connected to database');
-
- // Check if test server already exists
- const existingServer = await GameServer.findOne({ serverId: 'test_server_001' });
- if (existingServer) {
- console.log('Test server already exists, deleting it first...');
- await GameServer.deleteOne({ serverId: 'test_server_001' });
- }
-
- // Create test server
- const testServer = new GameServer({
- serverId: 'test_server_001',
- name: 'Test Server - Galaxy Strike',
- type: 'public',
- region: 'us-east',
- maxPlayers: 10,
- currentPlayers: 2,
- owner: {
- userId: 'test_user_001',
- username: 'TestAdmin'
- },
- settings: {
- description: 'A test server for Galaxy Strike Online',
- tags: ['test', 'beginner', 'pve']
- },
- status: 'active',
- gameServerUrl: 'https://api.korvarix.com'
- });
-
- await testServer.save();
- console.log('Test server created successfully!');
- console.log('Server details:', {
- id: testServer.serverId,
- name: testServer.name,
- type: testServer.type,
- region: testServer.region,
- currentPlayers: testServer.currentPlayers,
- maxPlayers: testServer.maxPlayers,
- status: testServer.status
- });
-
- } catch (error) {
- console.error('Error creating test server:', error);
- } finally {
- await mongoose.disconnect();
- }
-}
-
-// Run the script
-if (require.main === module) {
- createTestServer();
-}
-
-module.exports = createTestServer;
diff --git a/API/scripts/migrate.js b/API/scripts/migrate.js
deleted file mode 100644
index 147bbe3..0000000
--- a/API/scripts/migrate.js
+++ /dev/null
@@ -1,50 +0,0 @@
-const mongoose = require('mongoose');
-const logger = require('../utils/logger');
-require('dotenv').config();
-
-async function migrate() {
- try {
- logger.info('Starting database migration...');
-
- // Connect to database
- await mongoose.connect(process.env.MONGODB_URI || 'mongodb://localhost:27017/galaxystrikeonline');
-
- logger.info('Connected to database');
-
- // Create indexes for performance
- const db = mongoose.connection.db;
-
- // Player indexes
- await db.collection('players').createIndex({ userId: 1 }, { unique: true });
- await db.collection('players').createIndex({ email: 1 }, { unique: true });
- await db.collection('players').createIndex({ 'stats.level': 1 });
- await db.collection('players').createIndex({ currentServer: 1 });
-
- // Ship indexes
- await db.collection('ships').createIndex({ userId: 1 });
- await db.collection('ships').createIndex({ id: 1 }, { unique: true });
- await db.collection('ships').createIndex({ isEquipped: 1 });
- await db.collection('ships').createIndex({ isCurrent: 1 });
-
- // Inventory indexes
- await db.collection('inventories').createIndex({ userId: 1 }, { unique: true });
- await db.collection('inventories').createIndex({ 'items.id': 1 });
- await db.collection('inventories').createIndex({ 'items.type': 1 });
-
- logger.info('Database migration completed successfully');
-
- // Close connection
- await mongoose.connection.close();
- logger.info('Database connection closed');
-
- } catch (error) {
- logger.error('Migration failed:', error);
- process.exit(1);
- }
-}
-
-if (require.main === module) {
- migrate();
-}
-
-module.exports = migrate;
diff --git a/API/scripts/migratePasswords.js b/API/scripts/migratePasswords.js
deleted file mode 100644
index 470af65..0000000
--- a/API/scripts/migratePasswords.js
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * Password Migration Script
- * Updates existing users to have password fields
- */
-
-const mongoose = require('mongoose');
-const bcrypt = require('bcryptjs');
-const Player = require('../models/Player');
-const logger = require('../utils/logger');
-require('dotenv').config();
-
-async function migratePasswords() {
- try {
- // Connect to database
- await mongoose.connect(process.env.MONGODB_URI);
- logger.info('Connected to database for password migration');
-
- // Find all users without passwords
- const usersWithoutPasswords = await Player.find({
- password: { $exists: false }
- });
-
- logger.info(`Found ${usersWithoutPasswords.length} users without passwords`);
-
- if (usersWithoutPasswords.length === 0) {
- logger.info('No users need password migration');
- return;
- }
-
- // Update each user with a default password
- for (const user of usersWithoutPasswords) {
- // Generate a default password (you might want to use a different approach)
- const defaultPassword = 'tempPassword123!';
- const salt = await bcrypt.genSalt(10);
- const hashedPassword = await bcrypt.hash(defaultPassword, salt);
-
- await Player.updateOne(
- { _id: user._id },
- {
- $set: {
- password: hashedPassword,
- 'stats.lastLogin': new Date()
- }
- }
- );
-
- logger.info(`Migrated user: ${user.email} with default password`);
- }
-
- logger.info('Password migration completed successfully');
-
- // Output the default password for users to change
- console.log('\n=== MIGRATION COMPLETE ===');
- console.log(`Updated ${usersWithoutPasswords.length} users`);
- console.log('Default password for all migrated users: tempPassword123!');
- console.log('Users should change their password after first login\n');
-
- } catch (error) {
- logger.error('Password migration error:', error);
- console.error('Migration failed:', error);
- } finally {
- await mongoose.disconnect();
- }
-}
-
-// Run the migration
-if (require.main === module) {
- migratePasswords();
-}
-
-module.exports = migratePasswords;
diff --git a/API/scripts/seed.js b/API/scripts/seed.js
deleted file mode 100644
index 2825bda..0000000
--- a/API/scripts/seed.js
+++ /dev/null
@@ -1,196 +0,0 @@
-const mongoose = require('mongoose');
-const logger = require('../utils/logger');
-const Player = require('../models/Player');
-const Ship = require('../models/Ship');
-const Inventory = require('../models/Inventory');
-require('dotenv').config();
-
-async function seed() {
- try {
- logger.info('Starting database seeding...');
-
- // Connect to database
- await mongoose.connect(process.env.MONGODB_URI || 'mongodb://localhost:27017/galaxystrikeonline');
-
- logger.info('Connected to database');
-
- // Clear existing data (optional - remove if you want to preserve data)
- logger.info('Clearing existing data...');
- await Player.deleteMany({});
- await Ship.deleteMany({});
- await Inventory.deleteMany({});
-
- // Create a test user
- const testUser = new Player({
- userId: 'test_user_001',
- username: 'TestPlayer',
- email: 'test@example.com',
- password: '$2a$10$example_hashed_password_here',
- stats: {
- level: 1,
- experience: 0,
- credits: 5000,
- dungeonsCleared: 0,
- playTime: 0,
- lastLogin: new Date()
- },
- attributes: {
- health: 100,
- maxHealth: 100,
- energy: 100,
- maxEnergy: 100,
- attack: 10,
- defense: 5,
- speed: 10,
- criticalChance: 0.05,
- criticalDamage: 1.5
- },
- info: {
- name: 'Commander',
- title: 'Rookie Pilot',
- guild: null,
- rank: 'Cadet'
- },
- settings: {
- autoSave: true,
- notifications: true,
- soundEffects: true,
- music: false,
- discordIntegration: false
- },
- dailyRewards: {
- lastClaim: null,
- consecutiveDays: 0
- }
- });
-
- await testUser.save();
- logger.info('Created test user');
-
- // Create starter ship for test user
- const starterShip = new Ship({
- userId: testUser.userId,
- id: 'starter_cruiser_001',
- name: 'Starter Cruiser',
- class: 'Cruiser',
- level: 1,
- stats: {
- health: 100,
- maxHealth: 100,
- attack: 15,
- defense: 12,
- speed: 10,
- criticalChance: 0.05,
- criticalDamage: 1.5,
- hull: 100
- },
- texture: 'assets/textures/ships/starter_cruiser.png',
- experience: 0,
- requiredExp: 100,
- upgrades: [],
- isEquipped: true,
- isCurrent: true,
- price: 5000,
- rarity: 'common',
- description: 'Reliable starter cruiser for new pilots',
- acquiredAt: new Date(),
- lastUsed: new Date()
- });
-
- await starterShip.save();
- logger.info('Created starter ship');
-
- // Update player with current ship
- testUser.currentShip = starterShip._id;
- await testUser.save();
-
- // Create inventory for test user
- const inventory = new Inventory({
- userId: testUser.userId,
- maxSlots: 50,
- items: [
- {
- id: 'starter_blaster_common',
- name: 'Common Blaster',
- type: 'weapon',
- rarity: 'common',
- quantity: 1,
- stats: {
- attack: 5,
- criticalChance: 0.02,
- damage: 10,
- fireRate: 2,
- range: 5,
- energy: 5
- },
- description: 'A reliable basic blaster for new pilots',
- equipable: true,
- slot: 'weapon',
- isEquipped: false,
- stackable: false,
- acquiredAt: new Date()
- },
- {
- id: 'basic_armor_common',
- name: 'Basic Armor',
- type: 'armor',
- rarity: 'common',
- quantity: 1,
- stats: {
- defense: 3,
- durability: 20,
- weight: 2,
- energyShield: 0
- },
- description: 'Light armor providing basic protection',
- equipable: true,
- slot: 'armor',
- isEquipped: false,
- stackable: false,
- acquiredAt: new Date()
- },
- {
- id: 'health_kit',
- name: 'Health Kit',
- type: 'consumable',
- rarity: 'common',
- quantity: 3,
- stats: {},
- description: 'A medical kit that restores health',
- consumable: true,
- effect: {
- health: 50
- },
- stackable: true,
- acquiredAt: new Date()
- }
- ],
- equippedItems: {
- weapon: null,
- armor: null,
- engine: null,
- shield: null,
- special: null
- }
- });
-
- await inventory.save();
- logger.info('Created inventory with starter items');
-
- logger.info('Database seeding completed successfully');
-
- // Close connection
- await mongoose.connection.close();
- logger.info('Database connection closed');
-
- } catch (error) {
- logger.error('Seeding failed:', error);
- process.exit(1);
- }
-}
-
-if (require.main === module) {
- seed();
-}
-
-module.exports = seed;
diff --git a/API/server.js b/API/server.js
deleted file mode 100644
index 947b07b..0000000
--- a/API/server.js
+++ /dev/null
@@ -1,253 +0,0 @@
-const express = require('express');
-const errorReporter = require('./utils/ErrorReporter');
-const http = require('http');
-const cors = require('cors');
-const helmet = require('helmet');
-const compression = require('compression');
-const rateLimit = require('rate-limiter-flexible');
-require('dotenv').config();
-
-const logger = require('./utils/logger');
-const connectDB = require('./config/database');
-const authRoutes = require('./routes/auth');
-const serverRoutes = require('./routes/servers');
-const paymentRoutes = require('./routes/payments');
-const { errorHandler, notFound } = require('./middleware/errorHandler');
-const GameServer = require('./models/GameServer');
-
-// Override console.error to properly log error objects
-const originalConsoleError = console.error;
-console.error = (...args) => {
- args.forEach(arg => {
- if (arg instanceof Error) {
- logger.error('Console Error:', {
- message: arg.message,
- stack: arg.stack,
- name: arg.name
- });
- } else if (typeof arg === 'object' && arg !== null) {
- logger.error('Console Error Object:', arg);
- } else {
- logger.error('Console Error:', arg);
- }
- });
-};
-
-const app = express();
-const server = http.createServer(app);
-
-// Middleware
-app.use(helmet());
-app.use(compression());
-const allowedOrigins = [
- "https://galaxystrike.online",
- "https://api.korvarix.com",
- "http://api.korvarix.com:3001",
- "https://dev.gameserver.galaxystrike.online",
- "http://localhost:3000",
- "http://localhost:3001",
- "http://localhost:3002",
- ...(process.env.CLIENT_URL ? [process.env.CLIENT_URL] : []),
-];
-app.use(cors({
- origin: (origin, callback) => {
- // Allow no-origin (Electron, mobile, curl) + whitelisted origins
- if (!origin || allowedOrigins.includes(origin)) return callback(null, true);
- return callback(null, false);
- },
- credentials: true
-}));
-app.use(express.json({ limit: '10mb' }));
-app.use(express.urlencoded({ extended: true }));
-app.use(errorReporter.requestMiddleware());
-app.get('/health', (req, res) => res.json({ status: 'ok', service: 'API', ...errorReporter.getMetrics() }));
-
-// Static file serving
-app.use(express.static('../Website/dist'));
-
-// Rate limiting (more lenient for development)
-const { RateLimiterMemory } = require('rate-limiter-flexible');
-const limiter = new RateLimiterMemory({
- keyGenerator: (req) => req.ip,
- points: 1000, // limit each IP to 1000 requests per windowMs (increased from 100)
- duration: 60, // 1 minute window (reduced from 15 minutes)
- blockDuration: 60, // Block for 1 minute (reduced from 15 minutes)
-});
-
-app.use('/api/', async (req, res, next) => {
- try {
- // Skip rate limiting for localhost in development
- const isLocalhost = req.ip === '127.0.0.1' || req.ip === '::1' || req.hostname === 'localhost';
-
- if (!isLocalhost) {
- const resLimiter = await limiter.consume(req.ip);
- if (!resLimiter.remainingPoints) {
- return res.status(429).json({ error: 'Too many requests, please try again later.' });
- }
- }
- next();
- } catch (rejRes) {
- // Handle rate limit exceeded
- const secs = Math.round(rejRes.msBeforeNext / 1000) || 1;
- res.set('Retry-After', String(secs));
- res.status(429).json({ error: 'Too many requests, please try again later.' });
- }
-});
-
-// Routes - API Server Only (Auth + Server Browser)
-app.use('/api/auth', authRoutes);
-app.use('/api/servers', serverRoutes);
-app.use('/api/payments', paymentRoutes);
-
-// Manual cleanup endpoint (for testing)
-app.post('/api/admin/cleanup-dead-servers', async (req, res) => {
- try {
- await cleanupDeadServers();
- res.json({ success: true, message: 'Dead server cleanup completed' });
- } catch (error) {
- logger.error('Manual cleanup error:', error);
- res.status(500).json({ success: false, error: 'Cleanup failed' });
- }
-});
-
-// Health check
-app.get('/health', (req, res) => {
- res.status(200).json({
- status: 'API Server OK',
- service: 'galaxystrikeonline-api',
- timestamp: new Date().toISOString(),
- uptime: process.uptime()
- });
-});
-
-// API version endpoint
-app.get('/api/ssc/version', (req, res) => {
- res.status(200).json({
- version: '1.0.0',
- service: 'galaxystrikeonline-api',
- timestamp: new Date().toISOString()
- });
-});
-
-// Fallback route for SPA - only serve index.html for non-API routes
-app.get('*', (req, res) => {
- // Don't try to serve index.html for API routes
- if (req.path.startsWith('/api/')) {
- return res.status(404).json({ error: 'API endpoint not found' });
- }
-
- // Try dist first (for built files), fallback to public (for development)
- const distPath = require('path').resolve(__dirname, '../dist/index.html');
- const publicPath = require('path').resolve(__dirname, '../public/index.html');
-
- const fs = require('fs');
- if (fs.existsSync(distPath)) {
- res.sendFile(distPath);
- } else if (fs.existsSync(publicPath)) {
- res.sendFile(publicPath);
- } else {
- res.status(404).json({ error: 'Frontend not found' });
- }
-});
-
-// Error handling
-app.use(notFound);
-app.use(errorHandler);
-
-// Clean up dead servers
-async function cleanupDeadServers() {
- try {
- logger.info('[API SERVER] Starting dead server cleanup...');
-
- // Find servers that haven't been updated in the last 5 minutes
- const fiveMinutesAgo = new Date(Date.now() - 5 * 60 * 1000);
-
- const deadServers = await GameServer.find({
- lastActivity: { $lt: fiveMinutesAgo }
- });
-
- if (deadServers.length > 0) {
- logger.info(`[API SERVER] Found ${deadServers.length} potentially dead servers, checking...`);
-
- for (const server of deadServers) {
- const isAlive = await checkServerHealth(server.gameServerUrl);
-
- if (!isAlive) {
- logger.info(`[API SERVER] Removing dead server: ${server.name} (${server.serverId})`);
- await GameServer.deleteOne({ _id: server._id });
- } else {
- logger.info(`[API SERVER] Server ${server.name} is still alive, updating lastActivity`);
- server.lastActivity = new Date();
- await server.save();
- }
- }
- } else {
- logger.info('[API SERVER] No dead servers found');
- }
-
- } catch (error) {
- logger.error('[API SERVER] Error during dead server cleanup:', error);
- }
-}
-
-// Check if a server is healthy
-async function checkServerHealth(serverUrl) {
- try {
- if (!serverUrl) {
- return false;
- }
-
- // Add /health endpoint to the URL
- const healthUrl = serverUrl.endsWith('/') ? `${serverUrl}health` : `${serverUrl}/health`;
-
- const response = await fetch(healthUrl, {
- method: 'GET',
- timeout: 5000 // 5 second timeout
- });
-
- return response.ok;
- } catch (error) {
- logger.warn(`[API SERVER] Health check failed for ${serverUrl}:`, error.message);
- return false;
- }
-}
-
-// Initialize database only (no game systems for API server)
-async function startServer() {
- try {
- // Connect to database
- await connectDB();
- logger.info('Database connected successfully');
-
- // Start API server
- const PORT = process.env.PORT || 3000;
- server.listen(PORT, () => {
- logger.info(`API Server running on port ${PORT}`);
- logger.info('API Server handles: Authentication, Server Browser, User Data');
-
- // Start dead server cleanup (every 2 minutes)
- setInterval(cleanupDeadServers, 120000);
- });
- } catch (error) {
- logger.error('Failed to start API server:', error);
- process.exit(1);
- }
-}
-
-// Handle uncaught errors
-process.on('uncaughtException', (error) => {
- logger.error('Uncaught Exception:', error);
-});
-
-process.on('unhandledRejection', (reason, promise) => {
- logger.error('Unhandled Rejection at:', promise, 'reason:', reason);
-});
-
-// Handle HTTP server errors
-server.on('error', (error) => {
- logger.error('HTTP Server error:', error);
-});
-
-startServer();
-
-module.exports = { app, server };
diff --git a/API/tests/api.test.js b/API/tests/api.test.js
deleted file mode 100644
index 6c89004..0000000
--- a/API/tests/api.test.js
+++ /dev/null
@@ -1,220 +0,0 @@
-const request = require('supertest');
-const mongoose = require('mongoose');
-const app = require('../server');
-const Player = require('../models/Player');
-
-describe('API Tests', () => {
- let token;
- let testUser;
-
- beforeAll(async () => {
- // Connect to test database
- const mongoUri = process.env.MONGODB_TEST_URI || 'mongodb://localhost:27017/galaxystrikeonline_test';
- await mongoose.connect(mongoUri);
- });
-
- afterAll(async () => {
- // Clean up and close connection
- await Player.deleteMany({});
- await mongoose.connection.close();
- });
-
- beforeEach(async () => {
- // Clean up before each test
- await Player.deleteMany({});
- });
-
- describe('Authentication', () => {
- test('POST /api/auth/register - should register new user', async () => {
- const userData = {
- username: 'testuser',
- email: 'test@example.com',
- password: 'password123'
- };
-
- const response = await request(app)
- .post('/api/auth/register')
- .send(userData)
- .expect(201);
-
- expect(response.body).toHaveProperty('token');
- expect(response.body.user).toHaveProperty('username', userData.username);
- expect(response.body.user).toHaveProperty('email', userData.email);
- });
-
- test('POST /api/auth/login - should login existing user', async () => {
- // First register a user
- const userData = {
- username: 'testuser',
- email: 'test@example.com',
- password: 'password123'
- };
-
- await request(app)
- .post('/api/auth/register')
- .send(userData);
-
- // Then login
- const loginData = {
- email: userData.email,
- password: userData.password
- };
-
- const response = await request(app)
- .post('/api/auth/login')
- .send(loginData)
- .expect(200);
-
- expect(response.body).toHaveProperty('token');
- token = response.body.token;
- testUser = response.body.user;
- });
-
- test('GET /api/auth/verify - should verify token', async () => {
- // First login to get token
- const userData = {
- username: 'testuser',
- email: 'test@example.com',
- password: 'password123'
- };
-
- const registerResponse = await request(app)
- .post('/api/auth/register')
- .send(userData);
-
- token = registerResponse.body.token;
-
- const response = await request(app)
- .get('/api/auth/verify')
- .set('Authorization', `Bearer ${token}`)
- .expect(200);
-
- expect(response.body).toHaveProperty('valid', true);
- expect(response.body.user).toHaveProperty('username', userData.username);
- });
- });
-
- describe('Game API', () => {
- beforeEach(async () => {
- // Create and login a user for game tests
- const userData = {
- username: 'testuser',
- email: 'test@example.com',
- password: 'password123'
- };
-
- const loginResponse = await request(app)
- .post('/api/auth/login')
- .send({
- email: userData.email,
- password: userData.password
- });
-
- token = loginResponse.body.token;
- testUser = loginResponse.body.user;
- });
-
- test('GET /api/game/player - should get player data', async () => {
- const response = await request(app)
- .get('/api/game/player')
- .set('Authorization', `Bearer ${token}`)
- .expect(200);
-
- expect(response.body).toHaveProperty('userId');
- expect(response.body).toHaveProperty('stats');
- expect(response.body).toHaveProperty('attributes');
- });
-
- test('GET /api/game/ships - should get player ships', async () => {
- const response = await request(app)
- .get('/api/game/ships')
- .set('Authorization', `Bearer ${token}`)
- .expect(200);
-
- expect(response.body).toHaveProperty('ships');
- expect(Array.isArray(response.body.ships)).toBe(true);
- });
-
- test('GET /api/game/inventory - should get player inventory', async () => {
- const response = await request(app)
- .get('/api/game/inventory')
- .set('Authorization', `Bearer ${token}`)
- .expect(200);
-
- expect(response.body).toHaveProperty('items');
- expect(response.body).toHaveProperty('summary');
- });
-
- test('POST /api/game/daily-reward - should claim daily reward', async () => {
- const response = await request(app)
- .post('/api/game/daily-reward')
- .set('Authorization', `Bearer ${token}`)
- .expect(200);
-
- expect(response.body).toHaveProperty('success');
- });
- });
-
- describe('Server API', () => {
- beforeEach(async () => {
- // Create and login a user for server tests
- const userData = {
- username: 'testuser',
- email: 'test@example.com',
- password: 'password123'
- };
-
- const loginResponse = await request(app)
- .post('/api/auth/login')
- .send({
- email: userData.email,
- password: userData.password
- });
-
- token = loginResponse.body.token;
- testUser = loginResponse.body.user;
- });
-
- test('GET /api/servers - should get server list', async () => {
- const response = await request(app)
- .get('/api/servers')
- .set('Authorization', `Bearer ${token}`)
- .expect(200);
-
- expect(response.body).toHaveProperty('servers');
- expect(response.body).toHaveProperty('totalServers');
- expect(Array.isArray(response.body.servers)).toBe(true);
- });
-
- test('POST /api/servers/create - should create new server', async () => {
- const serverData = {
- name: 'Test Server',
- type: 'public',
- maxPlayers: 10,
- region: 'us-east'
- };
-
- const response = await request(app)
- .post('/api/servers/create')
- .set('Authorization', `Bearer ${token}`)
- .send(serverData)
- .expect(201);
-
- expect(response.body).toHaveProperty('message');
- expect(response.body.server).toHaveProperty('name', serverData.name);
- expect(response.body.server).toHaveProperty('type', serverData.type);
- });
- });
-
- describe('Health Check', () => {
- test('GET /health - should return health status', async () => {
- const response = await request(app)
- .get('/health')
- .expect(200);
-
- expect(response.body).toHaveProperty('status', 'OK');
- expect(response.body).toHaveProperty('timestamp');
- expect(response.body).toHaveProperty('uptime');
- });
- });
-});
diff --git a/API/utils/ErrorReporter.js b/API/utils/ErrorReporter.js
deleted file mode 100644
index 048d491..0000000
--- a/API/utils/ErrorReporter.js
+++ /dev/null
@@ -1,119 +0,0 @@
-/**
- * GSO Error Reporter & Analytics (GDD Phase 3 — v3.2 lightweight implementation)
- * Logs structured errors to file + provides in-memory analytics counters.
- * Can be wired to external services (Sentry, Datadog) by replacing _sendToExternal().
- */
-
-const fs = require('fs');
-const path = require('path');
-
-class ErrorReporter {
- constructor(options = {}) {
- this.logDir = options.logDir || path.join(__dirname, '../logs');
- this.service = options.service || 'GameServer';
- this.env = process.env.NODE_ENV || 'development';
- this.counters = {}; // event_type → count
- this.errors = []; // last 100 errors in memory
- this.maxErrors = 100;
-
- // Ensure logs directory exists
- if (!fs.existsSync(this.logDir)) {
- fs.mkdirSync(this.logDir, { recursive: true });
- }
- }
-
- // ── Error capture ──────────────────────────────────────────────────────────
- captureError(err, context = {}) {
- const entry = {
- ts: new Date().toISOString(),
- service: this.service,
- env: this.env,
- message: err?.message || String(err),
- stack: err?.stack || null,
- context,
- };
-
- // Store in memory ring buffer
- this.errors.push(entry);
- if (this.errors.length > this.maxErrors) this.errors.shift();
-
- // Write to daily log file (non-blocking)
- const logFile = path.join(this.logDir, `errors-${new Date().toISOString().slice(0,10)}.log`);
- const line = JSON.stringify(entry) + '\n';
- fs.appendFile(logFile, line, () => {}); // fire-and-forget
-
- // Increment counter
- this.increment('errors.total');
-
- // Hook for external service (Sentry, etc.)
- this._sendToExternal(entry);
-
- return entry;
- }
-
- // ── Analytics event tracking ───────────────────────────────────────────────
- track(event, data = {}) {
- this.increment(event);
- if (this.env === 'development') {
- const logFile = path.join(this.logDir, `analytics-${new Date().toISOString().slice(0,10)}.log`);
- fs.appendFile(logFile, JSON.stringify({ ts: new Date().toISOString(), event, data }) + '\n', () => {});
- }
- }
-
- increment(key) {
- this.counters[key] = (this.counters[key] || 0) + 1;
- }
-
- // ── Metrics snapshot ───────────────────────────────────────────────────────
- getMetrics() {
- return {
- service: this.service,
- uptime: Math.round(process.uptime()),
- memoryMB: Math.round(process.memoryUsage().heapUsed / 1048576),
- counters: { ...this.counters },
- recentErrors: this.errors.slice(-10).map(e => ({ ts: e.ts, message: e.message, context: e.context })),
- };
- }
-
- // ── Express middleware ─────────────────────────────────────────────────────
- requestMiddleware() {
- return (req, res, next) => {
- const start = Date.now();
- this.increment('http.requests');
- res.on('finish', () => {
- const ms = Date.now() - start;
- this.increment(`http.${res.statusCode >= 400 ? 'errors' : 'success'}`);
- if (ms > 2000) this.track('http.slow_request', { path: req.path, ms });
- });
- next();
- };
- }
-
- errorMiddleware() {
- return (err, req, res, next) => {
- this.captureError(err, { path: req.path, method: req.method });
- res.status(500).json({ error: 'Internal server error' });
- };
- }
-
- // ── Socket.IO event tracking helper ───────────────────────────────────────
- trackSocketEvent(eventName, userId) {
- this.increment(`socket.${eventName}`);
- this.increment('socket.total');
- }
-
- // ── External service stub ──────────────────────────────────────────────────
- _sendToExternal(entry) {
- // Replace with: Sentry.captureException(new Error(entry.message))
- // or: axios.post(process.env.ERROR_WEBHOOK_URL, entry)
- // Currently: no-op in development; log to console in production
- if (this.env === 'production') {
- console.error('[ErrorReporter]', entry.message, entry.context);
- }
- }
-}
-
-// Singleton
-const reporter = new ErrorReporter({ service: 'GameServer' });
-
-module.exports = reporter;
diff --git a/API/utils/logger.js b/API/utils/logger.js
deleted file mode 100644
index ca20d28..0000000
--- a/API/utils/logger.js
+++ /dev/null
@@ -1,27 +0,0 @@
-const winston = require('winston');
-
-const logger = winston.createLogger({
- level: process.env.LOG_LEVEL || 'info',
- format: winston.format.combine(
- winston.format.timestamp(),
- winston.format.errors({ stack: true }),
- winston.format.json()
- ),
- defaultMeta: { service: 'galaxystrikeonline-server' },
- transports: [
- new winston.transports.File({ filename: 'logs/error.log', level: 'error' }),
- new winston.transports.File({ filename: 'logs/combined.log' })
- ]
-});
-
-// Add console transport for development
-if (process.env.NODE_ENV !== 'production') {
- logger.add(new winston.transports.Console({
- format: winston.format.combine(
- winston.format.colorize(),
- winston.format.simple()
- )
- }));
-}
-
-module.exports = logger;
diff --git a/Client/data/starbase-layout.json b/Client/data/starbase-layout.json
deleted file mode 100644
index 955519e..0000000
--- a/Client/data/starbase-layout.json
+++ /dev/null
@@ -1,120 +0,0 @@
-{
- "_readme": [
- "Galaxy Strike Online — Starbase World Layout",
- "Edit this file to customize your starbase. Changes take effect next time you visit the Starbases tab.",
- "",
- "GRID",
- " cols / rows : overall size of the world (min 8×8, max ~32×26 before performance drops)",
- "",
- "STYLE (global defaults — all optional hex strings)",
- " wallColor / wallColorLeft / wallColorRight / wallColorTop",
- " floorColorEven / floorColorOdd",
- " doorColor / doorFrameColor",
- "",
- "WALLS — each entry draws a run of wall tiles",
- " col, row : start position",
- " span : number of tiles (default 1)",
- " dir : 'h' horizontal | 'v' vertical",
- " color / colorLeft / colorRight / colorTop : per-segment color overrides",
- "",
- "DOORS — walkable openings; panel slides up when player is adjacent",
- " col, row : position",
- " color : panel color override",
- " frameColor : pillar/frame color override",
- "",
- "ROOMS — named regions; rendered as ghost labels + used for per-room wallpapers",
- " id : unique string (used by the unlock / wallpaper system)",
- " label : display text",
- " bounds : { col, row, cols, rows }",
- " unlock : item id required to unlock this room (omit = always open)",
- " Locked rooms are filled with sealed-wall tiles and shown as 'LOCKED'",
- "",
- "PLAYER START",
- " col, row : spawn tile (must be walkable floor)"
- ],
-
- "name": "Starbase Alpha-7",
-
- "grid": { "cols": 26, "rows": 20 },
-
- "style": {
- "wallColor": "#00d4ff",
- "wallColorLeft": "#0c1626",
- "wallColorRight": "#0a1220",
- "wallColorTop": "#1a2840",
- "floorColorEven": "#151c2e",
- "floorColorOdd": "#111827",
- "doorColor": "#00ffcc",
- "doorFrameColor": "#00d4ff"
- },
-
- "walls": [
- { "col": 0, "row": 0, "span": 26, "dir": "h", "_": "top wall" },
- { "col": 0, "row": 19, "span": 26, "dir": "h", "_": "bottom wall" },
- { "col": 0, "row": 0, "span": 20, "dir": "v", "_": "left wall" },
- { "col": 25, "row": 0, "span": 20, "dir": "v", "_": "right wall" },
-
- { "col": 1, "row": 6, "span": 24, "dir": "h", "_": "main hall separator",
- "color": "#00d4ff", "colorLeft": "#0d1a2e", "colorRight": "#0a1525", "colorTop": "#182a42" },
-
- { "col": 7, "row": 7, "span": 13, "dir": "v", "_": "left inner wall" },
- { "col": 17, "row": 7, "span": 2, "dir": "v", "_": "right stub top" },
- { "col": 17, "row": 10, "span": 10, "dir": "v", "_": "right stub bottom",
- "color": "#4488ff", "colorLeft": "#0a1830", "colorRight": "#080e20", "colorTop": "#102040" },
-
- { "col": 7, "row": 13, "span": 10, "dir": "h", "_": "operations divider",
- "color": "#ff00ff", "colorLeft": "#1a0a20", "colorRight": "#120616", "colorTop": "#200a30" },
-
- { "col": 17, "row": 13, "span": 6, "dir": "h", "_": "vault corridor wall",
- "color": "#ffcc00", "colorLeft": "#1a1200", "colorRight": "#140e00", "colorTop": "#221800" }
- ],
-
- "doors": [
- { "col": 13, "row": 6, "dir": "h", "_": "main hall → command centre" },
- { "col": 17, "row": 6, "dir": "h", "color": "#4488ff", "frameColor": "#0066ff", "_": "main hall → right wing" },
- { "col": 7, "row": 10, "dir": "v", "_": "left wing ↔ command centre" },
- { "col": 17, "row": 9, "dir": "v", "color": "#ff88ff", "frameColor": "#cc44cc", "_": "command centre ↔ right wing" },
- { "col": 7, "row": 15, "dir": "v", "_": "left wing → operations" },
- { "col": 13, "row": 13, "dir": "h", "color": "#ff00ff", "frameColor": "#cc00cc", "_": "command centre → operations" },
- { "col": 20, "row": 13, "dir": "h", "color": "#ffcc00", "frameColor": "#ddaa00", "_": "right wing → vault corridor" }
- ],
-
- "rooms": [
- {
- "id": "main_hall",
- "label": "Main Hall",
- "bounds": { "col": 1, "row": 1, "cols": 24, "rows": 5 }
- },
- {
- "id": "left_wing",
- "label": "Armory Wing",
- "bounds": { "col": 1, "row": 7, "cols": 6, "rows": 12 },
- "unlock": "room_armory"
- },
- {
- "id": "command_centre",
- "label": "Command Centre",
- "bounds": { "col": 8, "row": 7, "cols": 9, "rows": 6 }
- },
- {
- "id": "right_wing",
- "label": "Research Lab",
- "bounds": { "col": 18, "row": 7, "cols": 7, "rows": 6 },
- "unlock": "room_research_lab"
- },
- {
- "id": "operations",
- "label": "Operations Centre",
- "bounds": { "col": 8, "row": 14, "cols": 9, "rows": 5 },
- "unlock": "room_operations"
- },
- {
- "id": "commanders_vault",
- "label": "Commander's Vault",
- "bounds": { "col": 18, "row": 14, "cols": 7, "rows": 5 },
- "unlock": "room_vault"
- }
- ],
-
- "playerStart": { "col": 13, "row": 3 }
-}
diff --git a/Client/electron-main.js b/Client/electron-main.js
deleted file mode 100644
index 5acd597..0000000
--- a/Client/electron-main.js
+++ /dev/null
@@ -1,480 +0,0 @@
-const { app, BrowserWindow, Menu, shell, ipcMain, Notification } = require('electron');
-const path = require('path');
-const fs = require('fs');
-const logger = require('./js/core/Logger');
-
-console.log('[MAIN PROCESS] Electron main process starting...');
-console.log('[MAIN PROCESS] Node.js version:', process.version);
-console.log('[MAIN PROCESS] Electron version:', process.versions.electron);
-console.log('[MAIN PROCESS] Platform:', process.platform);
-console.log('[MAIN PROCESS] Current working directory:', process.cwd());
-
-// Keep a global reference of the window object
-let mainWindow;
-
-function createWindow() {
- console.log('[MAIN PROCESS] createWindow() called');
-
- try {
- console.log('[MAIN PROCESS] Creating BrowserWindow...');
- // Create the browser window
- mainWindow = new BrowserWindow({
- width: 1200,
- height: 832, // 800 + 32px for custom title bar
- minWidth: 1200,
- minHeight: 832,
- maxWidth: 1200,
- maxHeight: 832,
- resizable: false,
- frame: false,
- titleBarStyle: 'hidden',
- webPreferences: {
- nodeIntegration: true,
- contextIsolation: false,
- enableRemoteModule: true,
- webSecurity: true
- },
- icon: path.join(__dirname, 'assets/icon.png'),
- show: false, // Don't show until ready-to-show
- title: 'Galaxy Strike Online'
- });
-
- console.log('[MAIN PROCESS] BrowserWindow created successfully');
- console.log('[MAIN PROCESS] Loading index.html...');
-
- // Load the index.html file
- mainWindow.loadFile('index.html');
-
- console.log('[MAIN PROCESS] index.html loaded, setting up electronAPI...');
-
- // Set up electronAPI after DOM is ready
- mainWindow.webContents.on('dom-ready', () => {
- console.log('[MAIN PROCESS] DOM is ready, setting up electronAPI...');
- mainWindow.webContents.executeJavaScript(`
- console.log('[RENDERER] Setting up electronAPI...');
- window.electronAPI = {
- minimizeWindow: () => require('electron').ipcRenderer.send('minimize-window'),
- closeWindow: () => require('electron').ipcRenderer.send('close-window'),
- toggleFullscreen: () => require('electron').ipcRenderer.send('toggle-fullscreen'),
- log: (level, message, data) => require('electron').ipcRenderer.send('log-message', { level, message, data }),
- createSaveFolders: (saveSlots) => require('electron').ipcRenderer.invoke('create-save-folders', saveSlots),
- testFileAccess: (slotPath) => require('electron').ipcRenderer.invoke('test-file-access', slotPath),
- saveGame: (slot, saveData) => require('electron').ipcRenderer.invoke('save-game', slot, saveData),
- loadGame: (slot) => require('electron').ipcRenderer.invoke('load-game', slot),
- getPath: (name) => require('electron').ipcRenderer.invoke('get-path', name),
- deleteSaveFile: (slot) => require('electron').ipcRenderer.invoke('delete-save-file', slot)
- };
- console.log('[RENDERER] electronAPI setup completed');
- `).then(() => {
- console.log('[MAIN PROCESS] electronAPI setup completed');
- }).catch((error) => {
- console.error('[MAIN PROCESS] Failed to setup electronAPI:', error);
- });
- });
-
- // Show window when ready
- mainWindow.once('ready-to-show', () => {
- console.log('[MAIN PROCESS] Window ready-to-show event fired');
- mainWindow.show();
- });
-
- // Open DevTools in development
- if (process.argv.includes('--dev')) {
- console.log('[MAIN PROCESS] Opening DevTools...');
- mainWindow.webContents.openDevTools();
- }
-
- // Handle window closed
- mainWindow.on('closed', () => {
- console.log('[MAIN PROCESS] Window closed event fired');
- mainWindow = null;
- });
-
- // Handle renderer process crashes
- mainWindow.webContents.on('render-process-gone', (event, details) => {
- console.error('[MAIN PROCESS] Renderer process crashed:', details);
- console.error('[MAIN PROCESS] Crash reason:', details.reason);
- console.error('[MAIN PROCESS] Exit code:', details.exitCode);
- });
-
- // Handle renderer process unresponsive
- mainWindow.webContents.on('unresponsive', () => {
- console.warn('[MAIN PROCESS] Renderer process unresponsive');
- });
-
- // Handle renderer process responsive again
- mainWindow.webContents.on('responsive', () => {
- console.log('[MAIN PROCESS] Renderer process responsive again');
- });
-
- // Handle console messages from renderer
- mainWindow.webContents.on('console-message', (event, level, message, line, sourceId) => {
- console.log(`[RENDERER CONSOLE] [${level}] ${message} (line: ${line}, source: ${sourceId})`);
- });
-
- // Handle page load errors
- mainWindow.webContents.on('did-fail-load', (event, errorCode, errorDescription, validatedURL, isMainFrame) => {
- console.error('[MAIN PROCESS] Page failed to load:', errorCode, errorDescription, validatedURL);
- });
-
- // Handle page load success
- mainWindow.webContents.on('did-finish-load', () => {
- console.log('[MAIN PROCESS] Page finished loading');
- });
-
- // Handle DOM ready
- mainWindow.webContents.on('dom-ready', () => {
- console.log('[MAIN PROCESS] DOM is ready');
- });
-
- // Handle external links
- mainWindow.webContents.setWindowOpenHandler(({ url }) => {
- console.log('[MAIN PROCESS] External link requested:', url);
- shell.openExternal(url);
- return { action: 'deny' };
- });
-
- console.log('[MAIN PROCESS] createWindow() completed successfully');
-
- } catch (error) {
- console.error('[MAIN PROCESS] Error in createWindow():', error);
- console.error('[MAIN PROCESS] Error stack:', error.stack);
- }
-}
-
-// IPC handlers for save operations
-ipcMain.handle('create-save-folders', async (event, saveSlots) => {
- console.log('[MAIN PROCESS] create-save-folders called with saveSlots:', saveSlots);
- try {
- const userDataPath = app.getPath('userData');
- console.log('[MAIN PROCESS] userDataPath:', userDataPath);
- const savesDir = path.join(userDataPath, 'saves');
- console.log('[MAIN PROCESS] savesDir:', savesDir);
-
- // Create main saves directory
- if (!fs.existsSync(savesDir)) {
- console.log('[MAIN PROCESS] Creating saves directory:', savesDir);
- fs.mkdirSync(savesDir, { recursive: true });
- console.log('[MAIN PROCESS] Saves directory created successfully');
- } else {
- console.log('[MAIN PROCESS] Saves directory already exists');
- }
-
- const paths = {
- base: savesDir,
- slots: []
- };
-
- // Create save slot directories
- for (let i = 1; i <= saveSlots; i++) {
- const slotDir = path.join(savesDir, `slot${i}`);
- console.log(`[MAIN PROCESS] Checking/creating slot ${i} directory:`, slotDir);
- if (!fs.existsSync(slotDir)) {
- console.log(`[MAIN PROCESS] Creating slot ${i} directory`);
- fs.mkdirSync(slotDir, { recursive: true });
-
- // Create initial save info file
- const saveInfo = {
- slot: i,
- created: new Date().toISOString(),
- version: '1.0.0',
- exists: false
- };
-
- const infoPath = path.join(slotDir, 'saveinfo.json');
- fs.writeFileSync(infoPath, JSON.stringify(saveInfo, null, 2));
- console.log(`[MAIN PROCESS] Created save info for slot ${i}`);
- } else {
- console.log(`[MAIN PROCESS] Slot ${i} directory already exists`);
- }
- paths.slots.push(slotDir);
- }
-
- console.log('[MAIN PROCESS] Save folders created successfully, returning paths:', paths);
- return { success: true, paths };
- } catch (error) {
- console.error('[MAIN PROCESS] Failed to create save folders:', error);
- return { success: false, error: error.message };
- }
-});
-
-ipcMain.handle('test-file-access', async (event, slotPath) => {
- try {
- const testFile = path.join(slotPath, 'access_test.txt');
- fs.writeFileSync(testFile, 'test');
- fs.unlinkSync(testFile);
- return { success: true };
- } catch (error) {
- return { success: false, error: error.message };
- }
-});
-
-ipcMain.handle('save-game', async (event, slot, saveData) => {
- try {
- const userDataPath = app.getPath('userData');
- const savesDir = path.join(userDataPath, 'saves');
- const slotDir = path.join(savesDir, `slot${slot}`);
-
- // Save game data
- const saveFilePath = path.join(slotDir, 'save.json');
- fs.writeFileSync(saveFilePath, JSON.stringify(saveData, null, 2));
-
- // Update save info
- const infoPath = path.join(slotDir, 'saveinfo.json');
- const saveInfo = {
- slot: slot,
- created: new Date().toISOString(),
- lastSaved: new Date().toISOString(),
- version: '1.0.0',
- exists: true,
- playTime: saveData.gameTime || 0
- };
- fs.writeFileSync(infoPath, JSON.stringify(saveInfo, null, 2));
-
- return { success: true };
- } catch (error) {
- console.error('Failed to save game:', error);
- return { success: false, error: error.message };
- }
-});
-
-ipcMain.handle('load-game', async (event, slot) => {
- try {
- const userDataPath = app.getPath('userData');
- const savesDir = path.join(userDataPath, 'saves');
- const slotDir = path.join(savesDir, `slot${slot}`);
- const saveFilePath = path.join(slotDir, 'save.json');
-
- if (fs.existsSync(saveFilePath)) {
- const saveContent = fs.readFileSync(saveFilePath, 'utf8');
- const saveData = JSON.parse(saveContent);
- return { success: true, data: saveData };
- } else {
- return { success: false, error: 'Save file not found' };
- }
- } catch (error) {
- console.error('Failed to load game:', error);
- return { success: false, error: error.message };
- }
-});
-
-ipcMain.handle('get-path', async (event, name) => {
- try {
- return app.getPath(name);
- } catch (error) {
- return null;
- }
-});
-
-ipcMain.handle('delete-save-file', async (event, slot) => {
- console.log('[MAIN PROCESS] delete-save-file called for slot:', slot);
- try {
- const userDataPath = app.getPath('userData');
- const savesDir = path.join(userDataPath, 'saves');
- const slotDir = path.join(savesDir, `slot${slot}`);
- const saveFilePath = path.join(slotDir, 'save.json');
- const infoFilePath = path.join(slotDir, 'saveinfo.json');
-
- console.log('[MAIN PROCESS] Attempting to delete save files from:', slotDir);
-
- let deletedFiles = [];
-
- // Delete save file if it exists
- if (fs.existsSync(saveFilePath)) {
- console.log('[MAIN PROCESS] Deleting save file:', saveFilePath);
- fs.unlinkSync(saveFilePath);
- deletedFiles.push('save.json');
- }
-
- // Delete save info file if it exists
- if (fs.existsSync(infoFilePath)) {
- console.log('[MAIN PROCESS] Deleting save info file:', infoFilePath);
- fs.unlinkSync(infoFilePath);
- deletedFiles.push('saveinfo.json');
- }
-
- // Create empty save info file to indicate slot is empty
- const saveInfo = {
- slot: slot,
- created: new Date().toISOString(),
- version: '1.0.0',
- exists: false,
- deleted: new Date().toISOString()
- };
- fs.writeFileSync(infoFilePath, JSON.stringify(saveInfo, null, 2));
-
- console.log('[MAIN PROCESS] Successfully deleted save files for slot', slot, ':', deletedFiles);
- return { success: true, deletedFiles };
- } catch (error) {
- console.error('[MAIN PROCESS] Failed to delete save file:', error);
- return { success: false, error: error.message };
- }
-});
-
-// IPC handlers for window controls
-
-// ── Push Notifications (Electron desktop) ────────────────────────────────────
-ipcMain.on('show-notification', (event, { title, body, icon, tag }) => {
- try {
- if (!Notification.isSupported()) return;
- const n = new Notification({
- title: title || 'Galaxy Strike Online',
- body: body || '',
- icon: icon || path.join(__dirname, 'assets/icon.png'),
- silent: false,
- urgency: 'normal', // 'low' | 'normal' | 'critical'
- });
- n.on('click', () => {
- if (mainWindow) {
- if (mainWindow.isMinimized()) mainWindow.restore();
- mainWindow.focus();
- }
- });
- n.show();
- } catch (err) {
- console.error('[MAIN PROCESS] Notification error:', err.message);
- }
-});
-
-// Allow renderer to check if window is focused (suppress notifications when in focus)
-ipcMain.handle('is-window-focused', () => {
- return mainWindow ? mainWindow.isFocused() : true;
-});
-
-// Handle logging from renderer process
-ipcMain.on('log-message', async (event, { level, message, data }) => {
- try {
- switch (level) {
- case 'error':
- await logger.error(message, data);
- break;
- case 'warn':
- await logger.warn(message, data);
- break;
- case 'info':
- await logger.info(message, data);
- break;
- case 'debug':
- await logger.debug(message, data);
- break;
- default:
- await logger.info(message, data);
- }
- } catch (error) {
- console.error('Failed to log message from renderer:', error);
- // Fallback to console logging to prevent infinite loops
- console.log(`[${level}] ${message}`, data || '');
- }
-});
-
-ipcMain.on('minimize-window', () => {
- if (mainWindow) {
- mainWindow.minimize();
- }
-});
-
-ipcMain.on('close-window', () => {
- if (mainWindow) {
- mainWindow.close();
- }
-});
-
-ipcMain.on('toggle-fullscreen', () => {
- if (mainWindow) {
- const isFullscreen = mainWindow.isFullScreen();
- if (isFullscreen) {
- mainWindow.setFullScreen(false);
- mainWindow.setSize(1200, 832);
- mainWindow.center();
- } else {
- mainWindow.setFullScreen(true);
- }
- }
-});
-
-// This method will be called when Electron has finished initialization
-app.whenReady().then(async () => {
- console.log('[MAIN PROCESS] Electron app ready, starting initialization...');
-
- try {
- // Initialize logger with app data path
- console.log('[MAIN PROCESS] Initializing logger...');
- await logger.initialize(app.getPath('userData'));
- console.log('[MAIN PROCESS] Logger initialized');
-
- await logger.info('Galaxy Strike Online application starting');
- console.log('[MAIN PROCESS] Logger info message sent');
-
- console.log('[MAIN PROCESS] Creating main window...');
- createWindow();
-
- app.on('activate', () => {
- console.log('[MAIN PROCESS] Activate event fired');
- // On macOS it's common to re-create a window in the app when the dock icon is clicked
- if (BrowserWindow.getAllWindows().length === 0) {
- console.log('[MAIN PROCESS] No windows exist, creating new window');
- createWindow();
- }
- });
-
- console.log('[MAIN PROCESS] App initialization completed successfully');
-
- } catch (error) {
- console.error('[MAIN PROCESS] Error during app initialization:', error);
- console.error('[MAIN PROCESS] Error stack:', error.stack);
- }
-}).catch((error) => {
- console.error('[MAIN PROCESS] Error in app.whenReady():', error);
- console.error('[MAIN PROCESS] Error stack:', error.stack);
-});
-
-// Quit when all windows are closed
-app.on('window-all-closed', () => {
- // On macOS it's common for applications and their menu bar to stay active
- if (process.platform !== 'darwin') {
- logger.info('Application shutting down');
- app.quit();
- }
-});
-
-// Handle uncaught exceptions
-process.on('uncaughtException', async (error) => {
- console.error('[MAIN PROCESS] Uncaught Exception:', error);
- console.error('[MAIN PROCESS] Uncaught Exception stack:', error.stack);
-
- try {
- if (logger && typeof logger.errorEvent === 'function') {
- await logger.errorEvent(error, 'Uncaught Exception in Main Process');
- }
- } catch (logError) {
- console.error('[MAIN PROCESS] Failed to log uncaught exception:', logError);
- }
-
- console.error('[MAIN PROCESS] Application will continue running despite uncaught exception');
-});
-
-// Handle unhandled promise rejections
-process.on('unhandledRejection', (reason, promise) => {
- console.error('[MAIN PROCESS] Unhandled Promise Rejection at:', promise, 'reason:', reason);
- console.error('[MAIN PROCESS] Rejection reason stack:', reason.stack);
-});
-
-// Handle unhandled rejections
-process.on('unhandledRejection', async (reason, promise) => {
- // Avoid logging the logging system's own errors to prevent infinite loops
- if (reason && reason.message && reason.message.includes('object could not be cloned')) {
- console.warn('IPC cloning error detected - this is expected during logger initialization');
- return;
- }
-
- await logger.error('Unhandled Rejection', { reason: reason.toString(), promise: promise.toString() });
- console.error('Unhandled Rejection at:', promise, 'reason:', reason);
-});
-
-// Security: Prevent new window creation
-app.on('web-contents-created', (event, contents) => {
- contents.on('new-window', (event, navigationUrl) => {
- event.preventDefault();
- shell.openExternal(navigationUrl);
- });
-});
diff --git a/Client/index.html b/Client/index.html
index 2a5829a..7c0c5fa 100644
--- a/Client/index.html
+++ b/Client/index.html
@@ -1,10789 +1,25 @@
-
-
+
-
-
-
-
-
-
-
- Galaxy Strike Online - Space Idle MMORPG
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Skip to main content
-
-
-
-
-
-
-
-
-
- Galaxy Strike Online
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
GALAXY STRIKE ONLINE
-
-
-
-
Initializing Universe...
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Fleet Status
-
-
-
-
-
-
-
-
-
-
Flagship: Starter Cruiser
-
-
Health: 100%
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Idle Progress
-
-
-
-
Offline Time: 0h 0m
-
-
Offline Buffer
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
⏰ Welcome Back!
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Player Stats
-
-
-
-
-
- Level
-
- 1
-
-
-
-
-
- Experience
-
- 0 / 500
-
-
-
-
-
-
-
-
-
- Skill Points
-
- 0
-
-
-
-
-
- Total XP Earned
-
- 0
-
-
-
-
-
- Quests Completed
-
- 0
-
-
-
-
-
- Last Login
-
- Never
-
-
-
-
-
- Total Kills
-
- 0
-
-
-
-
-
- Dungeons Cleared
-
- 0
-
-
-
-
-
- Play Time
-
- 0m 0s
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Select Dungeon
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Select a dungeon to begin your adventure
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Your Starbase
-
-
-
-
-
-
-
-
-
-
Available to Build
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Base Information
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
🚀 Shipyard
-
- Shipyard Level: 1 | Queue: 0/3
-
-
-
-
-
-
-
-
-
-
-
-
📋 Available Blueprints
-
-
-
-
Loading blueprints…
-
-
-
-
-
-
-
-
-
-
-
-
-
-
⚙ Construction Queue
-
-
-
-
Slot 1 — Empty
-
-
Slot 2 — Empty
-
-
Slot 3 — Empty
-
-
-
-
-
-
-
-
🛸 Your Fleet (0)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Daily quests reset in: 00:00:00
-
-
Weekly quests reset in: 0d 00:00
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Ship Modules
-
-
Loading modules...
-
-
-
-
-
-
-
-
-
-
Inventory
-
-
-
-
-
-
-
-
-
-
-
-
Select an item to view details
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ⚙ CRAFT QUEUE (0/5)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Loading recipes...
-
-
-
-
-
-
-
-
-
-
-
-
Select a recipe
-
-
Choose a recipe from the list to see requirements and craft.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 💎 GEM STORE
- Your gems: 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
RAIDS
-
-
-
-
-
-
⚔️ RAID IN PROGRESS
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
RANKED PVP
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- | # |
- Player |
- Tier |
- Rating |
- W / L |
-
-
-
-
-
-
-
-
⚔️ Match History
-
-
-
-
Loading match history…
-
-
-
-
-
-
-
-
-
-
-
ALLIANCE WARS
-
-
-
-
-
Not currently in a war. Leaders and officers can declare war on rival alliances.
-
-
-
-
-
-
-
-
-
-
ACTIVE WARS
-
-
No active wars. The galaxy is at peace... for now.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 🏗 HANGAR (available ships)
-
-
- Drag ships here to remove from formation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
⚗ Active Research Bonuses
-
-
-
-
-
-
-
-
-
-
Branches
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Loading research…
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
🏆 Commander Rankings
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Select a category above to view rankings.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
🚀 Fleet Missions
-
-
Send your ships on missions to earn resources, XP and loot. Missions run in real-time — check back to collect rewards.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
📋 Mission Types
-
-
Loading…
-
-
-
-
-
-
🛸 Select Ships
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ⏱ Active Missions
-
-
-
-
-
-
-
-
No active missions
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
📋 Available Faction Missions
-
-
Build reputation with NPC factions by completing their missions. Higher reputation unlocks better missions and discounts.
-
-
-
-
-
-
-
-
⏱ Active Faction Missions
-
-
-
-
No active faction missions
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
🛡 Alliance
-
-
-
-
-
-
-
-
-
-
-
-
-
-
🔍 Find Alliance
-
-
-
-
-
-
-
-
-
-
Search for alliances above
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- My Alliance
-
- TAG
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
🏦 Alliance Warehouse
-
-
-
-
-
-
Deposit Resources
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 🔬 Alliance Research
-
-
-
-
Loading research tree…
-
-
-
-
-
-
-
-
💬 Alliance Chat
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
🏪 Player Market
-
-
Trade resources and items with other commanders. 2% listing fee. Listings expire after 24–72 hours.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
📦 List a Resource
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
🎒 List an Item
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Loading your listings…
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
⚙ Settings
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Reduced Motion (disables particles)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
👥 Social
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
🤝 Add Friend
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
📬 Friend Requests (0)
-
-
-
-
-
-
-
-
-
-
👾 Friends (0 online)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 🌐 Faction Reputation (GDD §15.3)
-
-
-
-
-
-
-
-
-
-
-
-
-
- ⚔ Combat Log (GDD §9.5)
-
-
-
-
-
-
-
-
No combat history yet
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Initializing...
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
SELECT MODULE
-
-
-
-
-
-
-
-
No equippable items for this slot
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
👥 Social
- - - -🤝 Add Friend
- -📬 Friend Requests (0)
- -👾 Friends (0 online)
- -- - 🌐 Faction Reputation (GDD §15.3) - - - -
- -- - ⚔ Combat Log (GDD §9.5) - - - -
- -