Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Self hosting stardew.app #121

Open
alexraileanu opened this issue Nov 18, 2024 · 9 comments
Open

Self hosting stardew.app #121

alexraileanu opened this issue Nov 18, 2024 · 9 comments
Assignees

Comments

@alexraileanu
Copy link

hey there.

i would like to self-host stardew.app on my home server. do you have any kind of rough guide on how to achieve this? i've been trying to do it myself from scratch for the past few days but i'm running into a bunch of issues.

ideally i'd have the react app running in a docker container.

let me know if i can help somehow if this isn't already possible!

@clxmente
Copy link
Member

What specifically are you having issues with? If I have some time today, I can look into this, add a compose file and a section to the README with some more clarification or details needed to self-host 👍

@alexraileanu
Copy link
Author

alexraileanu commented Nov 18, 2024

hey @clxmente thanks for the quick reply!

i had a few issues. i couldn't get the app to build using bun run build as eslint would complain in a few places (had to add // eslint-ignore-next-line in a few spots. also just in general getting a docker image to build with bun was a bit of a pain (but i think this was primarily because of my lack of knowledge of the node ecosystem).

the one issue i can't really solve is the following. when i save a new farmer, the save info gets saved correctly in the db as json. however, when i make a request to /saves that json comes back as a string instead of properly parsed json:

[
  {
    "_id": "1933e9d36449536cc",
    "user_id": "e9df7d2b46f9b883688ea7bd99b04b76",
    "general": "{\"name\": \"test\", \"gameVersion\": \"1.6.0\", \"questsCompleted\": 0, \"farmInfo\": \"test (Standard)\", \"totalMoneyEarned\": 0, \"skills\": {\"farming\": 0, \"fishing\": 0, \"foraging\": 0, \"mining\": 0, \"combat\": 0, \"luck\": 0}, \"stardrops\": [\"CF_Fair\"]}",
    "fishing": "{\"totalCaught\": 0, \"fishCaught\": []}",
    "cooking": "{}",
    "crafting": "{}",
    "shipping": "{}",
    "museum": "{}",
    "social": "{\"relationships\": {}, \"childrenCount\": 0, \"houseUpgradeLevel\": 0}",
    "monsters": "{}",
    "walnuts": "{}",
    "notes": "{}",
    "scraps": "{}",
    "perfection": "{\"numObelisks\": 0, \"goldenClock\": false}",
    "powers": "{}",
    "bundles": "[{\"bundle\": {\"name\": \"Spring Crops\", \"items\": [{\"itemID\": \"24\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"188\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"190\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"192\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 4, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"465\", \"itemQuantity\": 20}, \"areaName\": \"Pantry\", \"localizedName\": \"Spring Crops\"}, \"bundleStatus\": [true, true, true, true]}, {\"bundle\": {\"name\": \"Summer Crops\", \"items\": [{\"itemID\": \"256\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"260\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"258\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"254\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 4, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"621\", \"itemQuantity\": 1}, \"areaName\": \"Pantry\", \"localizedName\": \"Summer Crops\"}, \"bundleStatus\": [false, false, false, false]}, {\"bundle\": {\"name\": \"Fall Crops\", \"items\": [{\"itemID\": \"270\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"272\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"276\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"280\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 4, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"10\", \"itemQuantity\": 1}, \"areaName\": \"Pantry\", \"localizedName\": \"Fall Crops\"}, \"bundleStatus\": [false, false, false, false]}, {\"bundle\": {\"name\": \"Quality Crops\", \"items\": [{\"itemID\": \"24\", \"itemQuantity\": 5, \"itemQuality\": \"2\", \"options\": [{\"itemID\": \"188\", \"itemQuantity\": 5, \"itemQuality\": \"2\"}, {\"itemID\": \"192\", \"itemQuantity\": 5, \"itemQuality\": \"2\"}, {\"itemID\": \"190\", \"itemQuantity\": 5, \"itemQuality\": \"2\"}]}, {\"itemID\": \"254\", \"itemQuantity\": 5, \"itemQuality\": \"2\", \"options\": [{\"itemID\": \"258\", \"itemQuantity\": 5, \"itemQuality\": \"2\"}, {\"itemID\": \"260\", \"itemQuantity\": 5, \"itemQuality\": \"2\"}]}, {\"itemID\": \"276\", \"itemQuantity\": 5, \"itemQuality\": \"2\", \"options\": [{\"itemID\": \"280\", \"itemQuantity\": 5, \"itemQuality\": \"2\"}, {\"itemID\": \"272\", \"itemQuantity\": 5, \"itemQuality\": \"2\"}]}, {\"itemID\": \"270\", \"itemQuantity\": 5, \"itemQuality\": \"2\"}], \"itemsRequired\": 3, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"15\", \"itemQuantity\": 1}, \"areaName\": \"Pantry\", \"localizedName\": \"Quality Crops\"}, \"bundleStatus\": [false, false, false, false], \"options\": [{\"name\": \"Quality Crops\", \"items\": [{\"itemID\": \"24\", \"itemQuantity\": 5, \"itemQuality\": \"2\", \"options\": [{\"itemID\": \"188\", \"itemQuantity\": 5, \"itemQuality\": \"2\"}, {\"itemID\": \"192\", \"itemQuantity\": 5, \"itemQuality\": \"2\"}, {\"itemID\": \"190\", \"itemQuantity\": 5, \"itemQuality\": \"2\"}]}, {\"itemID\": \"254\", \"itemQuantity\": 5, \"itemQuality\": \"2\", \"options\": [{\"itemID\": \"258\", \"itemQuantity\": 5, \"itemQuality\": \"2\"}, {\"itemID\": \"260\", \"itemQuantity\": 5, \"itemQuality\": \"2\"}]}, {\"itemID\": \"276\", \"itemQuantity\": 5, \"itemQuality\": \"2\", \"options\": [{\"itemID\": \"280\", \"itemQuantity\": 5, \"itemQuality\": \"2\"}, {\"itemID\": \"272\", \"itemQuantity\": 5, \"itemQuality\": \"2\"}]}, {\"itemID\": \"270\", \"itemQuantity\": 5, \"itemQuality\": \"2\"}], \"itemsRequired\": 3, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"15\", \"itemQuantity\": 1}, \"localizedName\": \"Quality Crops\"}, {\"name\": \"Rare Crops\", \"items\": [{\"itemID\": \"454\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"417\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 1, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"15\", \"itemQuantity\": 1}, \"localizedName\": \"Rare Crops\"}]}, {\"bundle\": {\"name\": \"Animal\", \"items\": [{\"itemID\": \"186\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"182\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"174\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"438\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"440\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"442\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 5, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"16\", \"itemQuantity\": 1}, \"areaName\": \"Pantry\", \"localizedName\": \"Animal\"}, \"bundleStatus\": [false, false, false, false, false, false], \"options\": [{\"name\": \"Animal\", \"items\": [{\"itemID\": \"186\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"182\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"174\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"438\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"440\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"442\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 5, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"16\", \"itemQuantity\": 1}, \"localizedName\": \"Animal\"}, {\"name\": \"Fish Farmer's\", \"items\": [{\"itemID\": \"812\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"447\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"814\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 2, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"154\", \"itemQuantity\": 1}, \"localizedName\": \"Fish Farmer's\"}, {\"name\": \"Garden\", \"items\": [{\"itemID\": \"300\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"302\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"304\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"306\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"308\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 4, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"621\", \"itemQuantity\": 1}, \"localizedName\": \"Garden\"}]}, {\"bundle\": {\"name\": \"Artisan\", \"items\": [{\"itemID\": \"432\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"428\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"426\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"424\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"340\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"344\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"613\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"634\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"635\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"636\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"637\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"638\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 6, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"12\", \"itemQuantity\": 1}, \"areaName\": \"Pantry\", \"localizedName\": \"Artisan\"}, \"bundleStatus\": [false, false, false, false, false, false, false, false, false, false, false, false], \"options\": [{\"name\": \"Artisan\", \"items\": [{\"itemID\": \"432\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"428\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"426\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"424\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"340\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"344\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"613\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"634\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"635\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"636\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"637\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"638\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 6, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"12\", \"itemQuantity\": 1}, \"localizedName\": \"Artisan\"}, {\"name\": \"Brewer's\", \"items\": [{\"itemID\": \"459\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"303\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"348\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"350\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"614\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 4, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"12\", \"itemQuantity\": 1}, \"localizedName\": \"Brewer's\"}]}, {\"bundle\": {\"name\": \"Spring Foraging\", \"items\": [{\"itemID\": \"16\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"399\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}, {\"itemID\": \"18\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"399\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}, {\"itemID\": \"20\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"399\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}, {\"itemID\": \"22\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"399\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}], \"itemsRequired\": 4, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"495\", \"itemQuantity\": 30}, \"areaName\": \"Crafts Room\", \"localizedName\": \"Spring Foraging\"}, \"bundleStatus\": [false, false, false, false]}, {\"bundle\": {\"name\": \"Summer Foraging\", \"items\": [{\"itemID\": \"396\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"398\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"402\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 3, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"496\", \"itemQuantity\": 30}, \"areaName\": \"Crafts Room\", \"localizedName\": \"Summer Foraging\"}, \"bundleStatus\": [false, false, false]}, {\"bundle\": {\"name\": \"Fall Foraging\", \"items\": [{\"itemID\": \"404\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"406\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"408\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"410\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 4, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"497\", \"itemQuantity\": 30}, \"areaName\": \"Crafts Room\", \"localizedName\": \"Fall Foraging\"}, \"bundleStatus\": [false, false, false, false]}, {\"bundle\": {\"name\": \"Winter Foraging\", \"items\": [{\"itemID\": \"412\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"283\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}, {\"itemID\": \"414\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"283\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}, {\"itemID\": \"416\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"283\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}, {\"itemID\": \"418\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"283\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}], \"itemsRequired\": 4, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"498\", \"itemQuantity\": 30}, \"areaName\": \"Crafts Room\", \"localizedName\": \"Winter Foraging\"}, \"bundleStatus\": [false, false, false, false]}, {\"bundle\": {\"name\": \"Construction\", \"items\": [{\"itemID\": \"388\", \"itemQuantity\": 99, \"itemQuality\": \"0\"}, {\"itemID\": \"388\", \"itemQuantity\": 99, \"itemQuality\": \"0\"}, {\"itemID\": \"390\", \"itemQuantity\": 99, \"itemQuality\": \"0\"}, {\"itemID\": \"709\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}], \"itemsRequired\": 4, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"114\", \"itemQuantity\": 1}, \"areaName\": \"Crafts Room\", \"localizedName\": \"Construction\"}, \"bundleStatus\": [false, false, false, false], \"options\": [{\"name\": \"Construction\", \"items\": [{\"itemID\": \"388\", \"itemQuantity\": 99, \"itemQuality\": \"0\"}, {\"itemID\": \"388\", \"itemQuantity\": 99, \"itemQuality\": \"0\"}, {\"itemID\": \"390\", \"itemQuantity\": 99, \"itemQuality\": \"0\"}, {\"itemID\": \"709\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}], \"itemsRequired\": 4, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"114\", \"itemQuantity\": 1}, \"localizedName\": \"Construction\"}, {\"name\": \"Sticky\", \"items\": [{\"itemID\": \"92\", \"itemQuantity\": 500, \"itemQuality\": \"0\"}], \"itemsRequired\": 1, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"114\", \"itemQuantity\": 1}, \"localizedName\": \"Sticky\"}, {\"name\": \"Forest\", \"items\": [{\"itemID\": \"Moss\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}, {\"itemID\": \"771\", \"itemQuantity\": 200, \"itemQuality\": \"0\"}, {\"itemID\": \"309\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}], \"itemsRequired\": 3, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"114\", \"itemQuantity\": 1}, \"localizedName\": \"Forest\"}]}, {\"bundle\": {\"name\": \"Exotic Foraging\", \"items\": [{\"itemID\": \"88\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"90\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"78\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"420\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"422\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"724\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"725\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"726\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"257\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 5, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"235\", \"itemQuantity\": 5}, \"areaName\": \"Crafts Room\", \"localizedName\": \"Exotic Foraging\"}, \"bundleStatus\": [false, false, false, false, false, false, false, false, false], \"options\": [{\"name\": \"Exotic Foraging\", \"items\": [{\"itemID\": \"88\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"90\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"78\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"420\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"422\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"724\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"725\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"726\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"257\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 5, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"235\", \"itemQuantity\": 5}, \"localizedName\": \"Exotic Foraging\"}, {\"name\": \"Wild Medicine\", \"items\": [{\"itemID\": \"422\", \"itemQuantity\": 5, \"itemQuality\": \"0\"}, {\"itemID\": \"259\", \"itemQuantity\": 5, \"itemQuality\": \"0\"}, {\"itemID\": \"157\", \"itemQuantity\": 5, \"itemQuality\": \"0\"}, {\"itemID\": \"304\", \"itemQuantity\": 5, \"itemQuality\": \"0\"}], \"itemsRequired\": 3, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"926\", \"itemQuantity\": 2}, \"localizedName\": \"Wild Medicine\"}]}, {\"bundle\": {\"name\": \"River Fish\", \"items\": [{\"itemID\": \"145\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}, {\"itemID\": \"143\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}, {\"itemID\": \"706\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}, {\"itemID\": \"699\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}], \"itemsRequired\": 4, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"685\", \"itemQuantity\": 30}, \"areaName\": \"Fish Tank\", \"localizedName\": \"River Fish\"}, \"bundleStatus\": [false, false, false, false]}, {\"bundle\": {\"name\": \"Lake Fish\", \"items\": [{\"itemID\": \"136\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}, {\"itemID\": \"142\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}, {\"itemID\": \"700\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}, {\"itemID\": \"698\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}], \"itemsRequired\": 4, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"687\", \"itemQuantity\": 1}, \"areaName\": \"Fish Tank\", \"localizedName\": \"Lake Fish\"}, \"bundleStatus\": [false, false, false, false]}, {\"bundle\": {\"name\": \"Ocean Fish\", \"items\": [{\"itemID\": \"131\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}, {\"itemID\": \"130\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}, {\"itemID\": \"150\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}, {\"itemID\": \"701\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}], \"itemsRequired\": 4, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"690\", \"itemQuantity\": 5}, \"areaName\": \"Fish Tank\", \"localizedName\": \"Ocean Fish\"}, \"bundleStatus\": [false, false, false, false]}, {\"bundle\": {\"name\": \"Night Fishing\", \"items\": [{\"itemID\": \"140\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}, {\"itemID\": \"132\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}, {\"itemID\": \"148\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}], \"itemsRequired\": 3, \"bundleReward\": {\"itemType\": \"R\", \"itemID\": \"516\", \"itemQuantity\": 1}, \"areaName\": \"Fish Tank\", \"localizedName\": \"Night Fishing\"}, \"bundleStatus\": [false, false, false]}, {\"bundle\": {\"name\": \"Crab Pot\", \"items\": [{\"itemID\": \"715\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}, {\"itemID\": \"716\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}, {\"itemID\": \"717\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}, {\"itemID\": \"718\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}, {\"itemID\": \"719\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}, {\"itemID\": \"720\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}, {\"itemID\": \"721\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}, {\"itemID\": \"722\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}, {\"itemID\": \"723\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}, {\"itemID\": \"372\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}], \"itemsRequired\": 5, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"710\", \"itemQuantity\": 3}, \"areaName\": \"Fish Tank\", \"localizedName\": \"Crab Pot\"}, \"bundleStatus\": [false, false, false, false, false, false, false, false, false, false]}, {\"bundle\": {\"name\": \"Specialty Fish\", \"items\": [{\"itemID\": \"128\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}, {\"itemID\": \"156\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}, {\"itemID\": \"164\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}, {\"itemID\": \"734\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}], \"itemsRequired\": 4, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"242\", \"itemQuantity\": 5}, \"areaName\": \"Fish Tank\", \"localizedName\": \"Specialty Fish\"}, \"bundleStatus\": [false, false, false, false], \"options\": [{\"name\": \"Specialty Fish\", \"items\": [{\"itemID\": \"128\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}, {\"itemID\": \"156\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}, {\"itemID\": \"164\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}, {\"itemID\": \"734\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}], \"itemsRequired\": 4, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"242\", \"itemQuantity\": 5}, \"localizedName\": \"Specialty Fish\"}, {\"name\": \"Quality Fish\", \"items\": [{\"itemID\": \"136\", \"itemQuantity\": 1, \"itemQuality\": \"2\", \"itemType\": \"F\"}, {\"itemID\": \"706\", \"itemQuantity\": 1, \"itemQuality\": \"2\", \"itemType\": \"F\"}, {\"itemID\": \"130\", \"itemQuantity\": 1, \"itemQuality\": \"2\", \"itemType\": \"F\"}, {\"itemID\": \"140\", \"itemQuantity\": 1, \"itemQuality\": \"2\", \"itemType\": \"F\"}], \"itemsRequired\": 4, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"242\", \"itemQuantity\": 5}, \"localizedName\": \"Quality Fish\"}, {\"name\": \"Master Fisher's\", \"items\": [{\"itemID\": \"162\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}, {\"itemID\": \"165\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}, {\"itemID\": \"149\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}, {\"itemID\": \"800\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"F\"}], \"itemsRequired\": 2, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"242\", \"itemQuantity\": 5}, \"localizedName\": \"Master Fisher's\"}]}, {\"bundle\": {\"name\": \"Blacksmith's\", \"items\": [{\"itemID\": \"334\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"335\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"336\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 3, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"13\", \"itemQuantity\": 1}, \"areaName\": \"Boiler Room\", \"localizedName\": \"Blacksmith's\"}, \"bundleStatus\": [false, false, false], \"options\": [{\"name\": \"Blacksmith's\", \"items\": [{\"itemID\": \"334\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"335\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"336\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 3, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"13\", \"itemQuantity\": 1}, \"localizedName\": \"Blacksmith's\"}, {\"name\": \"Geologist's\", \"items\": [{\"itemID\": \"80\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"M\"}, {\"itemID\": \"86\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"M\"}, {\"itemID\": \"84\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"M\"}, {\"itemID\": \"82\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"M\"}], \"itemsRequired\": 4, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"749\", \"itemQuantity\": 5}, \"localizedName\": \"Geologist's\"}, {\"name\": \"Adventurer's\", \"items\": [{\"itemID\": \"766\", \"itemQuantity\": 99, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"881\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}]}, {\"itemID\": \"767\", \"itemQuantity\": 10, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"881\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}]}, {\"itemID\": \"768\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"881\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}]}, {\"itemID\": \"769\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"881\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}]}], \"itemsRequired\": 2, \"bundleReward\": {\"itemType\": \"R\", \"itemID\": \"518\", \"itemQuantity\": 1}, \"localizedName\": \"Adventurer's\"}, {\"name\": \"Treasure Hunter's\", \"items\": [{\"itemID\": \"66\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"62\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"72\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"60\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"64\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"68\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 5, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"204\", \"itemQuantity\": 1}, \"localizedName\": \"Treasure Hunter's\"}, {\"name\": \"Engineer's\", \"items\": [{\"itemID\": \"386\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"787\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"338\", \"itemQuantity\": 5, \"itemQuality\": \"0\"}], \"itemsRequired\": 3, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"13\", \"itemQuantity\": 1}, \"localizedName\": \"Engineer's\"}]}, {\"bundle\": {\"name\": \"Geologist's\", \"items\": [{\"itemID\": \"80\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"M\"}, {\"itemID\": \"86\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"M\"}, {\"itemID\": \"84\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"M\"}, {\"itemID\": \"82\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"M\"}], \"itemsRequired\": 4, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"749\", \"itemQuantity\": 5}, \"areaName\": \"Boiler Room\", \"localizedName\": \"Geologist's\"}, \"bundleStatus\": [false, false, false, false], \"options\": [{\"name\": \"Blacksmith's\", \"items\": [{\"itemID\": \"334\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"335\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"336\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 3, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"13\", \"itemQuantity\": 1}, \"localizedName\": \"Blacksmith's\"}, {\"name\": \"Geologist's\", \"items\": [{\"itemID\": \"80\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"M\"}, {\"itemID\": \"86\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"M\"}, {\"itemID\": \"84\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"M\"}, {\"itemID\": \"82\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"M\"}], \"itemsRequired\": 4, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"749\", \"itemQuantity\": 5}, \"localizedName\": \"Geologist's\"}, {\"name\": \"Adventurer's\", \"items\": [{\"itemID\": \"766\", \"itemQuantity\": 99, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"881\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}]}, {\"itemID\": \"767\", \"itemQuantity\": 10, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"881\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}]}, {\"itemID\": \"768\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"881\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}]}, {\"itemID\": \"769\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"881\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}]}], \"itemsRequired\": 2, \"bundleReward\": {\"itemType\": \"R\", \"itemID\": \"518\", \"itemQuantity\": 1}, \"localizedName\": \"Adventurer's\"}, {\"name\": \"Treasure Hunter's\", \"items\": [{\"itemID\": \"66\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"62\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"72\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"60\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"64\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"68\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 5, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"204\", \"itemQuantity\": 1}, \"localizedName\": \"Treasure Hunter's\"}, {\"name\": \"Engineer's\", \"items\": [{\"itemID\": \"386\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"787\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"338\", \"itemQuantity\": 5, \"itemQuality\": \"0\"}], \"itemsRequired\": 3, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"13\", \"itemQuantity\": 1}, \"localizedName\": \"Engineer's\"}]}, {\"bundle\": {\"name\": \"Adventurer's\", \"items\": [{\"itemID\": \"766\", \"itemQuantity\": 99, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"881\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}]}, {\"itemID\": \"767\", \"itemQuantity\": 10, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"881\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}]}, {\"itemID\": \"768\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"881\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}]}, {\"itemID\": \"769\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"881\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}]}], \"itemsRequired\": 2, \"bundleReward\": {\"itemType\": \"R\", \"itemID\": \"518\", \"itemQuantity\": 1}, \"areaName\": \"Boiler Room\", \"localizedName\": \"Adventurer's\"}, \"bundleStatus\": [false, false, false, false], \"options\": [{\"name\": \"Blacksmith's\", \"items\": [{\"itemID\": \"334\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"335\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"336\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 3, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"13\", \"itemQuantity\": 1}, \"localizedName\": \"Blacksmith's\"}, {\"name\": \"Geologist's\", \"items\": [{\"itemID\": \"80\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"M\"}, {\"itemID\": \"86\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"M\"}, {\"itemID\": \"84\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"M\"}, {\"itemID\": \"82\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"M\"}], \"itemsRequired\": 4, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"749\", \"itemQuantity\": 5}, \"localizedName\": \"Geologist's\"}, {\"name\": \"Adventurer's\", \"items\": [{\"itemID\": \"766\", \"itemQuantity\": 99, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"881\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}]}, {\"itemID\": \"767\", \"itemQuantity\": 10, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"881\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}]}, {\"itemID\": \"768\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"881\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}]}, {\"itemID\": \"769\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"881\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}]}], \"itemsRequired\": 2, \"bundleReward\": {\"itemType\": \"R\", \"itemID\": \"518\", \"itemQuantity\": 1}, \"localizedName\": \"Adventurer's\"}, {\"name\": \"Treasure Hunter's\", \"items\": [{\"itemID\": \"66\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"62\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"72\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"60\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"64\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"68\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 5, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"204\", \"itemQuantity\": 1}, \"localizedName\": \"Treasure Hunter's\"}, {\"name\": \"Engineer's\", \"items\": [{\"itemID\": \"386\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"787\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"338\", \"itemQuantity\": 5, \"itemQuality\": \"0\"}], \"itemsRequired\": 3, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"13\", \"itemQuantity\": 1}, \"localizedName\": \"Engineer's\"}]}, {\"bundle\": {\"name\": \"2,500g\", \"items\": [{\"itemID\": \"-1\", \"itemQuantity\": 2500, \"itemQuality\": \"0\"}], \"itemsRequired\": 1, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"220\", \"itemQuantity\": 3}, \"areaName\": \"Vault\", \"localizedName\": \"2,500g\"}, \"bundleStatus\": [false]}, {\"bundle\": {\"name\": \"5,000g\", \"items\": [{\"itemID\": \"-1\", \"itemQuantity\": 5000, \"itemQuality\": \"0\"}], \"itemsRequired\": 1, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"369\", \"itemQuantity\": 30}, \"areaName\": \"Vault\", \"localizedName\": \"5,000g\"}, \"bundleStatus\": [false]}, {\"bundle\": {\"name\": \"10,000g\", \"items\": [{\"itemID\": \"-1\", \"itemQuantity\": 10000, \"itemQuality\": \"0\"}], \"itemsRequired\": 1, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"9\", \"itemQuantity\": 1}, \"areaName\": \"Vault\", \"localizedName\": \"10,000g\"}, \"bundleStatus\": [false]}, {\"bundle\": {\"name\": \"25,000g\", \"items\": [{\"itemID\": \"-1\", \"itemQuantity\": 25000, \"itemQuality\": \"0\"}], \"itemsRequired\": 1, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"21\", \"itemQuantity\": 1}, \"areaName\": \"Vault\", \"localizedName\": \"25,000g\"}, \"bundleStatus\": [false]}, {\"bundle\": {\"name\": \"Chef's\", \"items\": [{\"itemID\": \"724\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"259\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"430\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"376\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"228\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"C\"}, {\"itemID\": \"194\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"C\"}], \"itemsRequired\": 6, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"221\", \"itemQuantity\": 3}, \"areaName\": \"Bulletin Board\", \"localizedName\": \"Chef's\"}, \"bundleStatus\": [false, false, false, false, false, false], \"options\": [{\"name\": \"Chef's\", \"items\": [{\"itemID\": \"724\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"259\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"430\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"376\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"228\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"C\"}, {\"itemID\": \"194\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"C\"}], \"itemsRequired\": 6, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"221\", \"itemQuantity\": 3}, \"localizedName\": \"Chef's\"}, {\"name\": \"Field Research\", \"items\": [{\"itemID\": \"422\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"392\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"702\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"536\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 4, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"20\", \"itemQuantity\": 1}, \"localizedName\": \"Field Research\"}, {\"name\": \"Enchanter's\", \"items\": [{\"itemID\": \"725\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"348\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"446\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"637\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 4, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"336\", \"itemQuantity\": 5}, \"localizedName\": \"Enchanter's\"}, {\"name\": \"Dye\", \"items\": [{\"itemID\": \"420\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"284\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}, {\"itemID\": \"397\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"300\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}, {\"itemID\": \"421\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"268\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}, {\"itemID\": \"444\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"90\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}, {\"itemID\": \"62\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"258\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}, {\"itemID\": \"266\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"337\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}], \"itemsRequired\": 6, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"25\", \"itemQuantity\": 1}, \"localizedName\": \"Dye\"}, {\"name\": \"Fodder\", \"items\": [{\"itemID\": \"262\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}, {\"itemID\": \"178\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}, {\"itemID\": \"613\", \"itemQuantity\": 3, \"itemQuality\": \"0\"}], \"itemsRequired\": 3, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"104\", \"itemQuantity\": 1}, \"localizedName\": \"Fodder\"}, {\"name\": \"Children's\", \"items\": [{\"itemID\": \"296\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}, {\"itemID\": \"223\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"103\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"233\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 3, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"787\", \"itemQuantity\": 3}, \"localizedName\": \"Children's\"}, {\"name\": \"Forager's\", \"items\": [{\"itemID\": \"296\", \"itemQuantity\": 50, \"itemQuality\": \"0\"}, {\"itemID\": \"410\", \"itemQuantity\": 50, \"itemQuality\": \"0\"}, {\"itemID\": \"406\", \"itemQuantity\": 20, \"itemQuality\": \"0\"}], \"itemsRequired\": 2, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"105\", \"itemQuantity\": 3}, \"localizedName\": \"Forager's\"}, {\"name\": \"Home Cook's\", \"items\": [{\"itemID\": \"-5\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}, {\"itemID\": \"-6\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}, {\"itemID\": \"246\", \"itemQuantity\": 100, \"itemQuality\": \"0\"}], \"itemsRequired\": 3, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"201\", \"itemQuantity\": 5}, \"localizedName\": \"Home Cook's\"}, {\"name\": \"Helper's\", \"items\": [{\"itemID\": \"PrizeTicket\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"MysteryBox\", \"itemQuantity\": 5, \"itemQuality\": \"0\"}], \"itemsRequired\": 2, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"StardropTea\", \"itemQuantity\": 1}, \"localizedName\": \"Helper's\"}, {\"name\": \"Spirit's Eve\", \"items\": [{\"itemID\": \"746\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"270\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}, {\"itemID\": \"767\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}], \"itemsRequired\": 3, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"201\", \"itemQuantity\": 5}, \"localizedName\": \"Spirit's Eve\"}, {\"name\": \"Winter Star\", \"items\": [{\"itemID\": \"283\", \"itemQuantity\": 5, \"itemQuality\": \"0\"}, {\"itemID\": \"604\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"239\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"Powdermelon\", \"itemQuantity\": 5, \"itemQuality\": \"0\"}], \"itemsRequired\": 2, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"MysteryBox\", \"itemQuantity\": 3}, \"localizedName\": \"Winter Star\"}]}, {\"bundle\": {\"name\": \"Field Research\", \"items\": [{\"itemID\": \"422\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"392\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"702\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"536\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 4, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"20\", \"itemQuantity\": 1}, \"areaName\": \"Bulletin Board\", \"localizedName\": \"Field Research\"}, \"bundleStatus\": [false, false, false, false], \"options\": [{\"name\": \"Chef's\", \"items\": [{\"itemID\": \"724\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"259\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"430\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"376\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"228\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"C\"}, {\"itemID\": \"194\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"C\"}], \"itemsRequired\": 6, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"221\", \"itemQuantity\": 3}, \"localizedName\": \"Chef's\"}, {\"name\": \"Field Research\", \"items\": [{\"itemID\": \"422\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"392\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"702\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"536\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 4, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"20\", \"itemQuantity\": 1}, \"localizedName\": \"Field Research\"}, {\"name\": \"Enchanter's\", \"items\": [{\"itemID\": \"725\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"348\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"446\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"637\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 4, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"336\", \"itemQuantity\": 5}, \"localizedName\": \"Enchanter's\"}, {\"name\": \"Dye\", \"items\": [{\"itemID\": \"420\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"284\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}, {\"itemID\": \"397\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"300\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}, {\"itemID\": \"421\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"268\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}, {\"itemID\": \"444\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"90\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}, {\"itemID\": \"62\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"258\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}, {\"itemID\": \"266\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"337\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}], \"itemsRequired\": 6, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"25\", \"itemQuantity\": 1}, \"localizedName\": \"Dye\"}, {\"name\": \"Fodder\", \"items\": [{\"itemID\": \"262\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}, {\"itemID\": \"178\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}, {\"itemID\": \"613\", \"itemQuantity\": 3, \"itemQuality\": \"0\"}], \"itemsRequired\": 3, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"104\", \"itemQuantity\": 1}, \"localizedName\": \"Fodder\"}, {\"name\": \"Children's\", \"items\": [{\"itemID\": \"296\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}, {\"itemID\": \"223\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"103\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"233\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 3, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"787\", \"itemQuantity\": 3}, \"localizedName\": \"Children's\"}, {\"name\": \"Forager's\", \"items\": [{\"itemID\": \"296\", \"itemQuantity\": 50, \"itemQuality\": \"0\"}, {\"itemID\": \"410\", \"itemQuantity\": 50, \"itemQuality\": \"0\"}, {\"itemID\": \"406\", \"itemQuantity\": 20, \"itemQuality\": \"0\"}], \"itemsRequired\": 2, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"105\", \"itemQuantity\": 3}, \"localizedName\": \"Forager's\"}, {\"name\": \"Home Cook's\", \"items\": [{\"itemID\": \"-5\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}, {\"itemID\": \"-6\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}, {\"itemID\": \"246\", \"itemQuantity\": 100, \"itemQuality\": \"0\"}], \"itemsRequired\": 3, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"201\", \"itemQuantity\": 5}, \"localizedName\": \"Home Cook's\"}, {\"name\": \"Helper's\", \"items\": [{\"itemID\": \"PrizeTicket\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"MysteryBox\", \"itemQuantity\": 5, \"itemQuality\": \"0\"}], \"itemsRequired\": 2, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"StardropTea\", \"itemQuantity\": 1}, \"localizedName\": \"Helper's\"}, {\"name\": \"Spirit's Eve\", \"items\": [{\"itemID\": \"746\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"270\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}, {\"itemID\": \"767\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}], \"itemsRequired\": 3, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"201\", \"itemQuantity\": 5}, \"localizedName\": \"Spirit's Eve\"}, {\"name\": \"Winter Star\", \"items\": [{\"itemID\": \"283\", \"itemQuantity\": 5, \"itemQuality\": \"0\"}, {\"itemID\": \"604\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"239\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"Powdermelon\", \"itemQuantity\": 5, \"itemQuality\": \"0\"}], \"itemsRequired\": 2, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"MysteryBox\", \"itemQuantity\": 3}, \"localizedName\": \"Winter Star\"}]}, {\"bundle\": {\"name\": \"Enchanter's\", \"items\": [{\"itemID\": \"725\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"348\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"446\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"637\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 4, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"336\", \"itemQuantity\": 5}, \"areaName\": \"Bulletin Board\", \"localizedName\": \"Enchanter's\"}, \"bundleStatus\": [false, false, false, false], \"options\": [{\"name\": \"Chef's\", \"items\": [{\"itemID\": \"724\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"259\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"430\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"376\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"228\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"C\"}, {\"itemID\": \"194\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"C\"}], \"itemsRequired\": 6, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"221\", \"itemQuantity\": 3}, \"localizedName\": \"Chef's\"}, {\"name\": \"Field Research\", \"items\": [{\"itemID\": \"422\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"392\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"702\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"536\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 4, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"20\", \"itemQuantity\": 1}, \"localizedName\": \"Field Research\"}, {\"name\": \"Enchanter's\", \"items\": [{\"itemID\": \"725\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"348\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"446\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"637\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 4, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"336\", \"itemQuantity\": 5}, \"localizedName\": \"Enchanter's\"}, {\"name\": \"Dye\", \"items\": [{\"itemID\": \"420\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"284\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}, {\"itemID\": \"397\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"300\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}, {\"itemID\": \"421\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"268\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}, {\"itemID\": \"444\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"90\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}, {\"itemID\": \"62\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"258\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}, {\"itemID\": \"266\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"337\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}], \"itemsRequired\": 6, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"25\", \"itemQuantity\": 1}, \"localizedName\": \"Dye\"}, {\"name\": \"Fodder\", \"items\": [{\"itemID\": \"262\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}, {\"itemID\": \"178\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}, {\"itemID\": \"613\", \"itemQuantity\": 3, \"itemQuality\": \"0\"}], \"itemsRequired\": 3, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"104\", \"itemQuantity\": 1}, \"localizedName\": \"Fodder\"}, {\"name\": \"Children's\", \"items\": [{\"itemID\": \"296\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}, {\"itemID\": \"223\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"103\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"233\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 3, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"787\", \"itemQuantity\": 3}, \"localizedName\": \"Children's\"}, {\"name\": \"Forager's\", \"items\": [{\"itemID\": \"296\", \"itemQuantity\": 50, \"itemQuality\": \"0\"}, {\"itemID\": \"410\", \"itemQuantity\": 50, \"itemQuality\": \"0\"}, {\"itemID\": \"406\", \"itemQuantity\": 20, \"itemQuality\": \"0\"}], \"itemsRequired\": 2, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"105\", \"itemQuantity\": 3}, \"localizedName\": \"Forager's\"}, {\"name\": \"Home Cook's\", \"items\": [{\"itemID\": \"-5\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}, {\"itemID\": \"-6\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}, {\"itemID\": \"246\", \"itemQuantity\": 100, \"itemQuality\": \"0\"}], \"itemsRequired\": 3, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"201\", \"itemQuantity\": 5}, \"localizedName\": \"Home Cook's\"}, {\"name\": \"Helper's\", \"items\": [{\"itemID\": \"PrizeTicket\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"MysteryBox\", \"itemQuantity\": 5, \"itemQuality\": \"0\"}], \"itemsRequired\": 2, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"StardropTea\", \"itemQuantity\": 1}, \"localizedName\": \"Helper's\"}, {\"name\": \"Spirit's Eve\", \"items\": [{\"itemID\": \"746\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"270\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}, {\"itemID\": \"767\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}], \"itemsRequired\": 3, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"201\", \"itemQuantity\": 5}, \"localizedName\": \"Spirit's Eve\"}, {\"name\": \"Winter Star\", \"items\": [{\"itemID\": \"283\", \"itemQuantity\": 5, \"itemQuality\": \"0\"}, {\"itemID\": \"604\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"239\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"Powdermelon\", \"itemQuantity\": 5, \"itemQuality\": \"0\"}], \"itemsRequired\": 2, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"MysteryBox\", \"itemQuantity\": 3}, \"localizedName\": \"Winter Star\"}]}, {\"bundle\": {\"name\": \"Dye\", \"items\": [{\"itemID\": \"420\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"284\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}, {\"itemID\": \"397\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"300\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}, {\"itemID\": \"421\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"268\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}, {\"itemID\": \"444\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"90\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}, {\"itemID\": \"62\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"258\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}, {\"itemID\": \"266\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"337\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}], \"itemsRequired\": 6, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"25\", \"itemQuantity\": 1}, \"areaName\": \"Bulletin Board\", \"localizedName\": \"Dye\"}, \"bundleStatus\": [false, false, false, false, false, false], \"options\": [{\"name\": \"Chef's\", \"items\": [{\"itemID\": \"724\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"259\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"430\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"376\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"228\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"C\"}, {\"itemID\": \"194\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"C\"}], \"itemsRequired\": 6, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"221\", \"itemQuantity\": 3}, \"localizedName\": \"Chef's\"}, {\"name\": \"Field Research\", \"items\": [{\"itemID\": \"422\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"392\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"702\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"536\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 4, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"20\", \"itemQuantity\": 1}, \"localizedName\": \"Field Research\"}, {\"name\": \"Enchanter's\", \"items\": [{\"itemID\": \"725\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"348\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"446\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"637\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 4, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"336\", \"itemQuantity\": 5}, \"localizedName\": \"Enchanter's\"}, {\"name\": \"Dye\", \"items\": [{\"itemID\": \"420\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"284\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}, {\"itemID\": \"397\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"300\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}, {\"itemID\": \"421\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"268\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}, {\"itemID\": \"444\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"90\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}, {\"itemID\": \"62\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"258\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}, {\"itemID\": \"266\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"337\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}], \"itemsRequired\": 6, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"25\", \"itemQuantity\": 1}, \"localizedName\": \"Dye\"}, {\"name\": \"Fodder\", \"items\": [{\"itemID\": \"262\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}, {\"itemID\": \"178\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}, {\"itemID\": \"613\", \"itemQuantity\": 3, \"itemQuality\": \"0\"}], \"itemsRequired\": 3, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"104\", \"itemQuantity\": 1}, \"localizedName\": \"Fodder\"}, {\"name\": \"Children's\", \"items\": [{\"itemID\": \"296\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}, {\"itemID\": \"223\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"103\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"233\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 3, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"787\", \"itemQuantity\": 3}, \"localizedName\": \"Children's\"}, {\"name\": \"Forager's\", \"items\": [{\"itemID\": \"296\", \"itemQuantity\": 50, \"itemQuality\": \"0\"}, {\"itemID\": \"410\", \"itemQuantity\": 50, \"itemQuality\": \"0\"}, {\"itemID\": \"406\", \"itemQuantity\": 20, \"itemQuality\": \"0\"}], \"itemsRequired\": 2, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"105\", \"itemQuantity\": 3}, \"localizedName\": \"Forager's\"}, {\"name\": \"Home Cook's\", \"items\": [{\"itemID\": \"-5\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}, {\"itemID\": \"-6\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}, {\"itemID\": \"246\", \"itemQuantity\": 100, \"itemQuality\": \"0\"}], \"itemsRequired\": 3, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"201\", \"itemQuantity\": 5}, \"localizedName\": \"Home Cook's\"}, {\"name\": \"Helper's\", \"items\": [{\"itemID\": \"PrizeTicket\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"MysteryBox\", \"itemQuantity\": 5, \"itemQuality\": \"0\"}], \"itemsRequired\": 2, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"StardropTea\", \"itemQuantity\": 1}, \"localizedName\": \"Helper's\"}, {\"name\": \"Spirit's Eve\", \"items\": [{\"itemID\": \"746\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"270\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}, {\"itemID\": \"767\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}], \"itemsRequired\": 3, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"201\", \"itemQuantity\": 5}, \"localizedName\": \"Spirit's Eve\"}, {\"name\": \"Winter Star\", \"items\": [{\"itemID\": \"283\", \"itemQuantity\": 5, \"itemQuality\": \"0\"}, {\"itemID\": \"604\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"239\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"Powdermelon\", \"itemQuantity\": 5, \"itemQuality\": \"0\"}], \"itemsRequired\": 2, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"MysteryBox\", \"itemQuantity\": 3}, \"localizedName\": \"Winter Star\"}]}, {\"bundle\": {\"name\": \"Fodder\", \"items\": [{\"itemID\": \"262\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}, {\"itemID\": \"178\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}, {\"itemID\": \"613\", \"itemQuantity\": 3, \"itemQuality\": \"0\"}], \"itemsRequired\": 3, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"104\", \"itemQuantity\": 1}, \"areaName\": \"Bulletin Board\", \"localizedName\": \"Fodder\"}, \"bundleStatus\": [false, false, false], \"options\": [{\"name\": \"Chef's\", \"items\": [{\"itemID\": \"724\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"259\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"430\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"376\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"228\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"C\"}, {\"itemID\": \"194\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"itemType\": \"C\"}], \"itemsRequired\": 6, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"221\", \"itemQuantity\": 3}, \"localizedName\": \"Chef's\"}, {\"name\": \"Field Research\", \"items\": [{\"itemID\": \"422\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"392\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"702\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"536\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 4, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"20\", \"itemQuantity\": 1}, \"localizedName\": \"Field Research\"}, {\"name\": \"Enchanter's\", \"items\": [{\"itemID\": \"725\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"348\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"446\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"637\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 4, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"336\", \"itemQuantity\": 5}, \"localizedName\": \"Enchanter's\"}, {\"name\": \"Dye\", \"items\": [{\"itemID\": \"420\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"284\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}, {\"itemID\": \"397\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"300\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}, {\"itemID\": \"421\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"268\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}, {\"itemID\": \"444\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"90\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}, {\"itemID\": \"62\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"258\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}, {\"itemID\": \"266\", \"itemQuantity\": 1, \"itemQuality\": \"0\", \"options\": [{\"itemID\": \"337\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}]}], \"itemsRequired\": 6, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"25\", \"itemQuantity\": 1}, \"localizedName\": \"Dye\"}, {\"name\": \"Fodder\", \"items\": [{\"itemID\": \"262\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}, {\"itemID\": \"178\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}, {\"itemID\": \"613\", \"itemQuantity\": 3, \"itemQuality\": \"0\"}], \"itemsRequired\": 3, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"104\", \"itemQuantity\": 1}, \"localizedName\": \"Fodder\"}, {\"name\": \"Children's\", \"items\": [{\"itemID\": \"296\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}, {\"itemID\": \"223\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"103\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"233\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 3, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"787\", \"itemQuantity\": 3}, \"localizedName\": \"Children's\"}, {\"name\": \"Forager's\", \"items\": [{\"itemID\": \"296\", \"itemQuantity\": 50, \"itemQuality\": \"0\"}, {\"itemID\": \"410\", \"itemQuantity\": 50, \"itemQuality\": \"0\"}, {\"itemID\": \"406\", \"itemQuantity\": 20, \"itemQuality\": \"0\"}], \"itemsRequired\": 2, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"105\", \"itemQuantity\": 3}, \"localizedName\": \"Forager's\"}, {\"name\": \"Home Cook's\", \"items\": [{\"itemID\": \"-5\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}, {\"itemID\": \"-6\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}, {\"itemID\": \"246\", \"itemQuantity\": 100, \"itemQuality\": \"0\"}], \"itemsRequired\": 3, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"201\", \"itemQuantity\": 5}, \"localizedName\": \"Home Cook's\"}, {\"name\": \"Helper's\", \"items\": [{\"itemID\": \"PrizeTicket\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"MysteryBox\", \"itemQuantity\": 5, \"itemQuality\": \"0\"}], \"itemsRequired\": 2, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"StardropTea\", \"itemQuantity\": 1}, \"localizedName\": \"Helper's\"}, {\"name\": \"Spirit's Eve\", \"items\": [{\"itemID\": \"746\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"270\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}, {\"itemID\": \"767\", \"itemQuantity\": 10, \"itemQuality\": \"0\"}], \"itemsRequired\": 3, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"201\", \"itemQuantity\": 5}, \"localizedName\": \"Spirit's Eve\"}, {\"name\": \"Winter Star\", \"items\": [{\"itemID\": \"283\", \"itemQuantity\": 5, \"itemQuality\": \"0\"}, {\"itemID\": \"604\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"239\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"Powdermelon\", \"itemQuantity\": 5, \"itemQuality\": \"0\"}], \"itemsRequired\": 2, \"bundleReward\": {\"itemType\": \"O\", \"itemID\": \"MysteryBox\", \"itemQuantity\": 3}, \"localizedName\": \"Winter Star\"}]}, {\"bundle\": {\"name\": \"The Missing\", \"items\": [{\"itemID\": \"348\", \"itemQuantity\": 1, \"itemQuality\": \"1\"}, {\"itemID\": \"807\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"74\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}, {\"itemID\": \"454\", \"itemQuantity\": 5, \"itemQuality\": \"2\"}, {\"itemID\": \"795\", \"itemQuantity\": 1, \"itemQuality\": \"2\"}, {\"itemID\": \"445\", \"itemQuantity\": 1, \"itemQuality\": \"0\"}], \"itemsRequired\": 5, \"bundleReward\": {\"itemType\": \"BO\", \"itemID\": \"0\", \"itemQuantity\": 0}, \"areaName\": \"Abandoned Joja Mart\", \"localizedName\": \"The Missing\"}, \"bundleStatus\": [false, false, false, false, false, false]}]"
  }
]

looking at https://stardew.app, this response does come back with the parsed json as i'd expect. probably i'm missing something very obvious.

once again, many thanks for the quick reply!

for reference, this is my dockerfile:

FROM oven/bun AS base

# Install dependencies only when needed
FROM base AS deps

WORKDIR /app

# Install dependencies
COPY package.json bun.lockb ./
RUN bun install --frozen-lockfile

# Rebuild the source code only when needed
FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .

# Next.js collects completely anonymous telemetry data about general usage.
# Learn more here: https://nextjs.org/telemetry
# Disable telemetry during the build
ENV NEXT_TELEMETRY_DISABLED 1

RUN bun run build

# Production image, copy all the files and run next
FROM base AS runner
WORKDIR /app

#ENV NODE_ENV production

# Disable telemetry
ENV NEXT_TELEMETRY_DISABLED 1

RUN adduser --system --uid 1001 nextjs

COPY --from=builder /app/public ./public

# Set the correct permission for prerender cache
RUN mkdir .next
RUN chown nextjs:bun .next

# Automatically leverage output traces to reduce image size
# https://nextjs.org/docs/advanced-features/output-file-tracing
COPY --from=builder --chown=nextjs:bun /app/.next/standalone ./
COPY --from=builder --chown=nextjs:bun /app/.next/static ./.next/static

USER nextjs

EXPOSE 3000

ENV PORT 3000

# Set hostname to localhost
ENV HOSTNAME "0.0.0.0"

CMD ["bun", "server.js"]

and this is my very basic docker-compose.yml:

services:
  web:
    build: .
    environment:
      - DATABASE_URL=mysql://stardewapp:stardewapp@db:3306/stardewapp
    ports:
      - "3000:3000"
    depends_on:
      - db
  db:
    container_name: mariadb
    image: mariadb:lts
    environment:
      - MYSQL_ROOT_PASSWORD=waymoresecurepassword
      - MYSQL_DATABASE=stardewapp
      - MYSQL_USER=stardewapp
      - MYSQL_PASSWORD=verysecurepassword
    ports:
      - "5432:3306"
networks:
  stardewapp:

@clxmente clxmente self-assigned this Nov 21, 2024
@clxmente
Copy link
Member

Working on this now, sorry been real busy

So far, I've had some issues building the image because of Sentry. I had to add the following to next.config.js

disableServerWebpackPlugin: true,
disableClientWebpackPlugin: true

I'll have to investigate a little more to make sure this won't break anything on production, or find an alternative to allow the image to build if those options affect prod. I'm thinking Sentry is definitely useless for self-hosting and there's probably a way to disable it for development/self-hosting only, but I'm not too familiar with it so I have to look into it a bit more.

I can see there also might be some issues with the way we set the cookies. Namely, if you have a custom domain the cookie probably won't be set right as of now, so we'll have to make some code changes to make this more dynamic

@dannykd
Copy link
Contributor

dannykd commented Nov 22, 2024

why are you self hosting??

@alexraileanu
Copy link
Author

@clxmente absolutely no problem at all! take your time! i also ran into the issue with the cookie and my fix was a lil hacky :p (i straight up got rid of the url bit of the cookie).

@dannykd for fun, mainly. i have many things that i self-host in my home-lab

@clxmente
Copy link
Member

This is way more annoying than I thought LOL, I can't get the app to persist the changes to the database and somehow it sometimes sets cookies with ".stardew.app" domain but I literally have no clue where it is pulling that from, will continue to look into it unless you have it working already

I have my progress pushed to the branch 121-self-hosting-stardewapp

@alexraileanu
Copy link
Author

alexraileanu commented Dec 2, 2024

hey @clxmente thanks for letting me know. if you want to check out i pushed my changes to my fork here: https://github.com/alexraileanu/stardew.app

@clxmente
Copy link
Member

clxmente commented Dec 2, 2024

Nice, is it all working for you now? I can take a look at some point this week or weekend maybe we can open a PR to merge it here

@alexraileanu
Copy link
Author

hey @clxmente.

i think i figured out what the problem was for me 🥲. i was using mariadb:lts as the base image for my db container which is an alias for mariadb 11.4.4. when i use the version you used mariadb:8 it works fine.

my assumption is that there's some fuckery with the json fields in newer versions of mariadb.

it works fine for me now with the changes you've done in your Dockerfile and docker-compose.yml.

as for the problem with the cookie, i can look around a bit as well see if i can manage anything.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

When branches are created from issues, their pull requests are automatically linked.

3 participants