From d74bf570a94794cc64cd3d6189d5f4b02e4bf83f Mon Sep 17 00:00:00 2001 From: notV4l <122404722+notV4l@users.noreply.github.com> Date: Mon, 13 Nov 2023 23:46:40 +0100 Subject: [PATCH] Update dojo 0.3.0 (#202) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * quick upgrade test * update systems * make it build & migrate * dojo/packages issues * Revert "dojo/packages issues" This reverts commit dc66ee9ef2820afcc38cf599a0da844e676e4c63. * update typescript & chakra ui * use @dojoengine/create-burner * component -> model * prepare to use dojo packages * packages not working * models -> components * better DojoProvider * timewaste * update cairo/dojo * timewasting recs test * add GameMode, settings, refactoring, wip * finish to change all constants to settings * liquidity scaling * set name at game creation * remove Name model, update set_name * pawnshop ui * shop/items, start to update tests * update graphql queries * use enums * rc7 * shop still wip * remove risks * add max_items_allowed check * use wanted * use wanted * display max item allowed * fix some build issues * fix all damn frontend build issues * fix createBurner rendering issue * add burner & update auth script * remove player_two * use dojo::contract * fix summary * update settings & fmt * tuning * feat: Escape to a random location (#199) * feat(escape_to_random_location): Escaping to random location + Testing text in the frontend * feat(escape_to_random_location): Correctly move to a random location * feat(escape_to_random_location): Using description field + Update README * feat(escape_to_random_location): Updated README * feat(escape_to_random_location): Removed warning emoji * feat(escape_to_random_location): Removed useless new lines * feat(escape_to_random_location): Removed changes from scarb fmt * feat(escape_to_random_location): Typo in README 💀 * feat(escape_to_random_location): Removed HTML tags from README, now using MD only * feat(escape_to_random_location): Fixed mistake 😱 * feat: Add inventory on the Travel page (#200) * feat(travel-inventory-bar): Added inventory bar in the Travel page * feat(travel-inventory-bar): Removed not needed icons in Menu * feat(travel-inventory-bar): Removed not needed imports * feat(travel-inventory-bar): Removed useless import * feat(travel-inventory-bar): Yet another useless import :) * feat(travel-inventory-bar): Fixes from review * feat(travel-inventory-bar): Fixes from review * feat(travel-inventory-bar): Fixes from review * feat(travel-inventory-bar): Updated the gradient for mobile version * feat(travel-inventory-bar): Updated border colors & spacing * feat(travel-inventory-bar): Padding bottom for inventory for desktop & mobile --------- Co-authored-by: akhercha * feat: Removed cartridge avatar & Added crown to Skull icon (#201) * feat(skull_with_crown): Removed Cartridge avatar + Added crown to skull icon * feat(skull_with_crown): Added skull color to end-game screen * feat(skull_with_crown): Refactor of the Skull icon from code review * feat(skull_with_crown): Removed the tag for 💀 --------- Co-authored-by: akhercha * Set RYO metadata * test with slot * fix build issues * env * fix provider issue * experiment graphql subscriptions for playerEntity * fix build issues * wss * player subscription * add player profile modale * update pawnshop ui * remove end turn summarry page * add avatar selection * new deployment * temp * ui updates & susbcription for player items&drugs * update share link * update decision UI * 0.3.2 * ui updates * encounters / fight * make icon & text blink * safety check with chain_id * fix build issues * use game_mode for testing & tune settings * deployed * update auth script * deployement * update torii ryo3... * back to torii ryo * fix: input style * fix tooltips & add Ooo sound * remove color on icons in decision * smaller image in trade * back to ryo1 * fix some issues & tune settings * update manifest * various fix & tuning * refactoring, math, random, .. * scarb fmt * fix ui/responsive issues * update events keys * update events & prepare hustler logs * hustler logs * fix events ordering & add random demand * emit market event at end turn after player update / fix build issues * hide create test game * add price scaling & small settings changes * more inflation * fixes, remove firefox ugly scrollbars, settings, etc * enable sound * feat: Adaptative heart (#245) * feat(adaptative_heart): Adaptative heart depending on player's health * feat(adaptative_heart): Updated DynamicHeart * feat(adaptative_heart): Revert files that got pushed for no reasons... * feat(adaptative_heart): Re-added EOF newline * feat(adaptative_heart): Removed test health * feat(adaptative_heart): Passing health color as a prop * feat(adaptative_heart): Added color neon.400 * remove some toast * 0.3.10 & fixes * fixes & tooltip * fix damn build issue * fix: Encounter health during fight (#247) * feat(adaptative_heart): Adaptative heart depending on player's health * feat(adaptative_heart): Updated DynamicHeart * feat(adaptative_heart): Revert files that got pushed for no reasons... * feat(adaptative_heart): Re-added EOF newline * feat(adaptative_heart): Removed test health * feat(adaptative_heart): Passing health color as a prop * feat(adaptative_heart): Added color neon.400 * fix(encounter_health): Updated encounter health * fix(encounter_health): Removed logging for debug * disable test/tools * change addr --------- Co-authored-by: akhercha Co-authored-by: akhercha Co-authored-by: Tarrence van As --- README.md | 22 +- Scarb.lock | 21 + Scarb.toml | 42 +- player_two/Scarb.toml | 9 - scripts/default_auth.sh | 75 +- scripts/gen.sh | 9 + src/components/drug.cairo | 20 - src/components/game.cairo | 30 - src/components/location.cairo | 23 - src/components/market.cairo | 127 - src/components/name.cairo | 10 - src/components/player.cairo | 37 - src/components/risks.cairo | 100 - src/constants.cairo | 26 - src/lib.cairo | 30 +- src/{components.cairo => models.cairo} | 4 +- src/models/drug.cairo | 100 + src/models/encounter.cairo | 143 + src/models/game.cairo | 72 + src/models/item.cairo | 90 + src/models/location.cairo | 108 + src/models/market.cairo | 74 + src/models/player.cairo | 136 + src/systems.cairo | 7 +- src/systems/create.cairo | 145 - src/systems/decide.cairo | 442 ++- src/systems/devtools.cairo | 103 + src/systems/join.cairo | 55 - src/systems/lobby.cairo | 172 + src/systems/set_name.cairo | 10 - src/systems/shop.cairo | 241 ++ src/systems/trade.cairo | 232 +- src/systems/travel.cairo | 481 +-- src/tests.cairo | 14 +- src/tests/create.cairo | 18 +- src/tests/math.cairo | 23 + src/tests/player.cairo | 6 +- src/tests/random.cairo | 109 +- src/tests/test_helper.cairo | 90 + src/tests/trade.cairo | 5 +- src/tests/travel.cairo | 4 +- src/utils.cairo | 16 +- src/utils/events.cairo | 13 + src/utils/market.cairo | 288 ++ src/utils/math.cairo | 49 + src/utils/random.cairo | 67 + src/utils/risk.cairo | 82 + src/utils/settings.cairo | 408 ++ src/utils/shop.cairo | 14 + web/.env.development | 10 +- web/.env.production | 16 +- web/.prettierrc | 2 +- web/bin/generateEvents.cjs | 106 + web/bin/generateModels.cjs | 84 + web/codegen.yaml | 2 +- web/manifest.json | 3414 +++++++++++++++++ web/next.config.js | 10 +- web/package.json | 31 +- web/public/images/events/escaped.png | Bin 157158 -> 90644 bytes web/public/images/events/paid.png | Bin 0 -> 82604 bytes web/public/images/events/victorious.png | Bin 0 -> 104553 bytes web/public/images/pawnshop.png | Bin 0 -> 121261 bytes web/public/sounds/Flatline.mp3 | Bin 0 -> 124842 bytes web/public/sounds/Knife.wav | Bin 0 -> 138962 bytes web/public/sounds/Ooo.wav | Bin 0 -> 35142 bytes web/public/sounds/Pay.wav | Bin 0 -> 45100 bytes web/public/sounds/Punch.mp3 | Bin 0 -> 5832 bytes web/public/sounds/Run.mp3 | Bin 0 -> 13771 bytes web/public/sounds/Uzi.wav | Bin 0 -> 44406 bytes web/src/components/Button.tsx | 20 +- web/src/components/Footer.tsx | 13 +- web/src/components/Header.tsx | 75 +- web/src/components/HomeLeftPanel.tsx | 2 +- web/src/components/Input.tsx | 23 +- web/src/components/Inventory.tsx | 146 +- web/src/components/Layout.tsx | 99 +- web/src/components/Leaderboard.tsx | 146 +- web/src/components/MobileMenu.tsx | 20 +- web/src/components/ProfileButton.tsx | 337 ++ web/src/components/RegisterEntities.tsx | 31 + web/src/components/ShareButton.tsx | 47 + web/src/components/Toast.tsx | 8 +- web/src/components/Tooltip.tsx | 26 + web/src/components/Tutorial.tsx | 44 +- web/src/components/avatar/avatars/index.tsx | 12 + web/src/components/icons/DollarBag.tsx | 14 + web/src/components/icons/DynamicHeart.tsx | 40 + web/src/components/icons/Fist.tsx | 20 + web/src/components/icons/Flipflop.tsx | 18 + web/src/components/icons/Ring.tsx | 20 + web/src/components/icons/Twitter.tsx | 14 + web/src/components/icons/User.tsx | 45 +- web/src/components/icons/index.tsx | 6 + web/src/components/icons/items/Backpack.tsx | 16 + web/src/components/icons/items/Bicycle.tsx | 16 + web/src/components/icons/items/Dufflebag.tsx | 20 + web/src/components/icons/items/Fannypack.tsx | 16 + web/src/components/icons/items/Glock.tsx | 16 + web/src/components/icons/items/Kevlar.tsx | 16 + web/src/components/icons/items/Kneepads.tsx | 16 + web/src/components/icons/items/Knife.tsx | 12 + .../components/icons/items/Leatherjacket.tsx | 16 + web/src/components/icons/items/Shoes.tsx | 16 + web/src/components/icons/items/Skateboard.tsx | 16 + web/src/components/icons/items/Trenchcoat.tsx | 14 + web/src/components/icons/items/Uzi.tsx | 11 + web/src/components/icons/items/index.tsx | 13 + web/src/components/images/Weed.tsx | 37 - web/src/components/map/Map.tsx | 1 + web/src/components/player/CashIndicator.tsx | 13 + web/src/components/player/HealthIndicator.tsx | 41 + web/src/components/player/WantedIndicator.tsx | 22 + web/src/constants.ts | 9 +- web/src/dojo/components/useGlobalScores.tsx | 115 - web/src/dojo/constants.ts | 2 + web/src/dojo/context/DojoContext.tsx | 85 + web/src/dojo/entities/useGameEntity.tsx | 74 - web/src/dojo/entities/useLocationEntity.tsx | 103 - web/src/dojo/entities/usePlayerEntity.tsx | 103 - web/src/dojo/events.ts | 284 +- web/src/dojo/generated/contractEvents.ts | 117 + web/src/dojo/generated/contractModels.ts | 142 + web/src/dojo/helpers.ts | 350 +- web/src/dojo/hooks/useAvailableShopItems.ts | 61 + web/src/dojo/hooks/useDevtools.ts | 74 + web/src/dojo/hooks/useDojoContext.ts | 12 + web/src/dojo/hooks/useSystems.ts | 376 ++ web/src/dojo/index.tsx | 117 - web/src/dojo/queries/useGlobalScores.tsx | 79 + web/src/dojo/queries/useLocationEntity.tsx | 87 + .../{components => queries}/useMarkets.tsx | 11 +- web/src/dojo/queries/usePlayerEntity.tsx | 234 ++ web/src/dojo/queries/usePlayerLogs.tsx | 64 + web/src/dojo/setup/createClientComponents.ts | 12 + web/src/dojo/setup/createClientContracts.ts | 20 + web/src/dojo/setup/createSystemCalls.ts | 8 + web/src/dojo/setup/setup.ts | 29 + web/src/dojo/setup/setupNetwork.ts | 71 + web/src/dojo/setup/world.ts | 3 + web/src/dojo/systems/useSystems.tsx | 216 -- web/src/dojo/types.ts | 51 +- web/src/generated/graphql.ts | 2086 +++++----- web/src/generated/introspection.ts | 29 +- web/src/graphql/components.graphql | 46 +- web/src/graphql/entities.graphql | 164 +- web/src/hooks/burner.tsx | 162 - web/src/hooks/fetcher.tsx | 2 + web/src/hooks/player.tsx | 164 + web/src/hooks/sound.tsx | 7 + web/src/hooks/state.tsx | 6 +- web/src/hooks/toast.tsx | 25 +- .../[drugSlug]/[tradeDirection].tsx | 220 +- .../pages/[gameId]/[locationSlug]/index.tsx | 182 +- web/src/pages/[gameId]/end.tsx | 151 +- web/src/pages/[gameId]/event/consequence.tsx | 113 +- web/src/pages/[gameId]/event/decision.tsx | 523 ++- web/src/pages/[gameId]/index.tsx | 102 +- web/src/pages/[gameId]/logs.tsx | 447 +++ web/src/pages/[gameId]/pawnshop.tsx | 189 + web/src/pages/[gameId]/travel.tsx | 264 +- web/src/pages/[gameId]/turn.tsx | 109 +- web/src/pages/_app.tsx | 25 +- web/src/pages/create.tsx | 15 +- web/src/pages/create/new.tsx | 143 + web/src/pages/devtools.tsx | 45 + web/src/pages/index.tsx | 84 +- web/src/pages/leaderboard.tsx | 1 + web/src/responses.ts | 125 +- web/src/theme/colors.ts | 2 + web/src/theme/components/button.tsx | 21 + web/src/theme/components/card.tsx | 1 + web/src/theme/components/index.ts | 1 + web/src/theme/components/input.tsx | 52 +- web/src/theme/components/tooltip.tsx | 11 + web/src/theme/styles.ts | 5 + web/src/utils/market.ts | 2 +- web/src/utils/ui.ts | 27 + web/tsconfig.json | 6 +- web/yarn.lock | 2849 ++++++++------ 179 files changed, 14997 insertions(+), 5949 deletions(-) create mode 100644 Scarb.lock delete mode 100644 player_two/Scarb.toml create mode 100755 scripts/gen.sh delete mode 100644 src/components/drug.cairo delete mode 100644 src/components/game.cairo delete mode 100644 src/components/location.cairo delete mode 100644 src/components/market.cairo delete mode 100644 src/components/name.cairo delete mode 100644 src/components/player.cairo delete mode 100644 src/components/risks.cairo rename src/{components.cairo => models.cairo} (69%) create mode 100644 src/models/drug.cairo create mode 100644 src/models/encounter.cairo create mode 100644 src/models/game.cairo create mode 100644 src/models/item.cairo create mode 100644 src/models/location.cairo create mode 100644 src/models/market.cairo create mode 100644 src/models/player.cairo delete mode 100644 src/systems/create.cairo create mode 100644 src/systems/devtools.cairo delete mode 100644 src/systems/join.cairo create mode 100644 src/systems/lobby.cairo delete mode 100644 src/systems/set_name.cairo create mode 100644 src/systems/shop.cairo create mode 100644 src/tests/math.cairo create mode 100644 src/tests/test_helper.cairo create mode 100644 src/utils/events.cairo create mode 100644 src/utils/market.cairo create mode 100644 src/utils/math.cairo create mode 100644 src/utils/random.cairo create mode 100644 src/utils/risk.cairo create mode 100644 src/utils/settings.cairo create mode 100644 src/utils/shop.cairo create mode 100755 web/bin/generateEvents.cjs create mode 100755 web/bin/generateModels.cjs create mode 100644 web/manifest.json create mode 100644 web/public/images/events/paid.png create mode 100644 web/public/images/events/victorious.png create mode 100644 web/public/images/pawnshop.png create mode 100644 web/public/sounds/Flatline.mp3 create mode 100644 web/public/sounds/Knife.wav create mode 100644 web/public/sounds/Ooo.wav create mode 100644 web/public/sounds/Pay.wav create mode 100644 web/public/sounds/Punch.mp3 create mode 100644 web/public/sounds/Run.mp3 create mode 100644 web/public/sounds/Uzi.wav create mode 100644 web/src/components/ProfileButton.tsx create mode 100644 web/src/components/RegisterEntities.tsx create mode 100644 web/src/components/ShareButton.tsx create mode 100644 web/src/components/Tooltip.tsx create mode 100644 web/src/components/icons/DollarBag.tsx create mode 100644 web/src/components/icons/DynamicHeart.tsx create mode 100644 web/src/components/icons/Fist.tsx create mode 100644 web/src/components/icons/Flipflop.tsx create mode 100644 web/src/components/icons/Ring.tsx create mode 100644 web/src/components/icons/Twitter.tsx create mode 100644 web/src/components/icons/items/Backpack.tsx create mode 100644 web/src/components/icons/items/Bicycle.tsx create mode 100644 web/src/components/icons/items/Dufflebag.tsx create mode 100644 web/src/components/icons/items/Fannypack.tsx create mode 100644 web/src/components/icons/items/Glock.tsx create mode 100644 web/src/components/icons/items/Kevlar.tsx create mode 100644 web/src/components/icons/items/Kneepads.tsx create mode 100644 web/src/components/icons/items/Knife.tsx create mode 100644 web/src/components/icons/items/Leatherjacket.tsx create mode 100644 web/src/components/icons/items/Shoes.tsx create mode 100644 web/src/components/icons/items/Skateboard.tsx create mode 100644 web/src/components/icons/items/Trenchcoat.tsx create mode 100644 web/src/components/icons/items/Uzi.tsx create mode 100644 web/src/components/icons/items/index.tsx delete mode 100644 web/src/components/images/Weed.tsx create mode 100644 web/src/components/player/CashIndicator.tsx create mode 100644 web/src/components/player/HealthIndicator.tsx create mode 100644 web/src/components/player/WantedIndicator.tsx delete mode 100644 web/src/dojo/components/useGlobalScores.tsx create mode 100644 web/src/dojo/constants.ts create mode 100644 web/src/dojo/context/DojoContext.tsx delete mode 100644 web/src/dojo/entities/useGameEntity.tsx delete mode 100644 web/src/dojo/entities/useLocationEntity.tsx delete mode 100644 web/src/dojo/entities/usePlayerEntity.tsx create mode 100644 web/src/dojo/generated/contractEvents.ts create mode 100644 web/src/dojo/generated/contractModels.ts create mode 100644 web/src/dojo/hooks/useAvailableShopItems.ts create mode 100644 web/src/dojo/hooks/useDevtools.ts create mode 100644 web/src/dojo/hooks/useDojoContext.ts create mode 100644 web/src/dojo/hooks/useSystems.ts delete mode 100644 web/src/dojo/index.tsx create mode 100644 web/src/dojo/queries/useGlobalScores.tsx create mode 100644 web/src/dojo/queries/useLocationEntity.tsx rename web/src/dojo/{components => queries}/useMarkets.tsx (81%) create mode 100644 web/src/dojo/queries/usePlayerEntity.tsx create mode 100644 web/src/dojo/queries/usePlayerLogs.tsx create mode 100644 web/src/dojo/setup/createClientComponents.ts create mode 100644 web/src/dojo/setup/createClientContracts.ts create mode 100644 web/src/dojo/setup/createSystemCalls.ts create mode 100644 web/src/dojo/setup/setup.ts create mode 100644 web/src/dojo/setup/setupNetwork.ts create mode 100644 web/src/dojo/setup/world.ts delete mode 100644 web/src/dojo/systems/useSystems.tsx delete mode 100644 web/src/hooks/burner.tsx create mode 100644 web/src/hooks/player.tsx create mode 100644 web/src/pages/[gameId]/logs.tsx create mode 100644 web/src/pages/[gameId]/pawnshop.tsx create mode 100644 web/src/pages/create/new.tsx create mode 100644 web/src/pages/devtools.tsx create mode 100644 web/src/theme/components/tooltip.tsx diff --git a/README.md b/README.md index 38d6e3d50..a00274a6d 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ sozo migrate torii --world {world_address} # Setup default authorization -./scripts/default_auth.sh +./scripts/default_auth.sh [local] # Start frontend, located at http://localhost:3000 cd web @@ -41,6 +41,26 @@ Note: If the world address your game is deployed to is different, you'll need to - script/default_auth.sh - web/src/constants.ts +#### Any errors when doing `sozo build` ? + +This might be because your version of sozo is not correct. + +Check the `Scarb.toml` file and get the `rev` tag from the `dojo` dependency: +```toml +[dependencies] +dojo = { git = "https://github.com/dojoengine/dojo.git", rev = "ca2d2e6dd1ef0fe311310ba0728be8743b1d5cc8" } +``` + +In this example, this is how we would install the correct version: +```bash +git clone https://github.com/dojoengine/dojo.git +cd dojo +git checkout ca2d2e6dd1ef0fe311310ba0728be8743b1d5cc8 +dojoup -p . +``` + +This will reinstall the binaries in your `~/.dojo/bin` folder. + ### With Madara TBD diff --git a/Scarb.lock b/Scarb.lock new file mode 100644 index 000000000..875d6b372 --- /dev/null +++ b/Scarb.lock @@ -0,0 +1,21 @@ +# Code generated by scarb DO NOT EDIT. +version = 1 + +[[package]] +name = "dojo" +version = "0.3.10" +source = "git+https://github.com/dojoengine/dojo.git?tag=v0.3.10#be1676252c41f8188465741edcbcb381d2c12080" +dependencies = [ + "dojo_plugin", +] + +[[package]] +name = "dojo_plugin" +version = "0.3.10" + +[[package]] +name = "rollyourown" +version = "0.1.0" +dependencies = [ + "dojo", +] diff --git a/Scarb.toml b/Scarb.toml index 47e251bb8..38fadc36f 100644 --- a/Scarb.toml +++ b/Scarb.toml @@ -1,17 +1,40 @@ [package] +cairo-version = "2.3.0" name = "rollyourown" version = "0.1.0" -cairo-version = "2.2.0" [cairo] sierra-replace-ids = true [dependencies] -dojo = { git = "https://github.com/dojoengine/dojo.git", tag = "v0.2.3" } +# cubit = {git = "https://github.com/influenceth/cubit.git"} +# dojo = {git = "https://github.com/dojoengine/dojo.git"} +# dojo = {git = "https://github.com/dojoengine/dojo.git", rev = "d7f46502cba3d6462b68a4dfb07336377bca2678"} +dojo = {git = "https://github.com/dojoengine/dojo.git", tag = "v0.3.10"} + [[target.dojo]] +[scripts] +katana = "katana --disable-fee --invoke-max-steps 999999999" +build = "sozo build && scarb run gendojo" +gendojo = "./scripts/gen.sh" +auth = "./scripts/default_auth.sh local" +auth_dev = "./scripts/default_auth.sh" +migrate = "sozo migrate && scarb run gendojo && scarb run auth" +migrate_dev = "sozo migrate --rpc-url https://api.cartridge.gg/x/ryo/katana --account-address 0x6e857786bbd1652857d673836c41e0544d9d5ecd3e7a1bbde744e328b8cc2f6 --private-key 0x5e9d85de083b7ddd3029c44de2997ceba8384074bbebb66696a1b507f0466fc" + [tool.dojo.env] +# Katana +account_address = "0x517ececd29116499f4a1b64b094da79ba08dfd54a3edaa316134c41f8160973" +private_key = "0x1800000000300000180000000000030000000000003006001800006600" +rpc_url = "http://localhost:5050" + +# seed 420 +# account_address = "0x6e857786bbd1652857d673836c41e0544d9d5ecd3e7a1bbde744e328b8cc2f6" +# private_key = "0x5e9d85de083b7ddd3029c44de2997ceba8384074bbebb66696a1b507f0466fc" +# rpc_url = "https://api.cartridge.gg/x/ryo/katana" + [tool.dojo.world] name = "Roll Your Own" @@ -19,17 +42,4 @@ description = "example world" website = "https://rollyourown.preview.cartridge.gg/" icon_uri = "file://assets/icon.png" cover_uri = "file://assets/cover.png" -socials.x = "https://x.com/TheDopeWars" - -# Katana -#rpc_url = "https://api.cartridge.gg/x/rollyourown/katana" -rpc_url = "http://localhost:5050" -account_address = "0x517ececd29116499f4a1b64b094da79ba08dfd54a3edaa316134c41f8160973" -private_key = "0x1800000000300000180000000000030000000000003006001800006600" - -# Madara -#rpc_url = "https://api.cartridge.gg/x/shinai/madara" -#account_address = "0x2" -#private_key = "0xc1cf1490de1352865301bb8705143f3ef938f97fdf892f1090dcb5ac7bcd1d" - -#world_address = "0x3c3dfeb374720dfd73554dc2b9e0583cb9668efb3055d07d1533afa5d219fd5" +socials.x = "https://x.com/TheDopeWars" \ No newline at end of file diff --git a/player_two/Scarb.toml b/player_two/Scarb.toml deleted file mode 100644 index 7fced7c71..000000000 --- a/player_two/Scarb.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "player_two" -version = "0.1.0" - -[tool.dojo.env] -rpc_url = "http://localhost:5050/" -account_address = "0x033c627a3e5213790e246a917770ce23d7e562baa5b4d2917c23b1be6d91961c" -private_key = "0x0333803103001800039980190300d206608b0070db0012135bd1fb5f6282170b" -world_address = "0x26065106fa319c3981618e7567480a50132f23932226a51c219ffb8e47daa84" diff --git a/scripts/default_auth.sh b/scripts/default_auth.sh index 4b5c78fdc..8373144d5 100755 --- a/scripts/default_auth.sh +++ b/scripts/default_auth.sh @@ -2,62 +2,61 @@ set -euo pipefail pushd $(dirname "$0")/.. -if [ $# -ge 1 ] && [ $1 == "local" ] -then - export RPC_URL="http://localhost:5050"; +if [ $# -ge 1 ] && [ $1 == "local" ]; then + export RPC_URL="http://localhost:5050" else - export RPC_URL="https://api.cartridge.gg/x/rollyourown/katana"; + export RPC_URL="https://api.cartridge.gg/x/ryo/katana" fi -export WORLD_ADDRESS="0x3c3dfeb374720dfd73554dc2b9e0583cb9668efb3055d07d1533afa5d219fd5"; +export WORLD_ADDRESS=$(cat ./target/dev/manifest.json | jq -r '.world.address') + +export LOBBY_ADDRESS=$(cat ./target/dev/manifest.json | jq -r '.contracts[] | select(.name == "lobby" ).address') +export TRAVEL_ADDRESS=$(cat ./target/dev/manifest.json | jq -r '.contracts[] | select(.name == "travel" ).address') +export DECIDE_ADDRESS=$(cat ./target/dev/manifest.json | jq -r '.contracts[] | select(.name == "decide" ).address') +export TRADE_ADDRESS=$(cat ./target/dev/manifest.json | jq -r '.contracts[] | select(.name == "trade" ).address') +export SHOP_ADDRESS=$(cat ./target/dev/manifest.json | jq -r '.contracts[] | select(.name == "shop" ).address') + +echo "---------------------------------------------------------------------------" +echo rpc : $RPC_URL +echo world : $WORLD_ADDRESS +echo " " +echo lobby : $LOBBY_ADDRESS +echo travel: $TRAVEL_ADDRESS +echo decide: $DECIDE_ADDRESS +echo trade : $TRADE_ADDRESS +echo shop : $SHOP_ADDRESS +echo "---------------------------------------------------------------------------" # enable system -> component authorizations -CREATE_GAME_COMPONENTS=("Game" "Market" "Name" "Player" "Risks") -JOIN_GAME_COMPONENTS=("Game" "Player") -SET_NAME_COMPONENTS=("Name") -BUY_COMPONENTS=("Drug" "Market" "Name" "Player") -SELL_COMPONENTS=("Drug" "Market" "Name" "Player") -TRAVEL_COMPONENTS=("Player" "Market") -DECIDE_COMPONENTS=("Player" "Drug") - -for component in ${CREATE_GAME_COMPONENTS[@]}; do - sozo auth writer $component create_game --world $WORLD_ADDRESS --rpc-url $RPC_URL - sleep 0.1 -done +LOBBY_COMPONENTS=("Game" "Market" "Player" ) +TRAVEL_COMPONENTS=("Player" "Market" "Encounter") +DECIDE_COMPONENTS=("Player" "Drug" "Market" "Encounter") +TRADE_COMPONENTS=("Drug" "Market" "Player") +SHOP_COMPONENTS=("Player" "Item" "Market") -for component in ${JOIN_GAME_COMPONENTS[@]}; do - sozo auth writer $component join_game --world $WORLD_ADDRESS --rpc-url $RPC_URL +for component in ${LOBBY_COMPONENTS[@]}; do + sozo auth writer $component $LOBBY_ADDRESS --world $WORLD_ADDRESS --rpc-url $RPC_URL sleep 0.1 done -for component in ${SET_NAME_COMPONENTS[@]}; do - sozo auth writer $component set_name --world $WORLD_ADDRESS --rpc-url $RPC_URL - sleep 0.1 -done - -for component in ${BUY_COMPONENTS[@]}; do - sozo auth writer $component buy --world $WORLD_ADDRESS --rpc-url $RPC_URL - sleep 0.1 -done - -for component in ${SELL_COMPONENTS[@]}; do - sozo auth writer $component sell --world $WORLD_ADDRESS --rpc-url $RPC_URL +for component in ${TRAVEL_COMPONENTS[@]}; do + sozo auth writer $component $TRAVEL_ADDRESS --world $WORLD_ADDRESS --rpc-url $RPC_URL sleep 0.1 done -for component in ${TRAVEL_COMPONENTS[@]}; do - sozo auth writer $component travel --world $WORLD_ADDRESS --rpc-url $RPC_URL +for component in ${DECIDE_COMPONENTS[@]}; do + sozo auth writer $component $DECIDE_ADDRESS --world $WORLD_ADDRESS --rpc-url $RPC_URL sleep 0.1 done -for component in ${TRAVEL_COMPONENTS[@]}; do - sozo auth writer $component decide --world $WORLD_ADDRESS --rpc-url $RPC_URL +for component in ${TRADE_COMPONENTS[@]}; do + sozo auth writer $component $TRADE_ADDRESS --world $WORLD_ADDRESS --rpc-url $RPC_URL sleep 0.1 done -for component in ${DECIDE_COMPONENTS[@]}; do - sozo auth writer $component decide --world $WORLD_ADDRESS --rpc-url $RPC_URL +for component in ${SHOP_COMPONENTS[@]}; do + sozo auth writer $component $SHOP_ADDRESS --world $WORLD_ADDRESS --rpc-url $RPC_URL sleep 0.1 done -echo "Default authorizations have been successfully set." \ No newline at end of file +echo "Default authorizations have been successfully set." diff --git a/scripts/gen.sh b/scripts/gen.sh new file mode 100755 index 000000000..1953e3972 --- /dev/null +++ b/scripts/gen.sh @@ -0,0 +1,9 @@ +#!/bin/bash +set -euo pipefail + +cp ./target/dev/manifest.json ./web/manifest.json + +pushd $(dirname "$0")/../web + +yarn run gen:dojo +prettier --write ./src/dojo/generated diff --git a/src/components/drug.cairo b/src/components/drug.cairo deleted file mode 100644 index 3215e51db..000000000 --- a/src/components/drug.cairo +++ /dev/null @@ -1,20 +0,0 @@ -use starknet::ContractAddress; - -#[derive(Component, Copy, Drop, Serde, SerdeLen)] -struct Drug { - #[key] - game_id: u32, - #[key] - player_id: ContractAddress, - #[key] - drug_id: felt252, - quantity: usize, -} - -#[generate_trait] -impl DrugImpl of DrugTrait { - fn all() -> Span { - let mut drugs = array!['Acid', 'Weed', 'Ludes', 'Speed', 'Heroin', 'Cocaine']; - drugs.span() - } -} diff --git a/src/components/game.cairo b/src/components/game.cairo deleted file mode 100644 index 212c0374a..000000000 --- a/src/components/game.cairo +++ /dev/null @@ -1,30 +0,0 @@ -use starknet::ContractAddress; - -#[derive(Component, Copy, Drop, Serde)] -struct Game { - #[key] - game_id: u32, - start_time: u64, - max_players: usize, - num_players: usize, - max_turns: usize, - is_finished: bool, - creator: ContractAddress, -} - -#[generate_trait] -impl GameImpl of GameTrait { - #[inline(always)] - fn tick(self: Game) -> bool { - let info = starknet::get_block_info().unbox(); - - if info.block_timestamp < self.start_time { - return false; - } - if self.is_finished { - return false; - } - - true - } -} diff --git a/src/components/location.cairo b/src/components/location.cairo deleted file mode 100644 index b9eff9b60..000000000 --- a/src/components/location.cairo +++ /dev/null @@ -1,23 +0,0 @@ -use starknet::ContractAddress; - -struct Location {} - -#[generate_trait] -impl LocationImpl of LocationTrait { - fn all() -> Span { - let mut locations = array![ - 'Queens', 'The Bronx', 'Brooklyn', 'Jersey City', 'Central Park', 'Coney Island' - ]; - locations.span() - } - - fn random() -> felt252 { - let seed = starknet::get_tx_info().unbox().transaction_hash; - let locations = LocationImpl::all(); - let seed: u256 = seed.into(); - let len: u128 = locations.len().into(); - let index: usize = (seed.low % len).try_into().unwrap(); - - *locations.at(index) - } -} diff --git a/src/components/market.cairo b/src/components/market.cairo deleted file mode 100644 index 2bb92aadd..000000000 --- a/src/components/market.cairo +++ /dev/null @@ -1,127 +0,0 @@ -use rollyourown::constants::SCALING_FACTOR; - -#[derive(Component, Copy, Drop, Serde)] -struct Market { - #[key] - game_id: u32, - #[key] - location_id: felt252, - #[key] - drug_id: felt252, - cash: u128, // fixed point - quantity: usize, -} - -#[derive(Copy, Drop)] -struct PricingInfos { - min_price: u128, - max_price: u128, - min_qty: u128, - max_qty: u128, -} - -#[generate_trait] -impl MarketImpl of MarketTrait { - #[inline(always)] - fn buy(ref self: Market, quantity: usize) -> u128 { - assert(quantity < self.quantity, 'not enough liquidity'); - let (amount, available, cash) = normalize(quantity, self); - let k = cash * available; - let cost = (k / (available - amount)) - cash; - cost - } - - #[inline(always)] - fn sell(ref self: Market, quantity: usize) -> u128 { - let (amount, available, cash) = normalize(quantity, self); - let k = cash * available; - let payout = cash - (k / (available + amount)); - payout - } - - #[inline(always)] - fn get_pricing_info(drug_id: felt252) -> PricingInfos { - if drug_id == 'Ludes' { - PricingInfos { - min_price: 10 * SCALING_FACTOR, - max_price: 60 * SCALING_FACTOR, - min_qty: 800, - max_qty: 2000, - } - } else if drug_id == 'Speed' { - PricingInfos { - min_price: 50 * SCALING_FACTOR, - max_price: 300 * SCALING_FACTOR, - min_qty: 600, - max_qty: 1500, - } - } else if drug_id == 'Weed' { - PricingInfos { - min_price: 200 * SCALING_FACTOR, - max_price: 700 * SCALING_FACTOR, - min_qty: 500, - max_qty: 1000, - } - } else if drug_id == 'Acid' { - PricingInfos { - min_price: 500 * SCALING_FACTOR, - max_price: 1800 * SCALING_FACTOR, - min_qty: 400, - max_qty: 900, - } - } else if drug_id == 'Heroin' { - PricingInfos { - min_price: 1200 * SCALING_FACTOR, - max_price: 4000 * SCALING_FACTOR, - min_qty: 300, - max_qty: 700, - } - } else if drug_id == 'Cocaine' { - PricingInfos { - min_price: 3000 * SCALING_FACTOR, - max_price: 8000 * SCALING_FACTOR, - min_qty: 250, - max_qty: 600, - } - } else { - panic(array!['invalid drug_id']); - PricingInfos { min_price: 0, max_price: 0, min_qty: 0, max_qty: 0, } - } - } -} - -fn normalize(amount: usize, market: Market) -> (u128, u128, u128) { - let amount: u128 = amount.into() * SCALING_FACTOR; - let available: u128 = (market.quantity).into() * SCALING_FACTOR; - (amount, available, market.cash) -} - - -#[test] -#[should_panic(expected: ('not enough liquidity',))] -fn test_not_enough_quantity() { - let mut market = Market { - game_id: 0, location_id: 0, drug_id: 0, cash: SCALING_FACTOR * 1, quantity: 1 - }; // pool 1:1 - let cost = market.buy(10); -} - -#[test] -#[available_gas(100000)] -fn test_market_buy() { - let mut market = Market { - game_id: 0, location_id: 0, drug_id: 0, cash: SCALING_FACTOR * 1, quantity: 10 - }; // pool 1:10 - let cost = market.buy(5); - assert(cost == SCALING_FACTOR * 1, 'wrong cost'); -} - -#[test] -#[available_gas(100000)] -fn test_market_sell() { - let mut market = Market { - game_id: 0, location_id: 0, drug_id: 0, cash: SCALING_FACTOR * 1, quantity: 10 - }; // pool 1:10 - let payout = market.sell(5); - assert(payout == 3334, 'wrong payout'); -} diff --git a/src/components/name.cairo b/src/components/name.cairo deleted file mode 100644 index 213a87c9f..000000000 --- a/src/components/name.cairo +++ /dev/null @@ -1,10 +0,0 @@ -use starknet::ContractAddress; - -#[derive(Component, Copy, Drop, Serde)] -struct Name { - #[key] - game_id: u32, - #[key] - player_id: ContractAddress, - short_string: felt252, -} diff --git a/src/components/player.cairo b/src/components/player.cairo deleted file mode 100644 index 905f189a1..000000000 --- a/src/components/player.cairo +++ /dev/null @@ -1,37 +0,0 @@ -use starknet::ContractAddress; -use rollyourown::PlayerStatus; - -#[derive(Component, Copy, Drop, Serde)] -struct Player { - #[key] - game_id: u32, - #[key] - player_id: ContractAddress, - status: PlayerStatus, - location_id: felt252, - cash: u128, - health: u8, - run_attempts: u8, - drug_count: usize, - bag_limit: usize, - turns_remaining: usize, - turns_remaining_on_death: usize -} - -#[generate_trait] -impl PlayerImpl of PlayerTrait { - #[inline(always)] - fn can_continue(ref self: Player) -> bool { - if self.health == 0 { - return false; - } - if self.turns_remaining == 0 { - return false; - } - if self.status != PlayerStatus::Normal { - return false; - } - - true - } -} diff --git a/src/components/risks.cairo b/src/components/risks.cairo deleted file mode 100644 index 9173e0823..000000000 --- a/src/components/risks.cairo +++ /dev/null @@ -1,100 +0,0 @@ -use debug::PrintTrait; -use rollyourown::constants::{ - SCALING_FACTOR, COPS_DRUG_THRESHOLD, GANGS_CASH_THRESHOLD, ENCOUNTER_BIAS_GANGS -}; -use rollyourown::PlayerStatus; - -#[derive(Component, Copy, Drop, Serde)] -struct Risks { - #[key] - game_id: u32, - #[key] - location_id: felt252, - travel: u8, - capture: u8, -} - -#[generate_trait] -impl RisksImpl of RisksTrait { - #[inline(always)] - fn travel(self: @Risks, seed: felt252, cash: u128, drug_count: usize) -> PlayerStatus { - if occurs(seed, *self.travel) { - let seed = pedersen::pedersen(seed, seed); - let entropy: u256 = seed.into(); - let result: u128 = entropy.low % 100; - - // more bias towards gang encounter - return match result <= ENCOUNTER_BIAS_GANGS { - bool::False => { - if drug_count < COPS_DRUG_THRESHOLD { - return PlayerStatus::Normal; - } - - PlayerStatus::BeingArrested - }, - bool::True => { - if cash <= GANGS_CASH_THRESHOLD { - return PlayerStatus::Normal; - } - - PlayerStatus::BeingMugged - } - }; - } - - return PlayerStatus::Normal; - } - - #[inline(always)] - fn run(self: @Risks, seed: felt252) -> bool { - occurs(seed, *self.capture) - } -} - -fn occurs(seed: felt252, likelihood: u8) -> bool { - if likelihood == 0 { - return false; - } - - let seed: u256 = seed.into(); - let result: u128 = seed.low % 100; - - (result <= likelihood.into()) -} - -#[test] -#[available_gas(1000000)] -fn test_never_occurs() { - let seed = pedersen::pedersen(1, 1); - let mut risks = Risks { game_id: 0, location_id: 0, travel: 0, capture: 0 }; - let player_status = risks.travel(seed, 0, 0); - - assert(player_status == PlayerStatus::Normal(()), 'event occured'); -} - -#[test] -#[available_gas(1000000)] -fn test_always_occurs() { - let seed = pedersen::pedersen(1, 1); - let mut risks = Risks { game_id: 0, location_id: 0, travel: 100, capture: 0 }; - let player_status = risks.travel(seed, 1, COPS_DRUG_THRESHOLD); - - assert(player_status != PlayerStatus::Normal(()), 'event did not occur'); -} - -#[test] -#[available_gas(1000000)] -fn test_occurs() { - let seed = pedersen::pedersen(1, 1); - let event = occurs(seed, 10); - assert(!event, 'should not occur'); -} - -#[test] -#[available_gas(1000000)] -fn test_not_occurs() { - let seed = pedersen::pedersen(1, 1); - let event = occurs(seed, 28); - assert(event, 'should occur'); -} - diff --git a/src/constants.cairo b/src/constants.cairo index cc05ebdb5..f868652c9 100644 --- a/src/constants.cairo +++ b/src/constants.cairo @@ -1,27 +1 @@ const SCALING_FACTOR: u128 = 10_000; - -const TRAVEL_RISK: u8 = 75; // 75% chance of travel encounter -const CAPTURE_RISK: u8 = 60; // 60% chance of capture - -const ENCOUNTER_BIAS_GANGS: u128 = 50; // 50% chance of gangs encounter vs cops -const COPS_DRUG_THRESHOLD: usize = 2; // cops encounter threshold -const GANGS_CASH_THRESHOLD: u128 = 1000_0000; // gangs encounter threshold - -const HEALTH_IMPACT: u8 = 10; -const GANGS_PAYMENT: usize = 50; // 20% of cash -const COPS_PAYMENT: usize = 20; // 20% of drugs - -// starting stats -const STARTING_CASH: u128 = 2000_0000; // $2000 -const STARTING_BAG_LIMIT: usize = 100; // inventory size -const STARTING_HEALTH: u8 = 100; - -// market price variation -const PRICE_VAR_CHANCE: u32 = 250; // on 1000 : 50% chance = 25% up / 25% down -const PRICE_VAR_MIN: u8 = 1; // 1% -const PRICE_VAR_MAX: u8 = 5; // 5% - -// market price events -const MARKET_EVENT_CHANCE: u32 = 7; // on 1000 : 1.4% = 0.7% up / 0.7% down -const MARKET_EVENT_MIN: u8 = 50; // up 50% | down 25% -const MARKET_EVENT_MAX: u8 = 100; // up 100% | down 50% diff --git a/src/lib.cairo b/src/lib.cairo index f5aa843e8..429304e5f 100644 --- a/src/lib.cairo +++ b/src/lib.cairo @@ -1,4 +1,4 @@ -mod components; +mod models; mod systems; mod constants; mod utils; @@ -6,31 +6,3 @@ mod utils; #[cfg(test)] mod tests; -#[derive(Copy, Drop, Serde, PartialEq)] -enum PlayerStatus { - Normal: (), - BeingMugged: (), - BeingArrested: (), -} - -impl StorageSizePlayerStatus of dojo::StorageSize { - #[inline(always)] - fn unpacked_size() -> usize { - 1 - } - - #[inline(always)] - fn packed_size() -> usize { - 2 - } -} - -impl PlayerStatusPrintImpl of core::debug::PrintTrait { - fn print(self: PlayerStatus) { - match self { - PlayerStatus::Normal(()) => 0.print(), - PlayerStatus::BeingMugged(()) => 1.print(), - PlayerStatus::BeingArrested(()) => 2.print(), - } - } -} diff --git a/src/components.cairo b/src/models.cairo similarity index 69% rename from src/components.cairo rename to src/models.cairo index 50b6d1b5c..567b3993c 100644 --- a/src/components.cairo +++ b/src/models.cairo @@ -3,5 +3,5 @@ mod market; mod player; mod drug; mod location; -mod risks; -mod name; +mod item; +mod encounter; diff --git a/src/models/drug.cairo b/src/models/drug.cairo new file mode 100644 index 000000000..5ddb09179 --- /dev/null +++ b/src/models/drug.cairo @@ -0,0 +1,100 @@ +use starknet::ContractAddress; +use dojo::database::schema::{ + Enum, Member, Ty, Struct, SchemaIntrospection, serialize_member, serialize_member_type +}; + +#[derive(Model, Copy, Drop, Serde)] +struct Drug { + #[key] + game_id: u32, + #[key] + player_id: ContractAddress, + #[key] + drug_id: DrugEnum, + quantity: usize, +} + + +#[derive(Copy, Drop, Serde, PartialEq)] +enum DrugEnum { + Ludes, + Speed, + Weed, + Acid, + Heroin, + Cocaine, +} + +impl DrugEnumIntoFelt252 of Into { + fn into(self: DrugEnum) -> felt252 { + match self { + DrugEnum::Ludes => 'Ludes', + DrugEnum::Speed => 'Speed', + DrugEnum::Weed => 'Weed', + DrugEnum::Acid => 'Acid', + DrugEnum::Heroin => 'Heroin', + DrugEnum::Cocaine => 'Cocaine', + } + } +} + +impl DrugEnumIntoU8 of Into { + fn into(self: DrugEnum) -> u8 { + match self { + DrugEnum::Ludes => 0, + DrugEnum::Speed => 1, + DrugEnum::Weed => 2, + DrugEnum::Acid => 3, + DrugEnum::Heroin => 4, + DrugEnum::Cocaine => 5, + } + } +} + +#[generate_trait] +impl DrugImpl of DrugTrait { + fn all() -> Span { + let mut drugs = array![ + DrugEnum::Ludes, + DrugEnum::Speed, + DrugEnum::Weed, + DrugEnum::Acid, + DrugEnum::Heroin, + DrugEnum::Cocaine + ]; + drugs.span() + } +} + + +impl DrugEnumIntrospectionImpl of SchemaIntrospection { + #[inline(always)] + fn size() -> usize { + 1 + } + + #[inline(always)] + fn layout(ref layout: Array) { + layout.append(8); + } + + #[inline(always)] + fn ty() -> Ty { + Ty::Enum( + Enum { + name: 'DrugEnum', + attrs: array![].span(), + children: array![ + ('Ludes', serialize_member_type(@Ty::Tuple(array![].span()))), + ('Speed', serialize_member_type(@Ty::Tuple(array![].span()))), + ('Weed', serialize_member_type(@Ty::Tuple(array![].span()))), + ('Acid', serialize_member_type(@Ty::Tuple(array![].span()))), + ('Heroin', serialize_member_type(@Ty::Tuple(array![].span()))), + ('Cocaine', serialize_member_type(@Ty::Tuple(array![].span()))), + ] + .span() + } + ) + } +} + diff --git a/src/models/encounter.cairo b/src/models/encounter.cairo new file mode 100644 index 000000000..62c4bd129 --- /dev/null +++ b/src/models/encounter.cairo @@ -0,0 +1,143 @@ +use starknet::ContractAddress; +use dojo::world::{IWorldDispatcher, IWorldDispatcherTrait}; +use dojo::database::schema::{ + Enum, Member, Ty, Struct, SchemaIntrospection, serialize_member, serialize_member_type +}; + +use rollyourown::models::player::Player; +use rollyourown::models::game::Game; +use rollyourown::utils::settings::{EncounterSettings, EncounterSettingsImpl}; +use rollyourown::utils::random::{Random, RandomImpl, RandomTrait}; + +#[derive(Model, Copy, Drop, Serde)] +struct Encounter { + #[key] + game_id: u32, + #[key] + player_id: ContractAddress, + #[key] + encounter_id: EncounterType, + level: u8, + health: u8, + payout: u128, + demand_pct: u8, +} + +#[generate_trait] +impl EncounterImpl of EncounterTrait { + fn get_or_spawn( + world: IWorldDispatcher, + player: @Player, + ref randomizer: Random, + encounter_id: EncounterType + ) -> Encounter { + let mut encounter = get!( + world, (*player.game_id, *player.player_id, encounter_id), (Encounter) + ); + let game = get!(world, (*player.game_id), (Game)); + + let encounter_settings = EncounterSettingsImpl::get( + game.game_mode, player, encounter.level + 1 + ); + if encounter.level == 0 { + // first meet, spawn new Encounter + encounter = + Encounter { + game_id: *player.game_id, + player_id: *player.player_id, + encounter_id, + level: encounter_settings.level, + health: encounter_settings.health, + payout: encounter_settings.payout, + demand_pct: RandomDemandTrait::random(ref randomizer) + }; + set!(world, (encounter)); + } else if encounter.health == 0 { + // spawn next lvl encounter + encounter = + Encounter { + game_id: *player.game_id, + player_id: *player.player_id, + encounter_id, + level: encounter_settings.level, + health: encounter_settings.health, + payout: encounter_settings.payout, + demand_pct: RandomDemandTrait::random(ref randomizer) + }; + set!(world, (encounter)); + } + encounter + } +} + +struct RandomDemand {} + +#[generate_trait] +impl RandomDemandImpl of RandomDemandTrait { + fn random(ref randomizer: Random) -> u8 { + let mut rand = randomizer.between::(0, 100); + if rand < 2 { + 69 + } else if rand < 20 { + 50 + } else if rand < 50 { + 30 + } else { + 20 + } + } +} + + +#[derive(Copy, Drop, Serde, PartialEq)] +enum EncounterType { + Gang, + Cops, +} + +impl EncounterTypeIntoFelt252 of Into { + fn into(self: EncounterType) -> felt252 { + match self { + EncounterType::Gang => 'Gang', + EncounterType::Cops => 'Cops', + } + } +} + +impl EncounterTypeIntoU8 of Into { + fn into(self: EncounterType) -> u8 { + match self { + EncounterType::Gang => 0, + EncounterType::Cops => 1, + } + } +} + + +impl EncounterTypeIntrospectionImpl of SchemaIntrospection { + #[inline(always)] + fn size() -> usize { + 1 + } + + #[inline(always)] + fn layout(ref layout: Array) { + layout.append(8); + } + + #[inline(always)] + fn ty() -> Ty { + Ty::Enum( + Enum { + name: 'EncounterType', + attrs: array![].span(), + children: array![ + ('Gang', serialize_member_type(@Ty::Tuple(array![].span()))), + ('Cops', serialize_member_type(@Ty::Tuple(array![].span()))), + ] + .span() + } + ) + } +} + diff --git a/src/models/game.cairo b/src/models/game.cairo new file mode 100644 index 000000000..05ce70796 --- /dev/null +++ b/src/models/game.cairo @@ -0,0 +1,72 @@ +use starknet::ContractAddress; + +#[derive(Model, Copy, Drop, Serde)] +struct Game { + #[key] + game_id: u32, + game_mode: GameMode, + start_time: u64, + max_players: usize, + num_players: usize, + max_turns: usize, + is_finished: bool, + creator: ContractAddress, +} + +#[derive(Copy, Drop, Serde, PartialEq)] +enum GameMode { + Test, + Unlimited +} + + +#[generate_trait] +impl GameImpl of GameTrait { + #[inline(always)] + fn tick(self: Game) -> bool { + let info = starknet::get_block_info().unbox(); + + if info.block_timestamp < self.start_time { + return false; + } + if self.is_finished { + return false; + } + + true + } +} + + +use dojo::database::schema::{ + Enum, Member, Ty, Struct, SchemaIntrospection, serialize_member, serialize_member_type +}; + + +impl GameModeIntrospectionImpl of SchemaIntrospection { + #[inline(always)] + fn size() -> usize { + 1 + } + + #[inline(always)] + fn layout(ref layout: Array) { + layout.append(8); + } + + #[inline(always)] + fn ty() -> Ty { + Ty::Enum( + Enum { + name: 'GameMode', + attrs: array![].span(), + children: array![ + ('Limited', serialize_member_type(@Ty::Tuple(array![].span()))), + ('Unlimited', serialize_member_type(@Ty::Tuple(array![].span()))), + ] + .span() + } + ) + } +} + diff --git a/src/models/item.cairo b/src/models/item.cairo new file mode 100644 index 000000000..2e536fd80 --- /dev/null +++ b/src/models/item.cairo @@ -0,0 +1,90 @@ +use starknet::ContractAddress; +use dojo::database::schema::{ + Enum, Member, Ty, Struct, SchemaIntrospection, serialize_member, serialize_member_type +}; + +#[derive(Model, Copy, Drop, Serde)] +struct Item { + #[key] + game_id: u32, + #[key] + player_id: ContractAddress, + #[key] + item_id: ItemEnum, + level: u8, + name: felt252, + value: usize, +} + +#[derive(Copy, Drop, Serde, PartialEq)] +enum ItemEnum { + Attack, // allow to fight cops/ gangs + Defense, // reduced dmgs taken by % + Transport, // increase drug nb transportable + Speed, // increase run away chances by % +// Style +} + +impl ItemEnumIntoFelt252 of Into { + fn into(self: ItemEnum) -> felt252 { + match self { + ItemEnum::Attack => 'Attack', + ItemEnum::Defense => 'Defense', + ItemEnum::Transport => 'Transport', + ItemEnum::Speed => 'Speed', + } + } +} + +impl ItemEnumIntoU32 of Into { + fn into(self: ItemEnum) -> u32 { + match self { + ItemEnum::Attack => 0, + ItemEnum::Defense => 1, + ItemEnum::Transport => 2, + ItemEnum::Speed => 3, + } + } +} + + +impl LocationEnumIntrospectionImpl of SchemaIntrospection { + #[inline(always)] + fn size() -> usize { + 1 + } + + #[inline(always)] + fn layout(ref layout: Array) { + layout.append(8); + } + + #[inline(always)] + fn ty() -> Ty { + Ty::Enum( + Enum { + name: 'ItemEnum', + attrs: array![].span(), + children: array![ + ('Attack', serialize_member_type(@Ty::Tuple(array![].span()))), + ('Defense', serialize_member_type(@Ty::Tuple(array![].span()))), + ('Transport', serialize_member_type(@Ty::Tuple(array![].span()))), + ('Speed', serialize_member_type(@Ty::Tuple(array![].span()))), + ] + .span() + } + ) + } +} + + +#[generate_trait] +impl ItemImpl of ItemTrait { + fn all() -> Span { + let mut items = array![ + ItemEnum::Attack, ItemEnum::Defense, ItemEnum::Transport, ItemEnum::Speed, + ]; + items.span() + } +} + diff --git a/src/models/location.cairo b/src/models/location.cairo new file mode 100644 index 000000000..d9624370f --- /dev/null +++ b/src/models/location.cairo @@ -0,0 +1,108 @@ +use starknet::ContractAddress; +use dojo::world::IWorldDispatcher; +use dojo::database::schema::{ + Enum, Member, Ty, Struct, SchemaIntrospection, serialize_member, serialize_member_type +}; + +use rollyourown::utils::random::{Random, RandomImpl}; + +struct Location {} + + +#[derive(Copy, Drop, Serde, PartialEq)] +enum LocationEnum { + Home, // 0 + Queens, // 1 + Bronx, // 2 + Brooklyn, // 3 + Jersey, // 4 + Central, // 5 + Coney, // 6 +// Hospital +} + +impl LocationEnumIntoFelt252 of Into { + fn into(self: LocationEnum) -> felt252 { + match self { + LocationEnum::Home => 'Home', + LocationEnum::Queens => 'Queens', + LocationEnum::Bronx => 'Bronx', + LocationEnum::Brooklyn => 'Brooklyn', + LocationEnum::Jersey => 'Jersey', + LocationEnum::Central => 'Central', + LocationEnum::Coney => 'Coney', + } + } +} + +impl LocationEnumIntoU8 of Into { + fn into(self: LocationEnum) -> u8 { + match self { + LocationEnum::Home => 0, + LocationEnum::Queens => 1, + LocationEnum::Bronx => 2, + LocationEnum::Brooklyn => 3, + LocationEnum::Jersey => 4, + LocationEnum::Central => 5, + LocationEnum::Coney => 6, + } + } +} + + +impl LocationEnumIntrospectionImpl of SchemaIntrospection { + #[inline(always)] + fn size() -> usize { + 1 + } + + #[inline(always)] + fn layout(ref layout: Array) { + layout.append(8); + } + + #[inline(always)] + fn ty() -> Ty { + Ty::Enum( + Enum { + name: 'LocationEnum', + attrs: array![].span(), + children: array![ + ('Home', serialize_member_type(@Ty::Tuple(array![].span()))), + ('Queens', serialize_member_type(@Ty::Tuple(array![].span()))), + ('Bronx', serialize_member_type(@Ty::Tuple(array![].span()))), + ('Brooklyn', serialize_member_type(@Ty::Tuple(array![].span()))), + ('Jersey', serialize_member_type(@Ty::Tuple(array![].span()))), + ('Central', serialize_member_type(@Ty::Tuple(array![].span()))), + ('Coney', serialize_member_type(@Ty::Tuple(array![].span()))), + ] + .span() + } + ) + } +} + + +#[generate_trait] +impl LocationImpl of LocationTrait { + fn all() -> Span { + let mut locations = array![ + LocationEnum::Queens, + LocationEnum::Bronx, + LocationEnum::Brooklyn, + LocationEnum::Jersey, + LocationEnum::Central, + LocationEnum::Coney + ]; + locations.span() + } + + fn random(ref randomizer: Random) -> LocationEnum { + let locations = LocationImpl::all(); + + let index = randomizer.between::(0, locations.len().into()); + + *locations.at(index.try_into().unwrap()) + } +} + diff --git a/src/models/market.cairo b/src/models/market.cairo new file mode 100644 index 000000000..08e2b8af7 --- /dev/null +++ b/src/models/market.cairo @@ -0,0 +1,74 @@ +use rollyourown::constants::SCALING_FACTOR; + +use rollyourown::models::location::LocationEnum; +use rollyourown::models::drug::DrugEnum; + +#[derive(Model, Copy, Drop, Serde)] +struct Market { + #[key] + game_id: u32, + #[key] + location_id: LocationEnum, + #[key] + drug_id: DrugEnum, + cash: u128, // fixed point + quantity: usize, +} + + +#[generate_trait] +impl MarketImpl of MarketTrait { + #[inline(always)] + fn buy(ref self: Market, quantity: usize) -> u128 { + assert(quantity < self.quantity, 'not enough liquidity'); + let (amount, available, cash) = normalize(quantity, self); + let k = cash * available; + let cost = (k / (available - amount)) - cash; + cost + } + + #[inline(always)] + fn sell(ref self: Market, quantity: usize) -> u128 { + let (amount, available, cash) = normalize(quantity, self); + let k = cash * available; + let payout = cash - (k / (available + amount)); + payout + } +} + + +fn normalize(amount: usize, market: Market) -> (u128, u128, u128) { + let amount: u128 = amount.into() * SCALING_FACTOR; + let available: u128 = (market.quantity).into() * SCALING_FACTOR; + (amount, available, market.cash) +} +// #[test] +// #[should_panic(expected: ('not enough liquidity',))] +// fn test_not_enough_quantity() { +// let mut market = Market { +// game_id: 0, location_id: 0, drug_id: 0, cash: SCALING_FACTOR * 1, quantity: 1 +// }; // pool 1:1 +// let cost = market.buy(10); +// } + +// #[test] +// #[available_gas(100000)] +// fn test_market_buy() { +// let mut market = Market { +// game_id: 0, location_id: 0, drug_id: 0, cash: SCALING_FACTOR * 1, quantity: 10 +// }; // pool 1:10 +// let cost = market.buy(5); +// assert(cost == SCALING_FACTOR * 1, 'wrong cost'); +// } + +// #[test] +// #[available_gas(100000)] +// fn test_market_sell() { +// let mut market = Market { +// game_id: 0, location_id: 0, drug_id: 0, cash: SCALING_FACTOR * 1, quantity: 10 +// }; // pool 1:10 +// let payout = market.sell(5); +// assert(payout == 3334, 'wrong payout'); +// } + + diff --git a/src/models/player.cairo b/src/models/player.cairo new file mode 100644 index 000000000..94aa87a1d --- /dev/null +++ b/src/models/player.cairo @@ -0,0 +1,136 @@ +use starknet::ContractAddress; +use dojo::database::schema::{ + Enum, Member, Ty, Struct, SchemaIntrospection, serialize_member, serialize_member_type +}; +use dojo::world::{IWorld, IWorldDispatcher, IWorldDispatcherTrait}; + +use rollyourown::models::location::LocationEnum; +use rollyourown::models::item::{Item, ItemEnum}; + + +#[derive(Model, Copy, Drop, Serde)] +struct Player { + #[key] + game_id: u32, + #[key] + player_id: ContractAddress, + name: felt252, + avatar_id: u8, + status: PlayerStatus, + location_id: LocationEnum, + next_location_id: LocationEnum, + turn: usize, + max_turns: usize, + max_items: u8, + cash: u128, + health: u8, + drug_count: usize, + attack: usize, + defense: usize, + transport: usize, + speed: usize, + wanted: u8, +} + +#[generate_trait] +impl PlayerImpl of PlayerTrait { + #[inline(always)] + fn can_continue(self: Player) -> bool { + if self.health == 0 { + return false; + } + if self.max_turns != 0 && self.turn == self.max_turns { + return false; + } + if self.status != PlayerStatus::Normal { + return false; + } + + true + } + + fn get_item_count(self: Player, world: IWorldDispatcher) -> u8 { + let attack_item = get!(world, (self.game_id, self.player_id, ItemEnum::Attack), (Item)); + let defense_item = get!(world, (self.game_id, self.player_id, ItemEnum::Defense), (Item)); + let transport_item = get!( + world, (self.game_id, self.player_id, ItemEnum::Transport), (Item) + ); + let speed_item = get!(world, (self.game_id, self.player_id, ItemEnum::Speed), (Item)); + + let mut total: u8 = if attack_item.level > 0 { + 1 + } else { + 0 + }; + if defense_item.level > 0 { + total += 1; + } + if transport_item.level > 0 { + total += 1; + } + if speed_item.level > 0 { + total += 1; + } + + total + } + + fn get_attack(self: Player, world: IWorldDispatcher) -> usize { + let item = get!(world, (self.game_id, self.player_id, ItemEnum::Attack), (Item)); + self.attack + item.value + } + + fn get_defense(self: Player, world: IWorldDispatcher) -> usize { + let item = get!(world, (self.game_id, self.player_id, ItemEnum::Defense), (Item)); + self.defense + item.value + } + + fn get_transport(self: Player, world: IWorldDispatcher) -> usize { + let item = get!(world, (self.game_id, self.player_id, ItemEnum::Transport), (Item)); + self.transport + item.value + } + + fn get_speed(self: Player, world: IWorldDispatcher) -> usize { + let item = get!(world, (self.game_id, self.player_id, ItemEnum::Speed), (Item)); + self.speed + item.value + } +} + + +#[derive(Copy, Drop, Serde, PartialEq)] +enum PlayerStatus { + Normal: (), + BeingMugged: (), + BeingArrested: (), + AtPawnshop: (), +} + +impl PlayerStatusIntrospectionImpl of SchemaIntrospection { + #[inline(always)] + fn size() -> usize { + 1 + } + + #[inline(always)] + fn layout(ref layout: Array) { + layout.append(8); + } + + #[inline(always)] + fn ty() -> Ty { + Ty::Enum( + Enum { + name: 'PlayerStatus', + attrs: array![].span(), + children: array![ + ('Normal', serialize_member_type(@Ty::Tuple(array![].span()))), + ('BeingMugged', serialize_member_type(@Ty::Tuple(array![].span()))), + ('BeingArrested', serialize_member_type(@Ty::Tuple(array![].span()))), + ('AtPawnshop', serialize_member_type(@Ty::Tuple(array![].span()))), + ] + .span() + } + ) + } +} + diff --git a/src/systems.cairo b/src/systems.cairo index ce14a12b4..8b21fc449 100644 --- a/src/systems.cairo +++ b/src/systems.cairo @@ -1,6 +1,7 @@ -mod create; -mod join; +mod lobby; mod trade; mod travel; -mod set_name; mod decide; +mod shop; +// mod devtools; + diff --git a/src/systems/create.cairo b/src/systems/create.cairo deleted file mode 100644 index e1adf1ba1..000000000 --- a/src/systems/create.cairo +++ /dev/null @@ -1,145 +0,0 @@ -#[system] -mod create_game { - use starknet::ContractAddress; - - use dojo::world::Context; - - use rollyourown::PlayerStatus; - use rollyourown::components::name::Name; - use rollyourown::components::game::Game; - use rollyourown::components::player::Player; - use rollyourown::components::risks::Risks; - use rollyourown::components::market::Market; - use rollyourown::components::drug::{Drug, DrugTrait}; - use rollyourown::components::location::{Location, LocationTrait}; - use rollyourown::components::market::{MarketTrait}; - use rollyourown::constants::{ - TRAVEL_RISK, CAPTURE_RISK, STARTING_CASH, STARTING_HEALTH, STARTING_BAG_LIMIT - }; - use rollyourown::utils::random; - use debug::PrintTrait; - - #[event] - #[derive(Drop, starknet::Event)] - enum Event { - GameCreated: GameCreated, - PlayerJoined: PlayerJoined - } - - #[derive(Drop, starknet::Event)] - struct GameCreated { - game_id: u32, - creator: ContractAddress, - start_time: u64, - max_turns: usize, - max_players: usize, - } - - #[derive(Drop, starknet::Event)] - struct PlayerJoined { - game_id: u32, - player_id: ContractAddress - } - - fn execute( - ctx: Context, start_time: u64, max_players: usize, max_turns: usize - ) -> (u32, ContractAddress) { - let game_id = ctx.world.uuid(); - - let player = Player { - game_id, - player_id: ctx.origin, - status: PlayerStatus::Normal, - location_id: 0, - cash: STARTING_CASH, - health: STARTING_HEALTH, - run_attempts: 0, - drug_count: 0, - bag_limit: STARTING_BAG_LIMIT, - turns_remaining: max_turns, - turns_remaining_on_death: 0 - }; - - let game = Game { - game_id, - start_time, - max_players, - num_players: 1, // caller auto joins - max_turns, - is_finished: false, - creator: ctx.origin, - }; - - set!(ctx.world, (game, player)); - - let mut locations = LocationTrait::all(); - loop { - match locations.pop_front() { - Option::Some(location_id) => { - //set risks entity - set!( - ctx.world, - (Risks { - game_id, - location_id: *location_id, - travel: TRAVEL_RISK, - capture: CAPTURE_RISK - }) - ); - - let mut seed = starknet::get_tx_info().unbox().transaction_hash; - seed = pedersen::pedersen(seed, *location_id); - - let mut drugs = DrugTrait::all(); - loop { - match drugs.pop_front() { - Option::Some(drug_id) => { - seed = pedersen::pedersen(seed, *drug_id); - let pricing_infos = MarketTrait::get_pricing_info(*drug_id); - let market_price = random( - seed, pricing_infos.min_price, pricing_infos.max_price - ); - let market_quantity: usize = random( - seed, pricing_infos.min_qty, pricing_infos.max_qty - ) - .try_into() - .unwrap(); - - let market_cash = market_quantity.into() * market_price; - - //set market entity - set!( - ctx.world, - (Market { - game_id, - location_id: *location_id, - drug_id: *drug_id, - cash: market_cash, - quantity: market_quantity - }) - ); - }, - Option::None(()) => { - break (); - } - }; - }; - }, - Option::None(_) => { - break (); - } - }; - }; - - // emit player joined - emit!(ctx.world, PlayerJoined { game_id, player_id: ctx.origin }); - - // emit game created - emit!( - ctx.world, - GameCreated { game_id, creator: ctx.origin, start_time, max_players, max_turns } - ); - - (game_id, ctx.origin) - } -} diff --git a/src/systems/decide.cairo b/src/systems/decide.cairo index ba8a7d0b7..dbc423c47 100644 --- a/src/systems/decide.cairo +++ b/src/systems/decide.cairo @@ -1,30 +1,65 @@ -#[system] +use starknet::ContractAddress; +use rollyourown::models::location::LocationEnum; + +#[derive(Copy, Drop, Serde, PartialEq)] +enum Action { + Run: (), + Pay: (), + Fight: (), +} + +#[derive(Copy, Drop, Serde, PartialEq)] +enum Outcome { + Died: (), + Paid: (), + Escaped: (), + Captured: (), + Victorious: (), + Unsupported: (), +} + +#[starknet::interface] +trait IDecide { + fn decide(self: @TContractState, game_id: u32, action: Action); +} + +#[dojo::contract] mod decide { use starknet::ContractAddress; + use starknet::get_caller_address; + + use rollyourown::constants::SCALING_FACTOR; + use rollyourown::models::game::{Game, GameTrait}; + use rollyourown::models::player::{Player, PlayerTrait, PlayerStatus}; + use rollyourown::models::drug::{Drug, DrugEnum, DrugTrait}; + use rollyourown::models::location::{LocationEnum, LocationImpl}; + use rollyourown::models::item::{Item, ItemEnum}; + use rollyourown::models::encounter::{Encounter, EncounterType, EncounterImpl}; + use rollyourown::utils::random::{Random, RandomTrait, RandomImpl}; + + use rollyourown::utils::settings::{ + DecideSettings, DecideSettingsImpl, RiskSettings, RiskSettingsImpl, EncounterSettings, + EncounterSettingsImpl + }; + use rollyourown::utils::risk::{RiskTrait, RiskImpl}; + use rollyourown::utils::math::{MathTrait, MathImplU8, MathImplU128}; - use dojo::world::Context; + use rollyourown::systems::travel::on_turn_end; - use rollyourown::PlayerStatus; - use rollyourown::constants::{GANGS_PAYMENT, COPS_PAYMENT, HEALTH_IMPACT, COPS_DRUG_THRESHOLD}; - use rollyourown::components::game::{Game, GameTrait}; - use rollyourown::components::risks::{Risks, RisksTrait}; - use rollyourown::components::player::{Player, PlayerTrait}; - use rollyourown::components::drug::{Drug, DrugTrait}; - use rollyourown::utils::random; - #[derive(Copy, Drop, Serde, PartialEq)] - enum Action { - Run: (), - Pay: (), + use super::IDecide; + use super::{Action, Outcome}; + + + #[starknet::interface] + trait ISystem { + fn world(self: @TContractState) -> IWorldDispatcher; } - #[derive(Copy, Drop, Serde, PartialEq)] - enum Outcome { - Died: (), - Paid: (), - Escaped: (), - Captured: (), - Unsupported: (), + impl ISystemImpl of ISystem { + fn world(self: @ContractState) -> IWorldDispatcher { + self.world_dispatcher.read() + } } #[event] @@ -32,122 +67,315 @@ mod decide { enum Event { Decision: Decision, Consequence: Consequence, + GameOver: GameOver } #[derive(Drop, starknet::Event)] struct Decision { + #[key] game_id: u32, + #[key] player_id: ContractAddress, action: Action } #[derive(Drop, starknet::Event)] struct Consequence { + #[key] game_id: u32, + #[key] player_id: ContractAddress, outcome: Outcome, health_loss: u8, drug_loss: usize, - cash_loss: u128 + cash_loss: u128, + dmg_dealt: u32, + cash_earnt: u128, + } + + #[derive(Drop, starknet::Event)] + struct GameOver { + #[key] + game_id: u32, + #[key] + player_id: ContractAddress, + player_name: felt252, + player_status: PlayerStatus, + turn: u32, + cash: u128, } - fn execute(ctx: Context, game_id: u32, action: Action, next_location_id: felt252) { - let player_id = ctx.origin; - let mut player: Player = get!(ctx.world, (game_id, player_id).into(), Player); - assert(player.status != PlayerStatus::Normal, 'player response not needed'); - - let (mut outcome, cash_loss, drug_loss, health_loss) = match action { - Action::Run => { - let mut risks = get!(ctx.world, (game_id, player.location_id).into(), Risks); - let seed = starknet::get_tx_info().unbox().transaction_hash; - match risks.run(seed) { - bool::False => (Outcome::Escaped, 0, 0, 0), - bool::True => { - let random_loss: u8 = random(seed, 0, HEALTH_IMPACT.into()) - .try_into() - .unwrap(); - let health_loss: u8 = HEALTH_IMPACT + random_loss; - (Outcome::Captured, 0, 0, health_loss) + #[external(v0)] + impl DecideImpl of IDecide { + fn decide(self: @ContractState, game_id: u32, action: Action) { + let world = self.world(); + let player_id = get_caller_address(); + let mut player: Player = get!(world, (game_id, player_id), Player); + assert(player.status != PlayerStatus::Normal, 'player response not needed'); + + let game = get!(world, game_id, Game); + let decide_settings = DecideSettingsImpl::get(game.game_mode, @player); + let risk_settings = RiskSettingsImpl::get(game.game_mode, @player); + + let mut randomizer = RandomImpl::new(world); + + let (mut outcome, cash_loss, drug_loss, health_loss, cash_earnt, dmg_dealt) = + match action { + Action::Run => { + player + .wanted = player + .wanted + .add_capped(decide_settings.wanted_impact_run, 100); + + let encounter_dmg = match player.status { + PlayerStatus::Normal => { 0 }, + PlayerStatus::BeingMugged => { + let mut encounter = EncounterImpl::get_or_spawn( + world, @player, ref randomizer, EncounterType::Gang + ); + let encounter_settings = EncounterSettingsImpl::get( + game.game_mode, @player, encounter.level + ); + encounter_settings.dmg.pct(60) + }, + PlayerStatus::BeingArrested => { + let mut encounter = EncounterImpl::get_or_spawn( + world, @player, ref randomizer, EncounterType::Cops + ); + let encounter_settings = EncounterSettingsImpl::get( + game.game_mode, @player, encounter.level + ); + encounter_settings.dmg.pct(80) + }, + PlayerStatus::AtPawnshop => { 0 }, + }; + + match risk_settings.run(world, ref randomizer, @player) { + bool::False => (Outcome::Escaped, 0, 0, 0, 0, 0), + bool::True => { + let random_loss: u8 = randomizer.between::(0, encounter_dmg.into()); + + let health_loss: u128 = (encounter_dmg + random_loss).into(); + let defense_item = get!( + world, (game_id, player_id, ItemEnum::Defense), Item + ); + + let health_saved: u128 = health_loss.pct(defense_item.value.into()); + + let final_health_loss: u8 = (health_loss - health_saved) + .try_into() + .unwrap(); + + (Outcome::Captured, 0, 0, final_health_loss, 0, 0) + } + } + }, + Action::Pay => { + match player.status { + PlayerStatus::Normal => (Outcome::Unsupported, 0, 0, 0, 0, 0), + PlayerStatus::BeingMugged => { + // paying gangs divide wanted by 2 + player.wanted = player.wanted / 2; + + let mut encounter = EncounterImpl::get_or_spawn( + world, @player, ref randomizer, EncounterType::Gang + ); + + // using same name cash_loss makes LS crash + let cash_loss_ = player.cash.pct(encounter.demand_pct.into()); + + (Outcome::Paid, cash_loss_, 0, 1, 0, 0) + }, + PlayerStatus::BeingArrested => { + // paying cops divide wanted by 3 + player.wanted = player.wanted / 3; + + let mut encounter = EncounterImpl::get_or_spawn( + world, @player, ref randomizer, EncounterType::Cops + ); + + // using same name drug_loss makes LS crash + let drug_loss_ = self + .take_drugs(game_id, player_id, encounter.demand_pct.into()); + + (Outcome::Paid, 0, drug_loss_, 1, 0, 0) + }, + PlayerStatus::AtPawnshop => (Outcome::Unsupported, 0, 0, 0, 0, 0), } + }, + Action::Fight => { + player + .wanted = player + .wanted + .add_capped(decide_settings.wanted_impact_run, 100); + + match player.status { + PlayerStatus::Normal => (Outcome::Unsupported, 0, 0, 0, 0, 0), + PlayerStatus::BeingMugged => { + self.fight(ref randomizer, @game, @player, EncounterType::Gang) + }, + PlayerStatus::BeingArrested => { + self.fight(ref randomizer, @game, @player, EncounterType::Cops) + }, + PlayerStatus::AtPawnshop => (Outcome::Unsupported, 0, 0, 0, 0, 0), + } + }, + }; + + player.cash -= cash_loss; + player.drug_count -= drug_loss; + player.cash += cash_earnt; + + if health_loss >= player.health { + player.health = 0; + outcome = Outcome::Died; + + let game_over = GameOver { + game_id, + player_id, + player_name: player.name, + player_status: player.status, + turn: player.turn, + cash: player.cash / SCALING_FACTOR, + }; + emit!(world, game_over); + } else { + player.health -= health_loss + } + + emit!( + world, + Consequence { + game_id, + player_id, + outcome, + health_loss, + drug_loss, + cash_loss: cash_loss / SCALING_FACTOR, + dmg_dealt, + cash_earnt: cash_earnt / SCALING_FACTOR } - }, - Action::Pay => { - match player.status { - PlayerStatus::Normal => (Outcome::Unsupported, 0, 0, 0), - PlayerStatus::BeingMugged => { - // using same name cash_loss makes LS crash - let cash_loss_ = (player.cash * GANGS_PAYMENT.into()) / 100; - (Outcome::Paid, cash_loss_, 0, 0) - }, - PlayerStatus::BeingArrested => { - // using same name drug_loss makes LS crash - let drug_loss_ = take_drugs(ctx, game_id, player_id, COPS_PAYMENT); - (Outcome::Paid, 0, drug_loss_, 0) - }, + ); + emit!(world, Decision { game_id, player_id, action }); + + if outcome != Outcome::Captured { + player.status = PlayerStatus::Normal; + + if action == Action::Run { + player.next_location_id = LocationImpl::random(ref randomizer); } - }, - }; - - if outcome == Outcome::Captured { - player.run_attempts += 1; - } else { - player.status = PlayerStatus::Normal; - player.turns_remaining -= 1; - player.location_id = next_location_id; - player.run_attempts = 0; + + on_turn_end(world, ref randomizer, @game, ref player); + } else { + set!(world, (player)); + } } + } + + + #[generate_trait] + impl InternalImpl of DecideInternalImpl { + fn take_drugs( + self: @ContractState, game_id: u32, player_id: ContractAddress, percentage: usize + ) -> usize { + let world = self.world(); + let mut drugs = DrugTrait::all(); + let mut total_drug_loss = 0; + loop { + match drugs.pop_front() { + Option::Some(drug_id) => { + let mut drug = get!(world, (game_id, player_id, *drug_id), Drug); + if (drug.quantity != 0) { + let mut drug_loss = drug.quantity.pct(percentage.into()).into(); + drug_loss = if drug_loss == 0 { + 1 + } else { + drug_loss + }; + drug.quantity -= drug_loss; + total_drug_loss += drug_loss; - player.cash -= cash_loss; - player.drug_count -= drug_loss; - if health_loss >= player.health { - player.health = 0; - player.turns_remaining = 0; - player.turns_remaining_on_death = player.turns_remaining; - outcome = Outcome::Died; - } else { - player.health -= health_loss + set!(world, (drug)); + } + }, + Option::None => { break; } + }; + }; + total_drug_loss } - set!(ctx.world, (player)); - emit!(ctx.world, Decision { game_id, player_id, action }); - // makes LS crash if inlined in emit! ( outcome / enum issue ?) - let consequence_event = Consequence { - game_id, player_id, outcome, health_loss, drug_loss, cash_loss - }; - emit!(ctx.world, consequence_event); - - } + fn fight( + self: @ContractState, + ref randomizer: Random, + game: @Game, + player: @Player, + encounter_type: EncounterType, + ) -> (Outcome, u128, u32, u8, u128, u32) { + let world = self.world(); - fn take_drugs( - ctx: Context, game_id: u32, player_id: ContractAddress, percentage: usize - ) -> usize { - let mut drugs = DrugTrait::all(); - let mut total_drug_loss = 0; - loop { - match drugs.pop_front() { - Option::Some(drug_id) => { - let mut drug = get!(ctx.world, (game_id, player_id, *drug_id), Drug); - if (drug.quantity != 0) { - let mut drug_loss = (drug.quantity * percentage) / 100; - drug_loss = if drug_loss == 0 { - 1 - } else { - drug_loss - }; - drug.quantity -= drug_loss; - total_drug_loss += drug_loss; - - set!(ctx.world, (drug)); - } - }, - Option::None => { - break; - } + let mut encounter = EncounterImpl::get_or_spawn( + world, player, ref randomizer, encounter_type + ); + let encounter_settings = EncounterSettingsImpl::get( + (*game).game_mode, player, encounter.level + ); + + // calc player dmg + let mut attack = (*player).get_attack(world); + let random_attack: usize = randomizer.between::(0, (attack / 5).into()); + + let random_dir = randomizer.bool(); + if random_dir { + attack -= random_attack; + } else { + attack += random_attack; }; - }; - total_drug_loss + + // player deals dmg + if attack >= encounter.health.into() { + // encounter is dead + encounter.health = 0; + set!(world, (encounter)); + + // player wins payout + (Outcome::Victorious, 0_u128, 0_u32, 0_u8, encounter.payout, attack) + } else { + // encounter lose health + encounter.health -= attack.try_into().unwrap(); + set!(world, (encounter)); + + // encounter replies + + // calc encounter dmg + let mut encounter_dmg = encounter_settings.dmg; + let random_dmg: u8 = randomizer.between::(0, (encounter_dmg / 5).into()); + + let random_dir = randomizer.bool(); + if random_dir { + encounter_dmg -= random_dmg; + } else { + encounter_dmg += random_dmg; + }; + + let defense_item = get!( + world, ((*game).game_id, (*player).player_id, ItemEnum::Defense), Item + ); + + // reduce dmgs by defense_item.value % + let health_saved: u128 = ((SCALING_FACTOR + * defense_item.value.into() + * encounter_dmg.into()) + / 100) + / SCALING_FACTOR; + let final_health_loss: u8 = (encounter_dmg - health_saved.try_into().unwrap()) + .try_into() + .unwrap(); + + (Outcome::Captured, 0_u128, 0_u32, final_health_loss, 0_u128, attack) + } + } } } diff --git a/src/systems/devtools.cairo b/src/systems/devtools.cairo new file mode 100644 index 000000000..15340edbe --- /dev/null +++ b/src/systems/devtools.cairo @@ -0,0 +1,103 @@ +use starknet::ContractAddress; + +#[starknet::interface] +trait IDevtools { + fn failing_tx(self: @TContractState); + fn feed_leaderboard(self: @TContractState, count: u32); +//fn get_cash(self: @TContractState, count: u32); +} + +// use with katana --chain_id != 'KATANA' + +#[dojo::contract] +mod devtools { + use core::traits::Into; + use starknet::ContractAddress; + use starknet::get_caller_address; + use starknet::contract_address::Felt252TryIntoContractAddress; + use starknet::info::get_tx_info; + + use super::IDevtools; + + use rollyourown::constants::SCALING_FACTOR; + + use rollyourown::models::player::{Player, PlayerStatus}; + use rollyourown::models::location::{LocationEnum}; + use rollyourown::utils::random::{RandomImpl}; + + + #[starknet::interface] + trait ISystem { + fn world(self: @TContractState) -> IWorldDispatcher; + } + + impl ISystemImpl of ISystem { + fn world(self: @ContractState) -> IWorldDispatcher { + self.world_dispatcher.read() + } + } + + + #[external(v0)] + impl DevtoolsImpl of IDevtools { + fn feed_leaderboard(self: @ContractState, count: u32) { + self.check_chain(); + + let mut randomizer = RandomImpl::new(self.world()); + + let mut i = 0; + loop { + if i == count { + break; + } + + let uuid = self.world().uuid(); + let uuid_f: felt252 = uuid.into(); + + let rand: u128 = randomizer.between::(0, 100000000); + let rand_100: u8 = randomizer.between::(0, 100); + let rand_10: u8 = randomizer.between::(0, 10); + let rand_2: u8 = randomizer.between::(0, 2); + + let player = Player { + game_id: uuid, + player_id: uuid_f.try_into().unwrap(), + name: uuid_f, + avatar_id: rand_10, + status: PlayerStatus::Normal, + location_id: LocationEnum::Home, + next_location_id: LocationEnum::Home, + cash: rand * SCALING_FACTOR, + health: rand_2, + drug_count: 0, + turn: rand_100.into(), + max_turns: rand_100.into(), + max_items: 2, + wanted: 69, + attack: 42, + defense: 42, + transport: 42, + speed: 42, + }; + + set!(self.world(), (player)); + + i += 1; + }; + } + + fn failing_tx(self: @ContractState) { + self.check_chain(); + + assert(0 == 1, 'failing tx'); + } + } + + #[generate_trait] + impl DevtoolsInternalImpl of DevtoolsInternalTrait { + fn check_chain(self: @ContractState) { // let chain_id = get_tx_info().unbox().chain_id; + // assert(chain_id != 'KATANA', 'wrong chain_id'); + } + } +} + diff --git a/src/systems/join.cairo b/src/systems/join.cairo deleted file mode 100644 index 95132a026..000000000 --- a/src/systems/join.cairo +++ /dev/null @@ -1,55 +0,0 @@ -#[system] -mod join_game { - use starknet::ContractAddress; - - use dojo::world::Context; - - use rollyourown::PlayerStatus; - use rollyourown::components::game::Game; - use rollyourown::components::player::Player; - use rollyourown::components::location::{Location, LocationTrait}; - use rollyourown::constants::{STARTING_CASH, STARTING_HEALTH, STARTING_BAG_LIMIT}; - - #[event] - #[derive(Drop, starknet::Event)] - enum Event { - PlayerJoined: PlayerJoined - } - - #[derive(Drop, starknet::Event)] - struct PlayerJoined { - game_id: u32, - player_id: ContractAddress - } - - fn execute(ctx: Context, game_id: u32) -> ContractAddress { - let player_id = ctx.origin; - let block_info = starknet::get_block_info().unbox(); - - let mut game = get!(ctx.world, game_id, (Game)); - assert(!game.is_finished, 'game is finished'); - assert(game.max_players > game.num_players, 'game is full'); - assert(game.start_time >= block_info.block_timestamp, 'already started'); - - game.num_players += 1; - - let player = Player { - game_id, - player_id, - status: PlayerStatus::Normal, - location_id: 0, - cash: STARTING_CASH, - health: STARTING_HEALTH, - run_attempts: 0, - drug_count: 0, - bag_limit: STARTING_BAG_LIMIT, - turns_remaining: game.max_turns, - turns_remaining_on_death: 0 - }; - - set!(ctx.world, (game, player)); - emit!(ctx.world, PlayerJoined { game_id, player_id }); - - player_id - } -} diff --git a/src/systems/lobby.cairo b/src/systems/lobby.cairo new file mode 100644 index 000000000..cc64b79ff --- /dev/null +++ b/src/systems/lobby.cairo @@ -0,0 +1,172 @@ +use starknet::ContractAddress; +use rollyourown::models::game::{GameMode}; + +#[starknet::interface] +trait ILobby { + fn create_game( + self: @TContractState, game_mode: GameMode, player_name: felt252, avatar_id: u8 + ) -> (u32, ContractAddress); + + fn set_name(self: @TContractState, game_id: u32, player_name: felt252); +} + + +#[dojo::contract] +mod lobby { + use starknet::ContractAddress; + use starknet::get_caller_address; + use starknet::get_block_timestamp; + use starknet::info::get_tx_info; + + use rollyourown::models::player::{Player, PlayerTrait, PlayerStatus}; + use rollyourown::models::game::{Game, GameMode}; + use rollyourown::models::market::Market; + use rollyourown::models::drug::{Drug, DrugTrait}; + use rollyourown::models::location::{Location, LocationTrait, LocationEnum}; + use rollyourown::models::market::{MarketTrait}; + + use rollyourown::utils::settings::{ + GameSettings, GameSettingsImpl, PlayerSettings, PlayerSettingsImpl, ShopSettings, + ShopSettingsImpl + }; + use rollyourown::utils::market; + use rollyourown::utils::random::{Random, RandomImpl}; + + use super::ILobby; + + + #[starknet::interface] + trait ISystem { + fn world(self: @TContractState) -> IWorldDispatcher; + } + + impl ISystemImpl of ISystem { + fn world(self: @ContractState) -> IWorldDispatcher { + self.world_dispatcher.read() + } + } + + #[event] + #[derive(Drop, starknet::Event)] + enum Event { + GameCreated: GameCreated, + PlayerJoined: PlayerJoined + } + + #[derive(Drop, starknet::Event)] + struct GameCreated { + game_id: u32, + game_mode: GameMode, + creator: ContractAddress, + start_time: u64, + } + + #[derive(Drop, starknet::Event)] + struct PlayerJoined { + #[key] + game_id: u32, + #[key] + player_id: ContractAddress, + player_name: felt252 + } + + #[external(v0)] + impl LobbyImpl of ILobby { + fn create_game( + self: @ContractState, game_mode: GameMode, player_name: felt252, avatar_id: u8 + ) -> (u32, ContractAddress) { + assert_valid_name(player_name); + assert_valid_chain(game_mode); + + let game_id = self.world().uuid(); + let caller = get_caller_address(); + + let start_time = get_block_timestamp(); + + let game_settings = GameSettingsImpl::get(game_mode); + let player_settings = PlayerSettingsImpl::get(game_mode); + let shop_settings = ShopSettingsImpl::get(game_mode); + + let mut randomizer = RandomImpl::new(self.world()); + + let player = Player { + game_id, + player_id: caller, + name: player_name, + avatar_id: avatar_id, + status: PlayerStatus::Normal, + location_id: LocationEnum::Home, + next_location_id: LocationEnum::Home, + cash: player_settings.cash, + health: player_settings.health, + drug_count: 0, + turn: 0, + max_turns: game_settings.max_turns, + max_items: shop_settings.max_item_allowed, + wanted: player_settings.wanted, + attack: player_settings.attack, + defense: player_settings.defense, + transport: player_settings.transport, + speed: player_settings.speed, + }; + + let game = Game { + game_id, + game_mode, + start_time: start_time, + max_players: game_settings.max_players, + num_players: 1, // caller auto joins + max_turns: game_settings.max_turns, + is_finished: false, + creator: caller, + }; + + set!(self.world(), (game, player)); + + let mut locations = LocationTrait::all(); + loop { + match locations.pop_front() { + Option::Some(location_id) => { + // initialize markets for location + market::initialize_markets( + self.world(), ref randomizer, game_id, game_mode, *location_id + ); + }, + Option::None(_) => { break (); } + }; + }; + + // emit player joined + emit!(self.world(), PlayerJoined { game_id, player_id: caller, player_name }); + + // emit game created + emit!(self.world(), GameCreated { game_id, game_mode, creator: caller, start_time, }); + + (game_id, caller) + } + + fn set_name(self: @ContractState, game_id: u32, player_name: felt252) { + assert_valid_name(player_name); + + let player_id = get_caller_address(); + let mut player = get!(self.world(), (game_id, player_id), Player); + player.name = player_name; + + set!(self.world(), (player)) + } + } + + fn assert_valid_chain(game_mode: GameMode) { + assert(game_mode == GameMode::Unlimited, 'invalid game_mode'); + //if game_mode == GameMode::Test { + // let chain_id = get_tx_info().unbox().chain_id; + // assert(chain_id != 'KATANA', 'wrong chain_id'); + // } + } + + fn assert_valid_name(name: felt252) { + let name_256: u256 = name.into(); + assert(name_256 > 0xffff, 'Name too short'); + assert(name_256 < 0xffffffffffffffffffffffffffffffffffffffff, 'Name too long'); + } +} diff --git a/src/systems/set_name.cairo b/src/systems/set_name.cairo deleted file mode 100644 index 78f6c9632..000000000 --- a/src/systems/set_name.cairo +++ /dev/null @@ -1,10 +0,0 @@ -#[system] -mod set_name { - use dojo::world::Context; - use rollyourown::components::game::Game; - use rollyourown::components::name::Name; - - fn execute(ctx: Context, game_id: u32, player_name: felt252) { - set!(ctx.world, (Name { game_id, player_id: ctx.origin, short_string: player_name, })) - } -} diff --git a/src/systems/shop.cairo b/src/systems/shop.cairo new file mode 100644 index 000000000..142b27523 --- /dev/null +++ b/src/systems/shop.cairo @@ -0,0 +1,241 @@ +use starknet::ContractAddress; +use rollyourown::models::player::{Player}; +use rollyourown::models::item::{ItemEnum}; + +#[derive(Copy, Drop, Serde)] +struct AvailableItem { + item_id: u32, + item_type: felt252, + name: felt252, + level: u8, + cost: u128, + value: usize +} + +#[starknet::interface] +trait IShop { + fn is_open(self: @TContractState, game_id: u32, player_id: ContractAddress) -> bool; + fn skip(self: @TContractState, game_id: u32); + fn buy_item(self: @TContractState, game_id: u32, item_id: ItemEnum); + //fn drop_item(self: @TContractState, game_id: u32, item_id: ItemEnum,); + fn available_items( + self: @TContractState, game_id: u32, player_id: ContractAddress + ) -> Span; +} + +#[dojo::contract] +mod shop { + use starknet::ContractAddress; + use starknet::get_caller_address; + use starknet::get_contract_address; + + use rollyourown::constants::SCALING_FACTOR; + use rollyourown::models::player::{Player, PlayerTrait, PlayerStatus}; + use rollyourown::models::location::{Location, LocationEnum}; + use rollyourown::models::game::{Game, GameTrait}; + use rollyourown::models::item::{Item, ItemTrait, ItemEnum}; + use rollyourown::utils::settings::{ + ItemSettings, ItemSettingsImpl, ShopSettings, ShopSettingsImpl + }; + use rollyourown::utils::shop::{ShopImpl, ShopTrait}; + use rollyourown::utils::random::{RandomImpl}; + use rollyourown::systems::travel::on_turn_end; + + use super::{IShop, AvailableItem}; + + #[starknet::interface] + trait ISystem { + fn world(self: @TContractState) -> IWorldDispatcher; + } + + impl ISystemImpl of ISystem { + fn world(self: @ContractState) -> IWorldDispatcher { + self.world_dispatcher.read() + } + } + + #[event] + #[derive(Drop, starknet::Event)] + enum Event { + BoughtItem: BoughtItem, + DroppedItem: DroppedItem + } + + #[derive(Drop, starknet::Event)] + struct BoughtItem { + #[key] + game_id: u32, + #[key] + player_id: ContractAddress, + item_id: ItemEnum, + level: u8, + cost: u32 + } + + #[derive(Drop, starknet::Event)] + struct DroppedItem { + #[key] + game_id: u32, + #[key] + player_id: ContractAddress, + item_id: ItemEnum, + } + + + #[generate_trait] + impl InternalImpl of InternalTrait { + fn assert_can_access_shop(self: @ContractState, game: @Game, player: @Player) { + assert(self.is_open((*game).game_id, (*player).player_id), 'shop is closed!'); + assert((*player).status == PlayerStatus::AtPawnshop, 'not at shop!'); + assert((*game).tick(), 'cannot progress'); + } + } + + #[external(v0)] + impl ShopExternalImpl of IShop { + fn skip(self: @ContractState, game_id: u32) { + let world = self.world(); + let player_id = get_caller_address(); + let game = get!(world, game_id, (Game)); + let mut player = get!(world, (game_id, player_id), Player); + let mut randomizer = RandomImpl::new(world); + + assert(player.status == PlayerStatus::AtPawnshop, 'not at pawnshop !'); + assert(self.is_open(game_id, player_id), 'pawnshop not open !'); + + on_turn_end(world, ref randomizer, @game, ref player); + } + + + fn is_open(self: @ContractState, game_id: u32, player_id: ContractAddress) -> bool { + let world = self.world(); + let game = get!(world, game_id, (Game)); + let player = get!(world, (game_id, player_id), Player); + let shop_settings = ShopSettingsImpl::get(game.game_mode); + + shop_settings.is_open(@player) + } + + fn buy_item(self: @ContractState, game_id: u32, item_id: ItemEnum,) { + let world = self.world(); + let game = get!(world, game_id, (Game)); + let player_id = get_caller_address(); + let mut player = get!(world, (game_id, player_id), Player); + let mut randomizer = RandomImpl::new(world); + + self.assert_can_access_shop(@game, @player); + + let mut item = get!(world, (game_id, player_id, item_id), Item); + let shop_settings = ShopSettingsImpl::get(game.game_mode); + + assert(item.level < shop_settings.max_item_level, 'item max level'); + + // buyin a new item, not upgrading + if item.level == 0 { + assert( + player.get_item_count(world) < shop_settings.max_item_allowed, 'max item count' + ) + } + + let item_settings = ItemSettingsImpl::get( + game.game_mode, item_id, level: item.level + 1 + ); + + assert(player.cash >= item_settings.cost, 'too poor'); + + // pay item + player.cash -= item_settings.cost; + + // update item + item.level += 1; + item.name = item_settings.name; + item.value = item_settings.value; + set!(world, (item)); + + // emit event + emit!( + self.world(), + BoughtItem { + game_id, + player_id, + item_id, + level: item.level, + cost: (item_settings.cost / SCALING_FACTOR).try_into().unwrap() + } + ); + + on_turn_end(world, ref randomizer, @game, ref player); + } + + // fn drop_item(self: @ContractState, game_id: u32, item_id: ItemEnum,) { + // let world = self.world(); + // let game = get!(world, game_id, (Game)); + // let player_id = get_caller_address(); + // let mut player = get!(world, (game_id, player_id), Player); + + // self.assert_can_access_shop(@game, @player); + + // let mut item = get!(world, (game_id, player_id, item_id), Item); + // assert(item.level > 0, '404 item not found'); + + // // update item + // item.level = 0; + // item.name = ''; + // item.value = 0; + // set!(world, (item)); + + // on_turn_end(world, @game, ref player); + // set!(world, (player)); + + // // emit event + // emit!(world, DroppedItem { game_id, player_id, item_id }); + // } + + fn available_items( + self: @ContractState, game_id: u32, player_id: ContractAddress + ) -> Span { + let world = self.world(); + let game = get!(world, game_id, (Game)); + let player = get!(world, (game_id, player_id), Player); + + let mut available: Array = array![]; + + if !self.is_open(game_id, player_id) { + return available.span(); + }; + + let shop_settings = ShopSettingsImpl::get(game.game_mode); + let mut items = ItemTrait::all(); + + loop { + match items.pop_front() { + Option::Some(item_id) => { + let player_item = get!(world, (game_id, player_id, *item_id), (Item)); + + let item_settings = ItemSettingsImpl::get( + game.game_mode, *item_id, player_item.level + 1 + ); + + if player_item.level < shop_settings.max_item_level { + available + .append( + AvailableItem { + item_id: (*item_id).into(), + item_type: (*item_id).into(), + level: player_item.level + 1, + name: item_settings.name, + cost: item_settings.cost / SCALING_FACTOR, + value: item_settings.value, + } + ); + }; + }, + Option::None => { break; }, + }; + }; + + available.span() + } + } +} + diff --git a/src/systems/trade.cairo b/src/systems/trade.cairo index 924e53867..34ed90a0a 100644 --- a/src/systems/trade.cairo +++ b/src/systems/trade.cairo @@ -1,134 +1,168 @@ -#[system] -mod buy { +use starknet::ContractAddress; +use rollyourown::models::location::{LocationEnum}; +use rollyourown::models::drug::{DrugEnum}; + + +#[starknet::interface] +trait ITrade { + fn buy( + self: @TContractState, + game_id: u32, + location_id: LocationEnum, + drug_id: DrugEnum, + quantity: usize + ); + + fn sell( + self: @TContractState, + game_id: u32, + location_id: LocationEnum, + drug_id: DrugEnum, + quantity: usize + ); +} + + +#[dojo::contract] +mod trade { use starknet::ContractAddress; + use starknet::get_caller_address; + + use rollyourown::models::drug::{Drug, DrugEnum}; + use rollyourown::models::player::{Player, PlayerTrait}; + use rollyourown::models::location::{Location, LocationEnum}; + use rollyourown::models::game::{Game, GameTrait}; + use rollyourown::models::market::{Market, MarketTrait}; + + use super::ITrade; - use dojo::world::Context; - use rollyourown::components::name::Name; - use rollyourown::components::drug::Drug; - use rollyourown::components::player::{Player, PlayerTrait}; - use rollyourown::components::location::Location; - use rollyourown::components::game::{Game, GameTrait}; - use rollyourown::components::risks::{Risks, RisksTrait}; - use rollyourown::components::market::{Market, MarketTrait}; + #[starknet::interface] + trait ISystem { + fn world(self: @TContractState) -> IWorldDispatcher; + } + + impl ISystemImpl of ISystem { + fn world(self: @ContractState) -> IWorldDispatcher { + self.world_dispatcher.read() + } + } #[event] #[derive(Drop, starknet::Event)] enum Event { - Bought: Bought + Bought: Bought, + Sold: Sold } #[derive(Drop, starknet::Event)] struct Bought { + #[key] game_id: u32, + #[key] player_id: ContractAddress, - drug_id: felt252, + drug_id: DrugEnum, quantity: usize, cost: u128 } - // 1. Verify the caller owns the player. - // 2. Get current price for location for quantity. - // 3. Ensure user can afford it. - // 4. Perform the trade. - // 5. Update the location's inventory. - // 6. Update the player's inventory. - fn execute( - ctx: Context, game_id: u32, location_id: felt252, drug_id: felt252, quantity: usize - ) { - let player_id = ctx.origin; - let game = get!(ctx.world, game_id, (Game)); - assert(game.tick(), 'cannot progress'); - - let mut player = get!(ctx.world, (game_id, player_id).into(), Player); - assert(player.location_id == location_id, 'player is not at location'); - assert(player.can_continue(), 'player cannot trade'); - assert(player.drug_count + quantity <= player.bag_limit, 'no bag space'); - - let mut market = get!(ctx.world, (game_id, location_id, drug_id).into(), Market); - - let cost = market.buy(quantity); - assert(cost < player.cash, 'not enough cash'); - - let mut drug = get!(ctx.world, (game_id, player_id, drug_id).into(), Drug); - - // update market - market.cash += cost; - market.quantity -= quantity; - - // update player - player.cash -= cost; - player.drug_count += quantity; - - // update drug - drug.game_id = game_id; - drug.player_id = player_id; - drug.drug_id = drug_id; - drug.quantity += quantity; - - set!(ctx.world, (market, player, drug)); - emit!(ctx.world, Bought { game_id, player_id, drug_id, quantity, cost }); - } -} - -#[system] -mod sell { - use starknet::ContractAddress; - - use dojo::world::Context; - - use rollyourown::components::name::Name; - use rollyourown::components::drug::Drug; - use rollyourown::components::player::Player; - use rollyourown::components::location::Location; - use rollyourown::components::game::{Game, GameTrait}; - use rollyourown::components::risks::{Risks, RisksTrait}; - use rollyourown::components::market::{Market, MarketTrait}; - - #[event] - #[derive(Drop, starknet::Event)] - enum Event { - Sold: Sold - } - #[derive(Drop, starknet::Event)] struct Sold { + #[key] game_id: u32, + #[key] player_id: ContractAddress, - drug_id: felt252, + drug_id: DrugEnum, quantity: usize, payout: u128 } - fn execute( - ctx: Context, game_id: u32, location_id: felt252, drug_id: felt252, quantity: usize - ) { - let player_id = ctx.origin; - let game = get!(ctx.world, game_id, Game); - assert(game.tick(), 'cannot progress'); - let mut player = get!(ctx.world, (game_id, player_id).into(), Player); - assert(player.location_id == location_id, 'player is not at location'); + #[external(v0)] + impl GameImpl of ITrade { + // 1. Verify the caller owns the player. + // 2. Get current price for location for quantity. + // 3. Ensure user can afford it. + // 4. Perform the trade. + // 5. Update the location's inventory. + // 6. Update the player's inventory. + fn buy( + self: @ContractState, + game_id: u32, + location_id: LocationEnum, + drug_id: DrugEnum, + quantity: usize + ) { + let world = self.world(); + let player_id = get_caller_address(); + + let game = get!(world, game_id, (Game)); + assert(game.tick(), 'cannot progress'); + + let mut player = get!(world, (game_id, player_id).into(), Player); + assert(player.location_id == location_id, 'player is not at location'); + assert(player.can_continue(), 'player cannot trade'); + assert(player.drug_count + quantity <= player.get_transport(world), 'no bag space'); + + let mut market = get!(world, (game_id, location_id, drug_id).into(), Market); + + let cost = market.buy(quantity); + assert(cost < player.cash, 'not enough cash'); + + let mut drug = get!(world, (game_id, player_id, drug_id).into(), Drug); + + // update market + market.cash += cost; + market.quantity -= quantity; + + // update player + player.cash -= cost; + player.drug_count += quantity; + + // update drug + drug.quantity += quantity; + + set!(world, (market, player, drug)); + emit!(world, Bought { game_id, player_id, drug_id, quantity, cost }); + } + + + fn sell( + self: @ContractState, + game_id: u32, + location_id: LocationEnum, + drug_id: DrugEnum, + quantity: usize + ) { + let world = self.world(); + let player_id = get_caller_address(); + + let game = get!(world, game_id, Game); + assert(game.tick(), 'cannot progress'); + + let mut player = get!(world, (game_id, player_id).into(), Player); + assert(player.location_id == location_id, 'player is not at location'); - let mut drug = get!(ctx.world, (game_id, player_id, drug_id).into(), Drug); - assert(drug.quantity >= quantity, 'not enough drugs to sell'); + let mut drug = get!(world, (game_id, player_id, drug_id).into(), Drug); + assert(drug.quantity >= quantity, 'not enough drugs to sell'); - let mut market = get!(ctx.world, (game_id, location_id, drug_id).into(), Market); - let payout = market.sell(quantity); + let mut market = get!(world, (game_id, location_id, drug_id).into(), Market); + let payout = market.sell(quantity); - // update market - market.quantity += quantity; - market.cash -= payout; + // update market + market.quantity += quantity; + market.cash -= payout; - // update player - player.cash += payout; - player.drug_count -= quantity; + // update player + player.cash += payout; + player.drug_count -= quantity; - // update drug - drug.quantity -= quantity; + // update drug + drug.quantity -= quantity; - set!(ctx.world, (market, player, drug)); - emit!(ctx.world, Sold { game_id, player_id, drug_id, quantity, payout }); + set!(world, (market, player, drug)); + emit!(world, Sold { game_id, player_id, drug_id, quantity, payout }); + } } } diff --git a/src/systems/travel.cairo b/src/systems/travel.cairo index a2a9e8315..f2fd7aa11 100644 --- a/src/systems/travel.cairo +++ b/src/systems/travel.cairo @@ -1,15 +1,47 @@ -#[system] +use starknet::ContractAddress; +use dojo::world::{IWorldDispatcher, IWorldDispatcherTrait}; +use rollyourown::models::location::LocationEnum; + + +#[starknet::interface] +trait ITravel { + fn travel(self: @TContractState, game_id: u32, next_location_id: LocationEnum) -> bool; +} + +#[dojo::contract] mod travel { use starknet::ContractAddress; + use starknet::get_caller_address; + + use rollyourown::models::game::{Game, GameTrait}; + use rollyourown::models::location::{Location, LocationTrait, LocationEnum}; + use rollyourown::models::player::{Player, PlayerTrait, PlayerStatus}; + use rollyourown::models::drug::{Drug, DrugTrait, DrugEnum}; + use rollyourown::models::market::{Market, MarketTrait}; + use rollyourown::models::encounter::{Encounter, EncounterType}; + + use rollyourown::utils::market; + use rollyourown::utils::settings::{ + RiskSettings, RiskSettingsImpl, DecideSettings, DecideSettingsImpl, EncounterSettings, + EncounterSettingsImpl + }; + use rollyourown::utils::risk::{RiskTrait, RiskImpl}; + use rollyourown::utils::math::{MathTrait, MathImplU8}; + use rollyourown::utils::random::{Random, RandomImpl}; - use dojo::world::{Context}; + use super::ITravel; + use super::on_turn_end; - use rollyourown::PlayerStatus; - use rollyourown::components::{game::{Game, GameTrait}, location::Location}; - use rollyourown::components::player::{Player, PlayerTrait}; - use rollyourown::components::risks::{Risks, RisksTrait}; + #[starknet::interface] + trait ISystem { + fn world(self: @TContractState) -> IWorldDispatcher; + } - use super::market_variations; + impl ISystemImpl of ISystem { + fn world(self: @ContractState) -> IWorldDispatcher { + self.world_dispatcher.read() + } + } #[event] #[derive(Drop, starknet::Event)] @@ -17,316 +49,199 @@ mod travel { Traveled: Traveled, AdverseEvent: AdverseEvent, MarketEvent: MarketEvent, + AtPawnshop: AtPawnshop, } #[derive(Drop, starknet::Event)] struct Traveled { + #[key] game_id: u32, + #[key] player_id: ContractAddress, - from_location: felt252, - to_location: felt252, + turn: u32, + from_location: LocationEnum, + to_location: LocationEnum, } #[derive(Drop, starknet::Event)] struct AdverseEvent { + #[key] game_id: u32, + #[key] player_id: ContractAddress, player_status: PlayerStatus, + health_loss: u8, + demand_pct: u8, + } + + #[derive(Drop, starknet::Event)] + struct AtPawnshop { + #[key] + game_id: u32, + #[key] + player_id: ContractAddress, } #[derive(Drop, starknet::Event)] struct MarketEvent { game_id: u32, - location_id: felt252, - drug_id: felt252, + location_id: LocationEnum, + drug_id: DrugEnum, increase: bool, } + #[external(v0)] + impl TravelImpl of ITravel { + // 1. Verify the caller owns the player. + // 2. Determine if a random travel event occurs and apply it if necessary. + // 3. Update the players location to the next_location_id. + // 4. Update the new locations supply based on random events. + fn travel(self: @ContractState, game_id: u32, next_location_id: LocationEnum) -> bool { + let world = self.world(); + let game = get!(world, game_id, Game); + assert(game.tick(), 'game cannot progress'); + + let player_id = get_caller_address(); + let mut player: Player = get!(world, (game_id, player_id).into(), Player); + + assert(player.can_continue(), 'player cannot travel'); + assert(next_location_id != LocationEnum::Home, 'cannot travel to Home'); + assert(player.location_id != next_location_id, 'already at location'); + + let mut randomizer = RandomImpl::new(world); + + // save next_location_id + player.next_location_id = next_location_id; + + // initial travel when game starts has no risk or events + if player.turn > 0 { + let risk_settings = RiskSettingsImpl::get(game.game_mode, @player); + + let encounter_option = risk_settings.travel(world, ref randomizer, @player); + + match encounter_option { + Option::Some(encounter) => { + // update player status + player.status = match encounter.encounter_id { + EncounterType::Gang => PlayerStatus::BeingMugged, + EncounterType::Cops => PlayerStatus::BeingArrested + }; + + let encounter_settings = EncounterSettingsImpl::get( + game.game_mode, @player, encounter.level + ); + + // player lose max(encounter_settings.dmg / 3,1) HP, but can't die + let mut encounter_dmg = if encounter_settings.dmg < 3 { + 1 + } else { + encounter_settings.dmg / 3 + }; + let new_health = player.health.sub_capped(encounter_dmg, 1); + let health_loss = player.health - new_health; + player.health = new_health; + + set!(world, (player)); + emit!( + world, + AdverseEvent { + game_id, + player_id, + player_status: player.status, + health_loss, + demand_pct: encounter.demand_pct + } + ); - // 1. Verify the caller owns the player. - // 2. Determine if a random travel event occurs and apply it if necessary. - // 3. Update the players location to the next_location_id. - // 4. Update the new locations supply based on random events. - fn execute(ctx: Context, game_id: u32, next_location_id: felt252) -> bool { - let game = get!(ctx.world, game_id, Game); - assert(game.tick(), 'game cannot progress'); - - let player_id = ctx.origin; - let mut player: Player = get!(ctx.world, (game_id, player_id).into(), Player); - assert(player.can_continue(), 'player cannot travel'); - assert(player.location_id != next_location_id, 'already at location'); - - // initial travel when game starts has no risk or events - if player.location_id != 0 { - let mut risks: Risks = get!(ctx.world, (game_id, next_location_id).into(), Risks); - let seed = starknet::get_tx_info().unbox().transaction_hash; - player.status = risks.travel(seed, player.cash, player.drug_count); - if player.status != PlayerStatus::Normal { - set!(ctx.world, (player)); - emit!(ctx.world, AdverseEvent { game_id, player_id, player_status: player.status }); - - return true; + return true; + }, + Option::None => {} + } } - //market price fluctuation - market_variations(ctx, game_id); + on_turn_end(world, ref randomizer, @game, ref player); - player.turns_remaining -= 1; + false } - - player.location_id = next_location_id; - set!(ctx.world, (player)); - - emit!( - ctx.world, - Traveled { - game_id, player_id, from_location: player.location_id, to_location: next_location_id - } - ); - - false } } -use dojo::world::{Context, IWorld, IWorldDispatcher, IWorldDispatcherTrait}; - -use rollyourown::components::drug::{Drug, DrugTrait}; -use rollyourown::components::location::{Location, LocationTrait}; -use rollyourown::components::market::{Market, MarketTrait}; -use rollyourown::constants::{ - PRICE_VAR_CHANCE, PRICE_VAR_MIN, PRICE_VAR_MAX, MARKET_EVENT_CHANCE, MARKET_EVENT_MIN, - MARKET_EVENT_MAX -}; -use rollyourown::utils::random; -use super::travel::travel::{Event, MarketEvent}; - -fn market_variations(ctx: Context, game_id: u32) { - let mut locations = LocationTrait::all(); - loop { - match locations.pop_front() { - Option::Some(location_id) => { - let mut seed = starknet::get_tx_info().unbox().transaction_hash; - seed = pedersen::pedersen(seed, *location_id); - - let mut drugs = DrugTrait::all(); - loop { - match drugs.pop_front() { - Option::Some(drug_id) => { - seed = pedersen::pedersen(seed, *drug_id); - let rand = random(seed, 0, 1000); - - if rand < PRICE_VAR_CHANCE.into() { - // increase price - price_variation_with_cash( - ctx, game_id, *location_id, *drug_id, ref seed, true - ); - } else if rand >= (999 - PRICE_VAR_CHANCE).into() { - // decrease price - price_variation_with_cash( - ctx, game_id, *location_id, *drug_id, ref seed, false - ); - } else if rand > 500 && rand <= 500 + MARKET_EVENT_CHANCE.into() { - // big move up - price_variation_with_drug( - ctx, game_id, *location_id, *drug_id, ref seed, true - ); - emit!( - ctx.world, - MarketEvent { - game_id, - location_id: *location_id, - drug_id: *drug_id, - increase: true - } - ); - } else if rand < 500 && rand >= 500 - MARKET_EVENT_CHANCE.into() { - // big move down - price_variation_with_drug( - ctx, game_id, *location_id, *drug_id, ref seed, false - ); - emit!( - ctx.world, - MarketEvent { - game_id, - location_id: *location_id, - drug_id: *drug_id, - increase: false - } - ); - } - }, - Option::None(()) => { - break (); - } - }; - }; - }, - Option::None(_) => { - break (); - } +use rollyourown::models::game::{Game}; +use rollyourown::models::player::{Player, PlayerTrait, PlayerStatus}; +use rollyourown::utils::settings::{RiskSettings, RiskSettingsImpl}; +use rollyourown::utils::settings::{ShopSettings, ShopSettingsImpl}; +use rollyourown::utils::shop::ShopImpl; +use rollyourown::utils::risk::{RiskTrait, RiskImpl}; +use rollyourown::utils::market; +use rollyourown::utils::math::{MathTrait, MathImpl, MathImplU8}; +use rollyourown::utils::events::{RawEventEmitterTrait, RawEventEmitterImpl}; +use rollyourown::utils::random::{Random}; + +use super::travel::travel::MarketEvent; + +fn on_turn_end( + world: IWorldDispatcher, ref randomizer: Random, game: @Game, ref player: Player +) -> bool { + let shop_settings = ShopSettingsImpl::get(*game.game_mode); + + // check if can access pawnshop + if shop_settings.is_open(@player) { + if player.status == PlayerStatus::AtPawnshop { + // exit pawnshop + player.status = PlayerStatus::Normal; + } else { + // force pawnshop + player.status = PlayerStatus::AtPawnshop; + // emit raw event AtPawnshop + world + .emit_raw( + array![ + selector!("AtPawnshop"), (*game.game_id).into(), player.player_id.into() + ], + array![] + ); + + // save player + set!(world, (player)); + return false; }; - }; -} + } + // update location + player.location_id = player.next_location_id; -fn price_variation_with_cash( - ctx: Context, - game_id: u32, - location_id: felt252, - drug_id: felt252, - ref seed: felt252, - increase: bool -) { - let market = get!(ctx.world, (game_id, location_id, drug_id), (Market)); - let percent = random(seed + 1, PRICE_VAR_MIN.into(), PRICE_VAR_MAX.into()); - - let market_price = market.cash / Into::::into(market.quantity); - let target_price = if increase { - market_price * (100 + percent) / 100 - } else { - market_price * (100 - percent) / 100 - }; - - let target_cash = Into::::into(market.quantity) * target_price; - - // update cash in market - set!( - ctx.world, - (Market { - game_id, - location_id: location_id, - drug_id: drug_id, - cash: target_cash, - quantity: market.quantity - }) - ); -} + let risk_settings = RiskSettingsImpl::get(*game.game_mode, @player); + // update wanted + risk_settings.update_wanted(ref player); -fn price_variation_with_drug( - ctx: Context, - game_id: u32, - location_id: felt252, - drug_id: felt252, - ref seed: felt252, - increase: bool -) { - let market = get!(ctx.world, (game_id, location_id, drug_id), (Market)); - let percent = random(seed + 1, MARKET_EVENT_MIN.into(), MARKET_EVENT_MAX.into()); - - let market_price = market.cash / Into::::into(market.quantity); - let target_price = if increase { - market_price * (100 + percent) / 100 - } else { - market_price * (100 - (percent/2)) / 100 - }; + //update HP if not dead + if player.health > 0 { + player.health = player.health.add_capped(risk_settings.health_increase_by_turn, 100); + } - let target_qty = market.cash / target_price; - - // update quantity in market - set!( - ctx.world, - (Market { - game_id, - location_id: location_id, - drug_id: drug_id, - cash: market.cash, - quantity: target_qty.try_into().unwrap() - }) - ); -} -// fn market_events(ctx: Context, game_id: u32) { -// let mut locations = LocationTrait::all(); -// loop { -// match locations.pop_front() { -// Option::Some(location_id) => { -// let mut seed = starknet::get_tx_info().unbox().transaction_hash; -// seed = pedersen::pedersen(seed, *location_id); - -// let mut drugs = DrugTrait::all(); -// loop { -// match drugs.pop_front() { -// Option::Some(drug_id) => { -// seed = pedersen::pedersen(seed, *drug_id); -// let rand = random(seed, 0, 100); -// let pricing_infos = MarketTrait::get_pricing_info(*drug_id); -// if rand <= PRICE_VAR.into() { -// // increase price -// let market = get!( -// ctx.world, (game_id, *location_id, *drug_id), (Market) -// ); - -// let increase_by = random( -// seed + 1, MIN_PRICE_VAR.into(), MAX_PRICE_VAR.into() -// ); - -// let market_price = market.cash -// / Into::::into(market.quantity); -// let target_price = market_price * (100 + increase_by) / 100; -// if target_price < (pricing_infos.max_price -// * (100 + MAX_EXTRA_PRICE_VAR.into()) -// / 100) { -// // increase price by increase_by % -// let target_cash = Into::::into(market.quantity) -// * target_price; - -// // update cash in market -// set!( -// ctx.world, -// (Market { -// game_id, -// location_id: *location_id, -// drug_id: *drug_id, -// cash: target_cash, -// quantity: market.quantity -// }) -// ); -// } -// } else if rand >= (100 - PRICE_VAR).into() { -// // decrease price -// let market = get!( -// ctx.world, (game_id, *location_id, *drug_id), (Market) -// ); - -// let decrease_by = random( -// seed + 1, MIN_PRICE_VAR.into(), MAX_PRICE_VAR.into() -// ); - -// let market_price = market.cash -// / Into::::into(market.quantity); -// let target_price = market_price * (100 - decrease_by) / 100; -// if target_price > (pricing_infos.min_price -// * (100 + MAX_EXTRA_PRICE_VAR.into()) -// / 100) { -// // decrease price by decrease_by % -// let target_cash = Into::::into(market.quantity) -// * target_price; - -// // update cash in market -// set!( -// ctx.world, -// (Market { -// game_id, -// location_id: *location_id, -// drug_id: *drug_id, -// cash: target_cash, -// quantity: market.quantity -// }) -// ); -// } -// } -// }, -// Option::None(()) => { -// break (); -// } -// }; -// }; -// }, -// Option::None(_) => { -// break (); -// } -// }; -// }; -// } + // update turn + player.turn += 1; + + // save player + set!(world, (player)); + + // emit raw event Traveled if stil alive + if player.health > 0 { + world + .emit_raw( + array![selector!("Traveled"), (*game.game_id).into(), player.player_id.into()], + array![ + (player.turn - 1).into(), + player.location_id.into(), + player.next_location_id.into() + ] + ); + } + // create lots of events + // market price variations + market::market_variations(world, ref randomizer, *game.game_id, player.player_id); + true +} diff --git a/src/tests.cairo b/src/tests.cairo index b7bd366d2..98b6d2685 100644 --- a/src/tests.cairo +++ b/src/tests.cairo @@ -1,6 +1,10 @@ -mod create; -mod travel; -mod player; -mod trade; -mod random; +// mod create; +// mod travel; +// mod player; +// mod trade; +// mod random; + +mod test_helper; +mod random; +mod math; diff --git a/src/tests/create.cairo b/src/tests/create.cairo index d278467fd..2f1579bbd 100644 --- a/src/tests/create.cairo +++ b/src/tests/create.cairo @@ -8,21 +8,17 @@ use debug::PrintTrait; use starknet::{ContractAddress, syscalls::deploy_syscall}; use starknet::class_hash::{ClassHash, Felt252TryIntoClassHash}; -// use dojo::interfaces::{ -// IComponentLibraryDispatcher, IComponentDispatcherTrait, ISystemLibraryDispatcher, -// ISystemDispatcherTrait -// }; use dojo::world::{IWorldDispatcher, IWorldDispatcherTrait}; use dojo::test_utils::spawn_test_world; -use rollyourown::components::game::{game, Game}; -use rollyourown::components::market::{market, Market}; -use rollyourown::components::player::{player, Player}; -use rollyourown::components::drug::{drug, Drug}; -use rollyourown::components::location::Location; -use rollyourown::components::risks::{risks, Risks}; -use rollyourown::components::name::{name, Name}; +use rollyourown::models::game::{game, Game}; +use rollyourown::models::market::{market, Market}; +use rollyourown::models::player::{player, Player}; +use rollyourown::models::drug::{drug, Drug}; +use rollyourown::models::location::Location; +use rollyourown::models::risks::{risks, Risks}; +use rollyourown::models::name::{name, Name}; use rollyourown::systems::decide::decide; use rollyourown::systems::travel::travel; use rollyourown::systems::trade::{buy, sell}; diff --git a/src/tests/math.cairo b/src/tests/math.cairo new file mode 100644 index 000000000..392b7f304 --- /dev/null +++ b/src/tests/math.cairo @@ -0,0 +1,23 @@ +use dojo::world::{IWorldDispatcher, IWorldDispatcherTrait}; + +use rollyourown::tests::test_helper::{spawn_world, SystemDispatchers}; +use rollyourown::utils::math::{MathTrait, MathImplU8}; + +use debug::PrintTrait; + +#[test] +#[available_gas(100000000)] +fn test_math_pct() { + let (world, contracts) = spawn_world(); + + let value_2 = 2_u8; + let value_100 = 100_u8; + let value_250 = 250_u8; + + assert(value_2.pct(50) == 1, 'invalid pct 50'); + + assert(value_100.pct(2) == 2, 'invalid pct 2'); + assert(value_100.pct(10) == 10, 'invalid pct 10'); + + assert(value_250.pct(20) == 50, 'invalid pct 20'); +} diff --git a/src/tests/player.cairo b/src/tests/player.cairo index d48d2a62c..47edbb6b6 100644 --- a/src/tests/player.cairo +++ b/src/tests/player.cairo @@ -9,9 +9,9 @@ use starknet::{ContractAddress, syscalls::deploy_syscall}; use starknet::class_hash::{ClassHash, Felt252TryIntoClassHash}; use dojo::world::{IWorldDispatcher, IWorldDispatcherTrait}; -use rollyourown::components::player::{player, Player}; -use rollyourown::components::game::{game, Game}; -use rollyourown::components::name::{name, Name}; +use rollyourown::models::player::{player, Player}; +use rollyourown::models::game::{game, Game}; +use rollyourown::models::name::{name, Name}; use rollyourown::tests::create::spawn_game; #[test] diff --git a/src/tests/random.cairo b/src/tests/random.cairo index 9f49e675b..3f237ed01 100644 --- a/src/tests/random.cairo +++ b/src/tests/random.cairo @@ -1,46 +1,65 @@ -#[system] -mod random { - use array::ArrayTrait; - use traits::Into; - - use dojo::world::Context; - use rollyourown::components::game::Game; - use rollyourown::components::name::Name; - - #[event] - #[derive(Drop, starknet::Event)] - enum Event { - Random: Random - } - - #[derive(Drop, starknet::Event)] - struct Random { - likelihood: u8, - iterations: u32, - num_occured: u32, - } - - fn execute(ctx: Context, likelihood: u8, iterations: u32) { - let mut seed = starknet::get_tx_info().unbox().transaction_hash; - - let mut i = 0; - let mut num_occured = 0; - - loop { - if i == iterations { - break (); - } - - seed = pedersen::pedersen(seed, seed); - let entropy: u256 = seed.into(); - let result: u128 = entropy.low % 100; - - if result <= likelihood.into() { - num_occured += 1; - }; - i += 1; - }; - - emit!(ctx.world, Random { likelihood, iterations, num_occured }) - } +use dojo::world::{IWorldDispatcher, IWorldDispatcherTrait}; + +use rollyourown::tests::test_helper::{spawn_world, SystemDispatchers}; +use rollyourown::utils::random::{Random, RandomImpl, RandomTrait}; + +use debug::PrintTrait; + + +#[test] +#[available_gas(100000000)] +fn test_random_between_0_2() { + let (world, contracts) = spawn_world(); + + starknet::testing::set_contract_address(111.try_into().unwrap()); + let mut randomizer = RandomImpl::new(world); + let mut i = 0; + loop { + if i == 10 { + break; + } + + let rand = randomizer.between::(0, 2); + rand.print(); + + i += 1; + }; +} + +#[test] +#[available_gas(100000000)] +fn test_random_u8() { + let (world, contracts) = spawn_world(); + + starknet::testing::set_contract_address(111.try_into().unwrap()); + let mut randomizer = RandomImpl::new(world); + let mut i = 0; + loop { + if i == 3 { + break; + } + + let rand = randomizer.between::(0, 100); + + '1-----------'.print(); + rand.print(); + + i += 1; + }; + + starknet::testing::set_contract_address(222.try_into().unwrap()); + let mut randomizer2 = RandomImpl::new(world); + let mut i = 0; + loop { + if i == 3 { + break; + } + + let rand = randomizer2.between::(0, 100); + + '2-----------'.print(); + rand.print(); + + i += 1; + }; } diff --git a/src/tests/test_helper.cairo b/src/tests/test_helper.cairo new file mode 100644 index 000000000..d760b69c3 --- /dev/null +++ b/src/tests/test_helper.cairo @@ -0,0 +1,90 @@ +use debug::PrintTrait; + +use starknet::ContractAddress; +use starknet::contract_address_const; +use starknet::class_hash::Felt252TryIntoClassHash; + +use dojo::test_utils::{spawn_test_world}; + +use dojo::world::{IWorldDispatcher, IWorldDispatcherTrait}; + +use rollyourown::models::drug::{drug, Drug}; +use rollyourown::models::game::{game, Game}; +use rollyourown::models::item::{item, Item}; +use rollyourown::models::market::{market, Market}; +use rollyourown::models::player::{player, Player}; +use rollyourown::models::encounter::{encounter, Encounter}; + + +use rollyourown::systems::decide::{decide, IDecideDispatcher, IDecideDispatcherTrait}; +use rollyourown::systems::lobby::{lobby, ILobbyDispatcher, ILobbyDispatcherTrait}; +use rollyourown::systems::shop::{shop, IShopDispatcher, IShopDispatcherTrait}; +use rollyourown::systems::trade::{trade, ITradeDispatcher, ITradeDispatcherTrait}; +use rollyourown::systems::travel::{travel, ITravelDispatcher, ITravelDispatcherTrait}; + + +fn ZERO() -> ContractAddress { + contract_address_const::<0>() +} + +fn PLAYER() -> ContractAddress { + contract_address_const::<'PLAYER'>() +} + + +#[derive(Copy, Clone, Drop)] +struct SystemDispatchers { + decide: IDecideDispatcher, + lobby: ILobbyDispatcher, + shop: IShopDispatcher, + trade: ITradeDispatcher, + travel: ITravelDispatcher, +} + + +fn spawn_world() -> (IWorldDispatcher, SystemDispatchers) { + let models = array![ + drug::TEST_CLASS_HASH, + game::TEST_CLASS_HASH, + item::TEST_CLASS_HASH, + market::TEST_CLASS_HASH, + player::TEST_CLASS_HASH, + encounter::TEST_CLASS_HASH, + ]; + + let world = spawn_test_world(models); + + let systems = SystemDispatchers { + decide: IDecideDispatcher { + contract_address: world + .deploy_contract('paper', decide::TEST_CLASS_HASH.try_into().unwrap()) + }, + lobby: ILobbyDispatcher { + contract_address: world + .deploy_contract('paper', lobby::TEST_CLASS_HASH.try_into().unwrap()) + }, + shop: IShopDispatcher { + contract_address: world + .deploy_contract('paper', shop::TEST_CLASS_HASH.try_into().unwrap()) + }, + trade: ITradeDispatcher { + contract_address: world + .deploy_contract('paper', trade::TEST_CLASS_HASH.try_into().unwrap()) + }, + travel: ITravelDispatcher { + contract_address: world + .deploy_contract('paper', travel::TEST_CLASS_HASH.try_into().unwrap()) + }, + }; + + // TODO: setup auth + + (world, systems) +} + + +#[test] +#[available_gas(200000000)] +fn test_spawn_world() { + let (world, systems) = spawn_world(); +} diff --git a/src/tests/trade.cairo b/src/tests/trade.cairo index 6511af30b..7cd5f6d69 100644 --- a/src/tests/trade.cairo +++ b/src/tests/trade.cairo @@ -11,9 +11,8 @@ use dojo::world::{IWorldDispatcher, IWorldDispatcherTrait}; use dojo::test_utils::spawn_test_world; -use rollyourown::PlayerStatus; -use rollyourown::components::drug::Drug; -use rollyourown::components::player::Player; +use rollyourown::models::drug::Drug; +use rollyourown::models::player::Player; use rollyourown::tests::create::{spawn_game, spawn_player}; use rollyourown::constants::SCALING_FACTOR; diff --git a/src/tests/travel.cairo b/src/tests/travel.cairo index 965e9efe1..6457e3846 100644 --- a/src/tests/travel.cairo +++ b/src/tests/travel.cairo @@ -11,10 +11,8 @@ use dojo::world::{IWorldDispatcher, IWorldDispatcherTrait}; use dojo::test_utils::spawn_test_world; -use rollyourown::PlayerStatus; -use rollyourown::components::player::Player; +use rollyourown::models::player::{Player, PlayerStatus}; use rollyourown::tests::create::{spawn_game, spawn_player}; -use rollyourown::constants::{TRAVEL_RISK, COPS_DRUG_THRESHOLD}; const WEED_ID: felt252 = 0x57656564; // weed // #[test] diff --git a/src/utils.cairo b/src/utils.cairo index 98ea94023..075a3c015 100644 --- a/src/utils.cairo +++ b/src/utils.cairo @@ -1,9 +1,7 @@ -use traits::{Into, TryInto}; - -// TODO: implement proper psuedo random number generator -fn random(seed: felt252, min: u128, max: u128) -> u128 { - let seed: u256 = seed.into(); - let range = max - min; - - (seed.low % range) + min -} +mod random; +mod settings; +mod market; +mod risk; +mod shop; +mod math; +mod events; diff --git a/src/utils/events.cairo b/src/utils/events.cairo new file mode 100644 index 000000000..b0c53703d --- /dev/null +++ b/src/utils/events.cairo @@ -0,0 +1,13 @@ +use dojo::world::{IWorldDispatcher, IWorldDispatcherTrait}; + +trait RawEventEmitterTrait { + fn emit_raw(self: IWorldDispatcher, keys: Array, values: Array); +} + +impl RawEventEmitterImpl of RawEventEmitterTrait { + fn emit_raw(self: IWorldDispatcher, keys: Array, values: Array) { + let mut keys = keys; + self.emit(keys, values.span()); + } +} + diff --git a/src/utils/market.cairo b/src/utils/market.cairo new file mode 100644 index 000000000..965c83e09 --- /dev/null +++ b/src/utils/market.cairo @@ -0,0 +1,288 @@ +use starknet::ContractAddress; +use dojo::world::{IWorldDispatcher, IWorldDispatcherTrait}; + +use rollyourown::models::market::Market; +use rollyourown::models::game::{Game, GameMode}; +use rollyourown::models::drug::{Drug, DrugTrait}; +use rollyourown::models::player::{Player}; +use rollyourown::models::location::{Location, LocationTrait, LocationEnum}; + +use rollyourown::systems::travel::travel::MarketEvent; + +use rollyourown::utils::settings::{PriceSettings, PriceSettingsImpl}; +use rollyourown::utils::settings::{MarketSettings, MarketSettingsImpl}; +use rollyourown::utils::events::{RawEventEmitterTrait, RawEventEmitterImpl}; +use rollyourown::utils::random::{Random, RandomImpl, RandomTrait}; +use rollyourown::utils::math::{MathTrait, MathImplU128}; + +use rollyourown::constants::SCALING_FACTOR; + +use debug::PrintTrait; + +fn initialize_markets( + world: IWorldDispatcher, + ref randomizer: Random, + game_id: u32, + game_mode: GameMode, + location_id: LocationEnum +) { + let mut drugs = DrugTrait::all(); + + loop { + match drugs.pop_front() { + Option::Some(drug_id) => { + let price_settings = PriceSettingsImpl::get(game_mode, *drug_id); + let market_price = randomizer + .between::(price_settings.min_price, price_settings.max_price) + .try_into() + .unwrap(); + let market_quantity: usize = randomizer + .between::(price_settings.min_qty, price_settings.max_qty) + .try_into() + .unwrap(); + + let market_cash = market_quantity.into() * market_price; + + //set market entity + set!( + world, + (Market { + game_id, + location_id: location_id, + drug_id: *drug_id, + cash: market_cash, + quantity: market_quantity + }) + ); + }, + Option::None(()) => { break (); } + }; + }; +} + + +fn market_variations( + world: IWorldDispatcher, ref randomizer: Random, game_id: u32, player_id: ContractAddress +) { + let mut locations = LocationTrait::all(); + let game = get!(world, game_id, Game); + let player = get!(world, (game_id, player_id), Player); + let market_settings = MarketSettingsImpl::get(game.game_mode); + //let scaling_factor = get_liquidity_scaling_factor(market_settings, player.turn); + + loop { + match locations.pop_front() { + Option::Some(location_id) => { + let mut drugs = DrugTrait::all(); + loop { + match drugs.pop_front() { + Option::Some(drug_id) => { + let rand = randomizer.between::(0, 1000); + + let mut market = get!( + world, (game_id, *location_id, *drug_id).into(), Market + ); + + // flat 2% + scale_market_liq(ref market, market_settings.liq_scaling_flat.into()); + //scale_market_liq(ref market, scaling_factor); + scale_market_price( + ref market, market_settings.price_scaling_flat.into() + ); + + if rand < market_settings.price_var_chance.into() { + // increase price + price_variation_with_cash( + ref randomizer, ref market, market_settings, true + ); + } else if rand >= (999 - market_settings.price_var_chance).into() { + // decrease price + price_variation_with_cash( + ref randomizer, ref market, market_settings, false + ); + } else if rand > 500 && rand <= 500 + + market_settings.market_event_chance.into() { + // big move up + price_variation_with_drug( + ref randomizer, ref market, market_settings, true + ); + + // emit raw event + let location_id_u8: u8 = (*location_id).into(); + let drug_id_u8: u8 = (*drug_id).into(); + + world + .emit_raw( + array![selector!("MarketEvent")], + array![ + game_id.into(), + location_id_u8.into(), + drug_id_u8.into(), + true.into() + ] + ); + } else if rand < 500 && rand >= 500 + - market_settings.market_event_chance.into() { + // big move down + price_variation_with_drug( + ref randomizer, ref market, market_settings, false + ); + + // emit raw event + let location_id_u8: u8 = (*location_id).into(); + let drug_id_u8: u8 = (*drug_id).into(); + world + .emit_raw( + array![selector!("MarketEvent")], + array![ + game_id.into(), + location_id_u8.into(), + drug_id_u8.into(), + false.into() + ] + ); + } + + // update market + set!(world, (market)); + }, + Option::None(()) => { break; } + }; + }; + }, + Option::None(_) => { break; } + }; + }; +} + + +fn price_variation_with_cash( + ref randomizer: Random, ref market: Market, market_settings: MarketSettings, increase: bool +) { + let percent = randomizer + .between::< + u128 + >(market_settings.price_var_min.into(), market_settings.price_var_max.into()); + + let market_price = market.cash / Into::::into(market.quantity); + let target_price = if increase { + market_price + market_price.pct(percent) + } else { + market_price - market_price.pct(percent) + }; + + let target_cash = Into::::into(market.quantity) * target_price; + + // update cash in market + market.cash = target_cash; +} + + +fn price_variation_with_drug( + ref randomizer: Random, ref market: Market, market_settings: MarketSettings, increase: bool +) { + let percent = randomizer + .between::< + u128 + >(market_settings.market_event_min.into(), market_settings.market_event_max.into()); + + let market_price = market.cash / Into::::into(market.quantity); + let target_price = if increase { + market_price + market_price.pct(percent) + } else { + market_price - market_price.pct(percent / 2) + }; + + let target_qty = market.cash / target_price; + + // update quantity in market + market.quantity = target_qty.try_into().unwrap(); +} + + +// use cubit::f128::types::fixed::{Fixed, FixedTrait}; + +// formula : 1 + ( initial_rate - (sqrt(x/100) / fading_rate ) ) +// initial_rate : 0.009 +// fading_rate : 350 +// result is x10_000 +// fn get_liquidity_scaling_factor(market_settings: MarketSettings, turn: usize) -> u128 { +// let initial_rate = FixedTrait::from_unscaled_felt( +// market_settings.liq_scaling_initial_rate.into() +// ) +// / FixedTrait::from_unscaled_felt(10000); +// let fading_rate = FixedTrait::from_unscaled_felt( +// market_settings.liq_scaling_fading_rate.into() +// ); +// let x_div_100 = FixedTrait::from_unscaled_felt(turn.into()) +// / FixedTrait::from_unscaled_felt(100); + +// let factor = FixedTrait::ONE() + (initial_rate - (FixedTrait::sqrt(x_div_100) / fading_rate)); +// let scaled = factor * FixedTrait::from_unscaled_felt(10000); + +// scaled.try_into().unwrap() +// } + + +fn scale_market_liq(ref market: Market, scaling_factor: u128) { + market.quantity = market.quantity * scaling_factor.try_into().unwrap() / 10000; + market.cash = market.cash * scaling_factor.into() / 10000; +} + +fn scale_market_price(ref market: Market, scaling_factor: u128) { + market.cash = market.cash * scaling_factor / 10000; +} + +// +// +// + +// #[test] +// #[available_gas(2000000)] +// fn test_liquidity_scaling_lp() { +// let factor_1 = get_liquidity_scaling_factor(GameMode::Limited, 1); // 10087 + +// let qty = 1000; +// let cash = 200 * 1000 * SCALING_FACTOR; +// let price = 200; + +// let new_cash = cash * factor_1 / 10000; +// let new_qty = qty * factor_1 / 10000; + +// 'new_cash'.print(); +// new_cash.print(); // 201740 0000 + +// 'new_qty'.print(); +// new_qty.print(); // 1008 +// } + +// #[test] +// #[available_gas(2000000)] +// fn test_liquidity_scaling_factor() { +// let factor_1 = get_liquidity_scaling_factor(GameMode::Limited, 1); // 10087 +// let factor_10 = get_liquidity_scaling_factor(GameMode::Limited, 10); // 10080 +// let factor_100 = get_liquidity_scaling_factor(GameMode::Limited, 100); // 10061 +// let factor_500 = get_liquidity_scaling_factor(GameMode::Limited, 500); // 10026 +// let factor_950 = get_liquidity_scaling_factor(GameMode::Limited, 950); // 10001 +// let factor_1000 = get_liquidity_scaling_factor(GameMode::Limited, 1000); // 9999 + +// 'factor_1'.print(); +// factor_1.print(); + +// 'factor_10'.print(); +// factor_10.print(); + +// 'factor_100'.print(); +// factor_100.print(); + +// 'factor_500'.print(); +// factor_500.print(); + +// 'factor_950'.print(); +// factor_950.print(); + +// 'factor_1000'.print(); +// factor_1000.print(); +// } + + diff --git a/src/utils/math.cairo b/src/utils/math.cairo new file mode 100644 index 000000000..0fbcce5e8 --- /dev/null +++ b/src/utils/math.cairo @@ -0,0 +1,49 @@ +#[generate_trait] +trait MathTrait { + fn add_capped(self: T, value: T, cap: T) -> T; + fn sub_capped(self: T, value: T, cap: T) -> T; + fn pct(self: T, p: u128) -> T; +} + +impl MathImpl< + T, + +PartialOrd, + +Add, + +AddEq, + +Sub, + +SubEq, + +Zeroable, + +Into, + +TryInto, + +Copy, + +Drop +> of MathTrait { + fn add_capped(self: T, value: T, cap: T) -> T { + if self + value >= cap { + cap + } else { + self + value + } + } + + fn sub_capped(self: T, value: T, cap: T) -> T { + if value >= self { + cap + } else { + self - value + } + } + + fn pct(self: T, p: u128) -> T { + ((10000 * self.into() * p / 100) / 10000).try_into().unwrap() + } +} + + +impl MathImplU8 = MathImpl; +impl MathImplU16 = MathImpl; +impl MathImplU32 = MathImpl; +impl MathImplU64 = MathImpl; +impl MathImplU128 = MathImpl; +impl MathImplUSize = MathImpl; + diff --git a/src/utils/random.cairo b/src/utils/random.cairo new file mode 100644 index 000000000..c6f9febc5 --- /dev/null +++ b/src/utils/random.cairo @@ -0,0 +1,67 @@ +use starknet::ContractAddress; +use starknet::get_contract_address; + +use dojo::world::{IWorldDispatcher, IWorldDispatcherTrait}; + +#[derive(Copy, Drop, Serde)] +struct Random { + world: IWorldDispatcher, + seed: felt252, + nonce: usize, +} + +#[generate_trait] +impl RandomImpl of RandomTrait { + // one instance by contract, then passed by ref to sub fns + fn new(world: IWorldDispatcher) -> Random { + Random { world, seed: seed(get_contract_address()), nonce: 0 } + } + + fn next_seed(ref self: Random) -> felt252 { + self.nonce += 1; + self.seed = pedersen::pedersen(self.seed, self.nonce.into()); + self.seed + } + + fn bool(ref self: Random) -> bool { + let seed: u256 = self.next_seed().into(); + seed.low % 2 == 0 + } + + fn occurs(ref self: Random, likelihood: u8) -> bool { + if likelihood == 0 { + return false; + } + + let result = self.between::(0, 100); + result <= likelihood + } + + fn between< + T, + +Into, + +Into, + +TryInto, + +PartialOrd, + +Zeroable, + +Copy, + +Drop + >( + ref self: Random, min: T, max: T + ) -> T { + let seed: u256 = self.next_seed().into(); + + if min >= max { + return Zeroable::zero(); + }; + + let range: u128 = max.into() - min.into(); + let rand = (seed.low % range) + min.into(); + rand.try_into().unwrap() + } +} + +fn seed(salt: ContractAddress) -> felt252 { + pedersen::pedersen(starknet::get_tx_info().unbox().transaction_hash, salt.into()) +} + diff --git a/src/utils/risk.cairo b/src/utils/risk.cairo new file mode 100644 index 000000000..a55dd1370 --- /dev/null +++ b/src/utils/risk.cairo @@ -0,0 +1,82 @@ +use debug::PrintTrait; + +use dojo::world::{IWorldDispatcher, IWorldDispatcherTrait}; + +use rollyourown::utils::settings::RiskSettings; +use rollyourown::models::player::{Player, PlayerStatus, PlayerTrait, PlayerImpl}; +use rollyourown::models::encounter::{Encounter, EncounterType, EncounterImpl}; +use rollyourown::utils::math::{MathTrait, MathImplU8}; +use rollyourown::utils::random::{Random, RandomImpl, RandomTrait}; + +trait RiskTrait { + fn update_wanted(self: T, ref player: Player); + fn travel( + self: T, world: IWorldDispatcher, ref randomizer: Random, player: @Player + ) -> Option; + fn run(self: T, world: IWorldDispatcher, ref randomizer: Random, player: @Player) -> bool; +} + +impl RiskImpl of RiskTrait { + #[inline(always)] + fn travel( + self: RiskSettings, world: IWorldDispatcher, ref randomizer: Random, player: @Player + ) -> Option { + let travel_threshold = self.travel; + + if randomizer.occurs(travel_threshold) { + let result = randomizer.between::(0, 100); + + return match result <= self.encounter_bias_gangs { + bool::False => { + if (*player).drug_count < self.cops_drug_threshold { + Option::None + } else { + Option::Some( + EncounterImpl::get_or_spawn(world, player,ref randomizer, EncounterType::Cops) + ) + } + }, + bool::True => { + if (*player).cash <= self.gangs_cash_threshold { + Option::None + } else { + Option::Some( + EncounterImpl::get_or_spawn(world, player, ref randomizer,EncounterType::Gang) + ) + } + } + }; + } + Option::None + } + + #[inline(always)] + fn run( + self: RiskSettings, world: IWorldDispatcher, ref randomizer: Random, player: @Player + ) -> bool { + let capture_threshold = self.capture - (*player).get_speed(world).try_into().unwrap(); + randomizer.occurs(capture_threshold) + } + + fn update_wanted(self: RiskSettings, ref player: Player) { + if player.wanted > self.wanted_decrease_by_turn { + player.wanted -= self.wanted_decrease_by_turn + } + + if player.drug_count == 0 && player.wanted > self.wanted_decrease_zero_drug { + player.wanted -= self.wanted_decrease_zero_drug + } else { + player.wanted = player.wanted.add_capped(self.wanted_increase_by_drug, 100); + } + } +} +// fn occurs(ref randomizer: Random, likelihood: u8) -> bool { +// if likelihood == 0 { +// return false; +// } + +// let result: u128 = randomizer.between::(0, 100); +// (result <= likelihood.into()) +// } + + diff --git a/src/utils/settings.cairo b/src/utils/settings.cairo new file mode 100644 index 000000000..6f58a7303 --- /dev/null +++ b/src/utils/settings.cairo @@ -0,0 +1,408 @@ +use rollyourown::constants::SCALING_FACTOR; +use rollyourown::models::game::GameMode; +use rollyourown::models::drug::DrugEnum; +use rollyourown::models::item::ItemEnum; +use rollyourown::models::player::Player; + + +#[derive(Copy, Drop, Serde)] +struct GameSettings { + max_players: usize, + max_turns: usize, +} + +#[derive(Copy, Drop, Serde)] +struct PlayerSettings { + health: u8, + cash: u128, + wanted: u8, + attack: usize, + defense: usize, + transport: usize, + speed: usize, +} + +// TODO: update % to %0 +#[derive(Copy, Drop, Serde)] +struct RiskSettings { + travel: u8, + capture: u8, + encounter_bias_gangs: u128, + cops_drug_threshold: usize, + gangs_cash_threshold: u128, + health_increase_by_turn: u8, + wanted_decrease_by_turn: u8, + wanted_decrease_zero_drug: u8, + wanted_increase_by_drug: u8, +} + +#[derive(Copy, Drop, Serde)] +struct MarketSettings { + price_var_chance: usize, + price_var_min: u8, + price_var_max: u8, + market_event_chance: usize, + market_event_min: usize, + market_event_max: usize, + liq_scaling_initial_rate: usize, + liq_scaling_fading_rate: usize, + liq_scaling_flat: usize, + price_scaling_flat: usize, +} + +#[derive(Copy, Drop, Serde)] +struct DecideSettings { + wanted_impact_run: u8, + wanted_impact_fight: u8, +} + +#[derive(Copy, Drop, Serde)] +struct PriceSettings { + min_price: u128, + max_price: u128, + min_qty: u128, + max_qty: u128, +} + +#[derive(Copy, Drop, Serde)] +struct ItemSettings { + name: felt252, + cost: u128, + value: usize +} + +#[derive(Copy, Drop, Serde)] +struct ShopSettings { + max_item_allowed: u8, + max_item_level: u8, + opening_freq: u32 +} + + +#[derive(Copy, Drop, Serde)] +struct EncounterSettings { + level: u8, + health: u8, + dmg: u8, + payout: u128, +} + +// +// +// + +trait SettingsTrait { + fn get(game_mode: GameMode) -> T; +} + +trait DrugSettingsTrait { + fn get(game_mode: GameMode, drug_id: DrugEnum) -> T; +} + +trait PlayerSettingsTrait { + fn get(game_mode: GameMode, player: @Player) -> T; +} + +trait ItemSettingsTrait { + fn get(game_mode: GameMode, item_id: ItemEnum, level: u8) -> T; +} + +trait EncounterSettingsTrait { + fn get(game_mode: GameMode, player: @Player, level: u8) -> T; +} + +// +// +// + +impl GameSettingsImpl of SettingsTrait { + fn get(game_mode: GameMode) -> GameSettings { + let game_settings = GameSettings { max_players: 1, max_turns: 0 }; + game_settings + } +} + +impl PlayerSettingsImpl of SettingsTrait { + fn get(game_mode: GameMode) -> PlayerSettings { + let mut player_settings = PlayerSettings { + health: 100, + cash: 1420_u128 * SCALING_FACTOR, + wanted: 39, + attack: 1, + defense: 1, + transport: 60, + speed: 1 + }; + + if game_mode == GameMode::Test { + player_settings.wanted = 100; + player_settings.health = 9; + } + + player_settings + } +} + + +impl RiskSettingsImpl of PlayerSettingsTrait { + fn get(game_mode: GameMode, player: @Player) -> RiskSettings { + let travel = (40 + + (*player).wanted / 2); // 40% chance of travel encounter + 0.5 wanted (max 50) + let capture = (45 + (*player).wanted / 4); // 45% chance of capture + 0.25 wanted (max 25) + + let mut risk_settings = RiskSettings { + travel, + capture, + encounter_bias_gangs: 50, // 50% chance of gangs encounter vs cops + cops_drug_threshold: 5, // cops encounter threshold + gangs_cash_threshold: 500_0000, // gangs encounter threshold + health_increase_by_turn: 0, + wanted_decrease_by_turn: 1, + wanted_decrease_zero_drug: 10, + wanted_increase_by_drug: ((*player).drug_count / 6).try_into().unwrap() + }; + + if game_mode == GameMode::Test { + risk_settings.health_increase_by_turn = 0; + risk_settings.wanted_decrease_by_turn = 0; + }; + + risk_settings + } +} + + +impl DecideSettingsImpl of PlayerSettingsTrait { + fn get(game_mode: GameMode, player: @Player) -> DecideSettings { + let decide_settings = DecideSettings { wanted_impact_run: 6, wanted_impact_fight: 12, }; + decide_settings + } +} + +impl MarketSettingsImpl of SettingsTrait { + fn get(game_mode: GameMode) -> MarketSettings { + let mut market_settings = MarketSettings { + price_var_chance: 250, // on 1000 : 50% chance = 25% up / 25% down + price_var_min: 2, // 2% + price_var_max: 6, // 6% + market_event_chance: 8, // on 1000 : 1.6% = 0.8% up / 0.8% down + market_event_min: 40, // up 40% | down 20% + market_event_max: 80, // up 80% | down 40% + liq_scaling_initial_rate: 150, // 0.015 + liq_scaling_fading_rate: 360, + liq_scaling_flat: 10200, // 2% + price_scaling_flat: 10150, // 1.5% + }; + + if game_mode == GameMode::Test { + market_settings.market_event_chance = 14; // on 1000 : 2.8% = 1.4% up / 1.4% down + } + + market_settings + } +} + +// +// +// + +impl ShopSettingsImpl of SettingsTrait { + fn get(game_mode: GameMode) -> ShopSettings { + let mut shop_settings = ShopSettings { + max_item_allowed: 3, max_item_level: 3, opening_freq: 4 + }; + + if game_mode == GameMode::Test { + shop_settings.opening_freq = 2; + } + + shop_settings + } +} + +impl ItemSettingsImpl of ItemSettingsTrait { + fn get(game_mode: GameMode, item_id: ItemEnum, level: u8) -> ItemSettings { + let item_settings = match item_id { + ItemEnum::Attack => { + if level == 1 { + ItemSettings { name: 'Knife', cost: 450 * SCALING_FACTOR, value: 9 } + } else if level == 2 { + ItemSettings { name: 'Glock', cost: 12000 * SCALING_FACTOR, value: 24 } + } else { + ItemSettings { name: 'Uzi', cost: 99000 * SCALING_FACTOR, value: 49 } + } + }, + ItemEnum::Defense => { + if level == 1 { + ItemSettings { name: 'Knee pads', cost: 350 * SCALING_FACTOR, value: 24 } + } else if level == 2 { + ItemSettings { name: 'Leather Jacket', cost: 8900 * SCALING_FACTOR, value: 39 } + } else { + ItemSettings { name: 'Kevlar', cost: 69000 * SCALING_FACTOR, value: 59 } + } + }, + ItemEnum::Transport => { + if level == 1 { + ItemSettings { name: 'Fanny pack', cost: 500 * SCALING_FACTOR, value: 30 } + } else if level == 2 { + ItemSettings { name: 'Backpack', cost: 15000 * SCALING_FACTOR, value: 60 } + } else { + ItemSettings { name: 'Duffle Bag', cost: 99000 * SCALING_FACTOR, value: 100 } + } + }, + ItemEnum::Speed => { + if level == 1 { + ItemSettings { name: 'Shoes', cost: 250 * SCALING_FACTOR, value: 9 } + } else if level == 2 { + ItemSettings { name: 'Skateboard', cost: 9900 * SCALING_FACTOR, value: 24 } + } else { + ItemSettings { name: 'Bicycle', cost: 79000 * SCALING_FACTOR, value: 39 } + } + }, + }; + item_settings + } +} + +// +// +// + +impl EncounterSettingsImpl of EncounterSettingsTrait { + fn get(game_mode: GameMode, player: @Player, level: u8) -> EncounterSettings { + // game should not exceed 100 turns + let turn: u8 = (*player.turn).try_into().unwrap(); + let mut health = level * 8 + turn; + let mut health = if health > 100 { + 100 + } else { + health + }; + let dmg = level * 2 + (turn / 5); + let payout: u128 = SCALING_FACTOR * level.into() * (5000 + (1500 * turn.into())); + + EncounterSettings { level, health, dmg, payout } + } +} + + +// +// +// + +impl PriceSettingsImpl of DrugSettingsTrait { + fn get(game_mode: GameMode, drug_id: DrugEnum) -> PriceSettings { + match game_mode { + GameMode::Test => { pricing_notme(drug_id) }, + GameMode::Unlimited => { pricing_notme(drug_id) }, + } + } +} + + +fn pricing_notme(drug_id: DrugEnum) -> PriceSettings { + match drug_id { + DrugEnum::Ludes => { + PriceSettings { + min_price: 30 * SCALING_FACTOR, + max_price: 140 * SCALING_FACTOR, + min_qty: 1800, + max_qty: 3600, + } + }, + DrugEnum::Speed => { + PriceSettings { + min_price: 120 * SCALING_FACTOR, + max_price: 480 * SCALING_FACTOR, + min_qty: 1500, + max_qty: 3000, + } + }, + DrugEnum::Weed => { + PriceSettings { + min_price: 420 * SCALING_FACTOR, + max_price: 1600 * SCALING_FACTOR, + min_qty: 1300, + max_qty: 2600, + } + }, + DrugEnum::Acid => { + PriceSettings { + min_price: 1200 * SCALING_FACTOR, + max_price: 4000 * SCALING_FACTOR, + min_qty: 1200, + max_qty: 2400, + } + }, + DrugEnum::Heroin => { + PriceSettings { + min_price: 3800 * SCALING_FACTOR, + max_price: 10500 * SCALING_FACTOR, + min_qty: 1100, + max_qty: 2200, + } + }, + DrugEnum::Cocaine => { + PriceSettings { + min_price: 8800 * SCALING_FACTOR, + max_price: 20500 * SCALING_FACTOR, + min_qty: 900, + max_qty: 1800, + } + }, + } +} + + +fn pricing_clicksave(drug_id: DrugEnum) -> PriceSettings { + match drug_id { + DrugEnum::Ludes => { + PriceSettings { + min_price: 15 * SCALING_FACTOR, + max_price: 105 * SCALING_FACTOR, + min_qty: 1500, + max_qty: 3000, + } + }, + DrugEnum::Speed => { + PriceSettings { + min_price: 90 * SCALING_FACTOR, + max_price: 540 * SCALING_FACTOR, + min_qty: 1200, + max_qty: 2400, + } + }, + DrugEnum::Weed => { + PriceSettings { + min_price: 450 * SCALING_FACTOR, + max_price: 2250 * SCALING_FACTOR, + min_qty: 1000, + max_qty: 2000, + } + }, + DrugEnum::Acid => { + PriceSettings { + min_price: 1800 * SCALING_FACTOR, + max_price: 7200 * SCALING_FACTOR, + min_qty: 800, + max_qty: 1600, + } + }, + DrugEnum::Heroin => { + PriceSettings { + min_price: 5400 * SCALING_FACTOR, + max_price: 16200 * SCALING_FACTOR, + min_qty: 600, + max_qty: 1200, + } + }, + DrugEnum::Cocaine => { + PriceSettings { + min_price: 10800 * SCALING_FACTOR, + max_price: 21600 * SCALING_FACTOR, + min_qty: 500, + max_qty: 1000, + } + }, + } +} diff --git a/src/utils/shop.cairo b/src/utils/shop.cairo new file mode 100644 index 000000000..609799602 --- /dev/null +++ b/src/utils/shop.cairo @@ -0,0 +1,14 @@ +use rollyourown::models::game::Game; +use rollyourown::models::player::Player; + +use rollyourown::utils::settings::{ShopSettings, ShopSettingsImpl}; + +trait ShopTrait { + fn is_open(self: @T, player: @Player) -> bool; +} + +impl ShopImpl of ShopTrait { + fn is_open(self: @ShopSettings, player: @Player) -> bool { + ((*player).turn % (*self).opening_freq) == 0 + } +} diff --git a/web/.env.development b/web/.env.development index 435cb67cd..24afee9b2 100644 --- a/web/.env.development +++ b/web/.env.development @@ -1,14 +1,8 @@ NEXT_PUBLIC_DISABLE_MEDIAPLAYER_AUTOPLAY="true" NEXT_PUBLIC_RPC_ENDPOINT="http://localhost:5050" -NEXT_PUBLIC_GRAPHQL_ENDPOINT="http://localhost:8080/" +NEXT_PUBLIC_GRAPHQL_ENDPOINT="http://localhost:8080/graphql" +NEXT_PUBLIC_GRAPHQL_ENDPOINT_WS="ws://localhost:8080/graphql/ws" NEXT_PUBLIC_ADMIN_ADDRESS="0x517ececd29116499f4a1b64b094da79ba08dfd54a3edaa316134c41f8160973" NEXT_PUBLIC_ADMIN_PRIVATE_KEY="0x1800000000300000180000000000030000000000003006001800006600" NEXT_PUBLIC_ACCOUNT_CLASS_HASH="0x04d07e40e93398ed3c76981e72dd1fd22557a78ce36c0515f679e27f0bb5bc5f" - -# NEXT_PUBLIC_DISABLE_MEDIAPLAYER_AUTOPLAY="true" -# NEXT_PUBLIC_RPC_ENDPOINT="https://api.cartridge.gg/x/shinai/madara" -# NEXT_PUBLIC_GRAPHQL_ENDPOINT="http://localhost:8080" -# NEXT_PUBLIC_ADMIN_ADDRESS="0x2" -# NEXT_PUBLIC_ADMIN_PRIVATE_KEY="0xc1cf1490de1352865301bb8705143f3ef938f97fdf892f1090dcb5ac7bcd1d" -# NEXT_PUBLIC_ACCOUNT_CLASS_HASH="0x006280083f8c2a2db9f737320d5e3029b380e0e820fe24b8d312a6a34fdba0cd" \ No newline at end of file diff --git a/web/.env.production b/web/.env.production index 2a1f7c786..fe0b1e5f5 100644 --- a/web/.env.production +++ b/web/.env.production @@ -1,6 +1,14 @@ +# NEXT_PUBLIC_DISABLE_MEDIAPLAYER_AUTOPLAY="false" +# NEXT_PUBLIC_RPC_ENDPOINT="https://api.cartridge.gg/x/rollyourown/katana" +# NEXT_PUBLIC_GRAPHQL_ENDPOINT="https://api.cartridge.gg/x/rollyourown/torii" +# NEXT_PUBLIC_ADMIN_ADDRESS="0x517ececd29116499f4a1b64b094da79ba08dfd54a3edaa316134c41f8160973" +# NEXT_PUBLIC_ADMIN_PRIVATE_KEY="0x1800000000300000180000000000030000000000003006001800006600" +# NEXT_PUBLIC_ACCOUNT_CLASS_HASH="0x04d07e40e93398ed3c76981e72dd1fd22557a78ce36c0515f679e27f0bb5bc5f" + NEXT_PUBLIC_DISABLE_MEDIAPLAYER_AUTOPLAY="false" -NEXT_PUBLIC_RPC_ENDPOINT="https://api.cartridge.gg/x/rollyourown/katana" -NEXT_PUBLIC_GRAPHQL_ENDPOINT="https://api.cartridge.gg/x/rollyourown/torii" -NEXT_PUBLIC_ADMIN_ADDRESS="0x517ececd29116499f4a1b64b094da79ba08dfd54a3edaa316134c41f8160973" -NEXT_PUBLIC_ADMIN_PRIVATE_KEY="0x1800000000300000180000000000030000000000003006001800006600" +NEXT_PUBLIC_RPC_ENDPOINT="https://api.cartridge.gg/x/ryo/katana" +NEXT_PUBLIC_GRAPHQL_ENDPOINT="https://api.cartridge.gg/x/ryo/torii/graphql" +NEXT_PUBLIC_GRAPHQL_ENDPOINT_WS="wss://api.cartridge.gg/x/ryo/torii/graphql/ws" +NEXT_PUBLIC_ADMIN_ADDRESS="0x6e857786bbd1652857d673836c41e0544d9d5ecd3e7a1bbde744e328b8cc2f6" +NEXT_PUBLIC_ADMIN_PRIVATE_KEY="0x5e9d85de083b7ddd3029c44de2997ceba8384074bbebb66696a1b507f0466fc" NEXT_PUBLIC_ACCOUNT_CLASS_HASH="0x04d07e40e93398ed3c76981e72dd1fd22557a78ce36c0515f679e27f0bb5bc5f" diff --git a/web/.prettierrc b/web/.prettierrc index c34246f77..877e1d1b6 100644 --- a/web/.prettierrc +++ b/web/.prettierrc @@ -2,7 +2,7 @@ "bracketSpacing": true, "bracketSameLine": false, "jsxSingleQuote": false, - "printWidth": 80, + "printWidth": 120, "arrowParens": "always", "proseWrap": "always", "semi": true, diff --git a/web/bin/generateEvents.cjs b/web/bin/generateEvents.cjs new file mode 100755 index 000000000..6ef05bb26 --- /dev/null +++ b/web/bin/generateEvents.cjs @@ -0,0 +1,106 @@ +#!/usr/bin/env node + +const fs = require("fs"); +const path = require("path"); +const starknet = require("starknet"); + +// Check for the required arguments +if (process.argv.length !== 4) { + console.log("Usage: !F>hXvB4mFmZN=aGjxxv7LH5@+-kp^O7Y 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 KMNUMnLSTY(2@4|t literal 0 HcmV?d00001 diff --git a/web/public/images/pawnshop.png b/web/public/images/pawnshop.png new file mode 100644 index 0000000000000000000000000000000000000000..7ab5a4e167c9cdcbce30bc5f13e46ce52bd545ba GIT binary patch literal 121261 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[bNS{%`{2{zvhQAtN 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

Gc1E| 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 literal 0 HcmV?d00001 diff --git a/web/public/sounds/Flatline.mp3 b/web/public/sounds/Flatline.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..712a122a6dab93b9b399c099982388f6a2bf1ce8 GIT binary patch literal 124842 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%0AjsRfT$i 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 z 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

(-%x2XRJw)9_(+M5l+O1g<+qerDK6XPO$MsZ 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 literal 0 HcmV?d00001 diff --git a/web/public/sounds/Pay.wav b/web/public/sounds/Pay.wav new file mode 100644 index 0000000000000000000000000000000000000000..ec44b7766fd0515ef5c192f828ea4bb97410e55b GIT binary patch literal 45100 zcmW(+2Yij!-#_O(_ht`SWRZ}_P9%{f39;4QHEYvSBT7*!Ej5c;6<%uZ8d00tqtuF0 zYDOYRNMzjH{XFNK_v`<;pKx>UdCoq+@A#ec>D;kn_z^+|wE4WlxJlDP>k&dIUhNMO zvSc77jMO7zMou3|P{xlaq#v12-jK887t)txkqYTS?9!X0l5u1sX+j&)4BDGMAQs|E zpOI4HM`P(@lTT(xK>q`A;cWNNHWDnU%ekC7BGa5}ba*M1X$H*PB zg}fw%sC6ItlW4?Dwvu4loL(U($yD+HophvOG>1;0k+hiXAO`Y++$No977d{-=u^Dk zNq#5qQO65>TR`5Cj^rr$jtnP5NE1ANoE#w6FsRXFJX)(nxk)4jF9)K-h+2_nWD{9} zGWF2^+a!hDl#ZlQCSsf&$sZW~pCq2HCEt=zBBfb65u=<-CSpd8qt*>%6v-hjzvQ!R~4bjSSc}zZ%cKM%tB3;po zc+Ak}s5yx=BBN!2oGzo}eA!kGk&|SO9EH*|@&6BUul!qX!TZhfwtOw0qwde;8O$Cf zHS$OK0Ixh*Df3ZcgKQ#`P_BoJ!IKw6Td4`NaFIG$CGur`c~y*-bL23YEyLtX(L-j* zVEL1bkR4E36VHVQTJJ0Gh%>@X9u|6;ApOyoIWkas%dXNUB4nYsEc(k{a<^QIZ^xt0 z1JK`4xm^UxSd<CU_9||H1M1{DG*Jx=K;c~D%C<0`q zxF~GmKd}$>mkS{Vqtq(&V2ucoj&c?HRf;G7lpSS|94gDiF7Z-a5<|rXktl*i50N7N z6jOz>_+Bg)BgAaM`9v{KoaDX5QPBzSHi<|vMP!P$qF4+O9mN*ZpqJOgba7R@5-UZp z^p%~&bumUHiIZZrcp)_Lv*;iOiV)FH+{DxE@ZA@vNkOashxY~O!RKO}I4r&qCj>gDvJ_*hFTF6om3Zn6YFH^oi5SsY{37DSSkYfB zLc2pmE^51kzUVNkI+VX49*KKmD`sq)I3k>7OZiA#LqB_q&oH*(;;}d+s?f)WqEoTpGC+b{N{xjW0FV@*+u>;(R9TEZ9u(_EZ+Qc?c*$lc zy9WRI$#!y@kmyamXpS{47Z0#TXYr&9*5sP_4zDd}|Bg^mUy?k4K0grSF;l}Zt_@wbAC9$ZhCXc*%SAgGiJlFRQ&I8<%yKWZl_l@u8y)7aSnS5nF8mgN zR^Nzb81W9V4l~>lJzXZ=qTPik^P6~&S-Flm=U6XaxmwJ{tf$Eg8I93v*m;%0TMFTa z6J!&Sa+_?7S@;_3lp|+g=k~{Xq{^`vTQc_ir?r_Wo6CAKMcx-dII9)dqZ8z8S%_0y zEU)7<&yXvy-&f+isdA6JhR^)jqxBol0Z=^{kAnrWClaFyyZpzj2 zp6p0WIHw-uE`GepWmzJ>!8v+~*s&22S|J@sSK^EKQ7i)xVWyH@0Q_bj(mvOnI}&mMh1~&l0dxB-oF@WeIQm2>4eCdfe6@=uW#EbT!t*8gJ0W)mGh5kq!>8~^ppSsdh z%G`a@$%>kw@#9DMFyMSWZSeyAk%>vSs#38nyl0tR`I;|#$@##Pybu#|# zh*t_ebtR86-wAj>27Ty_r)#lZXJtFEfH(35_R>qK$;qgBAl6z>%CQQQfHW=1CA7N~ z^U@S(FqTCBj{$^%E0|Cs7PU(`3V75RV_QVlqXfb1_d+`;NHKH&Hs^mRMdE*)##|9|_lHQHT;o(G~96Yz2(W@ah5 zj#VnhUh0FMB*|&mYkh%-pRn))`uIT}2a;K36?SSU=KTZqehX3Pk={ zUIF%X#_J$rMSHmu(J>X6RfsqiA$I_;?ui(Db_x-!zdSF_|1Uy(5DjGmIR?Ah8Mxt& zSXYJ^^-K%}O4<-zibOvkVFjLPD32hb+!CQUM>i33E{Iu(#3sZO1<|1%B3>P$Tmb6P z%bxN9BIQm*n`ekW29bw|6Dd#18eqp;U`?TDFXK?Zf;#ii6EB?9r5LY5qS4k7EeTdxg01_D<-4t zYW#TN_u*nVdbAMbQ-LL?L~CH(BoPfXT8q~v(L(gXr$NHZ8v?(!A$s-$dae=Y#3=OQ z8Sov)<7ChnF!Qb zf#`J>?BE*eua8Kq!+F<83u>X&)R$2jBKE1d>M+esCeglRD38`Yn(vD(8#2tTI9Xs6Zl{EfU!Jn1YMDh6X$v_OmuMcmCpw75vOlc{ne&ewjN zrKaFL?&Q8qA-&{w{+Le_17$49MGGF-U4^m@IWH;O;ndM%y;mRa0+%i#-MY{`$($}m zI|S=bkzS&UrfA2AS$C5Ct#z^Xvb3_fibhH*8>S7n-_ri#t$06vg+JE(xgWi%KjKK8 zZ#f4z4%1y`%cR}5#=J~(cFgl=>~p7He+PrA8Fv|0o6@WqBHHz)R|~gCx_Rn)LvLeu z)swg?|H$#yYD-sj5V@_tq4bhTSlJ4Zq;qqMQL;%DGb=ZB**cpTqMopgx3%Tpum$?R z96Bh0;%n`sy2*Y=9MIiVmeR4x1saNzV-f?n7wxK>r#r9X47g`Llead%~SoxCU^(slqvB?`I!o z+i#n#4IxoVFI_L?xSYt{z%-7FA#xwsTo;n8m~^=ggY-w~UU5pJ+C2?ePDd*PbX$}^ z*=;%(QEC@0(QR@Y<2%G}uX_qVUFrOG$@^mSK)sLqG1u+-XY#eW*}l|%#(LR2%^IT} zA;mgPAEmS-IpPwp5%q8`eiE(dGN*Q4M|^kJJMLJgJ~2G6Ibgm|qg?achdFz&6>3j) zmORBCE7xcw7!n7PP7*7*O{0en-oaUD7+0nJ15~waSZ8lA_ACh^> ze*FVoeO-obt+JNgpmRtk@f|m59(=kCVUu;O93MM&a@e7qluNX!nmbPwL3E7njze3A zBE_9}YvpPc4ma`ldHf>oN&@#%J$?f z@HG-hQACE*T~MqXQT3vDBq{Z#!)Xkj3}TV&CDf=3$^I1ifg%II20r5bXXFcD`X%6Z zJLuv^kT8F<&KH zxy)9v%WNBa$d=RZz;1x<^m{fz*~q-HQ}452lqq3NnHyb>TFU7)>OdRQvGfD&$QrXA zv=?1UUr;+UvBzvPGeX+m#4{!~lX3L?XX?Qguo(6mjc5H>b7i?A(ONQV$F{O#_@oT| z4u?K(OV8ppgqBf9HjHg#1KD(No3(T(b5(A!b!;N5reCvz%uefLFHb=~-k^q&tPbrj zqBrRv7NAry8~umQr-$h_?3~@S6KY(<#$pC9)A8uL6RV|X***3pt6-y;7t3MgG!;B* z8ug+jSigg4?*jE^iD;n`qa8&r(Lj`3%i7|}Kj{u?qBa_jGUw?CI+%UKdaoa2!6MZenC&rf6=dW%-uD#x`b|}X1W>m z{>aRjyM;6lY%h%dNyfl~@P_N~6L^F-ypJJt1uI~o%0YI5)v?*ECtXBR5Mgq)DWZ;@ z*VpO%6!2+&jgJ!<*ej>O)wTgO?BJJi@&r`QG`SxrN5o3(FdOa5s>nt;S%d+d-N8j& z!IQJWiDJl0*##_g6A<47?3*AJsNy2A9I?F$%&nz-CAx|k(2I}c9WcunvKrpRTksYQ zm^lktbSV^!7hWg8wJ8{Wt$4$i^0q*!mGXPihVI1d4TS$uA%ny~?Y3I3Dq=GU#2U9| z8%ck(=K;kq0Nno$xMMfD2xljQ=c3<-z%?(Rmm9?~;JpbtV>!-}NgR^>;7A03OWp%w zc7T&{5xk-$xY

eghYoG6pP?z4y+=_qsM2k526U}di`>ONqE)4|3lFlsv(Y6#lZ z5uN-BT&z31qo;Hu=FlYf$#7tpc5S}2+dxG58$Ek1cJp?(`Sa=@;uqJVIC3R!DG#5CsiT}cn@l)aj6je3Jru*m*IPv-9g(&9_`3}*G^r4w7 zO$k*Jl?e>K7+!0E%HwdxoLC`t@o<_>BIIMJ+v##4yfi=d2>a{}_}ykP57=HNXTeRY zppoof?Bu6(5_b1|oYt9iKkdwxutm&~t-&rGLg(Q7GgO5SHiAq;RC)+byb!G4AM5uL z`=f+`7q61^r=|2aMA@ly2|0pzm@S7x zN#xS$y0H##9p>x*W7}kzcE_Hn?h(gmU)|^WYl?vulG9*d6Ku=Y+aZ> z1|$DR-r+OpP4*Z06iagDa9X7-MP#JPZP`y8pp`5_IiifmJ{pH;Hiur*8R!q<3?j%G za$PrFH-{{txvV4ol0BiWGK^ke`^c|sylyBoNC^8+b|60}N9an~ojylw?WMe=9we1* zp-IHdHY(SpI~~II%L{a)t{kg-fgU4==ro1XwT$Z~C^ML={xVyRQ<@Ks>ZY{STi99l zD>KU77{xTQg2u74@+>J-?yv(aR(BNfYqfHm?V`W34$K>oK2=%9rYkd?ztVl~9pKiE$?PsPB_>dJLH^m80~={`l@qfiH*w6}=_>s)oMl?%!_=0THbKK%i@ zvo&JxD^{c2R<%k>kkwb|2Q|LZ680%g}Phoy8vA<|vMAi9-a|4(KC~=JS zRvzGFRU*>%W=Gjp)D{mMT8gOoEh&&Yprr^IMyuhqPKH;z6`v0U`|J!vN}>^L2s=oR z0t?R3V65{*c9L$zXhMNZo8S{`i1zJJUm1|~2zFit+W54RhY*j?10&W#QKzHM{`mbA zE1;Lja$vkCcGJ(a8zOutO{0S;LwkeibZF2$^a;>MAj&$?IQlnA`681xcNLTvnr_)ZS(pjkU0nUUDuZ=Vbm^BnAP=s@|4P(jxlMaFA+(8aOIZnq9 z#b>ig0949AsKzExz11WF5#X)#K?GZY6V?w7@@46QIFki`_aZd=DY*oSz8X%)-!hPJ zXx0_zR}VN6Q@|Bk5hr4U!n}nV9wP1>m9?MLF)$z!qq>I^HxsdI3tZlKc&mN!SzfR`Ou`k(2X|U0{V0#^c?4hxf49LXb}$ga-0YN z1}=mmbQ6D|=FU)P1EAnOd5)WfBiym0P}66{5&i)B^BX9>)%+6Q#bfv$ewKg1Tk{m? zk2(0w#yg1Nd=bwPkNB5B-Q|2c{|VmfXlP3!OuVT`hOW$&Z=hyx@P)iPFV!0GmYkrr zRd7)Yp>}1pPYaQ6!30{9f`;a4~U@p{64%f%}8hC_2$Zbkh; zc%r?$4uzYCwL1=6ehQY*9rjDO>4UKrf;dGZ`w!7RA`{lG&$>EutkG#K-96T4;z z);km)+y&rlJic#*_dmeHe96n9MoXoF^R*Gkeo**Bm!A}!33l4Ot}LN z+`8zXu0OAruiWiLN8faLSe= zI-dpi3r5B%42V387N8&faRR%8CAOij;4x+39IXdSID%8y8j;pOr?3t51$uNHo@+;( zl0o23uIOVPazz$s_j0ij=VA&nRfJAM_Q?@W;4tvCEtuB|5rla05S*bmDaG0Q6IrNS zvJj^&3|^Ki&7~*6JpAz8dPJ3zU=b_eFr7rUY!D*T07ScYWGH_3rlZi$oybBRhCev~ zjHDFtV>&Q7hnnE3b%aZ~nKXp2I0G)^9TH2AB0io)p3H}yCKt$mM1q5aqi-HcnsO4o z7=%iBYp*jWwMK<6QKWLlBh$>a^IW~cp zR*~UQTskoGwrJ_4*nvD5C$H&U(h7dnLNW-LTaB>}Mn;LTuB;KgkJv?IAz2SykV|55 zc5Z`>MM6vEfOl?_1;DtzbSa^-4Y=}a5<@-7#7}uE(vMz;#_9;?a6U4O>oI4Y;jzua zjOeIBr{c3DD6}15L1D-iMq($d#mYScOI<`1>~3V=@P8I^nJdXTnNCjNNdwmZ3$RiR z9J3XW=Tq*kKjQy%aMCRJ%sZedBG}io3E6-sK7lj>tLsdB;Bl@-ZPRHanFJoUlI+0# zAA#i*LaL+CHWWJt{QP+AV&Frf+Jck!5QpFjsnfDAxp6g=lDOwo?3YT9Q6>&UO;AI zhWLrpD!)2haeS;Zk?ZzvOe5?W$Q%64h%T5egsRvA5AruPQsaE479l4n^XNjM<3{Z` zJgj?Q-swP)GbE3mVNP@<|Kv+`krUZXvJ5yjfv1ZVHd(7}=70V#PcmJ+)#mb4 zz8mFwNDpBJ;&hQ)sE)iBue3JW5%9Zhh=zT&v1)I!iWR|kJEC?_Z>ueMH!?zA2S~V3)!`ca7do2$ zBl37}^#D&`li~br(;BKTct6&HZ6P1EAM74-8nYuNyyTnsJ+c9u$AipKS8AJ(2R0xA ztmVbpEYS|i)LG4THTc_}>7(PAIw{<7vS%4Gqqp*C?5I>TQq zg=fIz3ht-ni(vXKyqzfVN`1pM@&fql$-mHc%fHEMd0)2U^VET2DRm&PQR6N|=`%7_ zjMjE&o5f9XLsqCJ)kicz7Hg)UJWtKjt^uP4h+O&>oB^2#5y4ZC$vVq}2^Sx@AFyPv z*n=H#mAByc#B^xDjbgsGT;0gOfhRnHoa9^Vb9pD|%y-CTWN8akc&Q|uj>c>s(5f{* z#KKklns%P=6NllpK8AWqSLg8+1PlQ@r<-c!AULBR|1)qKJ&8XW@)Zj^<(sFgC z_Kx1+Cb6IWpgj^X`c$|K^Vvb*%0#)7WYH>Q3A@l(r4w@ir)Vix!41vT*|e=Zl$8Qy zx3Hn`?uRSLMadZEEV`&eq2H3pKIMD5OdBY#(F@X_bdiN>BiTcFjI858Iz%1FU+C|W z&3qtTtmSI2*#ksDjUEI~(zBVgQ0_uL%TqncZ?X0KsmRvN;$5^}$}{vnRN2QJ`7GK| zz7q|VTGEt1Mb5}W%Ogc>yY^66$xv+vsZb{H0X#_htF1*phwIEkOd=n-L7mL1lw1*s z2$ZCKL(eOP;sFqUG@rwk=zU~8Z8E>1Zjq6W1C@n*Fx(Y5xXOG|q#cFRny(ocVFmW? zd>Zv5#k8gFSMf;eNG*J<)*TvWEuG_#CJ(Bo*}vp-oV{#Xs72B7xX>Tq%V#2|6%VH?iHt*L zEmu4sk9D48n+#VBU^bkcmzUt-wwM1WpA#$e^+LEJjf90yYHM^l6sEziPv4w_lEy$q>0)csP!c9p>(oeN@%@~K)5}kh~JYg${X@Xyrxs6 zrfwkF>NvP7B zmazaff)lb)>5bgvaOEs;@F$i<6rmxjbCjQzCGa#H*+DWNYZi&~eow9?M3j>o>~G-n z0P++k_c~N%Ke*N}$#St3eAQP3u=$9gV@U}(&;Vfmb&*X4g9p@xXe9s5*4E0y;r~l7M=d_q!w3*Bw zE&pmUa9g%>9Um+<(di61Vt&bb*|L~BE1O6Z4-zR*i`B|6WU)G3^R{2M{)XExF(O*m zpGy9kh0#`Owz^P_x1ZJWWdePu{HHg_U3{f{tJ<`aZ+uZCESTj5RL5q>Q%9e zmxzV3!d7J)F8hijY_0B~?SZX1`x-I+B(bUY?VF_&odX`wN%XZ-Ef$$Y4(IlvtvRnI z161e+>Sh1V{s-KyZ>eO@w6E<$_*T1%x=E>(H*L2?dl9I1Vpphxx?9WO3)R)4ihMw% zJ0iN+pQ&ru&$3wUBtKJo*k;o<%1iDdjoM{PtaeG{;2bU>zuSW4L**$yh;f{?&bOVQ zTV)q9igx7TsxQgldTk5sE-u+4z=e)#yGXSNwg>ZZawgA$!f_M>pqXE46ZkJQnNPDj zkU41YsXR>Xa(^17+@?F2%FE1o+A28SzdJZO;0^+A_#8uQ3UFMgvuI`NJaw4$Jn7-^ z1BqguM6r2k-=e*K+$^tX@#MTNiuM)%${}i+`Xx)nsZP-?q4i}1+pT?O2X_)#7+)%V zElR+2mTQqJM~3q!*+%)Bl<{nlXy0yc$<8qj{2MQ(ste=_)(8G2rzh;QG*|rqoSW}S zmMugpSGveA`$gH9M6eaQeSDwwraeGxCtvX@ z^_6_WM~fc%kt9pyJlIyN)~Ca`0!Lj_ACg}BQ^>tupwQZC7bRaQmF1)Z|4k0odqCT6 zVh;ps?KPv8V$O~GQ@;%FtW$ZIKjQg`raJ42WVd^(pA7t;H*&4P8 z9`Pzs0$mp`s_g64#bT=T)Gbl+_%P&s(z#wYip7JI;hvQ=>l|r>=qkJ0|Iw!EHnRCZ z`|Dbm+Dh4~yM{ZDM*C=c0bKQiMA6l$ht)eY5ejA;c`7HtsTlrAm5XrgtjJ*n@^89| zjnRD7@!Cw;nD#;sMzgWVnYRP??j+j^yJXmb*Rj_U$YyYcA~FIQ{x9@4c8vGtjQ`7f zl6J^t%o2xr5_(_2xN=bOmmBR{MW)h4c?d;z4QkF!H&VIF&+$~au)~R??iZcnP@m*! zUaUamtAF99Rk$=L!*oBAb7D1Zr*qWhvr}*%u4(?-4jSWF>Dbu8BKq6Dwta8EDlVee zg={tn=8e(!-?bFztbMXt>7nl~^KjGPdwv9(_bD0UFkIOuX0rqGTYHFu0Df5+}pZQ9#k5tQ?%if!ZUsh z_Uy%WixXNiGMAsV*Qc{|2gpF=y~prCzFbVB$5^%2g3ng&QY#5y#agZ!B=3_`$T_9Z z4EC+8C(7AS_R^kdzXC7hdwNv29GG^To&~2dKpkb1Y0{7PhyU72&XNmgPuZO0!3RDs z=F$RYB)^G9@)(^BC-w;I1rPQtR=Jl<7ak;r+2CkhqyxkP`*e*W6I)K2u)8?(x5+`) zpBY&tt3b|dF7aU@x^2>l>sYSRk-k+<=>8?eVA~6j*}G5HLBZy0M?|p0Ox<`HE`HT+ zU^Prwn~}1QHWqp}i+0g%(7h4)+Dww8yRXDUm!Id+)~BkcK1?4>T1y9UfM+Ya^_P`( z^b$|vS6I5P23fzA>M`2{+E3qFcY|C2SLuyj@6gTEbr+GEH_lso{V4rVVi3Q`y+kUD zNQQP^bm7H(g04U}U)jnob7)y)Z^zSeanBA;$vU!5N-4W0hm*FfKHZ2|+6($`0llo> z<}i{S6+TdzKhXnpx=a?sco(sdykI*09(GTh7h`C!?h^Y?w2?*hG1K5{%!2amCE*Cl zIphi5#P+igrBt_8HyIwn*-tJcpTzf(PP$m|xNbP%LSB_2vRoU^Cqb!1$V@od^9ZtS zayrmIkv~+QF=rXd{$M74RIWpAZ$C@WY1By$SEqnAUxq)?3vAJm zzsFsP9kLj=q<*KH*?-uFok_0kn%!4$tyIl{-U2?bTV$zuf!b9N`$-ncmTT?FZl1!{ zyESt>OCHH%*0t9AV3n@4o=b(}NA{-}W87((jV#aa$~}40lx4S*DeROkg%q2^EIY(( z_}II}cJm`!DBGrwaofON8qZli*vIL1 z@0D-K)u_WUdW*-{XV=s$ z<(U)iBdh!PK;DlET>_iSFIrBUFNmi~EAo>#&#$Ui<8|^>0sC?IpwrpsSo*6=Ns>b0F7@UXb03Y- zT;4(+<$mfyt)s2h-rwHc@&~!AdxOlz71f}&gF{;iZaP%!pq6O6=}eK&CzEq(JLcyw zNK4T??6qpX!*OK^Jx@Nf4ptw^dGP)&s|EI-;09ks9%{YFP&Io99Mj$OrT&fRW*?|I zswrfIPJJ{y&^{U!iVT`vZEHFje@dvkdz16p@Qiyeu@T3#nuqfu1w6-C2@n*o2(XoVjA0^J~7V( zs!gW`eFWKPeP)ZW2b0H6y=1cW53R~}T%$0W4Nz&Qk%~&sY|sVaBnVK z_U6xcQ`tj(X+OgsX#Io-I8YUGq@%PI>RQb~9j7{KXYCF6Gvsnw(NnmeHPCwA`rLj6 zj$>z@tUB9bwPkQZ#%W>NE~|sJH~RL7cjLd=mY|=vWhZ)AT()$!mm&X=BX9DK_SM#A z>Ui=Ky~*3!z3q|U;~RxL_q8OM``MpzUl|DQ@VoV_d7k}mF^xC2ceekb-ojo=AZ6-I z^|D%KPm)%((wc=FN(pqgkGyApXlrJ3v&VypB#l?3TL~bKGlW`D}675Z4c}hwDVdR z*)G@GOTamO#ar1+Y}QKDVr#zrKHS{|E#H3DdS8u(2h>nBQg>JnYd2{Z#Z%cR9;)Mc z81hC35w}_y;}Iibm8nXo_L(Ki?!|M+XXKWpp?SOgGqGCd?XW;nZKeIJ{RcW%cbPz$ zAm`ITAr9rhi~+U*)9A%{v4wmI4&dOE#UQS)~Jh~3~^fS1NSO_ot zDZL}V(FVZ-F{rhog3U+np+=Ue`?c-DiQHl1*&f_X&wxW;LDN{C94}srKjEeMF!q1XDx;dDQwXzkzFLHHV9FC$#lf{p4WUi74x=XqMuz}V3J762T zX{x=OZL%E8HtS4ug0={H!ch*>jn*l+5g*THDG5%i9P7v{IBGp*Z~YA&5X2!>S4Q*n zcNDW61y=i%OxAbTUtq<^;;ZbW-V--94Ei@pGbL9yj#SB^@PE$0acYOVXkWvv`BA^g zaWgo~EILE#^#3^e>dSS%vlDWIGSK0*!zlbI%u?+nv*>my8};FE6`nd=*8AwYE5YhL zTL2Z0VxFg1d{S6r0i3K!YjOU?!MWGas_>Njxl50L;RSNRWje>1=} z2O&eanVhC0$#{Akcbd9^7hR_dkwbcn-5I9cCST%q!oSFcMj^tkfTB6B`EpHsArE5B z+KTmjnD!5Ui(NThOVVz`;f;Wcl%c(}4^W5M?`R7}26xsb*;d&G%ARm4%G4*;=@ygP z33_8Z|B6?rt;BA*g?p*z&1X!D>|y*3n0TqFbKM@RO)F6Q+3(sOSQc7(+iu(bwdPv# zP5murtS0L)TZCns>7gabe%%&tU2Zm-mzonTEA4aa5jIC_Tk|v1U*>Z20JCQ5VA*I5 zw-%U3n%i3LnjDSoOs&lM<~x?=mWAeh=Jlqx#$?mi=Hr&W=3--%X{PC&sl>F{@(fSZ zHdF(sJanI;*H#$Bd`=1}Vv%PnI--J`l(lhKl3OR;n}e>C1O_P1KCKbV`F?ig>F z(ydwcc6QbL)VRqs*OF_^v>vo{G5=&bYp$@(w>P(XTaKEm%=fJg>=!JhrgYPE_&ZlD zyR4(EQ_UMpL#@%aVU}wq)wtbs#eBdz)^^e|$DCn)kBg5{_$}3X&OF-eYb~(knIo+C zEN#t`EGNx(jJHjid9P)Y^{!>0InQ*c?wE0)rL+0Gae>KT{L=K9HPCwAQf2LCS!&L< zmYFA;Hk#L>SMJ7FhL?tubtf&4;Qc=^|6)k0{i8P3c+C>70+s7J)Wuo7ZU5Q|t(R+h zeoQr-Hlo%Gsii{SE!Cs+mHs{v8F>SOa+NW5#aY5a*x`(Dx zwTm{#eBAiV)Yr7ybk$_7^Qb#o=VuDA{iSuZZ#31`6jYxvJTi4QXIReIqwRytYt1Ip zt(r?!Ni}iCZuSgqoaH@6l5WVWyH+QRkBr&o*_PD0!G@KFHC26TPS%YvJT?}Xrx{yV zOtuZCHwGWW!|Jb$8sd2uTb?by&aZZ*;aTm^b=T`YtBtQ)V>)PVVkOqT;HJ~n67oQw zN1B;@D|?n*D4S84Rdd4NP#0tfwrp2B7)vULRX3{jt@{Zh+Gq2#k5vb1%}v|O*S#K5 z_O{Byp68IKzpWmz7iwPWKepkfGc{YPf+`$p##=gCYi(ogF4l0f)p)e7ur{;iT-7^6 zfAxdfQH&tlOk-;n)Xg%SH*L3N*{-Wo>>1|0)`_+XV+1g0JY2%5>N@KK^J3XkKLUQt z1M400=XGCIxtdn0O{^zvqkt37EVoS^Y;l(AT9f5F-rnYKNl;Dp<)*I2EK5iGa{CWz zg*1p#wWH$X6s|*V!eJx7XIM~i;Qfq>Csjwy-9;$hW&6$Y!4OhCu)2FyKvlA73-NX$ zPVZ=I>)7glD++5;Y)L$s?^pL(LyX(&(oNpRbW<0bv?th?nHQJ_Sn8W=)n`ftTSU&Q zPR1rR&#J$xyKPTb3(Q-r|7V|WnQeQ>yQmMWPtBhjOokgqFH<+%lFqXlY=7Af*8E!) zTYI#YnaixNY=JyT>uJg|jI9Z-4YDk@=;}7tEwC6Y{mh@4wwlHmW>-zAl{h0V#&gx@ zt6A;%njXe@(*fgj+i6Q)?a?~L5@t>^=UW!p`dM!oZr7YJR+uZzH!OXP6*b@0+^UMH z`(RD6=bENfuB`mOD)*ZH)`7NsW4^Il&92IGHLdCfR4bK*A6+UJR4uNZUiFtT$JW1Y z2I{j`uKcjO_L1?RS+h&qLt|Xs3-fx3zk9V^GM%Y9T)weppcaI?dFy#QYmg!8qj$~K zx&w8J+1Yl^vcmYIVNUg+k7du6qU-EHe-46a*e(hPIz*3{~&hSbddxcTD? z<09ifwLZ1WsybBvY6z0uzEnnkjh6Dw>~zm8dvqDA-z_sXkWg&H1l=lyNJr2RS7lCO}WN%RqHD< zKdk-Gzk+|cY2Z!=2&dOi1brxN+f{Z+zi`R3?rRx;%6f;Vx+Bi^KxM!a1A>Uwd= z>p#ol%C?tXE#3Mo_vN_ay+w0M8^0S+(zqzC=={qy&j-KU`Q*QUC;XT5^kLDmBB%du z{MYr#=*Q;gM~n8pxcmJ37h|5^e>v*asHdwRX8sfXF!kxO7tLP0eAeyZo_iM_-Tm*| zr}BB>gEtRaJz4amQPHiUi%%S${`11;rKRZTYxTvzC(f^46?J_z?d|VHlU}YZ9rMzy zB=+s|=Wa!Fi;g@=Dqj4qsHCQdJ$v%-!lN@!EcxwuuPzk*SQ=3==-u;@&)zL7epeJxd9fm{d_cK($&lj3ubp1KD=mFD zrufU^g>M?YiF!Yv_MZE~7ZDi6IoUpe{x;nIlmFWy`#aw_TY=D&(sv(3D=_PeUNZ$E#X zQqi?CuyT4`NbQT-h1QOSr5}Ai#J>Klygksc*z{N3jk4cM&%FKkZsW%phWM)Dik~ZQ zRII6rsY)ped|y+s?EOf?SxYO!uQj_XeBWGq+vmfZk1gwFn%Wx9RJEyi^=@`WP4$4v z*2aId(OR)G!Rfeez4FdJu39ZCe|hcM;g^3DC%<|6c28+?$&KQWlHB4S-{pST`F>RO zOSsIu0K zvQOY&nBN%3)-I^f8y=YU)or(?bAx6Vz4)JGpHrISGTki4c5Hz)z!nTm`NXuUu1{r` z%BI!jHUAn$8E0AI3{NU+Yi%}H>rK-#W4)>um4i)%mLKdk{@B#h;Aom_TjcPU=QDj3 zYoR-1(`;SzUpPi8S>lBKy!_d5x3lVyuVkwkrZe_%ZJqUJn}?}!Re&)BcZJ6zAy+7EZhz&v*=Rs&f3Ejj{AFFR-5FJC$)_ z4Y1U~Hiw+YUnt#C|IgCX(oXxEt)K#kW9n_@jE z6?6Fe>xTEnQtL(JS=ZXGT1OgVF=??+;geUKVF4(a%&8M4a-TueL_u#)`jf2p{P9 zr~9uyhg@BhD>OuX1wF4unDiaWxNo<47V3n;ZTuPJ=H zuHrA_2Kx=t)8U%aA(u03N_FYG#Z}Fe}7dqIS-#TYF8kCMsJ=}M@e&syh`GbC))7p9#&*5%%XGi@8m#sc+yf3)* z#or=jC>LFRs+Z^e&@;fbp|g+Mey0;oJ-vE+&-5|YD|OCuukZbTc^~)N>u(8q+3>5dkxdte3~gZZ z`qS;D(|q@C9^2h7`Ih)k2!7tMtKT8-9v)s!PW6lpM*Gb0dmT96>$t}|-?Kh_JY&7L z)OTKGG02BBFKVzkx@68V8ID>=%}nG%VO?rmaHFOHJ2Dk;> z30T*tCUi#V@$kg3%tkFkS@6oBJK=fZBO@k7UkU3MR@3xOScj&AqE<(oZ~T4uhRCZC z&arzV{x9rfq#AJ%Bk&80j`%t1VDze}2jR($2RFPB+^&&xlemcW;Vqh8Y4SdBPw29! zhY3&9=OybRcQ+o@Xl&^7xSJ{Oo2jvnBED+!tm(gz17n6IY>P>bSQ6_QliB#2@bIP` zo8~8UN?a0?9kIIU;)sjUQ{$#aWk&Rg8W7PW`c(9_rlZ3kzv)+TJ9;QDoGu=!ucNBl8<|XqwRYLh#vmOU&uWk%_L&a493R zV;YMS&DtfejI>0)3-gE_ls+!r)a>`jl?`+aHw6A2DiiuO-JrM+mrq?swYOTwrqW7E&0pG3#T4Q&>jlo}J;KIviA&RdZXOcbCMuwDbVNa7tN0gDEu)4- zSz|`U9!d^Q*_GfPUyv{*`9R{C6t9-wq}@qb*upW%y_r4vPKJBts}@l?DJ{li%*oi( z{O|0-7Nw~VTJA~g8S9_4H^!9mwB@R1hvHi&9E{`%Pm-G_1|+sgxD|gQIWK)%%GjiF z@&CjR&xp%Boj#~lcKV@&gXxLQmnK-UR%d_SqB^sE>Vo9A$#E&8(pP4-O`V$JpV27! zNYbmM|6(RJ&&rsW7}9)fLT%i_AhGun3FU@?` z(w=%EDImTkiMQU;_K&tf_B4fMK26<{mDB0ZHfLH)NeM`bOUup7YI&s1%0~^Vov4&)U51ptLh&oK3Gu9-s72MtRnwoRoHV+8J7n z%<^c_EwOEKe)fax1ugGqwaU1h_Ek!L`kky9X*{W*d3e&a)QQ>tnfo(lr=3e;DNWL+ zq@B!iZcVd4WNMkWGE!Q+OdQ7>pG|DvKl4P3?ODUKhO{ndeKn1wge1o$ z4o_d6R+ii-ZG7_W=1;OJTKHv5OKXsHHElr7r0h0XLo;Rbs~PRubZ)h&O;G#ljL$Q} za>_DKyV3vihgJNDNH0CX{9@ zZ+S1XeajKeBa%j^ZHph1yeeZ~ibtz8El;Mnw2l+)gw7Q_4mZDlG|k((_&N3q&H65lH9q~dAK$n2LfDSCJE``B}hPo?E& zRWxs(-6}aK`f>Bp*bmX!EiNUkP3V+T)#Q)ZAuaTgp^3H4zYiT7m!G&Z_{+wR;(4rB z;#WyD>WikEo8~qBF8%NHG2xe*&uq<-eoF4$JUV7)vz+Ai8LeAiO8qKnd&=yn@!>N5 zXu`9E2}!+@V`5)~`h?F*EKRx?l^bb^yB5{3>5*n%rCy4h5SkIqqK-wjO>UbpCAA{< zTvMl*ClPBxZpA02Jc-($&?0?tRG-j~;giFD46BR`PB13UXtK@kNU#j)(=;x_DZ6vr z&*4*={$Kd75$mG#5yQg&4(-*%81p3TRm04PJ>jz>-ZzVjON{)d$;#0E5gWsghg^v{ zn`Di?9_Nzm7j2BZ8`r2=b!xwq(aq+h)Ju2}bFcYdF;Bzd;tLYmnWi@qzKZS}b;>8!^{)mGeTMpPkK>KIc{w*36ddn4BBZ(Z-}RJ` zIo|$__0i#8JG~QWVevEwL`?*(!ccypCkQNQ8?>~M& z)Su|%-|$@1-3|K&t#8=8{(S#eL46x|)L-G&+GS1sBLRsaFT%eJDED#m?&opZH!x^W zKta&nMk|Ayf)_WK@A0p9ZvCJAMl|dinCAD^|1Yn79&>!#d$*|1nnXu5j~LgmtIr&t z!Cn(Qo4;N(nY!7uGhcb{ZtAds_TIBb6gUSBOJp6o3L3O?v4LZ%jE~h>n>ZI+&r#(MY=3k&<5_;{dUyAZ7SrxBj_+@qbQy5)K`^&I5!*8PFgS?B%U$LqiKn&W=mHPj{9rANKr zz3bezxYRg*>w3-iaJ^E;JMJF(x75k!rpIB&WDg&QO^$2*zV#ec@3gyzeXG-c{|z1; z0%9B7l_Q-MuT3uf{eEEY_)a9+FM7U))>f9^R>_kyhUIqfygL->?9 z?qFSA7rG>RCirs4FCC7#73p8NZ1%jMOLW@l9_g6v(%NaJ%-20}yscm5?5AHV+*otH z&GEEz1^$w*lP*i|>Fnb2pWLe%@Yi_3PTx62=uVM8xIww$KF+hwiPLGkSPpml8BEt* zH-x{J^Yp*E={y%I6SWm=g+rxVve#&b@tV;-QT*l_=pF8SlYOK4Teh&iFF6`Zl4m27}2RyBpGC0B`wQuJlU-H42*2Zpi(|MS#g)k@=%C(8O}R$0x!eS8&Dmlq(ZzBYY7X`fC>MU=s?L@o`)e--m)FflY-tUlVGTUo8;wUGkL^w84J< zWOlS-#Ay0$(fcaA6nU$-EDlvwfkWu?2?;Uip@073E(F zB>Rnp*4#UpAM$q=1_F*?6W{gRqXmEay8(yF%d6%qLfC7eKe*uqR|;zv^8VP++29`k z*}_16YW`EUT#>w>U!aGtI}pEV1>S<`fjnP%?4~0MmK5$Q_%ru;pdQ;b&>&PLPzH$V z)!?1L6mC1pRg0g^jts8nlKo{1Mu+AVoo3gCPUaUElw$`KzGBw~XXFm@=M{b_C@I_u z1$?~=H~9DDU*#M{lk*1!w&%weP7)3VEdCjVWAcQ;cz$EitD@#b?{a@Dj0&ACj0=7X zw9R{p-TU{#ChYTq7rFlhJcW%5R%5*YnyHt@Gb3h$?!V8=se1 z@X|LiFrlbQUO)ee!ln83i&_=F%julY=fBCnT-36lQeJg`oUfCAMzC&y!uKS9f^T0z zU3OAo3I8h}ll#ao7O@3U1%~{8a$5Lr7v}g!``6`;%C_WxFB}zEU3ew;L-t1BN&oD^ zI|V~>hh}T?Hs|*a^ei;zc(YgJ^vtbNC@-v++cKw9&a>Rgh1&{I%S=+O!2c~75 z&2r^gyu)(F=XFnQoFA24$HnG6$_ja!`L}1?NqXq}C!)d!AA0D~tY4 zi%nnTd!4i+tz`c8)ZLjsGuAmbruWLOka4X*o3+JVJ1y+_m^!bhL0^!r-g8yqcp~&Nr?2CVHvBYKc%uuClag6%5(b^(4 zExCQ>w)73Q72Y?w%AB?VZT0}$u;dykn$#vCf3C*4Cgrw^aqrHXoRymrNc+u2CY8$_ zo&F)CSI+jN$?4t#!8f|#Lf&>yj(dnZ-8DJ;a>gR}-jsCLU(O0yjWe!#UL;p?bx8h_ zJ3A{iOP4vxI>I)_`z57DmXv+M6Ym-8eVLq}aU)|`Qq{C&8HdulIxW~Kx zOqHc)cq^qY^&Ct3EA4fPBV{JiJ&@EXH8*uudS`d}#NW*8tyXtt=Hv8ro^9@a_L)vs zs@z+g{9np*=TY~})MK7G_Ko!8X{j+BGEQampa~1NXq>x5-yh52Z6HQ(d_ZvwN*~ zi}z?U@19}{+FyEg=_|dJlXC2LZ7HrVDT<6{Dc@{IoqLmiPg|CKI&FmWv+X};oHsMg z;(ly9ZH+eHa2BWj=jmygo0yiE@93AFo8B|!ch^$u7`Gv9fHyvMQp!fYe7 zxo*2u&V0v1&(5Tpo(67{)8O3bneOT7`rBE?QQvXb)!aSJGu$)DmE}6)?&VUsO1efn z`nsNZZ0@V>Y{zVCq|IrMc3$+j+(y>|_ia~6_i;}b*HXt&=K7I!up4;hJCbSq_eSW zg6o>ImV>mPw$-)QcZ_uOax`&$T!=|#gb-b{Db9{BKcF3Hf!{zAU8HgI2?5XL# z;~M0u>R4mXu#4 zWNU0w*``?-%LdyOl%tw0!+g-fT7S1yvz@lk=4$2~tKROgJ+PEZY?e6Ovdgx`@yQ;r zmax9IF0dc6ZM8H`WD>5JFWMJ6B}WHq<;2B_YU==p&iU1rZ;mq8xBPDVVe4%vVIFSY zXYtwI+XeH^pa1^okTAr$%U;uV#e6#9X2K+EXIll!;l#=bF$pT`P(UIlo0rN(~6eo=3$n6OLN|7BTf(Oddi{x%OW zm$nSIEVtA`88?`BS>{;ITH~#iEPKr{=DOy0<^)RzOHcIZxt99Y8dke`v3ZSopZQm< z6kBZOQ;CxjS#y!aVEt;@V@^vfflx=S0ZXiTq`8LWg>{u}n(dXPnnh`q*&^*d?Tu}P zmcOkJtQG9f>@xJYD9Z}V73&7u-&U=4f#tB}rL}@>gY`P3zHDJ^&F#x=J*{So#nRSh zw!OCj>*oOM6SMnX)Xmp0M4sO|*ZpwXij? z@z#0PM`-cJwz>AN_PX{tw!yZLZJT40qXv3WTkG%Wmnvrm`*_PvbFO75#(>854Um7c zZLuTGzSsKP{GYklHUOh-k)zPM*D~Dp!*SlR(tgca&D!1G#yP?{)jrEgSx4KWTprg{ zXR_^xb)>z6bDMLx<0_u6ZI0_MJ4Ue%_5-%Yj;qc#t|qP;j??xU&L+Qfa;_7O_x8_r zr{kc@<@(QA*}2nk!!aJ?z)6S2anB(*o;w2=`Kq}hoym?5j(yIy(AwoV2Rd2Dc3dxY z&2@cn1{`Oc16(>+S=T7%48)%43c0=`)Cgy+bC>Hc_j&giR~IMeEa}d1Ydm4s6=y4_ zwEfnZhMA! z?zr!`qdgZq`#jG*Q#}8A+9VxIx|;OU^TpFSDbq7K=}1!Fq!CF=lQt&JOJ0yHCcQ{1 znLIaHo-#RkLDKmoUDB(h&B+au%Osaib|r03u9b2$`9bomBr2(DvOU?G{4}{j^4la? z%I%a{-t3gLU%?tDE?u3jPYa~pOIw%jPalykOZTR2 zOKYBfC_N`_Sz1)ul(ZLV*7SxM2QwV$TheQ0l+0k$-=(iiAC&$rJ&-XX^Ib;yj4$bL z(^Jw1WW3F&mN6#%S$eh1N?DUL1L7Ly@b8=?yOh;y=9ChyW>_eGFStoNU=6=a>WS__?%AAqiK5tFl(wt-2^|NY-m2VxbDTLtb5Hty z%dh9#kf+V-ofny}%rEb&n|C?qPVQIV;e22IwERjwqpxKCgZ#_+XMM}^?)c*JZ|5ug z4f3z%dGbE`%I4S1SLCPX_08L#ch#5T>+UPcYw6qKyWwk^pXuA5wiGN>y>HJ!LyT56{82_C7efhidEBGH5lrET+f6afd z;G@4u!MlPl{yu)Se}%u;FZs{=_xOKeNAwyeVCMN}`ak;H`~NIBT__cdD462!?q62$ zsUWxDTH#0dS_+Q^rWB4T99uvZye!yX_*dXg;8j6V!RJD{@J8Xwz>dOe1q%za3LSxZ zMXdsnf!_+(6-*3#C^{e59atG?Qh2uTL_k-hEV^H)C~O{Bfpcy*i&h8n3yv422ksR` z1d9SOg~iBgSkd}m|DuM0qk*`3PsKLaU&Wku@XsG=Q#)`5A2?E+JRUy526 z6&6h_s$A4AST;BzI5YU9sB&;ea7!>NXkw2AZwE`WUiNkz{-j+O3<6L1QAjkE}+Qj(Mv4*hzg3O0ns!rJH}Sc41U9o;^#xKj=` zD~zzAQWN%i^6>8Nqwrw7o9}{!)_bt-a|bq_cjB$819%f_HY}$E@jpRU8P?}WSPz*d zido!2&=p--VpjKKPn%L_fa^!QEVf!h%1B_??e0K&52LM z40H>LS8~$nsPp>NmXL0XSgas?jSEwL23?Fhnhtlq4KCkih7Dq z)L`l&l})u)e5Qs|O(}wUOx0F6si)LzY6n$CQAM#-kxq4@A{DWU(+Zu^p*TXtP!hFC zQCnF>=~Glw>J{Y_af)qjfR2P*|isOnbMHgi))$ghYN>VvY`9PVWl$1Qu*`~ay+@?xY6)9gU z=ODdCDwk@uN~Urs?TA^91YOlJeBGnS|8K7LO zOi?~i8Pq3LwN;;0)74Sx$Li(k1&Fa)U0YLH^N0GBy1izUX1IpdELO*>#;aebM{DY7 zHmh%{)tW7u#`IE6l)AB|3&Nyo4r*FxvekRkjOMwfgrDVsLrXhYO{KihNdsj%jwQ^E&4Oi@rs&38cI`LGgZ@AQ>YHA z`)Hn~QHD_sw zen79Ge`;=O*3zG7C9v|5bZzl~1XR;Yedxd$;4wkW^ews; z^Dkp#R9X*G9KuL6M}MOQdN1>Y*~2_#ZZb0&h8fOWU}$Z9Z6ob|?HTP-?MW@ArL`*U zd*t?-S-FX=DzTGY-=CPWWp+AytgwVK(+oMs{*|0wMT zq&1Z>FvWBWW*IY{X~ztJEC-n>Of^U|1GNx|I%Jq6x|nXr{Dt;=k9M`9bwAS`7%ihl z32D?+7ThIzGi{`Ipk?Nu&zz?>&|B%(ba_U}oJZe#O7DeqXVDvy=|*VZdQ55biUEw1 z?$78M9%;^^XVar0|03FkUUrI(N6E&a7qnoiB8_kKQ1pXbdJ4lL6%)$+lD>};W^0<$ zBt3-QM2|(B�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 literal 0 HcmV?d00001 diff --git a/web/public/sounds/Punch.mp3 b/web/public/sounds/Punch.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..5316d315e6a81460d4b9ec00b1507fae0bb97727 GIT binary patch literal 5832 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 literal 0 HcmV?d00001 diff --git a/web/public/sounds/Uzi.wav b/web/public/sounds/Uzi.wav new file mode 100644 index 0000000000000000000000000000000000000000..fd26a6d9950389cebbb28d967917263b65006df6 GIT binary patch literal 44406 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%0Ap6+q>#~DAIXSyt9`uc42e(ab6{tLP7@GtVU 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 {children} diff --git a/web/src/components/Footer.tsx b/web/src/components/Footer.tsx index f4a67c099..3b67a7b8f 100644 --- a/web/src/components/Footer.tsx +++ b/web/src/components/Footer.tsx @@ -1,4 +1,4 @@ -import { HStack, ButtonProps, StyleProps } from "@chakra-ui/react"; +import { HStack, ButtonProps, StyleProps, Box } from "@chakra-ui/react"; import Button from "@/components/Button"; import { ReactNode } from "react"; @@ -11,17 +11,20 @@ export const Footer = ({ return ( - {children} + + {children} + ); }; diff --git a/web/src/components/Header.tsx b/web/src/components/Header.tsx index 134365bce..361b46d86 100644 --- a/web/src/components/Header.tsx +++ b/web/src/components/Header.tsx @@ -1,23 +1,21 @@ -import { Clock, Gem, Bag, Arrow, Heart, Siren } from "./icons"; import { Button, Divider, Flex, HStack, Text } from "@chakra-ui/react"; import { useEffect, useState } from "react"; -import { IsMobile, generatePixelBorderPath } from "@/utils/ui"; +import { IsMobile, formatCashHeader, generatePixelBorderPath } from "@/utils/ui"; import { useRouter } from "next/router"; import { initSoundStore } from "@/hooks/sound"; import HeaderButton from "@/components/HeaderButton"; import MediaPlayer from "@/components/MediaPlayer"; import MobileMenu from "@/components/MobileMenu"; -import { usePlayerEntity } from "@/dojo/entities/usePlayerEntity"; -import { useGameEntity } from "@/dojo/entities/useGameEntity"; +import { useDojoContext } from "@/dojo/hooks/useDojoContext"; import { formatCash } from "@/utils/ui"; -import { useDojo } from "@/dojo"; import { formatAddress } from "@/utils/contract"; import PixelatedBorderImage from "./icons/PixelatedBorderImage"; import colors from "@/theme/colors"; import { headerStyles, headerButtonStyles } from "@/theme/styles"; - -// TODO: constrain this on contract side -const MAX_INVENTORY = 100; +import { ProfileLink } from "./ProfileButton"; +import CashIndicator from "./player/CashIndicator"; +import HealthIndicator from "./player/HealthIndicator"; +import WantedIndicator from "./player/WantedIndicator"; export interface HeaderProps { back?: boolean; @@ -27,15 +25,13 @@ const Header = ({ back }: HeaderProps) => { const router = useRouter(); const { gameId } = router.query as { gameId: string }; const [inventory, setInventory] = useState(0); - const { account, createBurner, isBurnerDeploying } = useDojo(); + const { + playerEntityStore, + account, + burner: { create: createBurner, isDeploying: isBurnerDeploying }, + } = useDojoContext(); - const { player: playerEntity } = usePlayerEntity({ - gameId, - address: account?.address, - }); - const { game: gameEntity } = useGameEntity({ - gameId, - }); + const { playerEntity } = playerEntityStore; const isMobile = IsMobile(); @@ -57,20 +53,13 @@ const Header = ({ back }: HeaderProps) => { }, [playerEntity]); return ( - + - {playerEntity && gameEntity && ( - + {playerEntity && playerEntity.health > 0 && ( + { > - {formatCash(playerEntity.cash)} - - - - - {playerEntity.health} - - {/* - - 69% - */} + + + + + @@ -110,7 +85,7 @@ const Header = ({ back }: HeaderProps) => { )} - {/* {(!isMobile || (!account && isMobile)) && ( + {/* {!account && ( )} */} + + {!isMobile && account && playerEntity && } {isMobile && } diff --git a/web/src/components/HomeLeftPanel.tsx b/web/src/components/HomeLeftPanel.tsx index 1d1a91d8f..6c0a95083 100644 --- a/web/src/components/HomeLeftPanel.tsx +++ b/web/src/components/HomeLeftPanel.tsx @@ -129,7 +129,7 @@ const HomeLeftPanel = () => { DOPE WARS - + Roll your Own diff --git a/web/src/components/Input.tsx b/web/src/components/Input.tsx index d3323ecd4..ae64c5409 100644 --- a/web/src/components/Input.tsx +++ b/web/src/components/Input.tsx @@ -1,19 +1,5 @@ -import { - Input as ChakraInput, - InputProps, - StyleProps, - Text, - Box, - keyframes, -} from "@chakra-ui/react"; -import { - ReactNode, - useLayoutEffect, - useState, - useRef, - MouseEventHandler, - useEffect, -} from "react"; +import { Input as ChakraInput, InputProps, StyleProps, Text, Box, keyframes } from "@chakra-ui/react"; +import { ReactNode, useLayoutEffect, useState, useRef, MouseEventHandler, useEffect } from "react"; // @ts-ignore import useCaretPosition from "use-caret-position"; @@ -71,6 +57,7 @@ const Input = ({ ...props }: StyleProps & InputProps) => { style={{ caretColor: "transparent", }} + variant="primary" /> {isFocused && ( { left: `${x}px`, top: `${y}px`, zIndex: 99, - marginLeft: "-1.5px", - marginTop: "6px", + marginLeft: "-1px", + marginTop: "9px", transition: "none", backgroundColor: "var(--chakra-colors-neon-200)", borderRadius: "3px", diff --git a/web/src/components/Inventory.tsx b/web/src/components/Inventory.tsx index 0e8c97693..51cccdb08 100644 --- a/web/src/components/Inventory.tsx +++ b/web/src/components/Inventory.tsx @@ -1,94 +1,102 @@ -import { - Divider, - HStack, - StyleProps, - Text, - VStack, - Card, - Spacer, -} from "@chakra-ui/react"; +import { Divider, HStack, StyleProps, Text, VStack, Card, Tooltip, Spacer } from "@chakra-ui/react"; import BorderImage from "@/components/icons/BorderImage"; import colors from "@/theme/colors"; import React from "react"; -import { usePlayerEntity } from "@/dojo/entities/usePlayerEntity"; import { useRouter } from "next/router"; -import { useDojo } from "@/dojo"; -import { getDrugById } from "@/dojo/helpers"; +import { useDojoContext } from "@/dojo/hooks/useDojoContext"; +import { getDrugById, getShopItem, getShopItemStatname } from "@/dojo/helpers"; import { Bag } from "./icons"; +import { Ring } from "./icons/Ring"; export const Inventory = ({ ...props }: StyleProps) => { const router = useRouter(); const { gameId } = router.query as { gameId: string }; - const { account } = useDojo(); - const { player: playerEntity, isFetched: isFetchedPlayer } = usePlayerEntity({ - gameId, - address: account?.address, - }); + const { account, playerEntityStore } = useDojoContext(); + const { playerEntity } = playerEntityStore; return ( - - - - Your Inventory - - - + + + + + + {playerEntity?.items.length || 0}/{playerEntity?.maxItems} + + + + - {playerEntity?.drugCount}/{playerEntity?.bagLimit} + {playerEntity?.drugCount}/{playerEntity?.getTransport()} - - - {playerEntity?.drugCount === 0 ? ( - Your bag is empty - ) : ( - playerEntity?.drugs.map((drug) => { + + + + + {playerEntity?.items.map((item, key) => { return ( - drug.quantity > 0 && ( - <> - + <> + + - {getDrugById(drug.id)?.icon({ boxSize: "26" })} - {drug.quantity} + <> + {getShopItem(item.id, item.level)?.icon({ + boxSize: "26", + })} + - - - - ) + + + + ); - }) - )} - - + })} + {playerEntity?.items.length === 0 && No gear} + + + + + + {playerEntity?.drugCount === 0 ? ( + No product + ) : ( + playerEntity?.drugs.map((drug, key) => { + return ( + drug.quantity > 0 && ( + <> + + + {getDrugById(drug.id)?.icon({ boxSize: "26" })} + {drug.quantity} + + + + + ) + ); + }) + )} + + + ); }; diff --git a/web/src/components/Layout.tsx b/web/src/components/Layout.tsx index 3022d39f5..b9ff6ecd8 100644 --- a/web/src/components/Layout.tsx +++ b/web/src/components/Layout.tsx @@ -1,26 +1,20 @@ -import { - VStack, - Heading, - Text, - Flex, - Image, - StyleProps, - Container, - Box, -} from "@chakra-ui/react"; +import { VStack, Heading, Text, Flex, Image, StyleProps, Container, Box, Button, Spacer } from "@chakra-ui/react"; import React, { ReactNode } from "react"; import Header from "./Header"; import { motion } from "framer-motion"; import CrtEffect from "./CrtEffect"; +import { Footer } from "./Footer"; export interface LayoutProps { CustomLeftPanel?: React.FC; leftPanelProps?: LeftPanelProps; showBack?: boolean; - actions?: ReactNode; children: ReactNode; isSinglePanel?: boolean; + footer?: ReactNode; + rigthPanelMaxH?: string; + rigthPanelScrollable?: boolean; } export interface LeftPanelProps { @@ -36,7 +30,11 @@ const Layout = ({ showBack, children, isSinglePanel = false, + rigthPanelMaxH, + rigthPanelScrollable = true, + footer, }: LayoutProps) => { + return ( <>
- + {!isSinglePanel && - (!CustomLeftPanel ? ( - - ) : ( - - ))} - + (!CustomLeftPanel ? : )} + {children} - + + ); }; -const LeftPanel = ({ - title, - prefixTitle, - map, - imageSrc, - ...props -}: Partial & StyleProps) => { +const LeftPanel = ({ title, prefixTitle, map, imageSrc, ...props }: Partial & StyleProps) => { return ( - - + + {prefixTitle} - + {title} {map ? ( {map} ) : ( - context + context )} ); @@ -105,21 +89,28 @@ const LeftPanel = ({ const RightPanel = ({ children, + footer, + isSinglePanel, + rigthPanelMaxH, + rigthPanelScrollable, ...props -}: { children: ReactNode } & StyleProps) => { +}: { children: ReactNode; footer: ReactNode; isSinglePanel: boolean; rigthPanelMaxH?: string, rigthPanelScrollable: boolean } & StyleProps) => { return ( - - {children} + + + {children} + {!isSinglePanel && } + + {footer} ); }; diff --git a/web/src/components/Leaderboard.tsx b/web/src/components/Leaderboard.tsx index ed606c7db..4d6f9a4c8 100644 --- a/web/src/components/Leaderboard.tsx +++ b/web/src/components/Leaderboard.tsx @@ -20,59 +20,31 @@ import Input from "@/components/Input"; import React, { useCallback, useState, useEffect, useRef } from "react"; import { Avatar } from "./avatar/Avatar"; -import { genAvatarFromAddress } from "./avatar/avatars"; +import { genAvatarFromId } from "./avatar/avatars"; import colors from "@/theme/colors"; -import { Score, useGlobalScores } from "@/dojo/components/useGlobalScores"; -import { useDojo } from "@/dojo"; +import { Score, useGlobalScoresIninite } from "@/dojo/queries/useGlobalScores"; +import { useDojoContext } from "@/dojo/hooks/useDojoContext"; import { useRouter } from "next/router"; import { formatCash } from "@/utils/ui"; -import { useSystems } from "@/dojo/systems/useSystems"; import { Skull } from "./icons"; -const Leaderboard = ({ - nameEntry, - ...props -}: { nameEntry?: boolean } & StyleProps & ListProps) => { +const Leaderboard = ({ nameEntry, ...props }: { nameEntry?: boolean } & StyleProps & ListProps) => { const router = useRouter(); const gameId = router.query.gameId as string; - const { account } = useDojo(); - // TODO : use when supported on torii - // const { scores, refetch, hasNextPage, fetchNextPage } = useGlobalScores(); - const { scores, refetch } = useGlobalScores(); - const { setName: submitSetName, isPending } = useSystems(); - const { isOpen, onOpen, onClose } = useDisclosure(); + const { account } = useDojoContext(); + const { scores, refetch, hasNextPage, fetchNextPage } = useGlobalScoresIninite(undefined, 10); - const [overlayDimiss, setOverlayDismiss] = useState(true); const [targetGameId, setTargetGameId] = useState(""); const [name, setName] = useState(""); - const pageSize = 10; - const [hasNextPage, setHasNextPage] = useState(false); - const [visibleScores, setVisibleScores] = useState(pageSize); - - const listRef = useRef(null); + const listRef = useRef(null); useEffect(() => { - setHasNextPage(visibleScores < scores.length); if (!listRef.current) return; const lastEl = listRef.current["lastElementChild"]; + // @ts-ignore lastEl && lastEl.scrollIntoView({ behavior: "smooth" }); - }, [scores, visibleScores]); - - const fetchNextPage = useCallback(() => { - setVisibleScores(visibleScores + pageSize); - }, [listRef.current, visibleScores]); - - const onSubmitName = useCallback(async () => { - if (!name) return; - - setOverlayDismiss(false); - await submitSetName(targetGameId, name); - await refetch(); - setOverlayDismiss(true); - - onClose(); - }, [name, targetGameId, onClose, refetch, submitSetName]); + }, [scores]); if (!scores) { return <>; @@ -86,38 +58,21 @@ const Leaderboard = ({ variant="dotted" h="auto" maxH="calc(100% - 50px)" - overflowY="auto" - sx={{ - overflowY: "scroll", - "&::-webkit-scrollbar": { - display: "none", - }, + overflowY="scroll" + __css={{ + "scrollbar-width": "none" }} + ref={listRef} > {scores ? ( - scores.slice(0, visibleScores)?.map((score, index) => { - const isOwn = score.address === account?.address; - const color = isOwn - ? colors.yellow["400"].toString() - : colors.neon["200"].toString(); + scores.map((score, index) => { + const isOwn = score.playerId === account?.address; + const color = isOwn ? colors.yellow["400"].toString() : colors.neon["200"].toString(); const avatarColor = isOwn ? "yellow" : "green"; - const displayName = score.name - ? `${score.name}${isOwn ? " (you)" : ""}` - : "Anonymous"; + const displayName = score.name ? `${score.name}${isOwn ? " (you)" : ""}` : "Anonymous"; return ( - { - if (!isOwn || score.name) return; - - setTargetGameId(score.gameId); - onOpen(); - }} - ref={listRef} - > + - {score.dead ? ( + {/* {score.dead ? ( - ) : ( - - )} + ) : ( */} + router.push(`/${score.gameId}/logs?playerId=${score.playerId}`)} + /> + {/* )} */} @@ -151,6 +108,7 @@ const Leaderboard = ({ {displayName} + {hasNextPage && ( - )} - - {/* Naming modale */} - - - - - Name Entry - - - setName(e.target.value)} - /> - - Max 31 characters - - - - - - - ); }; diff --git a/web/src/components/MobileMenu.tsx b/web/src/components/MobileMenu.tsx index 0ecbd30e4..432fd25c8 100644 --- a/web/src/components/MobileMenu.tsx +++ b/web/src/components/MobileMenu.tsx @@ -13,12 +13,13 @@ import { Dots, User, Roll } from "./icons"; import HeaderButton from "@/components/HeaderButton"; import MediaPlayer from "./MediaPlayer"; import { useRouter } from "next/router"; -import { useDojo } from "@/dojo"; +import { useDojoContext } from "@/dojo/hooks/useDojoContext"; import { formatAddress } from "@/utils/contract"; +import { ProfileLinkMobile } from "./ProfileButton"; -const MobileMenu = ({ ...props }: StyleProps /*& ButtonProps*/) => { +const MobileMenu = ({ ...props }: StyleProps) => { const router = useRouter(); - const { account } = useDojo(); + const { account } = useDojoContext(); return ( <> @@ -33,12 +34,7 @@ const MobileMenu = ({ ...props }: StyleProps /*& ButtonProps*/) => { - {/* } onClick={() => {}}> - CREDITS - */} - }> - <>{account && formatAddress(account.address.toUpperCase())} - + @@ -48,9 +44,3 @@ const MobileMenu = ({ ...props }: StyleProps /*& ButtonProps*/) => { }; export default MobileMenu; - -{ - /* - - Confirmation! */ -} diff --git a/web/src/components/ProfileButton.tsx b/web/src/components/ProfileButton.tsx new file mode 100644 index 000000000..016680507 --- /dev/null +++ b/web/src/components/ProfileButton.tsx @@ -0,0 +1,337 @@ +import { + Text, + VStack, + HStack, + Divider, + Card, + Heading, + Image, + Box, + Link as ChakraLink, + Modal, + ModalOverlay, + ModalContent, + ModalHeader, + ModalBody, + ModalFooter, + MenuItem, +} from "@chakra-ui/react"; +import Layout from "@/components/Layout"; +import Button from "@/components/Button"; +import { useState, useEffect } from "react"; +import { playSound, Sounds } from "@/hooks/sound"; +import Dot from "./Dot"; +import { useDojoContext } from "@/dojo/hooks/useDojoContext"; +import { Avatar } from "./avatar/Avatar"; +import { genAvatarFromAddress, genAvatarFromId } from "./avatar/avatars"; +import { headerStyles, headerButtonStyles } from "@/theme/styles"; +import { Calendar } from "./icons/archive"; +import { ItemTextEnum } from "@/dojo/types"; +import { PlayerEntity, ShopItem } from "@/dojo/queries/usePlayerEntity"; +import { getShopItem, getShopItemStatname } from "@/dojo/helpers"; +import { Dots, Gem, Twitter, User } from "./icons"; +import { IsMobile, formatCash } from "@/utils/ui"; +import Link from "next/link"; +import { SCALING_FACTOR } from "@/dojo/constants"; +import HealthIndicator from "./player/HealthIndicator"; +import WantedIndicator from "./player/WantedIndicator"; +import CashIndicator from "./player/CashIndicator"; +import ShareButton from "./ShareButton"; +import { useRouter } from "next/router"; +import { Glock } from "./icons/items"; +import { useToast } from "@/hooks/toast"; + +const ProfileModal = ({ isOpen, close }: { isOpen: boolean; close: () => void }) => { + return ( + + + + + + + + + ); +}; + +export const Profile = ({ close, ...props }: { close?: () => void }) => { + const router = useRouter(); + const gameId = router.query.gameId as string; + const playerId = router.query.playerId as string; + + const { account, playerEntityStore } = useDojoContext(); + const { playerEntity } = playerEntityStore; + + const [attackItem, setAttackItem] = useState(undefined); + const [defenseItem, setDefenseItem] = useState(undefined); + const [speedItem, setSpeedItem] = useState(undefined); + const [transportItem, setTransportItem] = useState(undefined); + + const { toast } = useToast(); + + const isMobile = IsMobile(); + + useEffect(() => { + if (!playerEntity) return; + setAttackItem(playerEntity.items.find((i) => i.id === ItemTextEnum.Attack)); + setDefenseItem(playerEntity.items.find((i) => i.id === ItemTextEnum.Defense)); + setSpeedItem(playerEntity.items.find((i) => i.id === ItemTextEnum.Speed)); + setTransportItem(playerEntity.items.find((i) => i.id === ItemTextEnum.Transport)); + }, [playerEntity]); + + if (!account || !playerEntity) return null; + + return ( + + + + + + + + + + + + + {playerEntity.name} + + + + + + DAY {playerEntity.turn} + + + {/* + + + + + + + + + + + + + */} + + + + + + + {getShopItemStatname(ItemTextEnum.Attack)}: + {playerEntity.getAttack()} + + + {getShopItemStatname(ItemTextEnum.Defense)}: + {playerEntity.getDefense()} + + + {getShopItemStatname(ItemTextEnum.Speed)}: + {playerEntity.getSpeed()} + + + {getShopItemStatname(ItemTextEnum.Transport)}: + {playerEntity?.getTransport()} + + + + + + + {attackItem ? ( + getShopItem(attackItem.id, attackItem.level).icon({ + boxSize: "26", + color: "yellow.400", + }) + ) : ( + + )} + + + {defenseItem ? ( + getShopItem(defenseItem.id, defenseItem.level).icon({ + boxSize: "26", + color: "yellow.400", + }) + ) : ( + + )} + + + {speedItem ? ( + getShopItem(speedItem.id, speedItem.level).icon({ + boxSize: "26", + color: "yellow.400", + }) + ) : ( + + )} + + + {transportItem ? ( + getShopItem(transportItem.id, transportItem.level).icon({ + boxSize: "26", + color: "yellow.400", + }) + ) : ( + + )} + + + + + + + {close && ( + + )} + {!playerId && ( + + )} + + + + + + ); +}; + +const getShareText = (playerEntity: PlayerEntity): string => { + if (playerEntity.health > 0) { + return encodeURIComponent( + `${playerEntity.name} has reached Day ${playerEntity.turn} with ${formatCash( + playerEntity.cash, + )} $paper. Think you can out hustle them? #rollyourown.\n\n${window.location.origin}`, + ); + } else { + return encodeURIComponent( + `${playerEntity.name} got dropped on Day ${playerEntity.turn} but pocketed ${formatCash( + playerEntity.cash, + )} $paper before checking out. Think you can out hustle them? #rollyourown.\n\n${window.location.origin}`, + ); + } +}; + +export const ProfileButtonMobile = () => { + const { account, playerEntityStore } = useDojoContext(); + const { playerEntity } = playerEntityStore; + const [isOpen, setIsOpen] = useState(false); + + if (!account || !playerEntity) return null; + + return ( + <> + setIsOpen(true)}> + {playerEntity.name} + + setIsOpen(false)} /> + + ); +}; + +export const ProfileButton = () => { + const { account, playerEntityStore } = useDojoContext(); + const { playerEntity } = playerEntityStore; + const [isOpen, setIsOpen] = useState(false); + + if (!account || !playerEntity) return null; + + return ( + <> + + setIsOpen(false)} /> + + ); +}; + +export const ProfileLink = () => { + const router = useRouter(); + const gameId = router.query.gameId as string; + + const { account, playerEntityStore } = useDojoContext(); + const { playerEntity } = playerEntityStore; + const [isOpen, setIsOpen] = useState(false); + + const onClick = () => { + if (router.pathname === "/[gameId]/logs") { + router.back(); + } else { + router.push(`/${gameId}/logs`); + } + }; + + if (!account || !playerEntity) return null; + + return ( + <> + + + ); +}; + +export const ProfileLinkMobile = () => { + const router = useRouter(); + const gameId = router.query.gameId as string; + + const { account, playerEntityStore } = useDojoContext(); + const { playerEntity } = playerEntityStore; + const [isOpen, setIsOpen] = useState(false); + + const onClick = () => { + if (router.pathname === "/[gameId]/logs") { + router.back(); + } else { + router.push(`/${gameId}/logs`); + } + }; + + if (!account || !playerEntity) return null; + + return ( + <> + + {playerEntity.name} + + + ); +}; diff --git a/web/src/components/RegisterEntities.tsx b/web/src/components/RegisterEntities.tsx new file mode 100644 index 000000000..df8e1408f --- /dev/null +++ b/web/src/components/RegisterEntities.tsx @@ -0,0 +1,31 @@ +import { useDojoContext } from "@/dojo/hooks/useDojoContext"; +import { useRouter } from "next/router"; +import { useEffect } from "react"; + + const RegisterEntities = () => { + const router = useRouter(); + const gameId = router.query.gameId as string; + + const { account, playerEntityStore} = useDojoContext() + + useEffect(()=> { + if( playerEntityStore && gameId && account?.address){ + console.log('Register PlayerEntity') + playerEntityStore.initPlayerEntity(gameId, account?.address); + } + + if(!gameId){ + playerEntityStore.reset(); + } + }, [gameId, account?.address]) + + + return (<>) + +}; + + export default RegisterEntities; + + + + diff --git a/web/src/components/ShareButton.tsx b/web/src/components/ShareButton.tsx new file mode 100644 index 000000000..f900c52da --- /dev/null +++ b/web/src/components/ShareButton.tsx @@ -0,0 +1,47 @@ +import { Text, Link as ChakraLink, StyleProps } from "@chakra-ui/react"; +import { useState, useEffect } from "react"; +import Button from "@/components/Button"; +import { Twitter } from "./icons"; +import { useDojoContext } from "@/dojo/hooks/useDojoContext"; +import { formatCash } from "@/utils/ui"; +import { PlayerEntity } from "@/dojo/queries/usePlayerEntity"; + +const ShareButton = ({ ...props }: { variant?: string } & StyleProps) => { + const { account, playerEntityStore } = useDojoContext(); + const { playerEntity } = playerEntityStore; + + if (!account || !playerEntity) return null; + + return ( + + + + ); +}; + +const getShareText = (playerEntity: PlayerEntity): string => { + if (playerEntity.health > 0) { + return encodeURIComponent( + `${playerEntity.name} has reached Day ${playerEntity.turn} with ${formatCash( + playerEntity.cash, + )} $paper. Think you can out hustle them? #rollyourown.\n\n${window.location.origin}`, + ); + } else { + return encodeURIComponent( + `${playerEntity.name} got dropped on Day ${playerEntity.turn} but pocketed ${formatCash( + playerEntity.cash, + )} $paper before checking out. Think you can out hustle them? #rollyourown.\n\n${window.location.origin}`, + ); + } +}; + +export default ShareButton; diff --git a/web/src/components/Toast.tsx b/web/src/components/Toast.tsx index ce30e5701..8254e7106 100644 --- a/web/src/components/Toast.tsx +++ b/web/src/components/Toast.tsx @@ -8,27 +8,29 @@ export const Toast = ({ icon, link, onClose, + isError, }: { message: string; icon?: React.FC; link?: string; onClose: () => void; + isError: boolean; }) => { return ( - + <> {icon ? icon({ size: "lg" }) : } {message} diff --git a/web/src/components/Tooltip.tsx b/web/src/components/Tooltip.tsx new file mode 100644 index 000000000..1e90c9269 --- /dev/null +++ b/web/src/components/Tooltip.tsx @@ -0,0 +1,26 @@ +import { Tooltip as ChakraTooltip } from "@chakra-ui/react"; +import { VStack, Text } from "@chakra-ui/react"; +import { ReactNode } from "react"; + +export default function Tooltip({ + children, + color, + title, + text, +}: { + children: ReactNode; + color: string; + title: string; + text: string; +}) { + return }>{children}; +} + +const TooltipContent = ({ title, text, color }: { title: string; text: string; color: string }) => { + return ( + + {title} + {text} + + ); +}; diff --git a/web/src/components/Tutorial.tsx b/web/src/components/Tutorial.tsx index 928d4270e..011630fe5 100644 --- a/web/src/components/Tutorial.tsx +++ b/web/src/components/Tutorial.tsx @@ -20,7 +20,8 @@ import Button from "@/components/Button"; import { useState, useEffect } from "react"; import { playSound, Sounds } from "@/hooks/sound"; import Dot from "./Dot"; -import { useDojo } from "@/dojo"; +import { useDojoContext } from "@/dojo/hooks/useDojoContext"; +import { useRouter } from "next/router"; const steps = [ { @@ -45,11 +46,7 @@ const steps = [ }, ]; -const TutorialStep = ({ - step, -}: { - step: { step: number; title: string; desc: string }; -}) => { +const TutorialStep = ({ step }: { step: { step: number; title: string; desc: string } }) => { return ( <> @@ -71,21 +68,23 @@ const TutorialStep = ({ ); }; -const Tutorial = ({ - isOpen, - close, -}: { - isOpen: boolean; - close: () => void; -}) => { +const Tutorial = ({ isOpen, close }: { isOpen: boolean; close: () => void }) => { + const router = useRouter(); + const [currentStep, setCurrentStep] = useState(1); - const { account, createBurner, isBurnerDeploying } = useDojo(); + const { + account, + burner: { create: createBurner, isDeploying: isBurnerDeploying }, + } = useDojoContext(); + - const onNext = () => { + const onNext = async () => { if (currentStep == steps.length) { if (!account) { - createBurner(); + await createBurner(); } + router.push(`/create/new`); + close(); } else { setCurrentStep(currentStep + 1); @@ -126,17 +125,10 @@ const Tutorial = ({ onClick={onNext} w="full" hoverSound={undefined} - clickSound={ - currentStep == steps.length - ? Sounds.Magnum357 - : Sounds.HoverClick - } + isLoading={isBurnerDeploying} + clickSound={currentStep == steps.length ? Sounds.Magnum357 : Sounds.HoverClick} > - {currentStep == steps.length - ? account - ? "READY TO HUSTLE" - : "CREATE BURNER" - : "NEXT"} + {currentStep == steps.length ? "READY TO HUSTLE" : "NEXT"} diff --git a/web/src/components/avatar/avatars/index.tsx b/web/src/components/avatar/avatars/index.tsx index aef861c34..bf84d65a9 100644 --- a/web/src/components/avatar/avatars/index.tsx +++ b/web/src/components/avatar/avatars/index.tsx @@ -30,8 +30,20 @@ export type AvatarName = keyof typeof avatars; // super simple way to generate an avatar from an address, // the least significant byte of the address is used to get the avatar + +export const getAvatarCount = () => { + const avatarKeys = Object.keys(avatars); + return avatarKeys.length +} + export const genAvatarFromAddress = (address: String) => { const avatarKeys = Object.keys(avatars); const avatarIndex = parseInt(address.slice(-2), 16) % avatarKeys.length; return avatarKeys[avatarIndex] as AvatarName; }; + +export const genAvatarFromId = (id: number) => { + const avatarKeys = Object.keys(avatars); + const avatarIndex = id % avatarKeys.length; + return avatarKeys[avatarIndex] as AvatarName; +}; diff --git a/web/src/components/icons/DollarBag.tsx b/web/src/components/icons/DollarBag.tsx new file mode 100644 index 000000000..1e1363f70 --- /dev/null +++ b/web/src/components/icons/DollarBag.tsx @@ -0,0 +1,14 @@ +import { Icon, IconProps } from "."; + +export const DollarBag = (props: IconProps) => { + return ( + + + + ); +}; diff --git a/web/src/components/icons/DynamicHeart.tsx b/web/src/components/icons/DynamicHeart.tsx new file mode 100644 index 000000000..052d38c39 --- /dev/null +++ b/web/src/components/icons/DynamicHeart.tsx @@ -0,0 +1,40 @@ +import { background } from "@chakra-ui/react"; +import { Icon, IconProps } from "."; + +export const DynamicHeart = (props: IconProps & { health: number; maxHealth: number; color: string }) => { + // Assuming the SVG viewBox is 24 units wide, scale the health to fit this range. + const healthWidth = ((props.health * 4) / props.maxHealth) * 24; + const gradientId = `health-gradient-${props.health}`; + + return ( + + <> + + + + + + + + + + + + + + ); +}; diff --git a/web/src/components/icons/Fist.tsx b/web/src/components/icons/Fist.tsx new file mode 100644 index 000000000..845b6d3fb --- /dev/null +++ b/web/src/components/icons/Fist.tsx @@ -0,0 +1,20 @@ +import { Icon, IconProps } from "."; + +export const Fist = (props: IconProps) => { + return ( + + <> + + + + + + + + ); +}; diff --git a/web/src/components/icons/Flipflop.tsx b/web/src/components/icons/Flipflop.tsx new file mode 100644 index 000000000..c9655bd18 --- /dev/null +++ b/web/src/components/icons/Flipflop.tsx @@ -0,0 +1,18 @@ +import { Icon, IconProps } from "."; + +export const Flipflop = (props: IconProps) => { + return ( + + <> + + + + + + + ); +}; diff --git a/web/src/components/icons/Ring.tsx b/web/src/components/icons/Ring.tsx new file mode 100644 index 000000000..a81819854 --- /dev/null +++ b/web/src/components/icons/Ring.tsx @@ -0,0 +1,20 @@ +import { Icon, IconProps } from "."; + +export const Ring = (props: IconProps) => { + return ( + + <> + + + + + + + + + ); +}; diff --git a/web/src/components/icons/Twitter.tsx b/web/src/components/icons/Twitter.tsx new file mode 100644 index 000000000..f3e25c8cb --- /dev/null +++ b/web/src/components/icons/Twitter.tsx @@ -0,0 +1,14 @@ +import { Icon, IconProps } from "."; + +export const Twitter = (props: IconProps) => { + return ( + + + + ); +}; diff --git a/web/src/components/icons/User.tsx b/web/src/components/icons/User.tsx index 723675efb..bd986e455 100644 --- a/web/src/components/icons/User.tsx +++ b/web/src/components/icons/User.tsx @@ -2,46 +2,11 @@ import { Icon, IconProps } from "."; export const User = (props: IconProps) => { return ( - - <> - - - - - - - - - - - - - - - - - - - + + ); }; diff --git a/web/src/components/icons/index.tsx b/web/src/components/icons/index.tsx index fdbae7581..fbeab0119 100644 --- a/web/src/components/icons/index.tsx +++ b/web/src/components/icons/index.tsx @@ -45,9 +45,15 @@ export * from "./Roll"; export * from "./Close"; export * from "./ExternalLink"; export * from "./Heart"; +export * from "./DynamicHeart"; export * from "./Skull"; export * from "./Siren"; export * from "./Truck"; +export * from "./DollarBag"; +export * from "./Twitter"; +export * from "./Fist"; +export * from "./Flipflop"; + // Template for adding new icons. When copying svg from figma, viewBox is assumed // to be 36x36, otherwise override within individual icons. diff --git a/web/src/components/icons/items/Backpack.tsx b/web/src/components/icons/items/Backpack.tsx new file mode 100644 index 000000000..ee0803d43 --- /dev/null +++ b/web/src/components/icons/items/Backpack.tsx @@ -0,0 +1,16 @@ +import { Icon, IconProps } from "../"; + +export const Backpack = (props: IconProps) => { + return ( + + <> + + + + ); +}; diff --git a/web/src/components/icons/items/Bicycle.tsx b/web/src/components/icons/items/Bicycle.tsx new file mode 100644 index 000000000..ddd6e0ce0 --- /dev/null +++ b/web/src/components/icons/items/Bicycle.tsx @@ -0,0 +1,16 @@ +import { Icon, IconProps } from ".."; + +export const Bicycle = (props: IconProps) => { + return ( + + <> + + + + ); +}; diff --git a/web/src/components/icons/items/Dufflebag.tsx b/web/src/components/icons/items/Dufflebag.tsx new file mode 100644 index 000000000..19ae147d5 --- /dev/null +++ b/web/src/components/icons/items/Dufflebag.tsx @@ -0,0 +1,20 @@ +import { Icon, IconProps } from ".."; + +export const Dufflebag = (props: IconProps) => { + return ( + + <> + + + + + ); +}; diff --git a/web/src/components/icons/items/Fannypack.tsx b/web/src/components/icons/items/Fannypack.tsx new file mode 100644 index 000000000..f132b7ad5 --- /dev/null +++ b/web/src/components/icons/items/Fannypack.tsx @@ -0,0 +1,16 @@ +import { Icon, IconProps } from ".."; + +export const Fannypack = (props: IconProps) => { + return ( + + <> + + + + ); +}; diff --git a/web/src/components/icons/items/Glock.tsx b/web/src/components/icons/items/Glock.tsx new file mode 100644 index 000000000..22a8e3c09 --- /dev/null +++ b/web/src/components/icons/items/Glock.tsx @@ -0,0 +1,16 @@ +import { Icon, IconProps } from "../"; + +export const Glock = (props: IconProps) => { + return ( + + <> + + + + ); +}; diff --git a/web/src/components/icons/items/Kevlar.tsx b/web/src/components/icons/items/Kevlar.tsx new file mode 100644 index 000000000..a0a18cee0 --- /dev/null +++ b/web/src/components/icons/items/Kevlar.tsx @@ -0,0 +1,16 @@ +import { Icon, IconProps } from "../"; + +export const Kevlar = (props: IconProps) => { + return ( + + <> + + + + ); +}; diff --git a/web/src/components/icons/items/Kneepads.tsx b/web/src/components/icons/items/Kneepads.tsx new file mode 100644 index 000000000..c1fbc4bbb --- /dev/null +++ b/web/src/components/icons/items/Kneepads.tsx @@ -0,0 +1,16 @@ +import { Icon, IconProps } from ".."; + +export const Kneepads = (props: IconProps) => { + return ( + + <> + + + + ); +}; diff --git a/web/src/components/icons/items/Knife.tsx b/web/src/components/icons/items/Knife.tsx new file mode 100644 index 000000000..300891ad9 --- /dev/null +++ b/web/src/components/icons/items/Knife.tsx @@ -0,0 +1,12 @@ +import { Icon, IconProps } from ".."; + +export const Knife = (props: IconProps) => { + return ( + + <> + + + + ); +}; diff --git a/web/src/components/icons/items/Leatherjacket.tsx b/web/src/components/icons/items/Leatherjacket.tsx new file mode 100644 index 000000000..515c5e1e3 --- /dev/null +++ b/web/src/components/icons/items/Leatherjacket.tsx @@ -0,0 +1,16 @@ +import { Icon, IconProps } from ".."; + +export const Leatherjacket = (props: IconProps) => { + return ( + + <> + + + + ); +}; diff --git a/web/src/components/icons/items/Shoes.tsx b/web/src/components/icons/items/Shoes.tsx new file mode 100644 index 000000000..5f7531292 --- /dev/null +++ b/web/src/components/icons/items/Shoes.tsx @@ -0,0 +1,16 @@ +import { Icon, IconProps } from ".."; + +export const Shoes = (props: IconProps) => { + return ( + + <> + + + + ); +}; diff --git a/web/src/components/icons/items/Skateboard.tsx b/web/src/components/icons/items/Skateboard.tsx new file mode 100644 index 000000000..9f632a28a --- /dev/null +++ b/web/src/components/icons/items/Skateboard.tsx @@ -0,0 +1,16 @@ +import { Icon, IconProps } from ".."; + +export const Skateboard = (props: IconProps) => { + return ( + + <> + + + + ); +}; diff --git a/web/src/components/icons/items/Trenchcoat.tsx b/web/src/components/icons/items/Trenchcoat.tsx new file mode 100644 index 000000000..cdc1d1a92 --- /dev/null +++ b/web/src/components/icons/items/Trenchcoat.tsx @@ -0,0 +1,14 @@ +import { Icon, IconProps } from "../"; + +export const Trenchcoat = (props: IconProps) => { + return ( + + <> + + + + ); +}; diff --git a/web/src/components/icons/items/Uzi.tsx b/web/src/components/icons/items/Uzi.tsx new file mode 100644 index 000000000..48606c66e --- /dev/null +++ b/web/src/components/icons/items/Uzi.tsx @@ -0,0 +1,11 @@ +import { Icon, IconProps } from ".."; + +export const Uzi = (props: IconProps) => { + return ( + + <> + + + + ); +}; diff --git a/web/src/components/icons/items/index.tsx b/web/src/components/icons/items/index.tsx new file mode 100644 index 000000000..cd0f0bb2b --- /dev/null +++ b/web/src/components/icons/items/index.tsx @@ -0,0 +1,13 @@ +export * from "./Glock"; +export * from "./Kevlar"; +export * from "./Trenchcoat"; +export * from "./Knife"; +export * from "./Uzi"; +export * from "./Shoes"; +export * from "./Backpack"; +export * from "./Bicycle"; +export * from "./Dufflebag"; +export * from "./Fannypack"; +export * from "./Kneepads"; +export * from "./Leatherjacket"; +export * from "./Skateboard"; diff --git a/web/src/components/images/Weed.tsx b/web/src/components/images/Weed.tsx deleted file mode 100644 index cae1196af..000000000 --- a/web/src/components/images/Weed.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import { Icon } from "@chakra-ui/react"; - -const Weed = () => { - return ( - - - - - - - - - - ); -}; - -export default Weed; diff --git a/web/src/components/map/Map.tsx b/web/src/components/map/Map.tsx index 348c95101..af948c5a1 100644 --- a/web/src/components/map/Map.tsx +++ b/web/src/components/map/Map.tsx @@ -10,6 +10,7 @@ type CoordinateType = { }; const coordinate: CoordinateType = { + [Location.Home]: { x: 0, y: 0 }, [Location.Queens]: { x: -150, y: 150 }, [Location.Jersey]: { x: 150, y: 150 }, [Location.Bronx]: { x: 0, y: 300 }, diff --git a/web/src/components/player/CashIndicator.tsx b/web/src/components/player/CashIndicator.tsx new file mode 100644 index 000000000..dd61762ce --- /dev/null +++ b/web/src/components/player/CashIndicator.tsx @@ -0,0 +1,13 @@ +import { StyleProps, HStack, Text } from "@chakra-ui/react"; +import { DollarBag } from "../icons"; +import { formatCash } from "@/utils/ui"; + +const CashIndicator = ({ cash, ...props }: { cash: string } & StyleProps) => { + return ( + + {cash} + + ); +}; + +export default CashIndicator; diff --git a/web/src/components/player/HealthIndicator.tsx b/web/src/components/player/HealthIndicator.tsx new file mode 100644 index 000000000..9cb6ef8d7 --- /dev/null +++ b/web/src/components/player/HealthIndicator.tsx @@ -0,0 +1,41 @@ +import { StyleProps, HStack, Text, keyframes } from "@chakra-ui/react"; +import { DynamicHeart } from "../icons"; +import colors from "@/theme/colors"; + +export const blinkAnim = keyframes` + 0% {opacity: 1;} + 80% {opacity:1;} + 81% {opacity: 0;} + 100% {opacity: 0;} +`; + +const HealthIndicator = ({ health, maxHealth, ...props }: { health: number; maxHealth: number } & StyleProps) => { + const healthColor = getHealthColor(health, maxHealth); + return ( + + {health} + + ); +}; + +const getHealthAnimation = (health: number, maxHealth: number) => { + const healthPercentage = (health / maxHealth) * 100; + return healthPercentage <= 20 ? `${blinkAnim} infinite 1.4s linear` : "none"; +}; + +function getHealthColor(health: number, maxHealth: number) { + const healthPercentage = (health / maxHealth) * 100; + let healthColor; + + if (healthPercentage > 59) { + healthColor = colors.neon["400"].toString(); + } else if (healthPercentage > 29) { + healthColor = colors.yellow["400"].toString(); + } else { + healthColor = colors.red.toString(); + } + + return healthColor; +} + +export default HealthIndicator; diff --git a/web/src/components/player/WantedIndicator.tsx b/web/src/components/player/WantedIndicator.tsx new file mode 100644 index 000000000..ae9ac2ba6 --- /dev/null +++ b/web/src/components/player/WantedIndicator.tsx @@ -0,0 +1,22 @@ +import { StyleProps, HStack, Text, VStack } from "@chakra-ui/react"; +import { Siren } from "../icons"; + +import { blinkAnim } from "./HealthIndicator"; +import { ReactNode } from "react"; +import Tooltip from "../Tooltip"; + +const WantedIndicator = ({ wanted, ...props }: { wanted: number } & StyleProps) => { + return ( + + 68 ? "red" : wanted > 29 ? "yellow.400" : "neon.400"} + animation={wanted >= 85 ? `${blinkAnim} infinite 0.5s linear` : "none"} + {...props} + > + {wanted} + + + ); +}; + +export default WantedIndicator; diff --git a/web/src/constants.ts b/web/src/constants.ts index caa9a830d..ef45b088a 100644 --- a/web/src/constants.ts +++ b/web/src/constants.ts @@ -1,4 +1,5 @@ -export const RYO_WORLD_ADDRESS = - "0x3c3dfeb374720dfd73554dc2b9e0583cb9668efb3055d07d1533afa5d219fd5"; -export const ETH_CONTRACT_ADDRESS = - "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7"; +// export const RYO_WORLD_ADDRESS = +// "0x51d1bf777ddb43361a746029303fdd2fd45f4b898243c2769b5cd70a5fa7c19"; + +// export const ETH_CONTRACT_ADDRESS = +// "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7"; diff --git a/web/src/dojo/components/useGlobalScores.tsx b/web/src/dojo/components/useGlobalScores.tsx deleted file mode 100644 index 641131d29..000000000 --- a/web/src/dojo/components/useGlobalScores.tsx +++ /dev/null @@ -1,115 +0,0 @@ -import { - PlayerEdge, - Name, - useGlobalScoresQuery, - useInfiniteGlobalScoresQuery, -} from "@/generated/graphql"; -import { useCallback, useEffect, useState, useMemo } from "react"; - -import { shortString } from "starknet"; -import { SCALING_FACTOR } from ".."; - -export type Score = { - gameId: string; - address: string; - name?: string; - cash: number; - dead: boolean; -}; - -export class GlobalScores { - scores: Score[]; - constructor(scores: Score[]) { - this.scores = scores; - } - - static create(edges: PlayerEdge[]): Score[] | undefined { - if (!edges || edges.length === 0) return undefined; - - return edges.map((edge) => { - const keys = edge.node?.entity?.keys || []; - const gameId = keys[0]!; - const address = keys[1]!; - - const components = edge.node?.entity?.components || []; - const nameComponent = components.find( - (component) => component?.__typename === "Name", - ) as Name; - - return { - gameId, - address, - name: - nameComponent && - shortString.decodeShortString(nameComponent?.short_string), - cash: Math.floor(Number(edge.node?.cash) / SCALING_FACTOR), - dead: Number(edge.node?.health) === 0, - }; - }); - } -} - -export const useGlobalScores = (offset?: number, limit?: number) => { - // Gets top 1000 - // TODO: paginate with cursor for more scores - const { data, isFetched, refetch } = useGlobalScoresQuery({ - limit: limit || 1000, - }); - - const scores: Score[] = useMemo(() => { - const scores = - GlobalScores.create(data?.playerComponents?.edges as PlayerEdge[]) || []; - return scores.sort((a, b) => b.cash - a.cash); - }, [data]); - - return { - scores, - isFetched, - refetch, - }; -}; - -// // TODO : use when supported on torii -// export const useGlobalScoresIninite = (offset?: number, limit?: number) => { -// const [scores, setScores] = useState([]); -// // Gets top 10 -// // TODO: paginate with cursor for more scores -// const { data, isFetched, refetch, hasNextPage, fetchNextPage, ...props } = -// useInfiniteGlobalScoresQuery( -// { -// limit: limit || 10, -// }, -// { -// getNextPageParam: (lastPage) => { -// const edgesCount = lastPage.playerComponents?.edges?.length || 0; -// if ( edgesCount === 0) return undefined -// const lastItem = lastPage.playerComponents?.edges[edgesCount - 1] -// return { -// limit: 10, -// cursor: lastItem.cursor, -// }; -// } -// }, -// ); - -// useEffect(() => { -// if (data?.pages.length == 0) return; -// const pageCount = data?.pages.length || 0; -// // debugger -// const new_scores = GlobalScores.create( -// data?.pages[pageCount - 1].playerComponents?.edges as PlayerEdge[], -// ); - -// if (new_scores) { -// setScores(scores.concat(new_scores)); -// } -// }, [data?.pages]); - -// return { -// scores, -// isFetched, -// refetch, -// hasNextPage, -// fetchNextPage, -// }; -// }; diff --git a/web/src/dojo/constants.ts b/web/src/dojo/constants.ts new file mode 100644 index 000000000..e634888ef --- /dev/null +++ b/web/src/dojo/constants.ts @@ -0,0 +1,2 @@ +export const SCALING_FACTOR = 10_000; +export const REFETCH_INTERVAL = 1_000; // really need graphql subscriptions... \ No newline at end of file diff --git a/web/src/dojo/context/DojoContext.tsx b/web/src/dojo/context/DojoContext.tsx new file mode 100644 index 000000000..f2fcbd9a8 --- /dev/null +++ b/web/src/dojo/context/DojoContext.tsx @@ -0,0 +1,85 @@ +import { createContext, ReactNode, useContext, useMemo } from "react"; +import { SetupResult } from "../setup/setup"; +import { useBurner } from "@dojoengine/create-burner"; +import { Account, RpcProvider } from "starknet"; +import { PlayerEntityStore, usePlayerEntityStore } from "@/hooks/player"; + +export type RyoContext = { + playerEntityStore: PlayerEntityStore; + setup: SetupResult; + account: Account | null + burner: { + create: () => void; + list: () => any[]; + get: (id: string) => any; + select: (id: string) => void; + account: Account | null ; + masterAccount: Account; + isDeploying: boolean; + clear: () => void; + }; +}; + +export const DojoContext = createContext(null); + +export const DojoProvider = ({ + children, + value, +}: { + children: ReactNode; + value: SetupResult; +}) => { + const contextValue = useContext(DojoContext); + if (contextValue) throw new Error("DojoProvider can only be used once"); + + const masterAddress = process.env.NEXT_PUBLIC_ADMIN_ADDRESS!; + const privateKey = process.env.NEXT_PUBLIC_ADMIN_PRIVATE_KEY!; + + const masterAccount = useMemo(() => { + return new Account( + { + rpc: { + nodeUrl: value.network.provider.provider.nodeUrl, + }, + }, + masterAddress, + privateKey, + ); + }, [value.network.provider.provider, masterAddress, privateKey]); + + const burnerOptions = useMemo(() => { + return { + masterAccount: masterAccount, + accountClassHash: process.env.NEXT_PUBLIC_ACCOUNT_CLASS_HASH!, + nodeUrl: value.network.provider.provider.nodeUrl, + }; + }, [masterAccount, value.network.provider.provider]); + + const { create, list, get, account, select, isDeploying, clear } = + useBurner(burnerOptions); + + const selectedAccount = useMemo(() => { + return account; + }, [account]); + + const ryoContext = { + playerEntityStore: usePlayerEntityStore(), + setup: value, // the provided setup + account: selectedAccount,// the selected account + //account: masterAccount, // use master account = full auth + burner: { + create, // create a new account + list, // list all accounts + get, // get an account by id + select, // select an account by id + account: selectedAccount, // the selected account + masterAccount, // the master account + isDeploying, // is the account being deployed + clear, + }, + }; + + return ( + {children} + ); +}; diff --git a/web/src/dojo/entities/useGameEntity.tsx b/web/src/dojo/entities/useGameEntity.tsx deleted file mode 100644 index d556f4d17..000000000 --- a/web/src/dojo/entities/useGameEntity.tsx +++ /dev/null @@ -1,74 +0,0 @@ -import { Game, useGameEntityQuery } from "@/generated/graphql"; -import { useEffect, useMemo, useState } from "react"; -import { ec, num } from "starknet"; -import { REFETCH_INTERVAL } from ".."; - -interface GameEntityData { - entity: { - components: Game[]; - }; -} - -export class GameEntity { - creator: string; - isFinished: boolean; - maxPlayers: number; - maxTurns: number; - numPlayers: number; - startTime: number; - - constructor(game: Game) { - this.creator = game.creator; - this.isFinished = game.is_finished; - this.maxPlayers = game.max_players; - this.maxTurns = game.max_turns; - this.numPlayers = game.num_players; - this.startTime = game.start_time; - } - - static create(data: GameEntityData): GameEntity | undefined { - if (!data || !data.entity) return undefined; - - const components = data.entity.components || []; - const gameComponent = components.find( - (component) => component.__typename === "Game", - ); - - if (!gameComponent) return undefined; - - return new GameEntity(gameComponent as Game); - } -} - -export interface GameInterface { - game?: GameEntity; - isFetched: boolean; -} - -export const useGameEntity = ({ - gameId, -}: { - gameId?: string; -}): GameInterface => { - const key: string = useMemo(() => { - return num.toHex( - ec.starkCurve.poseidonHashMany([num.toBigInt(gameId || "")]), - ); - }, [gameId]); - - const { data, isFetched } = useGameEntityQuery( - { id: key }, - { - enabled: !!gameId, - }, - ); - - const game = useMemo(() => { - return GameEntity.create(data as GameEntityData); - }, [data]); - - return { - game, - isFetched, - }; -}; diff --git a/web/src/dojo/entities/useLocationEntity.tsx b/web/src/dojo/entities/useLocationEntity.tsx deleted file mode 100644 index 8f5211d81..000000000 --- a/web/src/dojo/entities/useLocationEntity.tsx +++ /dev/null @@ -1,103 +0,0 @@ -import { - Market, - Risks, - useLocationEntitiesQuery, - EntityEdge, -} from "@/generated/graphql"; -import { useMemo } from "react"; -import { num } from "starknet"; -import { REFETCH_INTERVAL, SCALING_FACTOR } from ".."; -import { DrugMarket } from "../types"; - -export class LocationEntity { - id: string; // id is hex encoded location name - risks: Risks; - drugMarkets: DrugMarket[]; - - constructor(id: string, risks: Risks, drugMarkets: DrugMarket[]) { - this.id = id; - this.risks = risks; - this.drugMarkets = drugMarkets; - } - - static create(edges: EntityEdge[]): LocationEntity | undefined { - if (!edges || edges.length === 0) return undefined; - - // we know both location and risk component uses key[1] as locationId - const keys = edges[0].node?.keys || []; - const locationId = keys[1]!; - - const risksComponent = edges.find((edge) => { - return edge.node?.components?.some( - (component) => component?.__typename === "Risks", - ); - })?.node?.components?.[0] as Risks; - - const drugMarketEntities = edges.filter((edge) => { - return edge.node?.components?.find( - (component) => component?.__typename === "Market", - ); - }) as EntityEdge[]; - - const drugMarkets: DrugMarket[] = drugMarketEntities.map((edge) => { - const marketComponent = edge.node?.components?.find( - (component) => component?.__typename === "Market", - ) as Market; - - const keys = edge.node?.keys || []; - const drugId = num.toHexString(keys[2]!); - - const price = - Number(marketComponent.cash) / - Number(marketComponent.quantity) / - SCALING_FACTOR; - - return { - id: drugId, - price: price, - marketPool: marketComponent, - }; - }); - - if (!risksComponent || drugMarkets.length === 0) return undefined; - - return { - id: locationId, - risks: risksComponent, - drugMarkets: drugMarkets, - }; - } -} - -export interface LocationInterface { - location?: LocationEntity; - isFetched: boolean; -} - -export const useLocationEntity = ({ - gameId, - locationId, -}: { - gameId?: string; - locationId?: string; -}): LocationInterface => { - const { data, isFetched } = useLocationEntitiesQuery( - { - gameId: gameId || "", - locationId: locationId || "", - }, - { - enabled: !!gameId && !!locationId, - refetchInterval: REFETCH_INTERVAL, - }, - ); - - const location = useMemo(() => { - return LocationEntity.create(data?.entities?.edges as EntityEdge[]); - }, [data]); - - return { - location, - isFetched, - }; -}; diff --git a/web/src/dojo/entities/usePlayerEntity.tsx b/web/src/dojo/entities/usePlayerEntity.tsx deleted file mode 100644 index 59946247d..000000000 --- a/web/src/dojo/entities/usePlayerEntity.tsx +++ /dev/null @@ -1,103 +0,0 @@ -import { - Player, - Drug as DrugType, - usePlayerEntityQuery, - EntityEdge, -} from "@/generated/graphql"; -import { useEffect, useMemo, useState } from "react"; -import { REFETCH_INTERVAL, SCALING_FACTOR } from ".."; -import { PlayerStatus } from "../types"; - -type Drug = { - id: string; - quantity: number; -}; - -export class PlayerEntity { - cash: number; - health: number; - turnsRemaining: number; - turnsRemainingOnDeath: number; - drugCount: number; - bagLimit: number; - locationId?: string; - status: PlayerStatus; - drugs: Drug[]; - - constructor(player: Player, drugs: Drug[]) { - this.cash = Number(player.cash) / SCALING_FACTOR; - this.health = player.health; - this.turnsRemaining = player.turns_remaining; - this.turnsRemainingOnDeath = player.turns_remaining_on_death; - this.drugCount = player.drug_count; - this.bagLimit = player.bag_limit; - this.locationId = - player.location_id === "0x0" ? undefined : player.location_id; - this.status = player.status; - this.drugs = drugs; - } - - static create(edges: EntityEdge[]): PlayerEntity | undefined { - if (!edges || edges.length === 0) return undefined; - - // player component - const playerComponent = edges.find((edge) => { - return edge.node?.components?.some( - (component) => component?.__typename === "Player", - ); - })?.node?.components?.[0] as Player; - - // drug entities - const drugEdges = edges.filter((edge) => - edge.node?.components?.find( - (component) => component?.__typename === "Drug", - ), - ); - - const drugs: Drug[] = drugEdges.map((edge) => { - const drugComponent = edge.node?.components?.find( - (component) => component?.__typename === "Drug", - ) as DrugType; - - return { - id: drugComponent.drug_id, - quantity: drugComponent.quantity, - }; - }); - - if (!playerComponent) return undefined; - - return new PlayerEntity(playerComponent, drugs); - } -} - -export interface PlayerInterface { - player?: PlayerEntity; - isFetched: boolean; -} - -export const usePlayerEntity = ({ - gameId, - address, -}: { - gameId?: string; - address?: string; -}): PlayerInterface => { - // TODO: remove leading zeros in address, maybe implemented in torii - const { data, isFetched } = usePlayerEntityQuery( - { gameId: gameId || "", playerId: address || "" }, - { - enabled: !!gameId && !!address, - refetchInterval: REFETCH_INTERVAL, // TODO: long polling, - }, - ); - - const player = useMemo(() => { - return PlayerEntity.create(data?.entities?.edges as EntityEdge[]); - }, [data]); - - return { - player, - isFetched, - }; -}; diff --git a/web/src/dojo/events.ts b/web/src/dojo/events.ts index 570ba98d1..882596f35 100644 --- a/web/src/dojo/events.ts +++ b/web/src/dojo/events.ts @@ -2,29 +2,31 @@ import { Action, Outcome, PlayerStatus } from "@/dojo/types"; import { GetTransactionReceiptResponse, InvokeTransactionReceiptResponse, + SuccessfulTransactionReceiptResponse, num, + shortString } from "starknet"; -// events are keyed by the hash of the event name -export enum RyoEvents { - GameCreated = "0x230f942bb2087887c3b1dd964c716614bb6df172214f22409fefb734d96a4d2", - PlayerJoined = "0x214916ce0265d355fd91110809ffba7b5e672b108a8beea3dd235818431264b", - Traveled = "0x2c4d9d5da873550ed167876bf0bc2ae300ce1db2eeff67927a85693680a2328", - Bought = "0x20cb8131637de1953a75938db3477cc6b648e5ed255f5b3fe3f0fb9299f0afc", - Sold = "0x123e760cef925d0b4f685db5e1ac87aadaf1ad9f8069122a5bb03353444c386", - AdverseEvent = "0x3605d6af5b08d01a1b42fa16a5f4dc202724f1664912948dcdbe99f5c93d0a0", - Decision = "0xc9315f646a66dd126a564fa76bfdc00bdb47abe0d8187e464f69215dbf432a", - Consequence = "0x1335a57b72e0bcb464f40bf1f140f691ec93e4147b91d0760640c19999b841d", - MarketEvent = "0x255825b8769ab99d6c1bd893b440a284a39d8db18c76b91e8e6a70ef5c7a8e0", -} +import { WorldEvents } from "./generated/contractEvents"; +import { Siren, Truck } from "@/components/icons"; +import { getLocationByType, getDrugByType } from "./helpers" +import { ToastType } from "@/hooks/toast"; export interface BaseEventData { gameId: string; + eventType: WorldEvents; + eventName: string; } export interface AdverseEventData extends BaseEventData { playerId: string; playerStatus: PlayerStatus; + healthLoss: number; + demandPct: number; +} + +export interface AtPawnshopEventData extends BaseEventData { + playerId: string; } export interface CreateEventData extends BaseEventData { @@ -36,21 +38,21 @@ export interface CreateEventData extends BaseEventData { export interface JoinedEventData extends BaseEventData { playerId: string; - locationId: string; + playerName: string; } export interface BoughtEventData extends BaseEventData { playerId: string; drugId: string; quantity: number; - price: number; + cost: number; } export interface SoldEventData extends BaseEventData { playerId: string; drugId: string; quantity: number; - price: number; + payout: number; } export interface DecisionEventData extends BaseEventData { @@ -64,107 +66,223 @@ export interface ConsequenceEventData extends BaseEventData { healthLoss: number; drugLoss: number; cashLoss: number; + dmgDealt: number; + cashEarnt: number; } export interface MarketEventData extends BaseEventData { - gameId: string; locationId: string; drugId: string; increase: boolean; } -export const parseEvent = ( - receipt: GetTransactionReceiptResponse, - eventType: RyoEvents, -): BaseEventData => { +export interface TraveledEventData extends BaseEventData { + playerId: string; + turn: number; + increase: boolean; + fromLocation: string; + toLocation: string; +} + +export interface BoughtItemEventData extends BaseEventData { + playerId: string; + itemId: string; + level: number; + cost: number; +} + +export interface GameOverEventData extends BaseEventData { + playerId: string; + playerName: string; + turn: number; + cash: number; +} + + +export const parseAllEvents = (receipt: GetTransactionReceiptResponse) => { if (receipt.status === "REJECTED") { throw new Error(`transaction REJECTED`); } + if (receipt.status === "REVERTED") { + throw new Error(`transaction REVERTED`); + } - const raw = receipt.events?.find((e) => e.keys[0] === eventType); + const flatEvents = parseEvents(receipt as SuccessfulTransactionReceiptResponse) + return flatEvents +} - if (!raw) { - throw new Error(`event not found`); - } +export const parseEvents = (receipt: SuccessfulTransactionReceiptResponse) => { + const parsed = receipt.events.map(e => parseEvent(e)) + return parsed +} + +export const parseEventsByEventType = (receipt: SuccessfulTransactionReceiptResponse, eventType: WorldEvents) => { + const events = receipt.events.filter(e => e.keys[0] === eventType) + const parsed = events.map(e => parseEvent(e)) + return parsed +} - switch (eventType) { - case RyoEvents.GameCreated: +export type ParseEventResult = ReturnType; + +export const parseEvent = (raw: any) => { + + switch (raw.keys[0]) { + case WorldEvents.GameCreated: return { + eventType: WorldEvents.GameCreated, + eventName: "GameCreated", gameId: num.toHexString(raw.data[0]), creator: num.toHexString(raw.data[1]), startTime: Number(raw.data[2]), - maxTurns: Number(raw.data[3]), - maxPlayers: Number(raw.data[4]), } as CreateEventData; - case RyoEvents.AdverseEvent: + case WorldEvents.AdverseEvent: return { - gameId: num.toHexString(raw.data[0]), - playerId: num.toHexString(raw.data[1]), - playerStatus: Number(raw.data[2]), + eventType: WorldEvents.AdverseEvent, + eventName: "AdverseEvent", + gameId: num.toHexString(raw.keys[1]), + playerId: num.toHexString(raw.keys[2]), + playerStatus: shortString.decodeShortString(raw.data[0]), + healthLoss: Number(raw.data[1]), + demandPct: Number(raw.data[2]), } as AdverseEventData; - case RyoEvents.PlayerJoined: + case WorldEvents.AtPawnshop: return { - gameId: num.toHexString(raw.data[0]), - playerId: num.toHexString(raw.data[1]), + eventType: WorldEvents.AtPawnshop, + eventName: "AtPawnshop", + gameId: num.toHexString(raw.keys[1]), + playerId: num.toHexString(raw.keys[2]), + } as AtPawnshopEventData; + + case WorldEvents.PlayerJoined: + return { + eventType: WorldEvents.PlayerJoined, + eventName: "PlayerJoined", + gameId: num.toHexString(raw.keys[1]), + playerId: num.toHexString(raw.keys[2]), + playerName: shortString.decodeShortString(raw.data[0]), } as JoinedEventData; - case RyoEvents.Decision: + + case WorldEvents.Decision: return { - gameId: num.toHexString(raw.data[0]), - playerId: num.toHexString(raw.data[1]), - action: Number(raw.data[2]), + eventType: WorldEvents.Decision, + eventName: "Decision", + gameId: num.toHexString(raw.keys[1]), + playerId: num.toHexString(raw.keys[2]), + action: Number(raw.data[0]), } as DecisionEventData; - case RyoEvents.Consequence: + + case WorldEvents.Consequence: return { - gameId: num.toHexString(raw.data[0]), - playerId: num.toHexString(raw.data[1]), - outcome: Number(raw.data[2]), - healthLoss: Number(raw.data[3]), - drugLoss: Number(raw.data[4]), - cashLoss: Number(raw.data[5]), + eventType: WorldEvents.Consequence, + eventName: "Consequence", + gameId: num.toHexString(raw.keys[1]), + playerId: num.toHexString(raw.keys[2]), + outcome: Number(raw.data[0]), + healthLoss: Number(raw.data[1]), + drugLoss: Number(raw.data[2]), + cashLoss: Number(raw.data[3]), + dmgDealt: Number(raw.data[4]), + cashEarnt: Number(raw.data[5]), } as ConsequenceEventData; - case RyoEvents.Traveled: - case RyoEvents.Bought: - case RyoEvents.Sold: - case RyoEvents.MarketEvent: - throw new Error(`event parse not implemented: ${eventType}`); - } -}; + case WorldEvents.MarketEvent: + return { + eventType: WorldEvents.MarketEvent, + eventName: "MarketEvent", + gameId: num.toHexString(raw.data[0]), + locationId: num.toHexString(raw.data[1]), + drugId: num.toHexString(raw.data[2]), + increase: raw.data[3] === "0x0" ? false : true, + } as MarketEventData; -// temps dirty solution, will change when torii index custom events -export const parseEvents = ( - receipt: GetTransactionReceiptResponse, - eventType: RyoEvents, -): BaseEventData[] => { + case WorldEvents.Traveled: + return { + eventType: WorldEvents.Traveled, + eventName: "Traveled", + gameId: num.toHexString(raw.keys[1]), + playerId: num.toHexString(raw.keys[2]), + turn: Number(raw.data[0]), + fromLocation: shortString.decodeShortString(raw.data[1]), + toLocation: shortString.decodeShortString(raw.data[2]), + } as TraveledEventData; + + case WorldEvents.Bought: + return { + eventType: WorldEvents.Bought, + eventName: "Bought", + gameId: num.toHexString(raw.keys[1]), + playerId: num.toHexString(raw.keys[2]), + drugId: num.toHexString(raw.data[0]), + quantity: Number(raw.data[1]), + cost: Number(raw.data[2]), + } as BoughtEventData; + + case WorldEvents.Sold: + return { + eventType: WorldEvents.Sold, + eventName: "Sold", + gameId: num.toHexString(raw.keys[1]), + playerId: num.toHexString(raw.keys[2]), + drugId: num.toHexString(raw.data[0]), + quantity: Number(raw.data[1]), + payout: Number(raw.data[2]), + } as SoldEventData; + + case WorldEvents.BoughtItem: + return { + eventType: WorldEvents.BoughtItem, + eventName: "BoughtItem", + gameId: num.toHexString(raw.keys[1]), + playerId: num.toHexString(raw.keys[2]), + itemId: num.toHexString(raw.data[0]), + level: Number(raw.data[1]), + cost: Number(raw.data[2]), + } as BoughtItemEventData; + + case WorldEvents.GameOver: + return { + eventType: WorldEvents.GameOver, + eventName: "GameOver", + gameId: num.toHexString(raw.keys[1]), + playerId: num.toHexString(raw.keys[2]), + playerName: shortString.decodeShortString(raw.data[0]), + playerStatus: shortString.decodeShortString(raw.data[1]), + turn: Number(raw.data[2]), + cash: Number(raw.data[3]), + } as GameOverEventData; - if (receipt.status === "REJECTED") { - throw new Error(`transaction REJECTED`); - } - const rawEvents = receipt.events?.filter((e) => e.keys[0] === eventType); - if (rawEvents.length === 0) { - throw new Error(`event not found`); - } - const parsed = []; - - for (let raw of rawEvents) { - switch (eventType) { - case RyoEvents.MarketEvent: - parsed.push({ - gameId: num.toHexString(raw.data[0]), - locationId: num.toHexString(raw.data[1]), - drugId: num.toHexString(raw.data[2]), - increase: raw.data[3] === "0x0" ? false : true, - } as MarketEventData); - break; - - default: - throw new Error(`event parse not implemented: ${eventType}`); - } + default: + // console.log(`event parse not implemented: ${raw.keys[0]}`) + //throw new Error(`event parse not implemented: ${eventType}`); + return { + gameId: undefined, + eventType: raw.keys[0], + eventName: raw.keys[0], + } + break; } - return parsed +} + -}; +export function displayMarketEvents(events: MarketEventData[], toaster: ToastType) { + // market events + for (let event of events) { + const e = event as MarketEventData; + const msg = e.increase + ? `Pigs seized ${getDrugByType(Number(e.drugId))?.name} in ${getLocationByType(Number(e.locationId))?.name + }` + : `A shipment of ${getDrugByType(Number(e.drugId))?.name} has arrived to ${getLocationByType(Number(e.locationId))?.name + }`; + const icon = e.increase ? Siren : Truck; + toaster.toast({ + message: msg, + icon: icon, + // link: `http://amazing_explorer/${hash}`, + duration: 6000, + }); + } +} \ No newline at end of file diff --git a/web/src/dojo/generated/contractEvents.ts b/web/src/dojo/generated/contractEvents.ts new file mode 100644 index 000000000..0310b1474 --- /dev/null +++ b/web/src/dojo/generated/contractEvents.ts @@ -0,0 +1,117 @@ +/* Autogenerated file. Do not edit manually. */ + +import { Type as RecsType } from "@latticexyz/recs"; +import { GetTransactionReceiptResponse, Contract } from "starknet"; + +export enum WorldEvents { + Decision = "0xc9315f646a66dd126a564fa76bfdc00bdb47abe0d8187e464f69215dbf432a", + Consequence = "0x1335a57b72e0bcb464f40bf1f140f691ec93e4147b91d0760640c19999b841d", + GameOver = "0x165460ded86991fa560a0d331810f83651da90c5df6d4b61357c3b3807ff41c", + GameCreated = "0x230f942bb2087887c3b1dd964c716614bb6df172214f22409fefb734d96a4d2", + PlayerJoined = "0x214916ce0265d355fd91110809ffba7b5e672b108a8beea3dd235818431264b", + BoughtItem = "0x96f1e086de05db8162b5bf8e95b3ff061eeb8a5a88750a793a297379dd74ea", + DroppedItem = "0x2abc912df1c0f1fee176c373767d13b5e7e1fcdd11f8e44714334335b1ed653", + Bought = "0x20cb8131637de1953a75938db3477cc6b648e5ed255f5b3fe3f0fb9299f0afc", + Sold = "0x123e760cef925d0b4f685db5e1ac87aadaf1ad9f8069122a5bb03353444c386", + Traveled = "0x2c4d9d5da873550ed167876bf0bc2ae300ce1db2eeff67927a85693680a2328", + AdverseEvent = "0x3605d6af5b08d01a1b42fa16a5f4dc202724f1664912948dcdbe99f5c93d0a0", + MarketEvent = "0x255825b8769ab99d6c1bd893b440a284a39d8db18c76b91e8e6a70ef5c7a8e0", + AtPawnshop = "0x32bd5f84a36928d15d6fee2bf7ac959c1443e069aac774e6e00e596dec31a65", +} + +export interface DecisionData { + game_id: RecsType.Number; + player_id: RecsType.String; + action: RecsType.String; +} + +export interface ConsequenceData { + game_id: RecsType.Number; + player_id: RecsType.String; + outcome: RecsType.String; + health_loss: RecsType.Number; + drug_loss: RecsType.Number; + cash_loss: RecsType.BigInt; + dmg_dealt: RecsType.Number; + cash_earnt: RecsType.BigInt; +} + +export interface GameOverData { + game_id: RecsType.Number; + player_id: RecsType.String; + player_name: RecsType.BigInt; + player_status: RecsType.String; + turn: RecsType.Number; + cash: RecsType.BigInt; +} + +export interface GameCreatedData { + game_id: RecsType.Number; + game_mode: RecsType.String; + creator: RecsType.String; + start_time: RecsType.Number; +} + +export interface PlayerJoinedData { + game_id: RecsType.Number; + player_id: RecsType.String; + player_name: RecsType.BigInt; +} + +export interface BoughtItemData { + game_id: RecsType.Number; + player_id: RecsType.String; + item_id: RecsType.String; + level: RecsType.Number; + cost: RecsType.Number; +} + +export interface DroppedItemData { + game_id: RecsType.Number; + player_id: RecsType.String; + item_id: RecsType.String; +} + +export interface BoughtData { + game_id: RecsType.Number; + player_id: RecsType.String; + drug_id: RecsType.String; + quantity: RecsType.Number; + cost: RecsType.BigInt; +} + +export interface SoldData { + game_id: RecsType.Number; + player_id: RecsType.String; + drug_id: RecsType.String; + quantity: RecsType.Number; + payout: RecsType.BigInt; +} + +export interface TraveledData { + game_id: RecsType.Number; + player_id: RecsType.String; + turn: RecsType.Number; + from_location: RecsType.String; + to_location: RecsType.String; +} + +export interface AdverseEventData { + game_id: RecsType.Number; + player_id: RecsType.String; + player_status: RecsType.String; + health_loss: RecsType.Number; + demand_pct: RecsType.Number; +} + +export interface MarketEventData { + game_id: RecsType.Number; + location_id: RecsType.String; + drug_id: RecsType.String; + increase: RecsType.Boolean; +} + +export interface AtPawnshopData { + game_id: RecsType.Number; + player_id: RecsType.String; +} diff --git a/web/src/dojo/generated/contractModels.ts b/web/src/dojo/generated/contractModels.ts new file mode 100644 index 000000000..b9c78cf5f --- /dev/null +++ b/web/src/dojo/generated/contractModels.ts @@ -0,0 +1,142 @@ +/* Autogenerated file. Do not edit manually. */ + +import { defineComponent, Type as RecsType, World } from "@latticexyz/recs"; + +export function defineContractComponents(world: World) { + return { + Drug: (() => { + const name = "Drug"; + return defineComponent( + world, + { + quantity: RecsType.Number, + }, + { + metadata: { + name: name, + types: ["usize"], + }, + }, + ); + })(), + Encounter: (() => { + const name = "Encounter"; + return defineComponent( + world, + { + level: RecsType.Number, + health: RecsType.Number, + payout: RecsType.BigInt, + demand_pct: RecsType.Number, + }, + { + metadata: { + name: name, + types: ["u8", "u8", "u128", "u8"], + }, + }, + ); + })(), + Game: (() => { + const name = "Game"; + return defineComponent( + world, + { + game_mode: RecsType.Number, + start_time: RecsType.Number, + max_players: RecsType.Number, + num_players: RecsType.Number, + max_turns: RecsType.Number, + is_finished: RecsType.Boolean, + creator: RecsType.String, + }, + { + metadata: { + name: name, + types: ["GameMode", "u64", "usize", "usize", "usize", "bool", "ContractAddress"], + }, + }, + ); + })(), + Item: (() => { + const name = "Item"; + return defineComponent( + world, + { + level: RecsType.Number, + name: RecsType.BigInt, + value: RecsType.Number, + }, + { + metadata: { + name: name, + types: ["u8", "felt252", "usize"], + }, + }, + ); + })(), + Market: (() => { + const name = "Market"; + return defineComponent( + world, + { + cash: RecsType.BigInt, + quantity: RecsType.Number, + }, + { + metadata: { + name: name, + types: ["u128", "usize"], + }, + }, + ); + })(), + Player: (() => { + const name = "Player"; + return defineComponent( + world, + { + name: RecsType.BigInt, + avatar_id: RecsType.Number, + status: RecsType.Number, + location_id: RecsType.Number, + next_location_id: RecsType.Number, + turn: RecsType.Number, + max_turns: RecsType.Number, + max_items: RecsType.Number, + cash: RecsType.BigInt, + health: RecsType.Number, + drug_count: RecsType.Number, + attack: RecsType.Number, + defense: RecsType.Number, + transport: RecsType.Number, + speed: RecsType.Number, + wanted: RecsType.Number, + }, + { + metadata: { + name: name, + types: [ + "felt252", + "u8", + "PlayerStatus", + "LocationEnum", + "LocationEnum", + "usize", + "usize", + "u8", + "u128", + "u8", + "usize", + "usize", + "usize", + "usize", + "usize", + "u8", + ], + }, + }, + ); + })(), + }; +} diff --git a/web/src/dojo/helpers.ts b/web/src/dojo/helpers.ts index e9eb0c4a8..ee056b66d 100644 --- a/web/src/dojo/helpers.ts +++ b/web/src/dojo/helpers.ts @@ -17,60 +17,82 @@ import { } from "@/components/icons/drugs"; import { + Action, Drug, DrugInfo, DrugMarket, + ItemEnum, + ItemTextEnum, Location, LocationInfo, Outcome, OutcomeInfo, PlayerStatus, + ShopItemInfo } from "./types"; import { getMuggerResponses, getCopResponses } from "@/responses"; +import { + Trenchcoat, + Kevlar, + Shoes, + Glock, + Knife, + Uzi, + Backpack, + Bicycle, + Dufflebag, + Fannypack, + Kneepads, + Leatherjacket, + Skateboard, +} from "@/components/icons/items"; +import { Siren, Truck } from "@/components/icons"; +import { ToastType } from "@/hooks/toast"; + export const locations: LocationInfo[] = [ - { - type: Location.Central, - name: "Central Park", - slug: "central", - id: "0x43656e7472616c205061726b", - icon: CentralPark, - }, { type: Location.Queens, name: "Queens", slug: "queens", - id: "0x517565656e73", + id: "Queens", icon: Queens, }, { type: Location.Bronx, name: "The Bronx", slug: "bronx", - id: "0x5468652042726f6e78", + id: "Bronx", icon: Bronx, }, + { + type: Location.Brooklyn, + name: "Brooklyn", + slug: "brooklyn", + id: "Brooklyn", + icon: Brooklyn, + }, { type: Location.Jersey, name: "Jersey City", slug: "jersey", - id: "0x4a65727365792043697479", + id: "Jersey", icon: Manhattan, }, + { + type: Location.Central, + name: "Central Park", + slug: "central", + id: "Central", + icon: CentralPark, + }, { type: Location.Coney, name: "Coney Island", slug: "coney", - id: "0x436f6e65792049736c616e64", + id: "Coney", icon: ConeyIsland, }, - { - type: Location.Brooklyn, - name: "Brooklyn", - slug: "brooklyn", - id: "0x42726f6f6b6c796e", - icon: Brooklyn, - }, ]; const drugs: DrugInfo[] = [ @@ -78,86 +100,103 @@ const drugs: DrugInfo[] = [ type: Drug.Ludes, name: "Ludes", slug: "ludes", - id: "0x4c75646573", + id: "Ludes", icon: Ludes, }, { type: Drug.Speed, name: "Speed", slug: "speed", - id: "0x5370656564", + id: "Speed", icon: Speed, }, { type: Drug.Weed, name: "Weed", slug: "weed", - id: "0x57656564", + id: "Weed", icon: Weed, }, { type: Drug.Acid, name: "Acid", slug: "acid", - id: "0x41636964", + id: "Acid", icon: Acid, }, { type: Drug.Heroin, name: "Heroin", slug: "heroin", - id: "0x4865726f696e", + id: "Heroin", icon: Heroin, }, { type: Drug.Cocaine, name: "Cocaine", slug: "cocaine", - id: "0x436f6361696e65", + id: "Cocaine", icon: Cocaine, }, ]; export const outcomes: OutcomeInfo[] = [ { + title: "You", name: "Paid the Cop", type: Outcome.Paid, status: PlayerStatus.BeingArrested, - imageSrc: "/images/sunset.png", + imageSrc: "/images/events/paid.png", description: "You paid the cop off", getResponse: (isInitial: boolean) => getCopResponses(Outcome.Paid, isInitial), color: "yellow.400", }, { + title: "You", + name: "Paid the Gang", + type: Outcome.Paid, + status: PlayerStatus.BeingMugged, + imageSrc: "/images/events/paid.png", + description: "You paid the gang off", + getResponse: (isInitial: boolean) => + getMuggerResponses(Outcome.Paid, isInitial), + color: "neon.200", + }, + { + title: "You", name: "Escaped", type: Outcome.Escaped, status: PlayerStatus.BeingArrested, - imageSrc: "/images/sunset.png", + imageSrc: "/images/events/escaped.png", getResponse: (isInitial: boolean) => getCopResponses(Outcome.Escaped, isInitial), + description: "You fled to a random location", color: "neon.200", }, { - name: "Paid the Gang", - type: Outcome.Paid, + title: "You", + name: "Escaped", + type: Outcome.Escaped, status: PlayerStatus.BeingMugged, - imageSrc: "/images/sunset.png", - description: "You paid the gang off", + imageSrc: "/images/events/escaped.png", getResponse: (isInitial: boolean) => getMuggerResponses(Outcome.Escaped, isInitial), + description: "You fled to a random location", color: "neon.200", }, { - name: "Escaped", - type: Outcome.Escaped, - status: PlayerStatus.BeingMugged, - imageSrc: "/images/sunset.png", + title: "You", + name: "Got killed by the Cops", + type: Outcome.Died, + status: PlayerStatus.BeingArrested, + imageSrc: "/images/events/fought.png", getResponse: (isInitial: boolean) => - getMuggerResponses(Outcome.Escaped, isInitial), - color: "neon.200", + getCopResponses(Outcome.Died, isInitial), + color: "red", }, { + title: "You", name: "Got killed by the Gang", type: Outcome.Died, status: PlayerStatus.BeingMugged, @@ -167,16 +206,160 @@ export const outcomes: OutcomeInfo[] = [ color: "red", }, { - name: "Got killed by the Cops", - type: Outcome.Died, + title: "You are", + name: "Victorious!", + type: Outcome.Victorious, status: PlayerStatus.BeingArrested, - imageSrc: "/images/events/fought.png", + imageSrc: "/images/events/victorious.png", getResponse: (isInitial: boolean) => - getMuggerResponses(Outcome.Died, isInitial), - color: "red", + getCopResponses(Outcome.Victorious, isInitial), + color: "neon.200", }, + { + title: "You are", + name: "Victorious!", + type: Outcome.Victorious, + status: PlayerStatus.BeingMugged, + imageSrc: "/images/events/victorious.png", + getResponse: (isInitial: boolean) => + getMuggerResponses(Outcome.Victorious, isInitial), + color: "neon.200", + }, + + ]; + + +export const shopItemInfos: ShopItemInfo[] = [ + // attack + { + id: ItemTextEnum.Attack, + typeText: ItemTextEnum.Attack, + type: ItemEnum.Attack, + level: 1, + icon: Knife, + value: 0, + name: "Knife", + cost: 0, + }, + { + id: ItemTextEnum.Attack, + typeText: ItemTextEnum.Attack, + type: ItemEnum.Attack, + level: 2, + icon: Glock, + value: 0, + name: "Glock", + cost: 0, + }, + { + id: ItemTextEnum.Attack, + typeText: ItemTextEnum.Attack, + type: ItemEnum.Attack, + level: 3, + icon: Uzi, + value: 0, + name: "Uzi", + cost: 0, + }, + + // transport + { + id: ItemTextEnum.Transport, + typeText: ItemTextEnum.Transport, + type: ItemEnum.Transport, + level: 1, + icon: Fannypack, + value: 0, + name: "Fanny Pack", + cost: 0, + }, + { + id: ItemTextEnum.Transport, + typeText: ItemTextEnum.Transport, + type: ItemEnum.Transport, + level: 2, + icon: Backpack, + value: 0, + name: "Backpack", + cost: 0, + }, + { + id: ItemTextEnum.Transport, + typeText: ItemTextEnum.Transport, + type: ItemEnum.Transport, + level: 3, + icon: Dufflebag, + value: 0, + name: "Duffle Bag", + cost: 0, + }, + + // defense + { + id: ItemTextEnum.Defense, + typeText: ItemTextEnum.Defense, + type: ItemEnum.Defense, + level: 1, + icon: Kneepads, + value: 0, + name: "Knee Pads", + cost: 0, + }, + { + id: ItemTextEnum.Defense, + typeText: ItemTextEnum.Defense, + type: ItemEnum.Defense, + level: 2, + icon: Leatherjacket, + value: 0, + name: "Leather Jacket", + cost: 0, + }, + { + id: ItemTextEnum.Defense, + typeText: ItemTextEnum.Defense, + type: ItemEnum.Defense, + level: 3, + icon: Kevlar, + value: 0, + name: "Kevlar", + cost: 0, + }, + // speed + { + id: ItemTextEnum.Speed, + typeText: ItemTextEnum.Speed, + type: ItemEnum.Speed, + level: 1, + icon: Shoes, + value: 0, + name: "Shoes", + cost: 0, + }, + { + id: ItemTextEnum.Speed, + typeText: ItemTextEnum.Speed, + type: ItemEnum.Speed, + level: 2, + icon: Skateboard, + value: 0, + name: "Skateboard", + cost: 0, + }, + { + id: ItemTextEnum.Speed, + typeText: ItemTextEnum.Speed, + type: ItemEnum.Speed, + level: 3, + icon: Bicycle, + value: 0, + name: "Bicycle", + cost: 0, + }, +] + function findBy(array: T[], key: keyof T, value: any): T | undefined { return array.find((item) => item[key] === value); } @@ -205,6 +388,69 @@ export function getDrugByType(type: Drug) { return findBy(drugs, "type", type); } +export function getShopItem(id: ItemTextEnum, level: number): ShopItemInfo { + const item = shopItemInfos.find(i => i.id === id && i.level === level); + if (!item) { + throw Error('item not found!'); + } + return item; +} + +export function getShopItemByType(type: ItemEnum, level: number): ShopItemInfo { + const item = shopItemInfos.find(i => i.type == type && i.level === level); + if (!item) { + throw Error('item not found!'); + } + return item; +} + +export function getActionName(action: Action): string { + switch (action) { + case Action.Fight: + return "Fight"; + case Action.Pay: + return "Pay"; + case Action.Run: + return "Run"; + default: + return "?" + } +} + + +export function getOutcomeName(outcome: Outcome): string { + switch (outcome) { + case Outcome.Captured: + return "Captured"; + case Outcome.Died: + return "Died"; + case Outcome.Escaped: + return "Escaped"; + case Outcome.Paid: + return "Paid"; + case Outcome.Victorious: + return "Victorious"; + default: + return "?" + } +} + + +export function getShopItemStatname(typ: ItemTextEnum): string { + switch (typ) { + case ItemTextEnum.Attack: + return "ATK" + case ItemTextEnum.Defense: + return "DEF" + case ItemTextEnum.Transport: + return "INV" + case ItemTextEnum.Speed: + return "SPD" + default: + return "?" + } +} + export function getOutcomeInfo( status: PlayerStatus, type: Outcome, @@ -223,23 +469,7 @@ export function sortDrugMarkets(drugMarkets?: DrugMarket[]): DrugMarket[] { return []; } - const ludes = drugMarkets.find( - (drug) => getDrugById(drug.id)?.type === Drug.Ludes, - )!; - const speed = drugMarkets.find( - (drug) => getDrugById(drug.id)?.type === Drug.Speed, - )!; - const weed = drugMarkets.find( - (drug) => getDrugById(drug.id)?.type === Drug.Weed, - )!; - const acid = drugMarkets.find( - (drug) => getDrugById(drug.id)?.type === Drug.Acid, - )!; - const heroin = drugMarkets.find( - (drug) => getDrugById(drug.id)?.type === Drug.Heroin, - )!; - const cocaine = drugMarkets.find( - (drug) => getDrugById(drug.id)?.type === Drug.Cocaine, - )!; - return [ludes, speed, weed, acid, heroin, cocaine]; + return drugMarkets.sort((a, b) => Number(a.type) - Number(b.type)) } + + diff --git a/web/src/dojo/hooks/useAvailableShopItems.ts b/web/src/dojo/hooks/useAvailableShopItems.ts new file mode 100644 index 000000000..6ee011f52 --- /dev/null +++ b/web/src/dojo/hooks/useAvailableShopItems.ts @@ -0,0 +1,61 @@ +import { useState, useEffect } from "react"; +import { useDojoContext } from "./useDojoContext"; +import { ItemTextEnum, ShopItemInfo } from "../types"; +import { shortString } from "starknet"; +import { getShopItem } from "../helpers"; + +export const useAvailableShopItems = (gameId: string) => { + const { + account, + setup: { + network: { provider, call }, + }, + } = useDojoContext(); + + const [availableShopItems, setAvailableShopItems] = useState([]); + + useEffect(() => { + const update = async () => { + try { + const items = await call( + account!, + "shop", + "available_items", + [Number(gameId), account!.address], + ) as any[]; + + const shopItems = items.map(i => { + const itemInfos = getShopItem(shortString.decodeShortString(i.item_type) as ItemTextEnum, Number(i.level)); + return { + id:i.item_id, + type: itemInfos.type, + typeText: itemInfos.id, + name: shortString.decodeShortString(i.name), + level: Number(i.level), + cost: Number(i.cost), + value: Number(i.value), + icon: itemInfos.icon, + } as ShopItemInfo + }) + + setAvailableShopItems(shopItems) + + } + catch (e) { + console.log(e) + // shop is closed + setAvailableShopItems([]) + } + } + + if (gameId) { + update(); + } + }, [gameId, account, call]) + + return { availableShopItems } + +} + + + diff --git a/web/src/dojo/hooks/useDevtools.ts b/web/src/dojo/hooks/useDevtools.ts new file mode 100644 index 000000000..f7618865b --- /dev/null +++ b/web/src/dojo/hooks/useDevtools.ts @@ -0,0 +1,74 @@ +import { useCallback } from "react"; +import { useDojoContext } from "./useDojoContext"; +import { Action, GameMode, Location, ItemEnum } from "../types"; +import { shortString, GetTransactionReceiptResponse, BigNumberish } from "starknet"; +import { getEvents, setComponentsFromEvents } from "@dojoengine/utils"; +import { parseAllEvents } from "../events"; +import { WorldEvents } from "../generated/contractEvents"; +import { SystemExecuteResult } from "./useSystems"; + +export interface SystemsInterface { + feedLeaderboard: ( + count: number, + ) => Promise; + + // isPending: boolean; + // error?: Error; +} + + +export const useDevtools = (): SystemsInterface => { + const { + burner: { + masterAccount + }, + setup: { + network: { provider, execute, call }, + }, + } = useDojoContext(); + + const executeAndReceipt = useCallback( + async ( + contract: string, + system: string, + callData: BigNumberish[], + ): Promise<{ + hash: string; + receipt: GetTransactionReceiptResponse; + }> => { + + const tx = await execute(masterAccount, contract, system, callData); + const receipt = await masterAccount.waitForTransaction(tx.transaction_hash, { + retryInterval: 100, + }); + + return { + hash: tx.transaction_hash, + receipt + }; + }, + [execute, masterAccount], + ); + + const feedLeaderboard = useCallback( + async (count: number) => { + const { hash, receipt, } = await executeAndReceipt( + "devtools", + "feed_leaderboard", + [count], + ); + + return { + hash, + receipt + }; + }, + [executeAndReceipt], + ); + + + + return { + feedLeaderboard, + }; +}; diff --git a/web/src/dojo/hooks/useDojoContext.ts b/web/src/dojo/hooks/useDojoContext.ts new file mode 100644 index 000000000..93c8bf225 --- /dev/null +++ b/web/src/dojo/hooks/useDojoContext.ts @@ -0,0 +1,12 @@ + +import { DojoContext } from "../context/DojoContext"; +import { useContext } from "react"; + +export const useDojoContext = () => { + const value = useContext(DojoContext); + if (!value) { + throw new Error("useDojoContext must be used within a DojoProvider"); + } + return value; +} + diff --git a/web/src/dojo/hooks/useSystems.ts b/web/src/dojo/hooks/useSystems.ts new file mode 100644 index 000000000..4c985bc5a --- /dev/null +++ b/web/src/dojo/hooks/useSystems.ts @@ -0,0 +1,376 @@ +import { useCallback } from "react"; +import { useDojoContext } from "./useDojoContext"; +import { Action, Drug, GameMode, ShopItemInfo } from "../types"; +import { shortString, GetTransactionReceiptResponse, BigNumberish, SuccessfulTransactionReceiptResponse, RejectedTransactionReceiptResponse, RevertedTransactionReceiptResponse } from "starknet"; +import { getEvents, setComponentsFromEvents } from "@dojoengine/utils"; +import { parseAllEvents, BaseEventData, JoinedEventData, MarketEventData, AdverseEventData, ConsequenceEventData, AtPawnshopEventData } from "../events"; +import { WorldEvents } from "../generated/contractEvents"; +import { Location, ItemEnum } from "../types"; +import { useState } from "react"; +import { useToast } from "@/hooks/toast"; +import { ShopItem } from "../queries/usePlayerEntity"; + +export interface SystemsInterface { + createGame: ( + gameMode: number, + playerName: string, + avatarId: number + ) => Promise; + travel: (gameId: string, locationId: Location) => Promise; + // join: (gameId: string) => Promise; + buy: ( + gameId: string, + locationId: Location, + drugId: Drug, + quantity: number, + ) => Promise; + sell: ( + gameId: string, + locationId: Location, + drugId: Drug, + quantity: number, + ) => Promise; + // setName: (gameId: string, playerName: string) => Promise; + decide: ( + gameId: string, + action: Action, + ) => Promise; + buyItem: ( + gameId: string, itemId: ItemEnum + ) => Promise; + dropItem: ( + gameId: string, itemId: ItemEnum + ) => Promise; + skipShop: ( + gameId: string, + ) => Promise; + + failingTx: () => Promise; + + isPending: boolean; + error?: string; +} + +export interface SystemExecuteResult { + hash: string; + event?: BaseEventData; + events?: BaseEventData[]; + [key: string]: any; +} + + +const sleep = (ms: number) => { + return new Promise(resolve => setTimeout(resolve, ms)); +} + +const tryBetterErrorMsg = (msg: string): string => { + + const failureReasonIndex = msg.indexOf("Failure reason") + if (failureReasonIndex > 0) { + let betterMsg = msg.substring(failureReasonIndex) + const cairoTracebackIndex = betterMsg.indexOf("Cairo traceback") + betterMsg = betterMsg.substring(0, cairoTracebackIndex) + return betterMsg + } + + return msg; + +} + + +export const useSystems = (): SystemsInterface => { + const { + account, + setup: { + network: { provider, execute, call }, + }, + } = useDojoContext(); + + const { toast } = useToast(); + + const [isPending, setIsPending] = useState(false); + const [error, setError] = useState(undefined); + + const executeAndReceipt = useCallback( + async ( + contract: string, + system: string, + callData: BigNumberish[], + ): Promise<{ + hash: string; + receipt: GetTransactionReceiptResponse; + events: any[]; + parsedEvents: any[]; + }> => { + + setError(undefined) + setIsPending(true) + + const tx = await execute(account!, contract, system, callData); + const receipt = await account!.waitForTransaction(tx.transaction_hash, { + retryInterval: 100, + }); + + if (receipt.status === "REJECTED") { + setError("Transaction Rejected") + setIsPending(false) + toast({ + message: tryBetterErrorMsg((receipt as RejectedTransactionReceiptResponse).transaction_failure_reason.error_message), + duration: 20_000, + isError: true + }) + throw Error((receipt as RejectedTransactionReceiptResponse).transaction_failure_reason.error_message) + } + + if (receipt.execution_status === "REVERTED") { + setError("Transaction Reverted") + setIsPending(false) + + toast({ + message: tryBetterErrorMsg((receipt as RevertedTransactionReceiptResponse).revert_reason || 'Transaction Reverted'), + duration: 20_000, + isError: true + }) + throw Error((receipt as RevertedTransactionReceiptResponse).revert_reason || 'Transaction Reverted') + } + + const events = getEvents(receipt); + const parsedEvents = parseAllEvents(receipt); + + //torii too slow indexing... + await sleep(1_000); + + setIsPending(false) + + // useless + // setComponentsFromEvents(contractComponents, events); + + return { + hash: tx?.transaction_hash, + receipt, + events, + parsedEvents, + }; + }, + [execute, account, toast], + ); + + const createGame = useCallback( + async (gameMode: GameMode, playerName: string, avatarId: number) => { + const { hash, events, parsedEvents } = await executeAndReceipt( + "lobby", + "create_game", + [gameMode, shortString.encodeShortString(playerName), avatarId], + ); + + const joinedEvent = parsedEvents.find( + (e) => e.eventType === WorldEvents.PlayerJoined, + ) as JoinedEventData; + + return { + hash, + gameId: joinedEvent.gameId, + }; + }, + [executeAndReceipt], + ); + + const travel = useCallback( + async (gameId: string, locationId: Location) => { + const { hash, events, parsedEvents } = await executeAndReceipt( + "travel", + "travel", + [gameId, locationId], + ); + + const adverseEvent = parsedEvents.find( + (e) => e.eventType === WorldEvents.AdverseEvent, + ) as AdverseEventData + + const atPawnshopEvent = parsedEvents.find( + (e) => e.eventType === WorldEvents.AtPawnshop, + ) as AtPawnshopEventData + + + return { + hash, + event: adverseEvent || atPawnshopEvent, + events: parsedEvents + .filter((e) => e.eventType === WorldEvents.MarketEvent) + .map((e) => e as MarketEventData), + }; + }, + [executeAndReceipt], + ); + + const buy = useCallback( + async ( + gameId: string, + locationId: Location, + drugId: Drug, + quantity: number, + ) => { + + const { hash, events, parsedEvents } = await executeAndReceipt( + "trade", + "buy", + [gameId, locationId, drugId, quantity], + ); + + return { + hash, + }; + }, + [executeAndReceipt], + ); + + const sell = useCallback( + async ( + gameId: string, + locationId: Location, + drugId: Drug, + quantity: number, + ) => { + const { hash, events, parsedEvents } = await executeAndReceipt( + "trade", + "sell", + [gameId, locationId, drugId, quantity], + ); + + return { + hash, + }; + }, + [executeAndReceipt], + ); + + const decide = useCallback( + async (gameId: string, action: Action) => { + const { hash, events, parsedEvents } = await executeAndReceipt( + "decide", + "decide", + [gameId, action], + ); + + const consequenceEvent = parsedEvents.find( + (e) => e.eventType === WorldEvents.Consequence, + ) as ConsequenceEventData + + return { + hash, + event: parsedEvents.find( + (e) => e.eventType === WorldEvents.Consequence, + ) as ConsequenceEventData, + events: parsedEvents + .filter((e) => e.eventType === WorldEvents.MarketEvent) + .map((e) => e as MarketEventData), + }; + }, + [executeAndReceipt], + ); + + const buyItem = useCallback( + async (gameId: string, itemId: ItemEnum) => { + const { hash, events, parsedEvents } = await executeAndReceipt( + "shop", + "buy_item", + [gameId, itemId], + ); + + return { + hash, + events: parsedEvents + .filter((e) => e.eventType === WorldEvents.MarketEvent) + .map((e) => e as MarketEventData), + }; + }, + [executeAndReceipt], + ); + + const dropItem = useCallback( + async (gameId: string, itemId: ItemEnum) => { + const { hash, events, parsedEvents } = await executeAndReceipt( + "shop", + "drop_item", + [gameId, itemId], + ); + + return { + hash, + }; + }, + [executeAndReceipt], + ); + + const skipShop = useCallback( + async (gameId: string) => { + const { hash, events, parsedEvents } = await executeAndReceipt( + "shop", + "skip", + [gameId], + ); + + return { + hash, + events: parsedEvents + .filter((e) => e.eventType === WorldEvents.MarketEvent) + .map((e) => e as MarketEventData), + }; + }, + [executeAndReceipt], + ); + + + + + const failingTx = useCallback( + async () => { + const { hash, events, parsedEvents } = await executeAndReceipt( + "devtools", + "failing_tx", + [], + ); + + return { + hash, + }; + }, + [executeAndReceipt], + ); + + + // const setName = useCallback( + // async (gameId: string, playerName: string) => { + // const { hash, events, parsedEvents } = await executeAndReceipt( + // "lobby", + // "set_name", + // [gameId, shortString.encodeShortString(playerName)], + // ); + + // return { + // hash, + // }; + // }, + // [executeAndReceipt], + // ); + + + return { + createGame, + // join, + travel, + buy, + sell, + //setName, + decide, + buyItem, + dropItem, + skipShop, + + // devtool + failingTx, + + error, + isPending, + }; +}; diff --git a/web/src/dojo/index.tsx b/web/src/dojo/index.tsx deleted file mode 100644 index 1b5a4d438..000000000 --- a/web/src/dojo/index.tsx +++ /dev/null @@ -1,117 +0,0 @@ -import { RYO_WORLD_ADDRESS } from "@/constants"; -import { - createContext, - ReactNode, - useCallback, - useContext, - useState, -} from "react"; -import { - Account, - BigNumberish, - CallData, - shortString, - TransactionFinalityStatus, -} from "starknet"; -import { useBurner } from "../hooks/burner"; - -export const SCALING_FACTOR = 10000; -export const REFETCH_INTERVAL = 1000; // really need graphql subscriptions... - -interface DojoInterface { - account?: Account; - isPending: boolean; - isBurnerDeploying: boolean; - error?: Error; - createBurner: () => Promise; - execute: (systemName: string, params: BigNumberish[]) => Promise; - call: () => void; -} - -const DojoContext = createContext(null!); - -export function useDojo() { - const context = useContext(DojoContext); - if (!context) { - throw new Error("useDojo must be used within a DojoProvider"); - } - return useContext(DojoContext); -} - -export function DojoProvider({ - children, -}: { - children?: ReactNode; -}): JSX.Element { - const [isPending, setIsPending] = useState(false); - const [error, setError] = useState(); - const { - account, - create: createBurner, - isDeploying: isBurnerDeploying, - } = useBurner(); - - const execute = useCallback( - async (systemName: string, params: BigNumberish[]) => { - if (!account) { - throw new Error("No account connected"); - } - - setIsPending(true); - setError(undefined); - - return account - .execute( - { - contractAddress: RYO_WORLD_ADDRESS, - entrypoint: "execute", - calldata: CallData.compile([ - shortString.encodeShortString(systemName), - params.length, - ...params, - ]), - }, - undefined, - { maxFee: 0 }, - ) - .then(async ({ transaction_hash }) => { - await account.waitForTransaction(transaction_hash, { - retryInterval: 1000, - successStates: [TransactionFinalityStatus.ACCEPTED_ON_L2], - }); - - console.log("transaction hash: " + transaction_hash); - - return transaction_hash; - }) - .catch((e) => { - console.error(e); - setError(e); - throw e; - }) - .finally(() => setIsPending(false)); - }, - [account], - ); - - // TODO: implement - const call = useCallback(() => { - console.error("not implemented"); - }, []); - - return ( - - {children} - - ); -} diff --git a/web/src/dojo/queries/useGlobalScores.tsx b/web/src/dojo/queries/useGlobalScores.tsx new file mode 100644 index 000000000..7378ef252 --- /dev/null +++ b/web/src/dojo/queries/useGlobalScores.tsx @@ -0,0 +1,79 @@ +import { PlayerEdge, useGlobalScoresQuery, useInfiniteGlobalScoresQuery } from "@/generated/graphql"; +import { useCallback, useEffect, useState, useMemo } from "react"; + +import { shortString } from "starknet"; +import { SCALING_FACTOR } from "../constants"; + +export type Score = { + gameId: string; + playerId: string; + name?: string; + avatarId: number; + cash: number; + dead: boolean; + health: number; +}; + +export class GlobalScores { + scores: Score[]; + constructor(scores: Score[]) { + this.scores = scores; + } + + static create(edges: PlayerEdge[]): Score[] | undefined { + if (!edges || edges.length === 0) return undefined; + + return edges.map((edge) => { + const playerModel = edge.node; + + return { + gameId: `0x${playerModel?.game_id.toString(16)}`, + playerId: playerModel?.player_id, + name: shortString.decodeShortString(playerModel?.name), + avatarId: playerModel?.avatar_id, + cash: Math.floor(Number(BigInt(edge.node?.cash) / BigInt(SCALING_FACTOR))), + dead: Number(edge.node?.health) === 0, + health: Number(edge.node?.health), + }; + }); + } +} + +export const useGlobalScoresIninite = (offset?: number, limit?: number) => { + const [scores, setScores] = useState([]); + // Gets top 10 + const { data, isFetched, refetch, hasNextPage, fetchNextPage, ...props } = useInfiniteGlobalScoresQuery( + { + limit: limit || 10, + }, + { + getNextPageParam: (lastPage) => { + const edgesCount = lastPage.playerModels?.edges?.length || 0; + if (edgesCount === 0) return undefined; + const lastItem = lastPage.playerModels?.edges![edgesCount - 1]; + return { + limit: 10, + cursor: lastItem && lastItem.cursor, + }; + }, + }, + ); + + useEffect(() => { + if (data?.pages.length == 0) return; + const pageCount = data?.pages.length || 0; + const new_scores = GlobalScores.create(data?.pages[pageCount - 1].playerModels?.edges as PlayerEdge[]); + + if (new_scores) { + setScores(scores.concat(new_scores)); + } + }, [data?.pages]); + + return { + scores, + isFetched, + refetch, + hasNextPage, + fetchNextPage, + }; +}; diff --git a/web/src/dojo/queries/useLocationEntity.tsx b/web/src/dojo/queries/useLocationEntity.tsx new file mode 100644 index 000000000..d987da295 --- /dev/null +++ b/web/src/dojo/queries/useLocationEntity.tsx @@ -0,0 +1,87 @@ +import { Market, useLocationEntitiesQuery, World__EntityEdge } from "@/generated/graphql"; +import { useMemo } from "react"; +import { num } from "starknet"; +import { REFETCH_INTERVAL, SCALING_FACTOR } from "../constants"; +import { Location, DrugMarket } from "../types"; +import { getLocationById, getLocationByType, getDrugByType } from "../helpers"; + +export class LocationEntity { + id: string; // id is hex encoded location name + drugMarkets: DrugMarket[]; + + constructor(id: string, drugMarkets: DrugMarket[]) { + this.id = id; + this.drugMarkets = drugMarkets; + } + + static create(edges: World__EntityEdge[]): LocationEntity | undefined { + if (!edges || edges.length === 0) return undefined; + + // we know both location and risk model uses key[1] as locationId + //const keys = edges[0].node?.keys.split('/') || []; + const keys = edges[0].node?.keys || []; + const locationId = getLocationByType(Number(keys[1]!))!.id; + + const drugMarketEntities = edges.filter((edge) => { + return edge.node?.models?.find((model) => model?.__typename === "Market"); + }) as World__EntityEdge[]; + + const drugMarkets: DrugMarket[] = drugMarketEntities.map((edge) => { + const marketModel = edge.node?.models?.find((model) => model?.__typename === "Market") as Market; + + // const keys = edge.node?.keys.split('/') || []; + const keys = edge.node?.keys || []; + const drugId = getDrugByType(Number(keys[2]!))!.id; + const drugType = getDrugByType(Number(keys[2]!))!.type; + + const price = Number(marketModel.cash) / Number(marketModel.quantity) / SCALING_FACTOR; + + return { + id: drugId, + type: drugType, + price: price, + marketPool: marketModel, + }; + }); + + if (drugMarkets.length === 0) return undefined; + + return { + id: locationId, + drugMarkets: drugMarkets, + }; + } +} + +export interface LocationInterface { + location?: LocationEntity; + isFetched: boolean; +} + +export const useLocationEntity = ({ + gameId, + locationId, +}: { + gameId?: string; + locationId?: string; +}): LocationInterface => { + const { data, isFetched } = useLocationEntitiesQuery( + { + gameId: gameId || "", + locationId: `0x${getLocationById(locationId)?.type.toString(16)}` || "", + }, + { + enabled: !!gameId && !!locationId, + refetchInterval: REFETCH_INTERVAL, + }, + ); + + const location = useMemo(() => { + return LocationEntity.create(data?.entities?.edges as World__EntityEdge[]); + }, [data]); + + return { + location, + isFetched, + }; +}; diff --git a/web/src/dojo/components/useMarkets.tsx b/web/src/dojo/queries/useMarkets.tsx similarity index 81% rename from web/src/dojo/components/useMarkets.tsx rename to web/src/dojo/queries/useMarkets.tsx index 5cad76970..6da2cd766 100644 --- a/web/src/dojo/components/useMarkets.tsx +++ b/web/src/dojo/queries/useMarkets.tsx @@ -1,8 +1,9 @@ import { Market, MarketEdge, useMarketPricesQuery } from "@/generated/graphql"; import { useEffect, useMemo, useState } from "react"; import { num } from "starknet"; -import { REFETCH_INTERVAL, SCALING_FACTOR } from ".."; +import { REFETCH_INTERVAL, SCALING_FACTOR } from "../constants"; import { LocationPrices, DrugMarket } from "../types"; +import { getDrugById } from "../helpers"; export class MarketPrices { locationPrices: LocationPrices; @@ -18,13 +19,15 @@ export class MarketPrices { for (let edge of edges) { const node = edge.node; - const locationId = num.toHexString(node?.location_id); - const drugId = num.toHexString(node?.drug_id); + const locationId = node?.location_id; + const drugId = node?.drug_id; + const drugType = getDrugById(drugId)!.type; const price = Number(node?.cash) / Number(node?.quantity) / SCALING_FACTOR; const drugMarket: DrugMarket = { id: drugId, + type: drugType, price: price, marketPool: node as Market, }; @@ -59,7 +62,7 @@ export const useMarketPrices = ({ ); const locationPrices = useMemo(() => { - return MarketPrices.create(data?.marketComponents?.edges as MarketEdge[]); + return MarketPrices.create(data?.marketModels?.edges as MarketEdge[]); }, [data]); return { diff --git a/web/src/dojo/queries/usePlayerEntity.tsx b/web/src/dojo/queries/usePlayerEntity.tsx new file mode 100644 index 000000000..a483f381b --- /dev/null +++ b/web/src/dojo/queries/usePlayerEntity.tsx @@ -0,0 +1,234 @@ +import { Player, Drug as DrugType, usePlayerEntityQuery, World__EntityEdge, Item as ItemType, Encounter } from "@/generated/graphql"; +import { useEffect, useMemo, useState } from "react"; +import { REFETCH_INTERVAL, SCALING_FACTOR } from "../constants"; +import { PlayerStatus, ItemEnum, ItemTextEnum } from "../types"; +import { shortString } from "starknet"; + +type Drug = { + id: string; + quantity: number; +}; + +export type ShopItem = { + id: ItemTextEnum; // ItemEnum as string + level: number; + name: string; + value: number; +}; + +export class PlayerEntity { + name: string; + avatarId: number; + cash: number; + health: number; + turn: number; + maxTurns: number; + maxItems: number; + drugCount: number; + locationId: string; + nextLocationId?: string; + status: PlayerStatus; + + drugs: Drug[]; + items: ShopItem[]; + encounters: Encounter[]; + + attack: number; + defense: number; + transport: number; + speed: number; + + wanted: number; + + constructor(player: Player, drugs: Drug[], items: ShopItem[], encounters: Encounter[]) { + this.name = shortString.decodeShortString(player.name); + this.avatarId = player.avatar_id; + this.cash = Number(player.cash) / SCALING_FACTOR; + this.health = player.health; + this.turn = player.turn; + this.maxTurns = player.max_turns; + this.maxItems = player.max_items; + + this.drugCount = player.drug_count; + + this.locationId = player.location_id === "Home" ? undefined : player.location_id; + this.nextLocationId = player.next_location_id === "Home" ? undefined : player.next_location_id; + this.status = player.status; + + this.attack = player.attack; + this.defense = player.defense; + this.transport = player.transport; + this.speed = player.speed; + + this.wanted = player.wanted; + + this.drugs = drugs; + this.items = items; + this.encounters = encounters; + } + + update(player: Player) { + this.cash = Number(player.cash) / SCALING_FACTOR; + this.health = player.health; + this.turn = player.turn; + this.drugCount = player.drug_count; + this.locationId = player.location_id === "Home" ? undefined : player.location_id; + this.status = player.status; + this.wanted = player.wanted; + return this; + } + + updateDrug(newDrug: DrugType) { + const drug = this.drugs.find((i) => i.id === newDrug.drug_id); + if (drug) { + drug.quantity = newDrug.quantity; + } else { + this.drugs.push({ + id: newDrug.drug_id, + quantity: newDrug.quantity, + }); + } + return this; + } + + updateItem(newItem: ItemType) { + const item = this.items.find((i) => i.id === newItem.item_id); + if (item) { + item.level = newItem.level; + item.value = newItem.value; + item.name = shortString.decodeShortString(newItem.name); + } else { + this.items.push({ + id: newItem.item_id as ItemTextEnum, + level: newItem.level, + name: shortString.decodeShortString(newItem.name), + value: newItem.value, + }); + } + return this; + } + + updateEncounter(newEncounter: Encounter) { + const encounter = this.encounters.find((i) => i.encounter_id === newEncounter.encounter_id); + if (encounter) { + encounter.level = newEncounter.level; + encounter.health = newEncounter.health; + encounter.payout = Number(newEncounter.payout) / SCALING_FACTOR; + } else { + this.encounters.push({ + ...newEncounter, + payout:Number(newEncounter.payout) / SCALING_FACTOR, + }); + } + return this; + } + + getAttack(): number { + const item = this.items.find((i) => i.id === ItemTextEnum.Attack); + if (item) { + return this.attack + item.value; + } + return this.attack; + } + + getDefense(): number { + const item = this.items.find((i) => i.id === ItemTextEnum.Defense); + if (item) { + return this.defense + item.value; + } + return this.defense; + } + + getTransport(): number { + const item = this.items.find((i) => i.id === ItemTextEnum.Transport); + if (item) { + return this.transport + item.value; + } + return this.transport; + } + + getSpeed(): number { + const item = this.items.find((i) => i.id === ItemTextEnum.Speed); + if (item) { + return this.speed + item.value; + } + return this.speed; + } + + + + static create(edges: World__EntityEdge[]): PlayerEntity | undefined { + if (!edges || edges.length === 0) return undefined; + // player model + const playerModel = edges.find((edge) => { + return edge.node?.models?.some((model) => model?.__typename === "Player"); + })?.node?.models?.[0] as Player; + + // TODO: create helpers + // drug entities + const drugEdges = edges.filter((edge) => edge.node?.models?.find((model) => model?.__typename === "Drug")); + + const drugs: Drug[] = drugEdges.map((edge) => { + const drugModel = edge.node?.models?.find((model) => model?.__typename === "Drug") as DrugType; + + return { + id: drugModel.drug_id, + quantity: drugModel.quantity, + }; + }); + + // items + const itemEdges = edges.filter((edge) => edge.node?.models?.find((model) => model?.__typename === "Item")); + + const items: ShopItem[] = itemEdges.map((edge) => { + const itemModel = edge.node?.models?.find((model) => model?.__typename === "Item") as ItemType; + + return { + id: itemModel.item_id as ItemTextEnum, + level: itemModel.level, + name: shortString.decodeShortString(itemModel.name), + value: itemModel.value, + }; + }); + + // encounters + const encounterEdges = edges.filter((edge) => edge.node?.models?.find((model) => model?.__typename === "Encounter")); + + const encounters: Encounter[] = encounterEdges.map((edge) => { + const encounterModel = edge.node?.models?.find((model) => model?.__typename === "Encounter") as Encounter; + return { + ...encounterModel, + payout:Number(encounterModel.payout) / SCALING_FACTOR, + } + }); + + if (!playerModel) return undefined; + + return new PlayerEntity(playerModel, drugs, items, encounters); + } +} + +// export interface PlayerInterface { +// player?: PlayerEntity; +// isFetched: boolean; +// } + +// export const usePlayerEntity = ({ gameId, address }: { gameId?: string; address?: string }): PlayerInterface => { +// // TODO: remove leading zeros in address, maybe implemented in torii +// const { data, isFetched } = usePlayerEntityQuery( +// { gameId: gameId || "", playerId: address || "" }, +// { +// enabled: !!gameId && !!address, +// refetchInterval: REFETCH_INTERVAL, // TODO: long polling, +// }, +// ); + +// const player = useMemo(() => { +// return PlayerEntity.create(data?.entities?.edges as World__EntityEdge[]); +// }, [data]); + +// return { +// player, +// isFetched, +// }; +// }; diff --git a/web/src/dojo/queries/usePlayerLogs.tsx b/web/src/dojo/queries/usePlayerLogs.tsx new file mode 100644 index 000000000..6236e1238 --- /dev/null +++ b/web/src/dojo/queries/usePlayerLogs.tsx @@ -0,0 +1,64 @@ +import { shortString } from "starknet"; +import { useEffect, useMemo, useState } from "react"; +import { REFETCH_INTERVAL, SCALING_FACTOR } from "../constants"; +import { + Player, + Drug as DrugType, + Item as ItemType, + Encounter, + usePlayerLogsQuery, + World__EventEdge, +} from "@/generated/graphql"; +import { PlayerStatus, ItemEnum, ItemTextEnum } from "../types"; +import { ParseEventResult, parseEvent } from "@/dojo/events"; + +export class PlayerLogs { + logs: World__EventEdge[]; + parsedLogs: { log: World__EventEdge; parsed: ParseEventResult }[]; + + constructor(logs: World__EventEdge[]) { + this.logs = logs || []; + this.parsedLogs = this.logs + .map((e: World__EventEdge) => { + const id = e.node!.id!.split(":"); + return { + idx : Number(id[0]) * 1_000 + Number(id[2]), + blocknumber: Number(id[0]), + event_idx: Number(id[2]), + log: e, + parsed: parseEvent(e.node), + }; + }) + //.sort((a,b) => a.idx - b.idx) + //.reverse(); + } + + static create(edges: World__EventEdge[]): PlayerLogs | undefined { + if (!edges || edges.length === 0) return undefined; + return new PlayerLogs(edges || []); + } +} + +export interface PlayerLogsInterface { + playerLogs?: PlayerLogs; + isFetched: boolean; +} + +export const usePlayerLogs = ({ gameId, playerId }: { gameId?: string; playerId?: string }): PlayerLogsInterface => { + const { data, isFetched } = usePlayerLogsQuery( + { game_id: gameId || "", player_id: playerId || "" }, + { + enabled: !!gameId && !!playerId, + refetchInterval: 3 * REFETCH_INTERVAL, + }, + ); + + const playerLogs = useMemo(() => { + return PlayerLogs.create(data?.events?.edges as World__EventEdge[]); + }, [data]); + + return { + playerLogs, + isFetched, + }; +}; diff --git a/web/src/dojo/setup/createClientComponents.ts b/web/src/dojo/setup/createClientComponents.ts new file mode 100644 index 000000000..ce56760cb --- /dev/null +++ b/web/src/dojo/setup/createClientComponents.ts @@ -0,0 +1,12 @@ +import { overridableComponent } from "@latticexyz/recs"; +import { SetupNetworkResult } from "./setupNetwork"; + +export type ClientComponents = ReturnType; + +export function createClientComponents({ contractComponents }: SetupNetworkResult) { + return { + ...contractComponents, + //Position: overridableComponent(contractComponents.Position), + // Moves: overridableComponent(contractComponents.Moves), + }; +} \ No newline at end of file diff --git a/web/src/dojo/setup/createClientContracts.ts b/web/src/dojo/setup/createClientContracts.ts new file mode 100644 index 000000000..54ed03d1a --- /dev/null +++ b/web/src/dojo/setup/createClientContracts.ts @@ -0,0 +1,20 @@ +import { ManifestContract, SetupNetworkResult, getContractByName } from "./setupNetwork"; +import { AccountInterface, Contract, ProviderInterface } from "starknet"; + +export type ClientContracts = ReturnType; + +export function createClientContracts(provider: ProviderInterface | AccountInterface, manifest: any) { + + return manifest.contracts.map((contract: ManifestContract ) => { + const name = contract.name + const address = getContractByName(name, manifest).address + const instance = new Contract(contract.abi, address, provider); + + return { + name, + address, + contract: instance + } + }) + +} \ No newline at end of file diff --git a/web/src/dojo/setup/createSystemCalls.ts b/web/src/dojo/setup/createSystemCalls.ts new file mode 100644 index 000000000..27b753dac --- /dev/null +++ b/web/src/dojo/setup/createSystemCalls.ts @@ -0,0 +1,8 @@ +import { SetupNetworkResult } from "./setupNetwork"; + +export type SystemCalls = ReturnType; + +export function createSystemCalls({ execute, contractComponents }: SetupNetworkResult) { + +} + diff --git a/web/src/dojo/setup/setup.ts b/web/src/dojo/setup/setup.ts new file mode 100644 index 000000000..e7e9eadf3 --- /dev/null +++ b/web/src/dojo/setup/setup.ts @@ -0,0 +1,29 @@ +import { createClientComponents } from "./createClientComponents"; +// import { createSystemCalls } from "./createSystemCalls"; +import { setupNetwork } from "./setupNetwork"; +import manifest from "../../../manifest.json"; + +export type SetupResult = Awaited>; + +/** + * Sets up the necessary components and network utilities. + * + * @returns An object containing network configurations, client components, and system calls. + */ +export async function setup() { + // Initialize the network configuration. + const network = await setupNetwork(manifest); + + // Create client components based on the network setup. + const components = createClientComponents(network); + + // Establish system calls using the network + // const systemCalls = createSystemCalls(network); + + return { + network, + components, + // systemCalls, + }; +} + diff --git a/web/src/dojo/setup/setupNetwork.ts b/web/src/dojo/setup/setupNetwork.ts new file mode 100644 index 000000000..db8e99b4f --- /dev/null +++ b/web/src/dojo/setup/setupNetwork.ts @@ -0,0 +1,71 @@ +import { defineContractComponents } from "../generated/contractModels"; +import { world } from "./world"; +import { RPCProvider, Query, } from "@dojoengine/core"; +import { Account, Contract, TypedContract, num, shortString } from "starknet"; +import { GraphQLClient } from 'graphql-request'; +// import { getSdk } from '../generated/graphql'; +// import { createClientContracts } from "./createClientContracts"; + +export type ManifestContract = { + name: string; + abi: any +}; + +export type SetupNetworkResult = Awaited>; + +export const getContractByName = (name: string, manifest: any) => { + let contract = manifest.contracts.find((contract: ManifestContract) => contract.name === name); + return contract +} + +export const getWorldAddress = (manifest: any) => { + return manifest.world.address +} + +export async function setupNetwork(manifest: any) { + + // Create a new RPCProvider instance. + const provider = new RPCProvider(getWorldAddress(manifest), manifest, process.env.NEXT_PUBLIC_RPC_ENDPOINT); + + // // Utility function to get the SDK. + // const createGraphSdk = () => getSdk(new GraphQLClient(process.env.NEXT_PUBLIC_GRAPHQL_ENDPOINT)); + + // Return the setup object. + return { + manifest, + provider, + world, + + // Define contract components for the world. + contractComponents: defineContractComponents(world), + + // Create client contracts based on the network setup. + //contracts: createClientContracts(provider.provider, manifest), + + // // Define the graph SDK instance. + // graphSdk: createGraphSdk(), + + // Execute function. + execute: async (signer: Account, contract_name: string, system: string, call_data: num.BigNumberish[]) => { + // return provider.execute(signer, getContractByName(contract, manifest)?.address || "", system, call_data); + return provider.execute(signer, contract_name, system, call_data); + }, + + // Entity query function. + entity: async (component: string, query: Query) => { + return provider.entity(component, query); + }, + + // Entities query function. + entities: async (component: string, partition: number) => { + return provider.entities(component, partition); + }, + + // Call function. + call: async (signer: Account, contract_name: string, selector: string, call_data: num.BigNumberish[]) => { + const contract_infos = getContractByName(contract_name, manifest); + const contract = new Contract(contract_infos.abi, contract_infos.address, signer); + return contract.call(selector, call_data); + }, + }; +} \ No newline at end of file diff --git a/web/src/dojo/setup/world.ts b/web/src/dojo/setup/world.ts new file mode 100644 index 000000000..4e386e6b9 --- /dev/null +++ b/web/src/dojo/setup/world.ts @@ -0,0 +1,3 @@ +import { createWorld } from "@latticexyz/recs"; + +export const world = createWorld(); \ No newline at end of file diff --git a/web/src/dojo/systems/useSystems.tsx b/web/src/dojo/systems/useSystems.tsx deleted file mode 100644 index dd3a38658..000000000 --- a/web/src/dojo/systems/useSystems.tsx +++ /dev/null @@ -1,216 +0,0 @@ -import { useCallback } from "react"; -import { useDojo } from ".."; -import { BaseEventData, parseEvent, parseEvents, RyoEvents } from "../events"; -import { Action } from "../types"; -import { shortString } from "starknet"; - -export interface SystemsInterface { - create: ( - startTime: number, - maxPlayers: number, - maxTurns: number, - ) => Promise; - travel: (gameId: string, locationId: string) => Promise; - join: (gameId: string) => Promise; - buy: ( - gameId: string, - locationId: string, - drugId: string, - quantity: number, - ) => Promise; - sell: ( - gameId: string, - locationId: string, - drugId: string, - quantity: number, - ) => Promise; - setName: (gameId: string, playerName: string) => Promise; - decide: ( - gameId: string, - action: Action, - nextLocationId: string, - ) => Promise; - isPending: boolean; - error?: Error; -} - -export interface SystemExecuteResult { - hash: string; - event?: BaseEventData; - events?: BaseEventData[]; -} - -export const useSystems = (): SystemsInterface => { - const { execute, account, error, isPending } = useDojo(); - - const executeAndReceipt = useCallback( - async (method: string, params: Array) => { - if (!account) { - throw new Error("No account connected"); - } - - try { - const hash = await execute(method, params); - return await account.getTransactionReceipt(hash); - } catch (err) { - console.error(`Error execute ${method}`, err); - throw err; - } - }, - [execute, account], - ); - - const create = useCallback( - async (startTime: number, maxPlayers: number, maxTurns: number) => { - const receipt = await executeAndReceipt("create_game", [ - startTime, - maxPlayers, - maxTurns, - ]); - - // using joined event instead of created event to get initial location - const event = parseEvent(receipt, RyoEvents.PlayerJoined); - const hash = - "transaction_hash" in receipt ? receipt.transaction_hash : ""; - - return { - hash, - event, - }; - }, - [executeAndReceipt], - ); - - const travel = useCallback( - async (gameId: string, locationId: string) => { - const receipt = await executeAndReceipt("travel", [gameId, locationId]); - - const hash = - "transaction_hash" in receipt ? receipt.transaction_hash : ""; - let result = { hash } as SystemExecuteResult; - - try { - result.event = parseEvent(receipt, RyoEvents.AdverseEvent); - } catch (err) { - // no random event occured - } - - try { - result.events = parseEvents(receipt, RyoEvents.MarketEvent); - } catch (err) { - // no random event occured - } - - return result; - }, - [executeAndReceipt], - ); - - const join = useCallback( - async (gameId: string) => { - const receipt = await executeAndReceipt("join_game", [gameId]); - - const event = parseEvent(receipt, RyoEvents.PlayerJoined); - const hash = - "transaction_hash" in receipt ? receipt.transaction_hash : ""; - - return { - hash, - event, - }; - }, - [executeAndReceipt], - ); - - const buy = useCallback( - async ( - gameId: string, - locationId: string, - drugId: string, - quantity: number, - ) => { - const receipt = await executeAndReceipt("buy", [ - gameId, - locationId, - drugId, - quantity, - ]); - const hash = - "transaction_hash" in receipt ? receipt.transaction_hash : ""; - - return { - hash, - }; - }, - [executeAndReceipt], - ); - - const sell = useCallback( - async ( - gameId: string, - locationId: string, - drugId: string, - quantity: number, - ) => { - const receipt = await executeAndReceipt("sell", [ - gameId, - locationId, - drugId, - quantity, - ]); - const hash = - "transaction_hash" in receipt ? receipt.transaction_hash : ""; - - return { - hash, - }; - }, - [executeAndReceipt], - ); - - const setName = useCallback( - async (gameId: string, playerName: string) => { - // not working if name is number only - const name = shortString.encodeShortString(playerName); - const receipt = await executeAndReceipt("set_name", [gameId, name]); - const hash = - "transaction_hash" in receipt ? receipt.transaction_hash : ""; - - return { - hash, - }; - }, - [executeAndReceipt], - ); - - const decide = useCallback( - async (gameId: string, action: Action, nextLocationId: string) => { - const receipt = await executeAndReceipt("decide", [ - gameId, - action, - nextLocationId, - ]); - - const event = parseEvent(receipt, RyoEvents.Consequence); - const hash = - "transaction_hash" in receipt ? receipt.transaction_hash : ""; - return { - hash, - event, - }; - }, - [executeAndReceipt], - ); - - return { - create, - join, - travel, - buy, - sell, - setName, - decide, - error, - isPending, - }; -}; diff --git a/web/src/dojo/types.ts b/web/src/dojo/types.ts index 137c3c989..048c9d0f5 100644 --- a/web/src/dojo/types.ts +++ b/web/src/dojo/types.ts @@ -1,32 +1,52 @@ import { Market } from "@/generated/graphql"; + +// must have same order than cairo enum export enum Location { + Home, Queens, Bronx, Brooklyn, - Coney, Jersey, Central, + Coney, } +// must have same order than cairo enum export enum Drug { - Acid, - Weed, Ludes, Speed, + Weed, + Acid, Heroin, Cocaine, } +export enum ItemEnum { + Attack, + Defense, + Transport, + Speed, +} + +export enum ItemTextEnum { + Attack = "Attack", + Defense= "Defense", + Transport = "Transport", + Speed = "Speed", +} + export enum PlayerStatus { - Normal, - BeingMugged, - BeingArrested, + Normal = "Normal", + BeingMugged = "BeingMugged", + BeingArrested = "BeingArrested", + AtPawnshop = "AtPawnshop" } export enum Action { Run, Pay, + Fight, } export enum Outcome { @@ -34,6 +54,12 @@ export enum Outcome { Paid, Escaped, Captured, + Victorious, +} + +export enum GameMode { + Test, + Unlimited } export interface LocationInfo { @@ -52,7 +78,19 @@ export interface DrugInfo { icon: React.FC; } +export interface ShopItemInfo { + type: ItemEnum; + typeText : ItemTextEnum; + name: string; + cost: number; + value: number; + id: string; + level: number; + icon: React.FC; +} + export interface OutcomeInfo { + title: string; type: Outcome; status: PlayerStatus; name: string; @@ -64,6 +102,7 @@ export interface OutcomeInfo { export type DrugMarket = { id: string; // id is hex encoded drug name + type: Drug; price: number; marketPool: Market; }; diff --git a/web/src/generated/graphql.ts b/web/src/generated/graphql.ts index 3d708b09b..938c197cf 100644 --- a/web/src/generated/graphql.ts +++ b/web/src/generated/graphql.ts @@ -1,22 +1,10 @@ -import { - useQuery, - useInfiniteQuery, - UseQueryOptions, - UseInfiniteQueryOptions, - QueryFunctionContext, -} from "react-query"; -import { useFetchData } from "@/hooks/fetcher"; +import { useQuery, useInfiniteQuery, UseQueryOptions, UseInfiniteQueryOptions, QueryFunctionContext } from 'react-query'; +import { useFetchData } from '@/hooks/fetcher'; export type Maybe = T | null; export type InputMaybe = Maybe; -export type Exact = { - [K in keyof T]: T[K]; -}; -export type MakeOptional = Omit & { - [SubKey in K]?: Maybe; -}; -export type MakeMaybe = Omit & { - [SubKey in K]: Maybe; -}; +export type Exact = { [K in keyof T]: T[K] }; +export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; +export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; /** All built-in and custom scalars, mapped to their actual values */ export type Scalars = { ID: string; @@ -37,924 +25,952 @@ export type Scalars = { usize: any; }; -export type Component = { - __typename?: "Component"; - classHash?: Maybe; - createdAt?: Maybe; - id?: Maybe; - name?: Maybe; - transactionHash?: Maybe; -}; - -export type ComponentConnection = { - __typename?: "ComponentConnection"; - edges?: Maybe>>; - totalCount: Scalars["Int"]; -}; - -export type ComponentEdge = { - __typename?: "ComponentEdge"; - cursor: Scalars["Cursor"]; - node?: Maybe; -}; - -export type ComponentUnion = Drug | Game | Market | Name | Player | Risks; - -export enum Direction { - Asc = "ASC", - Desc = "DESC", -} - export type Drug = { - __typename?: "Drug"; - drug_id?: Maybe; - entity?: Maybe; - game_id?: Maybe; - player_id?: Maybe; - quantity?: Maybe; + __typename?: 'Drug'; + drug_id?: Maybe; + entity?: Maybe; + game_id?: Maybe; + player_id?: Maybe; + quantity?: Maybe; }; export type DrugConnection = { - __typename?: "DrugConnection"; + __typename?: 'DrugConnection'; edges?: Maybe>>; - totalCount: Scalars["Int"]; + total_count: Scalars['Int']; }; export type DrugEdge = { - __typename?: "DrugEdge"; - cursor: Scalars["Cursor"]; + __typename?: 'DrugEdge'; + cursor?: Maybe; node?: Maybe; }; export type DrugOrder = { - direction: Direction; - field: DrugOrderOrderField; + direction: OrderDirection; + field: DrugOrderField; }; -export enum DrugOrderOrderField { - DrugId = "DRUG_ID", - GameId = "GAME_ID", - PlayerId = "PLAYER_ID", - Quantity = "QUANTITY", +export enum DrugOrderField { + DrugId = 'DRUG_ID', + GameId = 'GAME_ID', + PlayerId = 'PLAYER_ID', + Quantity = 'QUANTITY' } export type DrugWhereInput = { - drug_id?: InputMaybe; - drug_idGT?: InputMaybe; - drug_idGTE?: InputMaybe; - drug_idLT?: InputMaybe; - drug_idLTE?: InputMaybe; - drug_idNEQ?: InputMaybe; - game_id?: InputMaybe; - game_idGT?: InputMaybe; - game_idGTE?: InputMaybe; - game_idLT?: InputMaybe; - game_idLTE?: InputMaybe; - game_idNEQ?: InputMaybe; - player_id?: InputMaybe; - player_idGT?: InputMaybe; - player_idGTE?: InputMaybe; - player_idLT?: InputMaybe; - player_idLTE?: InputMaybe; - player_idNEQ?: InputMaybe; - quantity?: InputMaybe; - quantityGT?: InputMaybe; - quantityGTE?: InputMaybe; - quantityLT?: InputMaybe; - quantityLTE?: InputMaybe; - quantityNEQ?: InputMaybe; -}; - -export type Entity = { - __typename?: "Entity"; - componentNames?: Maybe; - components?: Maybe>>; - createdAt?: Maybe; - id?: Maybe; - keys?: Maybe>>; - updatedAt?: Maybe; -}; - -export type EntityConnection = { - __typename?: "EntityConnection"; - edges?: Maybe>>; - totalCount: Scalars["Int"]; -}; - -export type EntityEdge = { - __typename?: "EntityEdge"; - cursor: Scalars["Cursor"]; - node?: Maybe; -}; - -export type Event = { - __typename?: "Event"; - createdAt?: Maybe; - data?: Maybe; - id?: Maybe; - keys?: Maybe; - systemCall: SystemCall; - systemCallId?: Maybe; -}; - -export type EventConnection = { - __typename?: "EventConnection"; - edges?: Maybe>>; - totalCount: Scalars["Int"]; -}; - -export type EventEdge = { - __typename?: "EventEdge"; - cursor: Scalars["Cursor"]; - node?: Maybe; + drug_id?: InputMaybe; + game_id?: InputMaybe; + game_idEQ?: InputMaybe; + game_idGT?: InputMaybe; + game_idGTE?: InputMaybe; + game_idLT?: InputMaybe; + game_idLTE?: InputMaybe; + game_idNEQ?: InputMaybe; + player_id?: InputMaybe; + player_idEQ?: InputMaybe; + player_idGT?: InputMaybe; + player_idGTE?: InputMaybe; + player_idLT?: InputMaybe; + player_idLTE?: InputMaybe; + player_idNEQ?: InputMaybe; + quantity?: InputMaybe; + quantityEQ?: InputMaybe; + quantityGT?: InputMaybe; + quantityGTE?: InputMaybe; + quantityLT?: InputMaybe; + quantityLTE?: InputMaybe; + quantityNEQ?: InputMaybe; +}; + +export type Encounter = { + __typename?: 'Encounter'; + demand_pct?: Maybe; + encounter_id?: Maybe; + entity?: Maybe; + game_id?: Maybe; + health?: Maybe; + level?: Maybe; + payout?: Maybe; + player_id?: Maybe; +}; + +export type EncounterConnection = { + __typename?: 'EncounterConnection'; + edges?: Maybe>>; + total_count: Scalars['Int']; +}; + +export type EncounterEdge = { + __typename?: 'EncounterEdge'; + cursor?: Maybe; + node?: Maybe; +}; + +export type EncounterOrder = { + direction: OrderDirection; + field: EncounterOrderField; +}; + +export enum EncounterOrderField { + DemandPct = 'DEMAND_PCT', + EncounterId = 'ENCOUNTER_ID', + GameId = 'GAME_ID', + Health = 'HEALTH', + Level = 'LEVEL', + Payout = 'PAYOUT', + PlayerId = 'PLAYER_ID' +} + +export type EncounterWhereInput = { + demand_pct?: InputMaybe; + demand_pctEQ?: InputMaybe; + demand_pctGT?: InputMaybe; + demand_pctGTE?: InputMaybe; + demand_pctLT?: InputMaybe; + demand_pctLTE?: InputMaybe; + demand_pctNEQ?: InputMaybe; + encounter_id?: InputMaybe; + game_id?: InputMaybe; + game_idEQ?: InputMaybe; + game_idGT?: InputMaybe; + game_idGTE?: InputMaybe; + game_idLT?: InputMaybe; + game_idLTE?: InputMaybe; + game_idNEQ?: InputMaybe; + health?: InputMaybe; + healthEQ?: InputMaybe; + healthGT?: InputMaybe; + healthGTE?: InputMaybe; + healthLT?: InputMaybe; + healthLTE?: InputMaybe; + healthNEQ?: InputMaybe; + level?: InputMaybe; + levelEQ?: InputMaybe; + levelGT?: InputMaybe; + levelGTE?: InputMaybe; + levelLT?: InputMaybe; + levelLTE?: InputMaybe; + levelNEQ?: InputMaybe; + payout?: InputMaybe; + payoutEQ?: InputMaybe; + payoutGT?: InputMaybe; + payoutGTE?: InputMaybe; + payoutLT?: InputMaybe; + payoutLTE?: InputMaybe; + payoutNEQ?: InputMaybe; + player_id?: InputMaybe; + player_idEQ?: InputMaybe; + player_idGT?: InputMaybe; + player_idGTE?: InputMaybe; + player_idLT?: InputMaybe; + player_idLTE?: InputMaybe; + player_idNEQ?: InputMaybe; }; export type Game = { - __typename?: "Game"; - creator?: Maybe; - entity?: Maybe; - game_id?: Maybe; - is_finished?: Maybe; - max_players?: Maybe; - max_turns?: Maybe; - num_players?: Maybe; - start_time?: Maybe; + __typename?: 'Game'; + creator?: Maybe; + entity?: Maybe; + game_id?: Maybe; + game_mode?: Maybe; + is_finished?: Maybe; + max_players?: Maybe; + max_turns?: Maybe; + num_players?: Maybe; + start_time?: Maybe; }; export type GameConnection = { - __typename?: "GameConnection"; + __typename?: 'GameConnection'; edges?: Maybe>>; - totalCount: Scalars["Int"]; + total_count: Scalars['Int']; }; export type GameEdge = { - __typename?: "GameEdge"; - cursor: Scalars["Cursor"]; + __typename?: 'GameEdge'; + cursor?: Maybe; node?: Maybe; }; export type GameOrder = { - direction: Direction; - field: GameOrderOrderField; -}; - -export enum GameOrderOrderField { - Creator = "CREATOR", - GameId = "GAME_ID", - IsFinished = "IS_FINISHED", - MaxPlayers = "MAX_PLAYERS", - MaxTurns = "MAX_TURNS", - NumPlayers = "NUM_PLAYERS", - StartTime = "START_TIME", + direction: OrderDirection; + field: GameOrderField; +}; + +export enum GameOrderField { + Creator = 'CREATOR', + GameId = 'GAME_ID', + GameMode = 'GAME_MODE', + IsFinished = 'IS_FINISHED', + MaxPlayers = 'MAX_PLAYERS', + MaxTurns = 'MAX_TURNS', + NumPlayers = 'NUM_PLAYERS', + StartTime = 'START_TIME' } export type GameWhereInput = { - creator?: InputMaybe; - creatorGT?: InputMaybe; - creatorGTE?: InputMaybe; - creatorLT?: InputMaybe; - creatorLTE?: InputMaybe; - creatorNEQ?: InputMaybe; - game_id?: InputMaybe; - game_idGT?: InputMaybe; - game_idGTE?: InputMaybe; - game_idLT?: InputMaybe; - game_idLTE?: InputMaybe; - game_idNEQ?: InputMaybe; - is_finished?: InputMaybe; - is_finishedGT?: InputMaybe; - is_finishedGTE?: InputMaybe; - is_finishedLT?: InputMaybe; - is_finishedLTE?: InputMaybe; - is_finishedNEQ?: InputMaybe; - max_players?: InputMaybe; - max_playersGT?: InputMaybe; - max_playersGTE?: InputMaybe; - max_playersLT?: InputMaybe; - max_playersLTE?: InputMaybe; - max_playersNEQ?: InputMaybe; - max_turns?: InputMaybe; - max_turnsGT?: InputMaybe; - max_turnsGTE?: InputMaybe; - max_turnsLT?: InputMaybe; - max_turnsLTE?: InputMaybe; - max_turnsNEQ?: InputMaybe; - num_players?: InputMaybe; - num_playersGT?: InputMaybe; - num_playersGTE?: InputMaybe; - num_playersLT?: InputMaybe; - num_playersLTE?: InputMaybe; - num_playersNEQ?: InputMaybe; - start_time?: InputMaybe; - start_timeGT?: InputMaybe; - start_timeGTE?: InputMaybe; - start_timeLT?: InputMaybe; - start_timeLTE?: InputMaybe; - start_timeNEQ?: InputMaybe; + creator?: InputMaybe; + creatorEQ?: InputMaybe; + creatorGT?: InputMaybe; + creatorGTE?: InputMaybe; + creatorLT?: InputMaybe; + creatorLTE?: InputMaybe; + creatorNEQ?: InputMaybe; + game_id?: InputMaybe; + game_idEQ?: InputMaybe; + game_idGT?: InputMaybe; + game_idGTE?: InputMaybe; + game_idLT?: InputMaybe; + game_idLTE?: InputMaybe; + game_idNEQ?: InputMaybe; + game_mode?: InputMaybe; + is_finished?: InputMaybe; + is_finishedEQ?: InputMaybe; + is_finishedGT?: InputMaybe; + is_finishedGTE?: InputMaybe; + is_finishedLT?: InputMaybe; + is_finishedLTE?: InputMaybe; + is_finishedNEQ?: InputMaybe; + max_players?: InputMaybe; + max_playersEQ?: InputMaybe; + max_playersGT?: InputMaybe; + max_playersGTE?: InputMaybe; + max_playersLT?: InputMaybe; + max_playersLTE?: InputMaybe; + max_playersNEQ?: InputMaybe; + max_turns?: InputMaybe; + max_turnsEQ?: InputMaybe; + max_turnsGT?: InputMaybe; + max_turnsGTE?: InputMaybe; + max_turnsLT?: InputMaybe; + max_turnsLTE?: InputMaybe; + max_turnsNEQ?: InputMaybe; + num_players?: InputMaybe; + num_playersEQ?: InputMaybe; + num_playersGT?: InputMaybe; + num_playersGTE?: InputMaybe; + num_playersLT?: InputMaybe; + num_playersLTE?: InputMaybe; + num_playersNEQ?: InputMaybe; + start_time?: InputMaybe; + start_timeEQ?: InputMaybe; + start_timeGT?: InputMaybe; + start_timeGTE?: InputMaybe; + start_timeLT?: InputMaybe; + start_timeLTE?: InputMaybe; + start_timeNEQ?: InputMaybe; +}; + +export type Item = { + __typename?: 'Item'; + entity?: Maybe; + game_id?: Maybe; + item_id?: Maybe; + level?: Maybe; + name?: Maybe; + player_id?: Maybe; + value?: Maybe; +}; + +export type ItemConnection = { + __typename?: 'ItemConnection'; + edges?: Maybe>>; + total_count: Scalars['Int']; +}; + +export type ItemEdge = { + __typename?: 'ItemEdge'; + cursor?: Maybe; + node?: Maybe; +}; + +export type ItemOrder = { + direction: OrderDirection; + field: ItemOrderField; +}; + +export enum ItemOrderField { + GameId = 'GAME_ID', + ItemId = 'ITEM_ID', + Level = 'LEVEL', + Name = 'NAME', + PlayerId = 'PLAYER_ID', + Value = 'VALUE' +} + +export type ItemWhereInput = { + game_id?: InputMaybe; + game_idEQ?: InputMaybe; + game_idGT?: InputMaybe; + game_idGTE?: InputMaybe; + game_idLT?: InputMaybe; + game_idLTE?: InputMaybe; + game_idNEQ?: InputMaybe; + item_id?: InputMaybe; + level?: InputMaybe; + levelEQ?: InputMaybe; + levelGT?: InputMaybe; + levelGTE?: InputMaybe; + levelLT?: InputMaybe; + levelLTE?: InputMaybe; + levelNEQ?: InputMaybe; + name?: InputMaybe; + nameEQ?: InputMaybe; + nameGT?: InputMaybe; + nameGTE?: InputMaybe; + nameLT?: InputMaybe; + nameLTE?: InputMaybe; + nameNEQ?: InputMaybe; + player_id?: InputMaybe; + player_idEQ?: InputMaybe; + player_idGT?: InputMaybe; + player_idGTE?: InputMaybe; + player_idLT?: InputMaybe; + player_idLTE?: InputMaybe; + player_idNEQ?: InputMaybe; + value?: InputMaybe; + valueEQ?: InputMaybe; + valueGT?: InputMaybe; + valueGTE?: InputMaybe; + valueLT?: InputMaybe; + valueLTE?: InputMaybe; + valueNEQ?: InputMaybe; }; export type Market = { - __typename?: "Market"; - cash?: Maybe; - drug_id?: Maybe; - entity?: Maybe; - game_id?: Maybe; - location_id?: Maybe; - quantity?: Maybe; + __typename?: 'Market'; + cash?: Maybe; + drug_id?: Maybe; + entity?: Maybe; + game_id?: Maybe; + location_id?: Maybe; + quantity?: Maybe; }; export type MarketConnection = { - __typename?: "MarketConnection"; + __typename?: 'MarketConnection'; edges?: Maybe>>; - totalCount: Scalars["Int"]; + total_count: Scalars['Int']; }; export type MarketEdge = { - __typename?: "MarketEdge"; - cursor: Scalars["Cursor"]; + __typename?: 'MarketEdge'; + cursor?: Maybe; node?: Maybe; }; export type MarketOrder = { - direction: Direction; - field: MarketOrderOrderField; + direction: OrderDirection; + field: MarketOrderField; }; -export enum MarketOrderOrderField { - Cash = "CASH", - DrugId = "DRUG_ID", - GameId = "GAME_ID", - LocationId = "LOCATION_ID", - Quantity = "QUANTITY", +export enum MarketOrderField { + Cash = 'CASH', + DrugId = 'DRUG_ID', + GameId = 'GAME_ID', + LocationId = 'LOCATION_ID', + Quantity = 'QUANTITY' } export type MarketWhereInput = { - cash?: InputMaybe; - cashGT?: InputMaybe; - cashGTE?: InputMaybe; - cashLT?: InputMaybe; - cashLTE?: InputMaybe; - cashNEQ?: InputMaybe; - drug_id?: InputMaybe; - drug_idGT?: InputMaybe; - drug_idGTE?: InputMaybe; - drug_idLT?: InputMaybe; - drug_idLTE?: InputMaybe; - drug_idNEQ?: InputMaybe; - game_id?: InputMaybe; - game_idGT?: InputMaybe; - game_idGTE?: InputMaybe; - game_idLT?: InputMaybe; - game_idLTE?: InputMaybe; - game_idNEQ?: InputMaybe; - location_id?: InputMaybe; - location_idGT?: InputMaybe; - location_idGTE?: InputMaybe; - location_idLT?: InputMaybe; - location_idLTE?: InputMaybe; - location_idNEQ?: InputMaybe; - quantity?: InputMaybe; - quantityGT?: InputMaybe; - quantityGTE?: InputMaybe; - quantityLT?: InputMaybe; - quantityLTE?: InputMaybe; - quantityNEQ?: InputMaybe; -}; - -export type Name = { - __typename?: "Name"; - entity?: Maybe; - game_id?: Maybe; - player_id?: Maybe; - short_string?: Maybe; -}; - -export type NameConnection = { - __typename?: "NameConnection"; - edges?: Maybe>>; - totalCount: Scalars["Int"]; -}; - -export type NameEdge = { - __typename?: "NameEdge"; - cursor: Scalars["Cursor"]; - node?: Maybe; -}; - -export type NameOrder = { - direction: Direction; - field: NameOrderOrderField; -}; - -export enum NameOrderOrderField { - GameId = "GAME_ID", - PlayerId = "PLAYER_ID", - ShortString = "SHORT_STRING", + cash?: InputMaybe; + cashEQ?: InputMaybe; + cashGT?: InputMaybe; + cashGTE?: InputMaybe; + cashLT?: InputMaybe; + cashLTE?: InputMaybe; + cashNEQ?: InputMaybe; + drug_id?: InputMaybe; + game_id?: InputMaybe; + game_idEQ?: InputMaybe; + game_idGT?: InputMaybe; + game_idGTE?: InputMaybe; + game_idLT?: InputMaybe; + game_idLTE?: InputMaybe; + game_idNEQ?: InputMaybe; + location_id?: InputMaybe; + quantity?: InputMaybe; + quantityEQ?: InputMaybe; + quantityGT?: InputMaybe; + quantityGTE?: InputMaybe; + quantityLT?: InputMaybe; + quantityLTE?: InputMaybe; + quantityNEQ?: InputMaybe; +}; + +export type ModelUnion = Drug | Encounter | Game | Item | Market | Player; + +export enum OrderDirection { + Asc = 'ASC', + Desc = 'DESC' } -export type NameWhereInput = { - game_id?: InputMaybe; - game_idGT?: InputMaybe; - game_idGTE?: InputMaybe; - game_idLT?: InputMaybe; - game_idLTE?: InputMaybe; - game_idNEQ?: InputMaybe; - player_id?: InputMaybe; - player_idGT?: InputMaybe; - player_idGTE?: InputMaybe; - player_idLT?: InputMaybe; - player_idLTE?: InputMaybe; - player_idNEQ?: InputMaybe; - short_string?: InputMaybe; - short_stringGT?: InputMaybe; - short_stringGTE?: InputMaybe; - short_stringLT?: InputMaybe; - short_stringLTE?: InputMaybe; - short_stringNEQ?: InputMaybe; -}; - export type Player = { - __typename?: "Player"; - bag_limit?: Maybe; - cash?: Maybe; - drug_count?: Maybe; - entity?: Maybe; - game_id?: Maybe; - health?: Maybe; - location_id?: Maybe; - player_id?: Maybe; - run_attempts?: Maybe; - status?: Maybe; - turns_remaining?: Maybe; - turns_remaining_on_death?: Maybe; + __typename?: 'Player'; + attack?: Maybe; + avatar_id?: Maybe; + cash?: Maybe; + defense?: Maybe; + drug_count?: Maybe; + entity?: Maybe; + game_id?: Maybe; + health?: Maybe; + location_id?: Maybe; + max_items?: Maybe; + max_turns?: Maybe; + name?: Maybe; + next_location_id?: Maybe; + player_id?: Maybe; + speed?: Maybe; + status?: Maybe; + transport?: Maybe; + turn?: Maybe; + wanted?: Maybe; }; export type PlayerConnection = { - __typename?: "PlayerConnection"; + __typename?: 'PlayerConnection'; edges?: Maybe>>; - totalCount: Scalars["Int"]; + total_count: Scalars['Int']; }; export type PlayerEdge = { - __typename?: "PlayerEdge"; - cursor: Scalars["Cursor"]; + __typename?: 'PlayerEdge'; + cursor?: Maybe; node?: Maybe; }; export type PlayerOrder = { - direction: Direction; - field: PlayerOrderOrderField; -}; - -export enum PlayerOrderOrderField { - BagLimit = "BAG_LIMIT", - Cash = "CASH", - DrugCount = "DRUG_COUNT", - GameId = "GAME_ID", - Health = "HEALTH", - LocationId = "LOCATION_ID", - PlayerId = "PLAYER_ID", - RunAttempts = "RUN_ATTEMPTS", - Status = "STATUS", - TurnsRemaining = "TURNS_REMAINING", - TurnsRemainingOnDeath = "TURNS_REMAINING_ON_DEATH", + direction: OrderDirection; + field: PlayerOrderField; +}; + +export enum PlayerOrderField { + Attack = 'ATTACK', + AvatarId = 'AVATAR_ID', + Cash = 'CASH', + Defense = 'DEFENSE', + DrugCount = 'DRUG_COUNT', + GameId = 'GAME_ID', + Health = 'HEALTH', + LocationId = 'LOCATION_ID', + MaxItems = 'MAX_ITEMS', + MaxTurns = 'MAX_TURNS', + Name = 'NAME', + NextLocationId = 'NEXT_LOCATION_ID', + PlayerId = 'PLAYER_ID', + Speed = 'SPEED', + Status = 'STATUS', + Transport = 'TRANSPORT', + Turn = 'TURN', + Wanted = 'WANTED' } export type PlayerWhereInput = { - bag_limit?: InputMaybe; - bag_limitGT?: InputMaybe; - bag_limitGTE?: InputMaybe; - bag_limitLT?: InputMaybe; - bag_limitLTE?: InputMaybe; - bag_limitNEQ?: InputMaybe; - cash?: InputMaybe; - cashGT?: InputMaybe; - cashGTE?: InputMaybe; - cashLT?: InputMaybe; - cashLTE?: InputMaybe; - cashNEQ?: InputMaybe; - drug_count?: InputMaybe; - drug_countGT?: InputMaybe; - drug_countGTE?: InputMaybe; - drug_countLT?: InputMaybe; - drug_countLTE?: InputMaybe; - drug_countNEQ?: InputMaybe; - game_id?: InputMaybe; - game_idGT?: InputMaybe; - game_idGTE?: InputMaybe; - game_idLT?: InputMaybe; - game_idLTE?: InputMaybe; - game_idNEQ?: InputMaybe; - health?: InputMaybe; - healthGT?: InputMaybe; - healthGTE?: InputMaybe; - healthLT?: InputMaybe; - healthLTE?: InputMaybe; - healthNEQ?: InputMaybe; - location_id?: InputMaybe; - location_idGT?: InputMaybe; - location_idGTE?: InputMaybe; - location_idLT?: InputMaybe; - location_idLTE?: InputMaybe; - location_idNEQ?: InputMaybe; - player_id?: InputMaybe; - player_idGT?: InputMaybe; - player_idGTE?: InputMaybe; - player_idLT?: InputMaybe; - player_idLTE?: InputMaybe; - player_idNEQ?: InputMaybe; - run_attempts?: InputMaybe; - run_attemptsGT?: InputMaybe; - run_attemptsGTE?: InputMaybe; - run_attemptsLT?: InputMaybe; - run_attemptsLTE?: InputMaybe; - run_attemptsNEQ?: InputMaybe; - status?: InputMaybe; - statusGT?: InputMaybe; - statusGTE?: InputMaybe; - statusLT?: InputMaybe; - statusLTE?: InputMaybe; - statusNEQ?: InputMaybe; - turns_remaining?: InputMaybe; - turns_remainingGT?: InputMaybe; - turns_remainingGTE?: InputMaybe; - turns_remainingLT?: InputMaybe; - turns_remainingLTE?: InputMaybe; - turns_remainingNEQ?: InputMaybe; - turns_remaining_on_death?: InputMaybe; - turns_remaining_on_deathGT?: InputMaybe; - turns_remaining_on_deathGTE?: InputMaybe; - turns_remaining_on_deathLT?: InputMaybe; - turns_remaining_on_deathLTE?: InputMaybe; - turns_remaining_on_deathNEQ?: InputMaybe; -}; - -export type Query = { - __typename?: "Query"; - component: Component; - components?: Maybe; - drugComponents?: Maybe; - entities?: Maybe; - entity: Entity; - event: Event; - events?: Maybe; - gameComponents?: Maybe; - marketComponents?: Maybe; - nameComponents?: Maybe; - playerComponents?: Maybe; - risksComponents?: Maybe; - system: System; - systemCall: SystemCall; - systemCalls?: Maybe; - systems?: Maybe; -}; - -export type QueryComponentArgs = { - id: Scalars["ID"]; -}; - -export type QueryDrugComponentsArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; + attack?: InputMaybe; + attackEQ?: InputMaybe; + attackGT?: InputMaybe; + attackGTE?: InputMaybe; + attackLT?: InputMaybe; + attackLTE?: InputMaybe; + attackNEQ?: InputMaybe; + avatar_id?: InputMaybe; + avatar_idEQ?: InputMaybe; + avatar_idGT?: InputMaybe; + avatar_idGTE?: InputMaybe; + avatar_idLT?: InputMaybe; + avatar_idLTE?: InputMaybe; + avatar_idNEQ?: InputMaybe; + cash?: InputMaybe; + cashEQ?: InputMaybe; + cashGT?: InputMaybe; + cashGTE?: InputMaybe; + cashLT?: InputMaybe; + cashLTE?: InputMaybe; + cashNEQ?: InputMaybe; + defense?: InputMaybe; + defenseEQ?: InputMaybe; + defenseGT?: InputMaybe; + defenseGTE?: InputMaybe; + defenseLT?: InputMaybe; + defenseLTE?: InputMaybe; + defenseNEQ?: InputMaybe; + drug_count?: InputMaybe; + drug_countEQ?: InputMaybe; + drug_countGT?: InputMaybe; + drug_countGTE?: InputMaybe; + drug_countLT?: InputMaybe; + drug_countLTE?: InputMaybe; + drug_countNEQ?: InputMaybe; + game_id?: InputMaybe; + game_idEQ?: InputMaybe; + game_idGT?: InputMaybe; + game_idGTE?: InputMaybe; + game_idLT?: InputMaybe; + game_idLTE?: InputMaybe; + game_idNEQ?: InputMaybe; + health?: InputMaybe; + healthEQ?: InputMaybe; + healthGT?: InputMaybe; + healthGTE?: InputMaybe; + healthLT?: InputMaybe; + healthLTE?: InputMaybe; + healthNEQ?: InputMaybe; + location_id?: InputMaybe; + max_items?: InputMaybe; + max_itemsEQ?: InputMaybe; + max_itemsGT?: InputMaybe; + max_itemsGTE?: InputMaybe; + max_itemsLT?: InputMaybe; + max_itemsLTE?: InputMaybe; + max_itemsNEQ?: InputMaybe; + max_turns?: InputMaybe; + max_turnsEQ?: InputMaybe; + max_turnsGT?: InputMaybe; + max_turnsGTE?: InputMaybe; + max_turnsLT?: InputMaybe; + max_turnsLTE?: InputMaybe; + max_turnsNEQ?: InputMaybe; + name?: InputMaybe; + nameEQ?: InputMaybe; + nameGT?: InputMaybe; + nameGTE?: InputMaybe; + nameLT?: InputMaybe; + nameLTE?: InputMaybe; + nameNEQ?: InputMaybe; + next_location_id?: InputMaybe; + player_id?: InputMaybe; + player_idEQ?: InputMaybe; + player_idGT?: InputMaybe; + player_idGTE?: InputMaybe; + player_idLT?: InputMaybe; + player_idLTE?: InputMaybe; + player_idNEQ?: InputMaybe; + speed?: InputMaybe; + speedEQ?: InputMaybe; + speedGT?: InputMaybe; + speedGTE?: InputMaybe; + speedLT?: InputMaybe; + speedLTE?: InputMaybe; + speedNEQ?: InputMaybe; + status?: InputMaybe; + transport?: InputMaybe; + transportEQ?: InputMaybe; + transportGT?: InputMaybe; + transportGTE?: InputMaybe; + transportLT?: InputMaybe; + transportLTE?: InputMaybe; + transportNEQ?: InputMaybe; + turn?: InputMaybe; + turnEQ?: InputMaybe; + turnGT?: InputMaybe; + turnGTE?: InputMaybe; + turnLT?: InputMaybe; + turnLTE?: InputMaybe; + turnNEQ?: InputMaybe; + wanted?: InputMaybe; + wantedEQ?: InputMaybe; + wantedGT?: InputMaybe; + wantedGTE?: InputMaybe; + wantedLT?: InputMaybe; + wantedLTE?: InputMaybe; + wantedNEQ?: InputMaybe; +}; + +export type World__Content = { + __typename?: 'World__Content'; + cover_uri?: Maybe; + description?: Maybe; + icon_uri?: Maybe; + name?: Maybe; + socials?: Maybe>>; + website?: Maybe; +}; + +export type World__Entity = { + __typename?: 'World__Entity'; + created_at?: Maybe; + event_id?: Maybe; + id?: Maybe; + keys?: Maybe>>; + model_names?: Maybe; + models?: Maybe>>; + updated_at?: Maybe; +}; + +export type World__EntityConnection = { + __typename?: 'World__EntityConnection'; + edges?: Maybe>>; + total_count: Scalars['Int']; +}; + +export type World__EntityEdge = { + __typename?: 'World__EntityEdge'; + cursor?: Maybe; + node?: Maybe; +}; + +export type World__Event = { + __typename?: 'World__Event'; + created_at?: Maybe; + data?: Maybe>>; + id?: Maybe; + keys?: Maybe>>; + transaction_hash?: Maybe; +}; + +export type World__EventConnection = { + __typename?: 'World__EventConnection'; + edges?: Maybe>>; + total_count: Scalars['Int']; +}; + +export type World__EventEdge = { + __typename?: 'World__EventEdge'; + cursor?: Maybe; + node?: Maybe; +}; + +export type World__Metadata = { + __typename?: 'World__Metadata'; + content?: Maybe; + cover_img?: Maybe; + created_at?: Maybe; + icon_img?: Maybe; + id?: Maybe; + updated_at?: Maybe; + uri?: Maybe; +}; + +export type World__MetadataConnection = { + __typename?: 'World__MetadataConnection'; + edges?: Maybe>>; + total_count: Scalars['Int']; +}; + +export type World__MetadataEdge = { + __typename?: 'World__MetadataEdge'; + cursor?: Maybe; + node?: Maybe; +}; + +export type World__Model = { + __typename?: 'World__Model'; + class_hash?: Maybe; + created_at?: Maybe; + id?: Maybe; + name?: Maybe; + transaction_hash?: Maybe; +}; + +export type World__ModelConnection = { + __typename?: 'World__ModelConnection'; + edges?: Maybe>>; + total_count: Scalars['Int']; +}; + +export type World__ModelEdge = { + __typename?: 'World__ModelEdge'; + cursor?: Maybe; + node?: Maybe; +}; + +export type World__Query = { + __typename?: 'World__Query'; + drugModels?: Maybe; + encounterModels?: Maybe; + entities?: Maybe; + entity: World__Entity; + events?: Maybe; + gameModels?: Maybe; + itemModels?: Maybe; + marketModels?: Maybe; + metadatas?: Maybe; + model: World__Model; + models?: Maybe; + playerModels?: Maybe; + transaction: World__Transaction; + transactions?: Maybe; +}; + + +export type World__QueryDrugModelsArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; + limit?: InputMaybe; + offset?: InputMaybe; order?: InputMaybe; where?: InputMaybe; }; -export type QueryEntitiesArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - keys?: InputMaybe>>; - last?: InputMaybe; + +export type World__QueryEncounterModelsArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; + limit?: InputMaybe; + offset?: InputMaybe; + order?: InputMaybe; + where?: InputMaybe; }; -export type QueryEntityArgs = { - id: Scalars["ID"]; + +export type World__QueryEntitiesArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + keys?: InputMaybe>>; + last?: InputMaybe; + limit?: InputMaybe; + offset?: InputMaybe; }; -export type QueryEventArgs = { - id: Scalars["ID"]; + +export type World__QueryEntityArgs = { + id: Scalars['ID']; +}; + + +export type World__QueryEventsArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + keys?: InputMaybe>>; + last?: InputMaybe; + limit?: InputMaybe; + offset?: InputMaybe; }; -export type QueryGameComponentsArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; + +export type World__QueryGameModelsArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; + limit?: InputMaybe; + offset?: InputMaybe; order?: InputMaybe; where?: InputMaybe; }; -export type QueryMarketComponentsArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; + +export type World__QueryItemModelsArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; + limit?: InputMaybe; + offset?: InputMaybe; + order?: InputMaybe; + where?: InputMaybe; +}; + + +export type World__QueryMarketModelsArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; + limit?: InputMaybe; + offset?: InputMaybe; order?: InputMaybe; where?: InputMaybe; }; -export type QueryNameComponentsArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; - order?: InputMaybe; - where?: InputMaybe; + +export type World__QueryMetadatasArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; + limit?: InputMaybe; + offset?: InputMaybe; +}; + + +export type World__QueryModelArgs = { + id: Scalars['ID']; +}; + + +export type World__QueryModelsArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; + limit?: InputMaybe; + offset?: InputMaybe; }; -export type QueryPlayerComponentsArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; + +export type World__QueryPlayerModelsArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; + limit?: InputMaybe; + offset?: InputMaybe; order?: InputMaybe; where?: InputMaybe; }; -export type QueryRisksComponentsArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; - order?: InputMaybe; - where?: InputMaybe; + +export type World__QueryTransactionArgs = { + id: Scalars['ID']; }; -export type QuerySystemArgs = { - id: Scalars["ID"]; + +export type World__QueryTransactionsArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; + limit?: InputMaybe; + offset?: InputMaybe; }; -export type QuerySystemCallArgs = { - id: Scalars["Int"]; +export type World__Social = { + __typename?: 'World__Social'; + name?: Maybe; + url?: Maybe; }; -export type Risks = { - __typename?: "Risks"; - capture?: Maybe; - entity?: Maybe; - game_id?: Maybe; - location_id?: Maybe; - travel?: Maybe; +export type World__Subscription = { + __typename?: 'World__Subscription'; + entityUpdated: World__Entity; + modelRegistered: World__Model; }; -export type RisksConnection = { - __typename?: "RisksConnection"; - edges?: Maybe>>; - totalCount: Scalars["Int"]; + +export type World__SubscriptionEntityUpdatedArgs = { + id?: InputMaybe; }; -export type RisksEdge = { - __typename?: "RisksEdge"; - cursor: Scalars["Cursor"]; - node?: Maybe; + +export type World__SubscriptionModelRegisteredArgs = { + id?: InputMaybe; }; -export type RisksOrder = { - direction: Direction; - field: RisksOrderOrderField; +export type World__Transaction = { + __typename?: 'World__Transaction'; + calldata?: Maybe>>; + created_at?: Maybe; + id?: Maybe; + max_fee?: Maybe; + nonce?: Maybe; + sender_address?: Maybe; + signature?: Maybe>>; + transaction_hash?: Maybe; }; -export enum RisksOrderOrderField { - Capture = "CAPTURE", - GameId = "GAME_ID", - LocationId = "LOCATION_ID", - Travel = "TRAVEL", -} +export type World__TransactionConnection = { + __typename?: 'World__TransactionConnection'; + edges?: Maybe>>; + total_count: Scalars['Int']; +}; -export type RisksWhereInput = { - capture?: InputMaybe; - captureGT?: InputMaybe; - captureGTE?: InputMaybe; - captureLT?: InputMaybe; - captureLTE?: InputMaybe; - captureNEQ?: InputMaybe; - game_id?: InputMaybe; - game_idGT?: InputMaybe; - game_idGTE?: InputMaybe; - game_idLT?: InputMaybe; - game_idLTE?: InputMaybe; - game_idNEQ?: InputMaybe; - location_id?: InputMaybe; - location_idGT?: InputMaybe; - location_idGTE?: InputMaybe; - location_idLT?: InputMaybe; - location_idLTE?: InputMaybe; - location_idNEQ?: InputMaybe; - travel?: InputMaybe; - travelGT?: InputMaybe; - travelGTE?: InputMaybe; - travelLT?: InputMaybe; - travelLTE?: InputMaybe; - travelNEQ?: InputMaybe; -}; - -export type Subscription = { - __typename?: "Subscription"; - componentRegistered: Component; - entityUpdated: Entity; -}; - -export type System = { - __typename?: "System"; - classHash?: Maybe; - createdAt?: Maybe; - id?: Maybe; - name?: Maybe; - systemCalls: Array; - transactionHash?: Maybe; -}; - -export type SystemCall = { - __typename?: "SystemCall"; - createdAt?: Maybe; - data?: Maybe; - id?: Maybe; - system: System; - systemId?: Maybe; - transactionHash?: Maybe; -}; - -export type SystemCallConnection = { - __typename?: "SystemCallConnection"; - edges?: Maybe>>; - totalCount: Scalars["Int"]; -}; - -export type SystemCallEdge = { - __typename?: "SystemCallEdge"; - cursor: Scalars["Cursor"]; - node?: Maybe; -}; - -export type SystemConnection = { - __typename?: "SystemConnection"; - edges?: Maybe>>; - totalCount: Scalars["Int"]; -}; - -export type SystemEdge = { - __typename?: "SystemEdge"; - cursor: Scalars["Cursor"]; - node?: Maybe; -}; - -export type AvailableGamesQueryVariables = Exact<{ [key: string]: never }>; - -export type AvailableGamesQuery = { - __typename?: "Query"; - gameComponents?: { - __typename?: "GameConnection"; - totalCount: number; - edges?: Array<{ - __typename?: "GameEdge"; - cursor: any; - node?: { - __typename?: "Game"; - creator?: any | null; - num_players?: any | null; - max_players?: any | null; - max_turns?: any | null; - start_time?: any | null; - } | null; - } | null> | null; - } | null; +export type World__TransactionEdge = { + __typename?: 'World__TransactionEdge'; + cursor?: Maybe; + node?: Maybe; }; export type GlobalScoresQueryVariables = Exact<{ - limit?: InputMaybe; - cursor?: InputMaybe; + limit?: InputMaybe; + cursor?: InputMaybe; }>; -export type GlobalScoresQuery = { - __typename?: "Query"; - playerComponents?: { - __typename?: "PlayerConnection"; - totalCount: number; - edges?: Array<{ - __typename?: "PlayerEdge"; - cursor: any; - node?: { - __typename?: "Player"; - cash?: any | null; - health?: any | null; - entity?: { - __typename?: "Entity"; - keys?: Array | null; - components?: Array< - | { __typename: "Drug" } - | { __typename: "Game" } - | { __typename: "Market" } - | { __typename: "Name"; short_string?: any | null } - | { __typename: "Player" } - | { __typename: "Risks" } - | null - > | null; - } | null; - } | null; - } | null> | null; - } | null; -}; + +export type GlobalScoresQuery = { __typename?: 'World__Query', playerModels?: { __typename?: 'PlayerConnection', total_count: number, edges?: Array<{ __typename?: 'PlayerEdge', cursor?: any | null, node?: { __typename?: 'Player', game_id?: any | null, player_id?: any | null, name?: any | null, avatar_id?: any | null, cash?: any | null, health?: any | null, turn?: any | null } | null } | null> | null } | null }; export type MarketPricesQueryVariables = Exact<{ - gameId?: InputMaybe; + gameId?: InputMaybe; }>; -export type MarketPricesQuery = { - __typename?: "Query"; - marketComponents?: { - __typename?: "MarketConnection"; - edges?: Array<{ - __typename?: "MarketEdge"; - node?: { - __typename?: "Market"; - drug_id?: any | null; - location_id?: any | null; - quantity?: any | null; - cash?: any | null; - } | null; - } | null> | null; - } | null; -}; - -export type GameEntityQueryVariables = Exact<{ - id: Scalars["ID"]; -}>; -export type GameEntityQuery = { - __typename?: "Query"; - entity: { - __typename?: "Entity"; - components?: Array< - | { __typename: "Drug" } - | { - __typename: "Game"; - creator?: any | null; - is_finished?: any | null; - max_players?: any | null; - max_turns?: any | null; - num_players?: any | null; - start_time?: any | null; - } - | { __typename: "Market" } - | { __typename: "Name" } - | { __typename: "Player" } - | { __typename: "Risks" } - | null - > | null; - }; -}; +export type MarketPricesQuery = { __typename?: 'World__Query', marketModels?: { __typename?: 'MarketConnection', edges?: Array<{ __typename?: 'MarketEdge', node?: { __typename?: 'Market', drug_id?: any | null, location_id?: any | null, quantity?: any | null, cash?: any | null } | null } | null> | null } | null }; + +export type PlayerPropsFragment = { __typename?: 'Player', name?: any | null, avatar_id?: any | null, cash?: any | null, status?: any | null, location_id?: any | null, drug_count?: any | null, health?: any | null, turn?: any | null, max_turns?: any | null, max_items?: any | null, attack?: any | null, defense?: any | null, transport?: any | null, speed?: any | null, wanted?: any | null }; export type PlayerEntityQueryVariables = Exact<{ - gameId: Scalars["String"]; - playerId: Scalars["String"]; + gameId: Scalars['String']; + playerId: Scalars['String']; +}>; + + +export type PlayerEntityQuery = { __typename?: 'World__Query', entities?: { __typename?: 'World__EntityConnection', total_count: number, edges?: Array<{ __typename?: 'World__EntityEdge', node?: { __typename?: 'World__Entity', id?: string | null, models?: Array<{ __typename: 'Drug', drug_id?: any | null, quantity?: any | null } | { __typename: 'Encounter', encounter_id?: any | null, level?: any | null, health?: any | null, payout?: any | null } | { __typename: 'Game' } | { __typename: 'Item', item_id?: any | null, level?: any | null, name?: any | null, value?: any | null } | { __typename: 'Market' } | { __typename: 'Player', name?: any | null, avatar_id?: any | null, cash?: any | null, status?: any | null, location_id?: any | null, drug_count?: any | null, health?: any | null, turn?: any | null, max_turns?: any | null, max_items?: any | null, attack?: any | null, defense?: any | null, transport?: any | null, speed?: any | null, wanted?: any | null } | null> | null } | null } | null> | null } | null }; + +export type PlayerEntitySubscriptionSubscriptionVariables = Exact<{ + id?: InputMaybe; +}>; + + +export type PlayerEntitySubscriptionSubscription = { __typename?: 'World__Subscription', entityUpdated: { __typename?: 'World__Entity', id?: string | null, keys?: Array | null, model_names?: string | null, models?: Array<{ __typename: 'Drug' } | { __typename: 'Encounter' } | { __typename: 'Game' } | { __typename: 'Item' } | { __typename: 'Market' } | { __typename: 'Player', name?: any | null, avatar_id?: any | null, cash?: any | null, status?: any | null, location_id?: any | null, drug_count?: any | null, health?: any | null, turn?: any | null, max_turns?: any | null, max_items?: any | null, attack?: any | null, defense?: any | null, transport?: any | null, speed?: any | null, wanted?: any | null } | null> | null } }; + +export type PlayerEntityRelatedDataSubscriptionSubscriptionVariables = Exact<{ + id?: InputMaybe; }>; -export type PlayerEntityQuery = { - __typename?: "Query"; - entities?: { - __typename?: "EntityConnection"; - totalCount: number; - edges?: Array<{ - __typename?: "EntityEdge"; - cursor: any; - node?: { - __typename?: "Entity"; - keys?: Array | null; - components?: Array< - | { __typename: "Drug"; drug_id?: any | null; quantity?: any | null } - | { __typename: "Game" } - | { __typename: "Market" } - | { __typename: "Name" } - | { - __typename: "Player"; - cash?: any | null; - status?: any | null; - health?: any | null; - drug_count?: any | null; - bag_limit?: any | null; - location_id?: any | null; - turns_remaining?: any | null; - turns_remaining_on_death?: any | null; - } - | { __typename: "Risks" } - | null - > | null; - } | null; - } | null> | null; - } | null; -}; + +export type PlayerEntityRelatedDataSubscriptionSubscription = { __typename?: 'World__Subscription', entityUpdated: { __typename?: 'World__Entity', id?: string | null, keys?: Array | null, model_names?: string | null, models?: Array<{ __typename: 'Drug', drug_id?: any | null, quantity?: any | null } | { __typename: 'Encounter', encounter_id?: any | null, level?: any | null, health?: any | null, payout?: any | null } | { __typename: 'Game' } | { __typename: 'Item', item_id?: any | null, level?: any | null, name?: any | null, value?: any | null } | { __typename: 'Market' } | { __typename: 'Player' } | null> | null } }; export type LocationEntitiesQueryVariables = Exact<{ - gameId: Scalars["String"]; - locationId: Scalars["String"]; + gameId: Scalars['String']; + locationId: Scalars['String']; }>; -export type LocationEntitiesQuery = { - __typename?: "Query"; - entities?: { - __typename?: "EntityConnection"; - totalCount: number; - edges?: Array<{ - __typename?: "EntityEdge"; - cursor: any; - node?: { - __typename?: "Entity"; - keys?: Array | null; - components?: Array< - | { __typename: "Drug" } - | { __typename: "Game" } - | { __typename: "Market"; cash?: any | null; quantity?: any | null } - | { __typename: "Name" } - | { __typename: "Player" } - | { __typename: "Risks"; travel?: any | null } - | null - > | null; - } | null; - } | null> | null; - } | null; -}; - -export const AvailableGamesDocument = ` - query AvailableGames { - gameComponents(first: 10) { - totalCount - edges { - node { - creator - num_players - max_players - max_turns - start_time - } - cursor - } - } + +export type LocationEntitiesQuery = { __typename?: 'World__Query', entities?: { __typename?: 'World__EntityConnection', total_count: number, edges?: Array<{ __typename?: 'World__EntityEdge', cursor?: any | null, node?: { __typename?: 'World__Entity', keys?: Array | null, models?: Array<{ __typename: 'Drug' } | { __typename: 'Encounter' } | { __typename: 'Game' } | { __typename: 'Item' } | { __typename: 'Market', cash?: any | null, quantity?: any | null, location_id?: any | null, drug_id?: any | null } | { __typename: 'Player' } | null> | null } | null } | null> | null } | null }; + +export type PlayerLogsQueryVariables = Exact<{ + game_id: Scalars['String']; + player_id: Scalars['String']; +}>; + + +export type PlayerLogsQuery = { __typename?: 'World__Query', events?: { __typename?: 'World__EventConnection', total_count: number, edges?: Array<{ __typename?: 'World__EventEdge', node?: { __typename?: 'World__Event', id?: string | null, keys?: Array | null, data?: Array | null, created_at?: any | null } | null } | null> | null } | null }; + +export const PlayerPropsFragmentDoc = ` + fragment PlayerProps on Player { + name + avatar_id + cash + status + location_id + drug_count + health + turn + max_turns + max_items + attack + defense + transport + speed + wanted } `; -export const useAvailableGamesQuery = < - TData = AvailableGamesQuery, - TError = unknown, ->( - variables?: AvailableGamesQueryVariables, - options?: UseQueryOptions, -) => - useQuery( - variables === undefined - ? ["AvailableGames"] - : ["AvailableGames", variables], - useFetchData( - AvailableGamesDocument, - ).bind(null, variables), - options, - ); - -useAvailableGamesQuery.getKey = (variables?: AvailableGamesQueryVariables) => - variables === undefined ? ["AvailableGames"] : ["AvailableGames", variables]; -export const useInfiniteAvailableGamesQuery = < - TData = AvailableGamesQuery, - TError = unknown, ->( - variables?: AvailableGamesQueryVariables, - options?: UseInfiniteQueryOptions, -) => { - const query = useFetchData( - AvailableGamesDocument, - ); - return useInfiniteQuery( - variables === undefined - ? ["AvailableGames.infinite"] - : ["AvailableGames.infinite", variables], - (metaData) => query({ ...variables, ...(metaData.pageParam ?? {}) }), - options, - ); -}; - -useInfiniteAvailableGamesQuery.getKey = ( - variables?: AvailableGamesQueryVariables, -) => - variables === undefined - ? ["AvailableGames.infinite"] - : ["AvailableGames.infinite", variables]; export const GlobalScoresDocument = ` query GlobalScores($limit: Int, $cursor: Cursor) { - playerComponents(first: $limit, after: $cursor, where: {turns_remaining: 0}) { - totalCount + playerModels( + where: {health: 0} + order: {direction: DESC, field: CASH} + first: $limit + after: $cursor + ) { + total_count edges { node { + game_id + player_id + name + avatar_id cash health - entity { - keys - components { - __typename - ... on Name { - short_string - } - } - } + turn } cursor } @@ -962,50 +978,42 @@ export const GlobalScoresDocument = ` } `; export const useGlobalScoresQuery = < - TData = GlobalScoresQuery, - TError = unknown, ->( - variables?: GlobalScoresQueryVariables, - options?: UseQueryOptions, -) => - useQuery( - variables === undefined ? ["GlobalScores"] : ["GlobalScores", variables], - useFetchData( - GlobalScoresDocument, - ).bind(null, variables), - options, - ); - -useGlobalScoresQuery.getKey = (variables?: GlobalScoresQueryVariables) => - variables === undefined ? ["GlobalScores"] : ["GlobalScores", variables]; + TData = GlobalScoresQuery, + TError = unknown + >( + variables?: GlobalScoresQueryVariables, + options?: UseQueryOptions + ) => + useQuery( + variables === undefined ? ['GlobalScores'] : ['GlobalScores', variables], + useFetchData(GlobalScoresDocument).bind(null, variables), + options + ); + +useGlobalScoresQuery.getKey = (variables?: GlobalScoresQueryVariables) => variables === undefined ? ['GlobalScores'] : ['GlobalScores', variables]; +; + export const useInfiniteGlobalScoresQuery = < - TData = GlobalScoresQuery, - TError = unknown, ->( - variables?: GlobalScoresQueryVariables, - options?: UseInfiniteQueryOptions, -) => { - const query = useFetchData( - GlobalScoresDocument, - ); - return useInfiniteQuery( - variables === undefined - ? ["GlobalScores.infinite"] - : ["GlobalScores.infinite", variables], - (metaData) => query({ ...variables, ...(metaData.pageParam ?? {}) }), - options, - ); -}; - -useInfiniteGlobalScoresQuery.getKey = ( - variables?: GlobalScoresQueryVariables, -) => - variables === undefined - ? ["GlobalScores.infinite"] - : ["GlobalScores.infinite", variables]; + TData = GlobalScoresQuery, + TError = unknown + >( + variables?: GlobalScoresQueryVariables, + options?: UseInfiniteQueryOptions + ) =>{ + const query = useFetchData(GlobalScoresDocument) + return useInfiniteQuery( + variables === undefined ? ['GlobalScores.infinite'] : ['GlobalScores.infinite', variables], + (metaData) => query({...variables, ...(metaData.pageParam ?? {})}), + options + )}; + + +useInfiniteGlobalScoresQuery.getKey = (variables?: GlobalScoresQueryVariables) => variables === undefined ? ['GlobalScores.infinite'] : ['GlobalScores.infinite', variables]; +; + export const MarketPricesDocument = ` - query MarketPrices($gameId: Int) { - marketComponents(first: 36, where: {game_id: $gameId}) { + query MarketPrices($gameId: u32) { + marketModels(first: 36, where: {game_id: $gameId}) { edges { node { drug_id @@ -1018,185 +1026,164 @@ export const MarketPricesDocument = ` } `; export const useMarketPricesQuery = < - TData = MarketPricesQuery, - TError = unknown, ->( - variables?: MarketPricesQueryVariables, - options?: UseQueryOptions, -) => - useQuery( - variables === undefined ? ["MarketPrices"] : ["MarketPrices", variables], - useFetchData( - MarketPricesDocument, - ).bind(null, variables), - options, - ); - -useMarketPricesQuery.getKey = (variables?: MarketPricesQueryVariables) => - variables === undefined ? ["MarketPrices"] : ["MarketPrices", variables]; + TData = MarketPricesQuery, + TError = unknown + >( + variables?: MarketPricesQueryVariables, + options?: UseQueryOptions + ) => + useQuery( + variables === undefined ? ['MarketPrices'] : ['MarketPrices', variables], + useFetchData(MarketPricesDocument).bind(null, variables), + options + ); + +useMarketPricesQuery.getKey = (variables?: MarketPricesQueryVariables) => variables === undefined ? ['MarketPrices'] : ['MarketPrices', variables]; +; + export const useInfiniteMarketPricesQuery = < - TData = MarketPricesQuery, - TError = unknown, ->( - variables?: MarketPricesQueryVariables, - options?: UseInfiniteQueryOptions, -) => { - const query = useFetchData( - MarketPricesDocument, - ); - return useInfiniteQuery( - variables === undefined - ? ["MarketPrices.infinite"] - : ["MarketPrices.infinite", variables], - (metaData) => query({ ...variables, ...(metaData.pageParam ?? {}) }), - options, - ); -}; - -useInfiniteMarketPricesQuery.getKey = ( - variables?: MarketPricesQueryVariables, -) => - variables === undefined - ? ["MarketPrices.infinite"] - : ["MarketPrices.infinite", variables]; -export const GameEntityDocument = ` - query GameEntity($id: ID!) { - entity(id: $id) { - components { - __typename - ... on Game { - creator - is_finished - max_players - max_turns - num_players - start_time - } - } - } -} - `; -export const useGameEntityQuery = ( - variables: GameEntityQueryVariables, - options?: UseQueryOptions, -) => - useQuery( - ["GameEntity", variables], - useFetchData( - GameEntityDocument, - ).bind(null, variables), - options, - ); - -useGameEntityQuery.getKey = (variables: GameEntityQueryVariables) => [ - "GameEntity", - variables, -]; -export const useInfiniteGameEntityQuery = < - TData = GameEntityQuery, - TError = unknown, ->( - variables: GameEntityQueryVariables, - options?: UseInfiniteQueryOptions, -) => { - const query = useFetchData( - GameEntityDocument, - ); - return useInfiniteQuery( - ["GameEntity.infinite", variables], - (metaData) => query({ ...variables, ...(metaData.pageParam ?? {}) }), - options, - ); -}; - -useInfiniteGameEntityQuery.getKey = (variables: GameEntityQueryVariables) => [ - "GameEntity.infinite", - variables, -]; + TData = MarketPricesQuery, + TError = unknown + >( + variables?: MarketPricesQueryVariables, + options?: UseInfiniteQueryOptions + ) =>{ + const query = useFetchData(MarketPricesDocument) + return useInfiniteQuery( + variables === undefined ? ['MarketPrices.infinite'] : ['MarketPrices.infinite', variables], + (metaData) => query({...variables, ...(metaData.pageParam ?? {})}), + options + )}; + + +useInfiniteMarketPricesQuery.getKey = (variables?: MarketPricesQueryVariables) => variables === undefined ? ['MarketPrices.infinite'] : ['MarketPrices.infinite', variables]; +; + export const PlayerEntityDocument = ` query PlayerEntity($gameId: String!, $playerId: String!) { entities(keys: [$gameId, $playerId]) { - totalCount + total_count edges { node { - keys - components { + id + models { __typename ... on Player { - cash - status - health - drug_count - bag_limit - location_id - turns_remaining - turns_remaining_on_death + ...PlayerProps } ... on Drug { drug_id quantity } + ... on Item { + item_id + level + name + value + } + ... on Encounter { + encounter_id + level + health + payout + } } } - cursor } } } - `; + ${PlayerPropsFragmentDoc}`; export const usePlayerEntityQuery = < - TData = PlayerEntityQuery, - TError = unknown, ->( - variables: PlayerEntityQueryVariables, - options?: UseQueryOptions, -) => - useQuery( - ["PlayerEntity", variables], - useFetchData( - PlayerEntityDocument, - ).bind(null, variables), - options, - ); - -usePlayerEntityQuery.getKey = (variables: PlayerEntityQueryVariables) => [ - "PlayerEntity", - variables, -]; + TData = PlayerEntityQuery, + TError = unknown + >( + variables: PlayerEntityQueryVariables, + options?: UseQueryOptions + ) => + useQuery( + ['PlayerEntity', variables], + useFetchData(PlayerEntityDocument).bind(null, variables), + options + ); + +usePlayerEntityQuery.getKey = (variables: PlayerEntityQueryVariables) => ['PlayerEntity', variables]; +; + export const useInfinitePlayerEntityQuery = < - TData = PlayerEntityQuery, - TError = unknown, ->( - variables: PlayerEntityQueryVariables, - options?: UseInfiniteQueryOptions, -) => { - const query = useFetchData( - PlayerEntityDocument, - ); - return useInfiniteQuery( - ["PlayerEntity.infinite", variables], - (metaData) => query({ ...variables, ...(metaData.pageParam ?? {}) }), - options, - ); -}; - -useInfinitePlayerEntityQuery.getKey = ( - variables: PlayerEntityQueryVariables, -) => ["PlayerEntity.infinite", variables]; + TData = PlayerEntityQuery, + TError = unknown + >( + variables: PlayerEntityQueryVariables, + options?: UseInfiniteQueryOptions + ) =>{ + const query = useFetchData(PlayerEntityDocument) + return useInfiniteQuery( + ['PlayerEntity.infinite', variables], + (metaData) => query({...variables, ...(metaData.pageParam ?? {})}), + options + )}; + + +useInfinitePlayerEntityQuery.getKey = (variables: PlayerEntityQueryVariables) => ['PlayerEntity.infinite', variables]; +; + +export const PlayerEntitySubscriptionDocument = ` + subscription PlayerEntitySubscription($id: ID) { + entityUpdated(id: $id) { + id + keys + model_names + models { + __typename + ... on Player { + ...PlayerProps + } + } + } +} + ${PlayerPropsFragmentDoc}`; +export const PlayerEntityRelatedDataSubscriptionDocument = ` + subscription PlayerEntityRelatedDataSubscription($id: ID) { + entityUpdated(id: $id) { + id + keys + model_names + models { + __typename + ... on Drug { + drug_id + quantity + } + ... on Item { + item_id + level + name + value + } + ... on Encounter { + encounter_id + level + health + payout + } + } + } +} + `; export const LocationEntitiesDocument = ` query LocationEntities($gameId: String!, $locationId: String!) { entities(keys: [$gameId, $locationId]) { - totalCount + total_count edges { node { keys - components { + models { __typename ... on Market { cash quantity - } - ... on Risks { - travel + location_id + drug_id } } } @@ -1206,41 +1193,84 @@ export const LocationEntitiesDocument = ` } `; export const useLocationEntitiesQuery = < - TData = LocationEntitiesQuery, - TError = unknown, ->( - variables: LocationEntitiesQueryVariables, - options?: UseQueryOptions, -) => - useQuery( - ["LocationEntities", variables], - useFetchData( - LocationEntitiesDocument, - ).bind(null, variables), - options, - ); - -useLocationEntitiesQuery.getKey = ( - variables: LocationEntitiesQueryVariables, -) => ["LocationEntities", variables]; + TData = LocationEntitiesQuery, + TError = unknown + >( + variables: LocationEntitiesQueryVariables, + options?: UseQueryOptions + ) => + useQuery( + ['LocationEntities', variables], + useFetchData(LocationEntitiesDocument).bind(null, variables), + options + ); + +useLocationEntitiesQuery.getKey = (variables: LocationEntitiesQueryVariables) => ['LocationEntities', variables]; +; + export const useInfiniteLocationEntitiesQuery = < - TData = LocationEntitiesQuery, - TError = unknown, ->( - variables: LocationEntitiesQueryVariables, - options?: UseInfiniteQueryOptions, -) => { - const query = useFetchData< - LocationEntitiesQuery, - LocationEntitiesQueryVariables - >(LocationEntitiesDocument); - return useInfiniteQuery( - ["LocationEntities.infinite", variables], - (metaData) => query({ ...variables, ...(metaData.pageParam ?? {}) }), - options, - ); -}; - -useInfiniteLocationEntitiesQuery.getKey = ( - variables: LocationEntitiesQueryVariables, -) => ["LocationEntities.infinite", variables]; + TData = LocationEntitiesQuery, + TError = unknown + >( + variables: LocationEntitiesQueryVariables, + options?: UseInfiniteQueryOptions + ) =>{ + const query = useFetchData(LocationEntitiesDocument) + return useInfiniteQuery( + ['LocationEntities.infinite', variables], + (metaData) => query({...variables, ...(metaData.pageParam ?? {})}), + options + )}; + + +useInfiniteLocationEntitiesQuery.getKey = (variables: LocationEntitiesQueryVariables) => ['LocationEntities.infinite', variables]; +; + +export const PlayerLogsDocument = ` + query PlayerLogs($game_id: String!, $player_id: String!) { + events(last: 1000, keys: ["*", $game_id, $player_id]) { + total_count + edges { + node { + id + keys + data + created_at + } + } + } +} + `; +export const usePlayerLogsQuery = < + TData = PlayerLogsQuery, + TError = unknown + >( + variables: PlayerLogsQueryVariables, + options?: UseQueryOptions + ) => + useQuery( + ['PlayerLogs', variables], + useFetchData(PlayerLogsDocument).bind(null, variables), + options + ); + +usePlayerLogsQuery.getKey = (variables: PlayerLogsQueryVariables) => ['PlayerLogs', variables]; +; + +export const useInfinitePlayerLogsQuery = < + TData = PlayerLogsQuery, + TError = unknown + >( + variables: PlayerLogsQueryVariables, + options?: UseInfiniteQueryOptions + ) =>{ + const query = useFetchData(PlayerLogsDocument) + return useInfiniteQuery( + ['PlayerLogs.infinite', variables], + (metaData) => query({...variables, ...(metaData.pageParam ?? {})}), + options + )}; + + +useInfinitePlayerLogsQuery.getKey = (variables: PlayerLogsQueryVariables) => ['PlayerLogs.infinite', variables]; +; diff --git a/web/src/generated/introspection.ts b/web/src/generated/introspection.ts index 69f089f8e..888387d67 100644 --- a/web/src/generated/introspection.ts +++ b/web/src/generated/introspection.ts @@ -1,11 +1,20 @@ -export interface PossibleTypesResultData { - possibleTypes: { - [key: string]: string[]; - }; -} -const result: PossibleTypesResultData = { - possibleTypes: { - ComponentUnion: ["Drug", "Game", "Market", "Name", "Player", "Risks"], - }, + + export interface PossibleTypesResultData { + possibleTypes: { + [key: string]: string[] + } + } + const result: PossibleTypesResultData = { + "possibleTypes": { + "ModelUnion": [ + "Drug", + "Encounter", + "Game", + "Item", + "Market", + "Player" + ] + } }; -export default result; + export default result; + \ No newline at end of file diff --git a/web/src/graphql/components.graphql b/web/src/graphql/components.graphql index 5fc019723..cfaaad226 100644 --- a/web/src/graphql/components.graphql +++ b/web/src/graphql/components.graphql @@ -1,48 +1,28 @@ -query AvailableGames { - gameComponents(first: 10) { - totalCount - edges { - node { - creator - num_players - max_players - max_turns - start_time - } - cursor - } - } -} - query GlobalScores($limit: Int, $cursor: Cursor) { - playerComponents( + playerModels( + where: { health: 0 } + order: { direction: DESC, field: CASH } first: $limit after: $cursor - where: { turns_remaining: 0 } - ) # order: { direction: DESC, field: CASH } - { - totalCount + ) { + total_count edges { node { + game_id + player_id + name + avatar_id cash health - entity { - keys - components { - __typename - ... on Name { - short_string - } - } - } + turn } cursor } } } -query MarketPrices($gameId: Int) { - marketComponents(first: 36, where: { game_id: $gameId }) { +query MarketPrices($gameId: u32) { + marketModels(first: 36, where: { game_id: $gameId }) { edges { node { drug_id @@ -52,4 +32,4 @@ query MarketPrices($gameId: Int) { } } } -} +} \ No newline at end of file diff --git a/web/src/graphql/entities.graphql b/web/src/graphql/entities.graphql index 0112bef6c..b52f1e64b 100644 --- a/web/src/graphql/entities.graphql +++ b/web/src/graphql/entities.graphql @@ -1,63 +1,108 @@ -query GameEntity($id: ID!) { - entity(id: $id) { - components { - __typename - ... on Game { - creator - is_finished - max_players - max_turns - num_players - start_time - } - } - } +fragment PlayerProps on Player { + name + avatar_id + cash + status + location_id + drug_count + health + turn + max_turns + max_items + attack + defense + transport + speed + wanted } query PlayerEntity($gameId: String!, $playerId: String!) { entities(keys: [$gameId, $playerId]) { - totalCount + total_count edges { node { - keys - components { + id + models { __typename ... on Player { - cash - status - health - drug_count - bag_limit - location_id - turns_remaining - turns_remaining_on_death + ...PlayerProps } ... on Drug { drug_id quantity } + ... on Item { + item_id + level + name + value + } + ... on Encounter { + encounter_id + level + health + payout + } } } - cursor + } + } +} + +subscription PlayerEntitySubscription($id: ID) { + entityUpdated(id: $id) { + id + keys + model_names + models { + __typename + ... on Player { + ...PlayerProps + } + } + } +} + +subscription PlayerEntityRelatedDataSubscription($id: ID) { + entityUpdated(id: $id) { + id + keys + model_names + models { + __typename + ... on Drug { + drug_id + quantity + } + ... on Item { + item_id + level + name + value + } + ... on Encounter { + encounter_id + level + health + payout + } } } } query LocationEntities($gameId: String!, $locationId: String!) { entities(keys: [$gameId, $locationId]) { - totalCount + total_count edges { node { keys - components { + models { __typename ... on Market { cash quantity - } - ... on Risks { - travel - #capture + location_id + drug_id } } } @@ -66,45 +111,16 @@ query LocationEntities($gameId: String!, $locationId: String!) { } } -# TODO: Query entire game state per gameId in one query -# query GameState($gameId: String!) { -# entities (first: 100, keys: [$gameId]]) { -# totalCount -# edges { -# node { -# componentNames -# components { -# __typename -# ... on Game { -# creator -# is_finished -# max_players -# max_turns -# num_players -# start_time -# } -# ... on Player { -# cash -# health -# turns_remaining -# } -# ... on Drug { -# quantity -# } -# ... on Market { -# drug_id -# location_id -# cash -# quantity -# } -# ... on Risks { -# arrested -# hurt -# mugged -# travel -# } -# } -# } -# } -# } -# } +query PlayerLogs($game_id: String!, $player_id: String!) { + events(last: 1000, keys: ["*", $game_id, $player_id]) { + total_count + edges { + node { + id + keys + data + created_at + } + } + } +} diff --git a/web/src/hooks/burner.tsx b/web/src/hooks/burner.tsx deleted file mode 100644 index 4436f735d..000000000 --- a/web/src/hooks/burner.tsx +++ /dev/null @@ -1,162 +0,0 @@ -import { useCallback, useEffect, useState } from "react"; -import { - Account, - CallData, - ec, - hash, - RpcProvider, - stark, - TransactionFinalityStatus, -} from "starknet"; -import Storage from "@/utils/storage"; -import { ETH_CONTRACT_ADDRESS } from "@/constants"; - -const PREFUND_AMOUNT = "0x8AC7230489E80000"; // 10ETH - -const provider = new RpcProvider({ - nodeUrl: process.env.NEXT_PUBLIC_RPC_ENDPOINT!, -}); - -const admin = new Account( - provider, - process.env.NEXT_PUBLIC_ADMIN_ADDRESS!, - process.env.NEXT_PUBLIC_ADMIN_PRIVATE_KEY!, -); - -type BurnerStorage = { - [address: string]: { - privateKey: string; - publicKey: string; - deployTx: string; - active: boolean; - }; -}; - -export const useBurner = () => { - const [account, setAccount] = useState(); - const [isDeploying, setIsDeploying] = useState(false); - - // init - useEffect(() => { - const storage: BurnerStorage = Storage.get("burners"); - if (storage) { - // check one to see if exists, perhaps appchain restarted - const firstAddr = Object.keys(storage)[0]; - admin.getTransactionReceipt(storage[firstAddr].deployTx).catch(() => { - setAccount(undefined); - Storage.remove("burners"); - //throw new Error("burners not deployed, chain may have restarted"); - console.log("burners not deployed, resetting local storage"); - return; - }); - - // set active account - for (let address in storage) { - if (storage[address].active) { - const burner = new Account( - provider, - address, - storage[address].privateKey, - ); - setAccount(burner); - return; - } - } - } - }, []); - - const list = useCallback(() => { - let storage = Storage.get("burners") || {}; - return Object.keys(storage).map((address) => { - return { - address, - active: storage[address].active, - }; - }); - }, []); - - const select = useCallback((address: string) => { - let storage = Storage.get("burners") || {}; - if (!storage[address]) { - throw new Error("burner not found"); - } - - for (let addr in storage) { - storage[addr].active = false; - } - storage[address].active = true; - - Storage.set("burners", storage); - const burner = new Account(provider, address, storage[address].privateKey); - setAccount(burner); - }, []); - - const create = useCallback(async () => { - setIsDeploying(true); - const privateKey = stark.randomAddress(); - const publicKey = ec.starkCurve.getStarkKey(privateKey); - const address = hash.calculateContractAddressFromHash( - publicKey, - process.env.NEXT_PUBLIC_ACCOUNT_CLASS_HASH!, - CallData.compile({ publicKey }), - 0, - ); - - await prefundAccount(address, admin); - - // deploy burner - const burner = new Account(provider, address, privateKey); - const { transaction_hash: deployTx } = await burner.deployAccount( - { - classHash: process.env.NEXT_PUBLIC_ACCOUNT_CLASS_HASH!, - constructorCalldata: CallData.compile({ publicKey }), - addressSalt: publicKey, - }, - { maxFee: 0 }, - ); - - // save burner - let storage = Storage.get("burners") || {}; - for (let address in storage) { - storage[address].active = false; - } - storage[address] = { - privateKey, - publicKey, - deployTx, - active: true, - }; - - setAccount(burner); - setIsDeploying(false); - Storage.set("burners", storage); - console.log("burner created: ", address); - - return address; - }, []); - - return { - list, - select, - create, - account, - isDeploying, - }; -}; - -const prefundAccount = async (address: string, account: Account) => { - const { transaction_hash } = await account.execute( - { - contractAddress: ETH_CONTRACT_ADDRESS, - entrypoint: "transfer", - calldata: CallData.compile([address, PREFUND_AMOUNT, "0x0"]), - }, - undefined, - { maxFee: 0 }, - ); - - return await account.waitForTransaction(transaction_hash, { - retryInterval: 1000, - successStates: [TransactionFinalityStatus.ACCEPTED_ON_L2], - }); -}; diff --git a/web/src/hooks/fetcher.tsx b/web/src/hooks/fetcher.tsx index 448c7d58a..497f18563 100644 --- a/web/src/hooks/fetcher.tsx +++ b/web/src/hooks/fetcher.tsx @@ -2,6 +2,7 @@ export const useFetchData = ( query: string, ): ((variables?: TVariables) => Promise) => { return async (variables?: TVariables) => { + const res = await fetch(process.env.NEXT_PUBLIC_GRAPHQL_ENDPOINT!, { method: "POST", headers: { @@ -13,6 +14,7 @@ export const useFetchData = ( }), }); + const json = await res.json(); if (json.errors) { diff --git a/web/src/hooks/player.tsx b/web/src/hooks/player.tsx new file mode 100644 index 000000000..e88b79b60 --- /dev/null +++ b/web/src/hooks/player.tsx @@ -0,0 +1,164 @@ +import { GraphQLClient, gql } from "graphql-request"; +import { Client, createClient } from "graphql-ws"; +import { create } from "zustand"; +import { getEntityIdFromKeys } from "@dojoengine/utils"; + +import { PlayerEntity } from "@/dojo/queries/usePlayerEntity"; +import { + World__EntityEdge, + Player, + Drug, + Item, + PlayerEntityDocument, + PlayerEntityRelatedDataSubscriptionDocument, + PlayerEntityQuery, + PlayerEntitySubscriptionDocument, + World__Subscription, + Encounter, +} from "@/generated/graphql"; +import { SCALING_FACTOR } from "@/dojo/constants"; + +export interface PlayerEntityStore { + client: GraphQLClient | null; + wsClient: Client | null; + id: string | null; + playerEntity: PlayerEntity | null; + initPlayerEntity: (gameId: string, playerId: string) => void; + unsubscribers: Array<() => void>; + reset: () => void; +} + +export const usePlayerEntityStore = create((set, get) => ({ + client: null, + wsClient: null, + id: null, + playerEntity: null, + initPlayerEntity: (gameId: string, playerId: string) => { + if (!get().client) { + set({ + client: new GraphQLClient(process.env.NEXT_PUBLIC_GRAPHQL_ENDPOINT!), + }); + } + if (!get().wsClient) { + set({ + wsClient: createClient({ + url: process.env.NEXT_PUBLIC_GRAPHQL_ENDPOINT_WS!, + }), + }); + } + + if (get().id === null) { + subscribe(gameId, playerId); + } + }, + unsubscribers: [], + reset: () => { + for (let unsubscribe of get().unsubscribers) { + unsubscribe(); + } + const wsClient = get().wsClient; + wsClient && wsClient.dispose(); + set({ client: null, wsClient: null, id: null, playerEntity: null, unsubscribers: [] }); + }, +})); + +const subscribe = async (gameId: string, playerId: string) => { + const { wsClient, unsubscribers } = usePlayerEntityStore.getState(); + const id = getEntityIdFromKeys([BigInt(gameId), BigInt(playerId)]); + + //load playerEntity + await executeQuery(gameId, playerId); + + //subscribe to playerEntity changes + unsubscribers.push( + usePlayerEntityStore.getState().wsClient!.subscribe( + { + query: PlayerEntitySubscriptionDocument, + variables: { + id, + }, + }, + { + next: onPlayerEntityData, + error: (error) => console.log({ error }), + complete: () => console.log("complete"), + }, + ), + ); + + //subscribe to player Drug / Items / Encounter changes + for (let drugId of [0, 1, 2, 3, 4, 5]) { + const id = getEntityIdFromKeys([BigInt(gameId), BigInt(playerId), BigInt(drugId)]); + + unsubscribers.push( + usePlayerEntityStore.getState().wsClient!.subscribe( + { + query: PlayerEntityRelatedDataSubscriptionDocument, + variables: { + id, + }, + }, + { + next: onPlayerEntityRelatedData, + error: (error) => console.log({ error }), + complete: () => console.log("complete"), + }, + ), + ); + } + + usePlayerEntityStore.setState({ id: id, unsubscribers: unsubscribers }); +}; + +const executeQuery = async (gameId: string, playerId: string) => { + const data = (await usePlayerEntityStore.getState().client!.request(PlayerEntityDocument, { + gameId: gameId, + playerId: playerId, + })) as PlayerEntityQuery; + + const edges = data!.entities!.edges as World__EntityEdge[]; + + if (edges && edges[0] && edges[0].node) { + const player = PlayerEntity.create(data?.entities?.edges as World__EntityEdge[]); + usePlayerEntityStore.setState({ playerEntity: player }); + } +}; + +const onPlayerEntityData = ({ data }: { data: World__Subscription }) => { + if (!data?.entityUpdated?.models) return; + + // update player + let playerUpdate = data?.entityUpdated?.models[0] as Player; + usePlayerEntityStore.setState((state) => ({ + playerEntity: state.playerEntity?.update(playerUpdate), + })); + + //console.log("updated : Player"); +}; + +const onPlayerEntityRelatedData = ({ data }: { data: World__Subscription }) => { + if (!data?.entityUpdated?.models) return; + + for (let model of data?.entityUpdated?.models) { + if (model && model.__typename === "Drug") { + usePlayerEntityStore.setState((state) => ({ + playerEntity: state.playerEntity?.updateDrug(model as unknown as Drug), + })); + // console.log(`updated : Drug`); + } + + if (model && model.__typename === "Item") { + usePlayerEntityStore.setState((state) => ({ + playerEntity: state.playerEntity?.updateItem(model as unknown as Item), + })); + // console.log(`updated : Item`); + } + + if (model && model.__typename === "Encounter") { + usePlayerEntityStore.setState((state) => ({ + playerEntity: state.playerEntity?.updateEncounter(model as unknown as Encounter), + })); + // console.log(`updated : Encounter`); + } + } +}; diff --git a/web/src/hooks/sound.tsx b/web/src/hooks/sound.tsx index d6e8c9bc5..b03d12114 100644 --- a/web/src/hooks/sound.tsx +++ b/web/src/hooks/sound.tsx @@ -19,6 +19,13 @@ export enum Sounds { Police = "Police.mp3", Gang = "Gang.mp3", GameOver = "GameOver.mp3", + Knife = "Knife.wav", + Uzi = "Uzi.wav", + Run = "Run.mp3", + Pay = "Pay.wav", + Ooo = "Ooo.wav", + Death = "Flatline.mp3", + Punch = "Punch.mp3", } export interface SoundState { diff --git a/web/src/hooks/state.tsx b/web/src/hooks/state.tsx index 19a5f0697..c0581e764 100644 --- a/web/src/hooks/state.tsx +++ b/web/src/hooks/state.tsx @@ -15,6 +15,7 @@ export enum TradeDirection { export type TradeType = { quantity: number; direction: TradeDirection; + total: number; }; export type Encounter = { @@ -54,13 +55,16 @@ export const usePlayerStore = create((set) => ({ let quantity = existingTrade.quantity; let direction = existingTrade.direction; + let total = existingTrade.total; // if the existing trade has the same direction, add quantities if (quantity === trade.direction) { quantity += trade.quantity; + total += trade.total; } else { // if the existing trade has the opposite direction, subtract quantities quantity -= trade.quantity; + total -= trade.total; // if negative quantity, reverse the direction and make the quantity positive if (quantity < 0) { @@ -74,7 +78,7 @@ export const usePlayerStore = create((set) => ({ } } - state.trades.set(drug, { quantity, direction }); + state.trades.set(drug, { quantity, direction, total }); return { trades: new Map(state.trades) }; }), resetTurn: () => { diff --git a/web/src/hooks/toast.tsx b/web/src/hooks/toast.tsx index 0a7beae9c..c542977cd 100644 --- a/web/src/hooks/toast.tsx +++ b/web/src/hooks/toast.tsx @@ -4,19 +4,35 @@ import { Toast } from "@/components/Toast"; const TOAST_DURATION = 2500; +export type ToastType = ReturnType + export const useToast = () => { const chakraToast = useChakraToast(); const toast = useCallback( - (message: string, icon?: React.FC, link?: string, duration: number = TOAST_DURATION) => { + ({ + message, + icon, + link, + duration = TOAST_DURATION, + isError = false + }: { + message: string; + icon?: React.FC; + link?: string; + duration?: number; + isError?: boolean; + }) => { chakraToast({ - position: "bottom-left", + position: "top-left", duration, // default overrides containerStyle: { pointerEvents: "none", - maxW: ["100vw", "400px"], - minW: ["100vw", "400px"], + maxW: "100%", + minW: "auto", + // maxW: ["100vw", "400px"], + // minW: ["100vw", "400px"], px: "24px", m: 0, }, @@ -26,6 +42,7 @@ export const useToast = () => { message={message} icon={icon} link={link} + isError={isError} onClose={() => { // TODO: target close toast by id chakraToast.closeAll(); diff --git a/web/src/pages/[gameId]/[locationSlug]/[drugSlug]/[tradeDirection].tsx b/web/src/pages/[gameId]/[locationSlug]/[drugSlug]/[tradeDirection].tsx index 3d21d14b3..8616fc063 100644 --- a/web/src/pages/[gameId]/[locationSlug]/[drugSlug]/[tradeDirection].tsx +++ b/web/src/pages/[gameId]/[locationSlug]/[drugSlug]/[tradeDirection].tsx @@ -1,39 +1,27 @@ import { useCallback, useEffect, useState } from "react"; -import { - Box, - Text, - VStack, - HStack, - Card, - Button, - Flex, -} from "@chakra-ui/react"; +import { Box, Text, VStack, HStack, Card, Button, Flex, Image } from "@chakra-ui/react"; import Layout from "@/components/Layout"; import { useRouter } from "next/router"; import { Alert, ArrowEnclosed, Cart } from "@/components/icons"; -import Image from "next/image"; import { Footer } from "@/components/Footer"; import { Slider, SliderTrack, SliderFilledTrack } from "@chakra-ui/react"; import { Sounds, playSound } from "@/hooks/sound"; -import { TradeDirection, TradeType, usePlayerStore } from "@/hooks/state"; +import { TradeDirection, TradeType } from "@/hooks/state"; import AlertMessage from "@/components/AlertMessage"; -import { useLocationEntity } from "@/dojo/entities/useLocationEntity"; -import { PlayerEntity, usePlayerEntity } from "@/dojo/entities/usePlayerEntity"; +import { useLocationEntity } from "@/dojo/queries/useLocationEntity"; +import { PlayerEntity } from "@/dojo/queries/usePlayerEntity"; import { formatQuantity, formatCash } from "@/utils/ui"; -import { useSystems } from "@/dojo/systems/useSystems"; +import { useSystems } from "@/dojo/hooks/useSystems"; import { calculateMaxQuantity, calculateSlippage } from "@/utils/market"; import { useToast } from "@/hooks/toast"; import { getDrugBySlug, getLocationBySlug } from "@/dojo/helpers"; import { DrugInfo, DrugMarket } from "@/dojo/types"; -import { useDojo } from "@/dojo"; +import { useDojoContext } from "@/dojo/hooks/useDojoContext"; export default function Market() { const router = useRouter(); const gameId = router.query.gameId as string; - const tradeDirection = - (router.query.tradeDirection as string) === "buy" - ? TradeDirection.Buy - : TradeDirection.Sell; + const tradeDirection = (router.query.tradeDirection as string) === "buy" ? TradeDirection.Buy : TradeDirection.Sell; const location = getLocationBySlug(router.query.locationSlug as string); const drug = getDrugBySlug(router.query.drugSlug as string); @@ -42,26 +30,22 @@ export default function Market() { const [quantitySell, setQuantitySell] = useState(0); const [canSell, setCanSell] = useState(false); const [canBuy, setCanBuy] = useState(false); - const [isSubmitting, setIsSubmitting] = useState(false); - const { buy, sell, error: txError } = useSystems(); - const { addTrade } = usePlayerStore(); - const { account } = useDojo(); + const { account, playerEntityStore } = useDojoContext(); + const { buy, sell, isPending } = useSystems(); + + const { playerEntity } = playerEntityStore; const { location: locationEntity } = useLocationEntity({ gameId, locationId: location?.id, }); - const { player: playerEntity } = usePlayerEntity({ - gameId, - address: account?.address, - }); const { toast } = useToast(); // market price and quantity can fluctuate as players trade useEffect(() => { - if (!locationEntity || !playerEntity || isSubmitting) return; + if (!locationEntity || !playerEntity || isPending) return; const market = locationEntity.drugMarkets.find((d) => d.id === drug?.id); if (!market) return; @@ -73,47 +57,44 @@ export default function Market() { setCanBuy(playerEntity.cash > market.price); setMarket(market); - }, [locationEntity, playerEntity, drug, isSubmitting]); + }, [locationEntity, playerEntity, drug, isPending]); const onTrade = useCallback(async () => { - setIsSubmitting(true); playSound(Sounds.Trade); router.push(`/${gameId}/${location!.slug}`); let toastMessage = "", hash = "", - quantity; - - if (tradeDirection === TradeDirection.Buy) { - ({ hash } = await buy(gameId, location!.name, drug!.name, quantityBuy)); - toastMessage = `You bought ${quantityBuy} ${drug!.name}`; - quantity = quantityBuy; - } else if (tradeDirection === TradeDirection.Sell) { - ({ hash } = await sell(gameId, location!.name, drug!.name, quantitySell)); - toastMessage = `You sold ${quantitySell} ${drug!.name}`; - quantity = quantitySell; - } - - toast(toastMessage, Cart, `http://amazing_explorer/${hash}`); - - addTrade(drug!.type, { - direction: tradeDirection, quantity, - } as TradeType); - }, [ - tradeDirection, - quantityBuy, - quantitySell, - gameId, - location, - drug, - router, - buy, - sell, - toast, - addTrade, - ]); + total; + + try { + if (tradeDirection === TradeDirection.Buy) { + ({ hash } = await buy(gameId, location!.type, drug!.type, quantityBuy)); + toastMessage = `You bought ${quantityBuy} ${drug!.name}`; + quantity = quantityBuy; + + const slippage = calculateSlippage(market!.marketPool, quantity, tradeDirection); + total = slippage.newPrice * quantity; + } else if (tradeDirection === TradeDirection.Sell) { + ({ hash } = await sell(gameId, location!.type, drug!.type, quantitySell)); + toastMessage = `You sold ${quantitySell} ${drug!.name}`; + quantity = quantitySell; + + const slippage = calculateSlippage(market!.marketPool, quantity, tradeDirection); + total = slippage.newPrice * quantity; + } + + // toast({ + // message: toastMessage, + // icon: Cart, + // link: `http://amazing_explorer/${hash}`, + // }); + } catch (e) { + console.log(e); + } + }, [tradeDirection, quantityBuy, quantitySell, gameId, location, drug, router, buy, sell, toast, market]); if (!router.isReady || !playerEntity || !drug || !market) return <>; @@ -124,16 +105,41 @@ export default function Market() { prefixTitle: "The market", imageSrc: "/images/dealer.png", }} + footer={ +
+ + + {tradeDirection == TradeDirection.Buy && canBuy && ( + + )} + + {tradeDirection == TradeDirection.Sell && canSell && ( + + )} +
+ } > - + - - {drug.name} - + {drug.name} {drug.icon({ boxSize: "36px" })} @@ -145,8 +151,7 @@ export default function Market() { - {((tradeDirection == TradeDirection.Buy && canBuy) || - (tradeDirection == TradeDirection.Sell && canSell)) && ( + {((tradeDirection == TradeDirection.Buy && canBuy) || (tradeDirection == TradeDirection.Sell && canSell)) && ( )} - {tradeDirection == TradeDirection.Buy && !canBuy && ( - - )} + {tradeDirection == TradeDirection.Buy && !canBuy && } {tradeDirection == TradeDirection.Sell && !canSell && ( )} - -
- - - {tradeDirection == TradeDirection.Buy && canBuy && ( - - )} - - {tradeDirection == TradeDirection.Sell && canSell && ( - - )} -
-
+
); } @@ -227,12 +199,10 @@ const QuantitySelector = ({ useEffect(() => { if (type === TradeDirection.Buy) { let max_buyable = calculateMaxQuantity(market.marketPool, player.cash); - let bag_space = player.bagLimit - player.drugCount; + let bag_space = player.getTransport() - player.drugCount; setMax(Math.min(max_buyable, bag_space)); } else if (type === TradeDirection.Sell) { - const playerQuantity = player.drugs.find( - (d) => d.id === drug.id, - )?.quantity; + const playerQuantity = player.drugs.find((d) => d.id === drug.id)?.quantity; setMax(playerQuantity || 0); setQuantity(playerQuantity || 0); } @@ -273,37 +243,21 @@ const QuantitySelector = ({ }, []); return ( - - + + - {" "} - {priceImpact ? (priceImpact * 100).toFixed(2) : "0"}% slippage ($ - {totalPrice - ? (totalPrice / quantity).toFixed(0) - : market.price.toFixed(0)}{" "} - per) + {priceImpact ? (priceImpact * 100).toFixed(2) : "0"}% slippage ($ + {totalPrice ? (totalPrice / quantity).toFixed(0) : market.price.toFixed(0)} per) Total: - - {totalPrice ? formatCash(totalPrice) : "$0"} - + {totalPrice ? formatCash(totalPrice) : "$0"} - + { - if (playerEntity && locationId) { + if (playerEntity) { // check if player at right location if (locationId !== playerEntity.locationId) { - router.replace( - `/${gameId}/${getLocationById(playerEntity.locationId)?.slug}`, - ); + router.replace(`/${gameId}/${getLocationById(playerEntity.locationId)?.slug}`); return; } + + setIsLastDay(playerEntity.maxTurns > 0 && playerEntity.turn >= playerEntity.maxTurns); } - }, [locationId, playerEntity, router, gameId]); + }, [locationId, playerEntity, playerEntity?.locationId, router, gameId]); - if (!playerEntity || !locationEntity || !gameEntity) { + if (!playerEntity || !locationEntity) { return <>; } - const prefixTitle = - playerEntity.turnsRemaining === 0 - ? "Final Day" - : `Day ${gameEntity.maxTurns - playerEntity.turnsRemaining + 1} / ${ - gameEntity.maxTurns - }`; + const prefixTitle = isLastDay + ? "Final Day" + : `Day ${playerEntity.turn} ${playerEntity.maxTurns === 0 ? "" : "/ " + playerEntity.maxTurns}`; return ( + + + } > - - - - Market - - + + + + + + {sortDrugMarkets(locationEntity.drugMarkets).map((drug, index) => { const drugInfo = getDrugById(drug.id)!; - const canBuy = - drug.price <= playerEntity.cash && - playerEntity.drugCount < playerEntity.bagLimit; - const canSell = !!playerEntity.drugs.find( - (d) => d.id === drug.id && d.quantity > 0, - ); + const canBuy = drug.price <= playerEntity.cash && playerEntity.drugCount < playerEntity.getTransport(); + const canSell = !!playerEntity.drugs.find((d) => d.id === drug.id && d.quantity > 0); return ( {drugInfo.name} @@ -132,87 +120,41 @@ export default function Location() { position="absolute" pointerEvents={["none", "auto"]} > - - + + {drugInfo.icon({})} - - + + {formatCash(drug.price)} - + {formatQuantity(drug.marketPool.quantity)} - + ); })} - -
- -
); } -const BuySellBtns = ({ - canBuy, - canSell, - drugSlug, -}: { - canBuy: boolean; - canSell: boolean; - drugSlug: string; -}) => { +const BuySellBtns = ({ canBuy, canSell, drugSlug }: { canBuy: boolean; canSell: boolean; drugSlug: string }) => { const router = useRouter(); return ( - - @@ -234,14 +176,7 @@ const BuySellMobileToggle = ({ return ( <> - + diff --git a/web/src/pages/[gameId]/end.tsx b/web/src/pages/[gameId]/end.tsx index f7b241b86..776d35fe7 100644 --- a/web/src/pages/[gameId]/end.tsx +++ b/web/src/pages/[gameId]/end.tsx @@ -1,9 +1,9 @@ import Header from "@/components/Header"; -import { Gem, Trophy, Pistol, Arrest, Roll } from "@/components/icons"; +import { Skull, Heart, DollarBag, Trophy, Pistol, Arrest, Roll, Siren } from "@/components/icons"; import Input from "@/components/Input"; import Leaderboard from "@/components/Leaderboard"; -import { useDojo } from "@/dojo"; -import { useSystems } from "@/dojo/systems/useSystems"; +import { useDojoContext } from "@/dojo/hooks/useDojoContext"; +import { useSystems } from "@/dojo/hooks/useSystems"; import { Container, Flex, @@ -23,52 +23,54 @@ import { UnorderedList, ListItem, Link, + Box, } from "@chakra-ui/react"; import { motion } from "framer-motion"; import { useRouter } from "next/router"; import Button from "@/components/Button"; -import { ReactNode, useCallback, useState } from "react"; -import { usePlayerEntity } from "@/dojo/entities/usePlayerEntity"; -import { useGameEntity } from "@/dojo/entities/useGameEntity"; +import { ReactNode, useCallback, useEffect, useState } from "react"; import { Calendar } from "@/components/icons/archive"; -import { Skull, Heart } from "@/components/icons"; import { formatCash } from "@/utils/ui"; import { Footer } from "@/components/Footer"; +import { genAvatarFromId } from "@/components/avatar/avatars"; +import { Avatar } from "@/components/avatar/Avatar"; +import ShareButton from "@/components/ShareButton"; +import { playSound, Sounds } from "@/hooks/sound"; export default function End() { const router = useRouter(); const gameId = router.query.gameId as string; - const { setName: submitSetName } = useSystems(); - const [name, setName] = useState(""); + const [name, setName] = useState(""); + const [avatarId, setAvatarId] = useState(0); + const [isDead, setIsDead] = useState(false); + const [day, setDay] = useState(0); const [isSubmitting, setIsSubmitting] = useState(false); const [isCreditOpen, setIsCreditOpen] = useState(false); - const { account } = useDojo(); + const { account, playerEntityStore } = useDojoContext(); + const { playerEntity } = playerEntityStore; - const { player: playerEntity } = usePlayerEntity({ - gameId, - address: account?.address, - }); + useEffect(() => { + playSound(Sounds.Death, 0.3); + }, []); - const { game: gameEntity } = useGameEntity({ - gameId, - }); + useEffect(() => { + if (playerEntity) { + setName(playerEntity.name); + setAvatarId(playerEntity.avatarId); + setIsDead(playerEntity?.health === 0); + setDay(playerEntity.turn); + } + }, [playerEntity]); - const isDead = playerEntity?.health === 0; + // const onSubmitName = useCallback(async () => { + // if (!name) return; - const turnRemaining = isDead - ? playerEntity?.turnsRemainingOnDeath - : playerEntity?.turnsRemaining; - const day = (gameEntity?.maxTurns || 1_000) - (turnRemaining || 0); - - const onSubmitName = useCallback(async () => { - if (!name) return; - - setIsSubmitting(true); - await submitSetName(gameId, name); - router.push("/"); - }, [name, gameId, router, submitSetName]); + // setIsSubmitting(true); + // await submitSetName(gameId, name); + // router.push("/"); + // }, [name, gameId, router, submitSetName]); const onCreditClose = useCallback(() => { setIsCreditOpen(false); @@ -89,16 +91,12 @@ export default function End() { {isDead && ( - + You died ... )} - + Game Over @@ -108,17 +106,20 @@ export default function End() { {/* } /> */} - } /> + + } /> - } - /> + } /> - } /> + + {/* : } /> + + } /> + */} {/* } /> @@ -128,22 +129,11 @@ export default function End() { - - {/* */} + + - - - Name Entry - - setName(e.target.value)} - /> - - Max 31 characters - - -
- <> - - - -
+ sunset +
diff --git a/web/src/pages/[gameId]/event/consequence.tsx b/web/src/pages/[gameId]/event/consequence.tsx index 626d45e53..d2728b5c1 100644 --- a/web/src/pages/[gameId]/event/consequence.tsx +++ b/web/src/pages/[gameId]/event/consequence.tsx @@ -1,86 +1,72 @@ -import Image from "next/image"; import { Footer } from "@/components/Footer"; import Layout from "@/components/Layout"; -import { getOutcomeInfo } from "@/dojo/helpers"; -import { Heading, Text, VStack } from "@chakra-ui/react"; +import { getLocationById, getOutcomeInfo } from "@/dojo/helpers"; +import { Box, Heading, Text, VStack, Image } from "@chakra-ui/react"; import { useRouter } from "next/router"; import Button from "@/components/Button"; -import { usePlayerEntity } from "@/dojo/entities/usePlayerEntity"; -import { useDojo } from "@/dojo"; +import { useDojoContext } from "@/dojo/hooks/useDojoContext"; import { useMemo } from "react"; -import { PlayerStatus } from "@/dojo/types"; +import { OutcomeInfo, PlayerStatus } from "@/dojo/types"; import { Outcome } from "@/dojo/types"; import { playSound, Sounds } from "@/hooks/sound"; -import { useEffect } from "react"; +import { useEffect, useState } from "react"; +import { formatCash } from "@/utils/ui"; export default function Consequence() { const router = useRouter(); const gameId = router.query.gameId as string; - const outcome = getOutcomeInfo( - Number(router.query.status), - Number(router.query.outcome), - ); - const { account } = useDojo(); - const { player: playerEntity } = usePlayerEntity({ - gameId, - address: account?.address, - }); + const { account, playerEntityStore } = useDojoContext(); + const { playerEntity } = playerEntityStore; + + const [outcome, setOutcome] = useState(undefined); + const [isDead, setIsDead] = useState(false); + const [payout, setPayout] = useState(undefined); - const isDead = outcome.type == Outcome.Died; - const response = useMemo(() => outcome.getResponse(true), [outcome]); + const response = useMemo(() => outcome?.getResponse(true), [outcome]); + + useEffect(() => { + const outcomeInfos = getOutcomeInfo(router.query.status as PlayerStatus, Number(router.query.outcome)); + setOutcome(outcomeInfos); + if (router.query.payout) { + setPayout(Number(router.query.payout)); + } + }, [router.query.status, router.query.outcome, router.query.payout]); useEffect(() => { - if (outcome.type == Outcome.Died) { + if (outcome && outcome.type === Outcome.Died) { + setIsDead(true); playSound(Sounds.GameOver); } }, [outcome]); - if (!router.isReady || !playerEntity) { + if (!router.isReady || !playerEntity || !outcome) { return <>; } return ( <> - - - - You... - - - {outcome.name} - - - {outcome.name} - - - {response} - - {outcome.description && `* ${outcome.description} *`} - - -
+ {!isDead ? ( )}
+ } + > + + + + {outcome.title} + + + {outcome.name} + + + {outcome.name} + + + {response} + {outcome.description && `* ${outcome.description} *`} + {payout && `You confiscated ${formatCash(payout)} `} + + +
diff --git a/web/src/pages/[gameId]/event/decision.tsx b/web/src/pages/[gameId]/event/decision.tsx index 3f7ee9d97..eb96029eb 100644 --- a/web/src/pages/[gameId]/event/decision.tsx +++ b/web/src/pages/[gameId]/event/decision.tsx @@ -1,60 +1,84 @@ -import Image from "next/image"; -import { useDojo } from "@/dojo"; -import { usePlayerEntity } from "@/dojo/entities/usePlayerEntity"; -import { getLocationById } from "@/dojo/helpers"; -import { useSystems } from "@/dojo/systems/useSystems"; -import { Action, Outcome, PlayerStatus } from "@/dojo/types"; -import { usePlayerStore } from "@/hooks/state"; -import { ConsequenceEventData } from "@/dojo/events"; -import { Heading, Text, VStack } from "@chakra-ui/react"; +import { useDojoContext } from "@/dojo/hooks/useDojoContext"; +import { ShopItem, PlayerEntity } from "@/dojo/queries/usePlayerEntity"; +import { getLocationById, getShopItem } from "@/dojo/helpers"; +import { useSystems } from "@/dojo/hooks/useSystems"; +import { Action, ItemTextEnum, Outcome, PlayerStatus } from "@/dojo/types"; +import { ConsequenceEventData, MarketEventData, displayMarketEvents } from "@/dojo/events"; +import { Card, Divider, HStack, Heading, Text, VStack, Image, StyleProps, Box } from "@chakra-ui/react"; import { useRouter } from "next/router"; -import { useCallback, useEffect, useState } from "react"; +import React, { useCallback, useEffect, useRef, useState } from "react"; import Layout from "@/components/Layout"; import { Footer } from "@/components/Footer"; import Button from "@/components/Button"; import { useToast } from "@/hooks/toast"; -import { Heart } from "@/components/icons"; import { playSound, Sounds } from "@/hooks/sound"; +import { Inventory } from "@/components/Inventory"; +import { IsMobile, formatCash } from "@/utils/ui"; +import { getSentence } from "@/responses"; +import CashIndicator from "@/components/player/CashIndicator"; +import HealthIndicator from "@/components/player/HealthIndicator"; +import { Encounter } from "@/generated/graphql"; +import { DollarBag, Fist, Flipflop, Heart, Siren } from "@/components/icons"; + +type CombatLog = { + text: string; + color: string; + icon?: React.FC; +}; export default function Decision() { const router = useRouter(); const gameId = router.query.gameId as string; - const nextLocation = getLocationById(router.query.nextId as string); + const healthLoss = router.query.healthLoss as string; + const demandPct = router.query.demandPct as string; + + const { account, playerEntityStore } = useDojoContext(); + const [status, setStatus] = useState(); - const [isSubmitting, setIsSubmitting] = useState(false); - const [prefixTitle, setPrefixTitle] = useState(); - const [title, setTitle] = useState(); - const [demand, setDemand] = useState(); - const [penalty, setPenalty] = useState(); - - const { toast } = useToast(); - const { account } = useDojo(); - const { decide } = useSystems(); - const { addEncounter } = usePlayerStore(); - - const { player: playerEntity } = usePlayerEntity({ - gameId, - address: account?.address, - }); + const [prefixTitle, setPrefixTitle] = useState(""); + const [title, setTitle] = useState(""); + const [demand, setDemand] = useState(""); + const [isRedirecting, setIsRedirecting] = useState(false); + const [encounter, setEncounter] = useState(undefined); + + const [attackItem, setAttackItem] = useState(undefined); + const [speedItem, setSpeedItem] = useState(undefined); + + const [isPaying, setIsPaying] = useState(false); + const [isRunning, setIsRunning] = useState(false); + const [isFigthing, setIsFigthing] = useState(false); + + const [combatLogs, setCombatLogs] = useState([]); + const [sentence, setSentence] = useState(""); + + const toaster = useToast(); + const { decide, isPending } = useSystems(); + + const { playerEntity } = playerEntityStore; + + const combatsListRef = useRef(null); + const isMobile = IsMobile(); useEffect(() => { - if (playerEntity && !isSubmitting) { - switch (playerEntity.status) { + if (playerEntity && !isPending) { + switch (PlayerStatus[playerEntity.status]) { case PlayerStatus.BeingMugged: setPrefixTitle("You encountered a..."); setTitle("Gang!"); - setDemand(`They want 50% of your $PAPER!`); + setDemand(`They want ${demandPct}% of your $PAPER!`); + setSentence(getSentence(PlayerStatus.BeingMugged, Action.Fight)); break; case PlayerStatus.BeingArrested: setPrefixTitle("You encountered the..."); setTitle("Cops!"); - setDemand(`They want 20% of your DRUGS!`); + setDemand(`They want ${demandPct}% of your DRUGS!`); + setSentence(getSentence(PlayerStatus.BeingArrested, Action.Fight)); break; } setStatus(playerEntity.status); } - }, [playerEntity, isSubmitting]); + }, [playerEntity, isPending, demandPct]); useEffect(() => { if (status == PlayerStatus.BeingArrested) { @@ -65,75 +89,260 @@ export default function Decision() { } }, [status]); - const onDecision = useCallback( - async (action: Action) => { - setIsSubmitting(true); - setPenalty(""); + useEffect(() => { + if (playerEntity && playerEntity.items) { + setAttackItem(playerEntity.items.find((i) => i.id === ItemTextEnum.Attack)); + setSpeedItem(playerEntity.items.find((i) => i.id === ItemTextEnum.Speed)); + } + }, [playerEntity, playerEntity?.items]); + + useEffect(() => { + if (playerEntity && playerEntity.encounters && !isPending) { + if (status === PlayerStatus.BeingMugged) { + setEncounter(playerEntity.encounters.find((i) => i.encounter_id === "Gang")); + } + if (status === PlayerStatus.BeingArrested) { + setEncounter(playerEntity.encounters.find((i) => i.encounter_id === "Cops")); + } + } + }, [playerEntity, playerEntity?.encounters, status, isPending]); + + useEffect(() => { + if (!isPending) { + setIsPaying(false); + setIsRunning(false); + setIsFigthing(false); + } + }, [isPending]); - const result = await decide(gameId, action, nextLocation!.id); - const event = result.event! as ConsequenceEventData; - addEncounter(playerEntity!.status, event.outcome); + useEffect(() => { + if (!combatsListRef.current) return; + const lastEl = combatsListRef.current["lastElementChild"]; + // @ts-ignore + lastEl && lastEl.scrollIntoView({ behavior: "smooth" }); + }, [combatLogs.length]); - switch (event.outcome) { - case Outcome.Captured: - setIsSubmitting(false); - setPrefixTitle("Your escape..."); - setTitle("Failed!"); - setPenalty(`You lost ${event.healthLoss}HP!`); - toast( - `You were captured and lost ${event.healthLoss}HP!`, - Heart, - `http://amazing_explorer/${result.hash}`, - ); + const addCombatLog = (log: CombatLog) => { + setCombatLogs((logs) => [...logs, log]); + }; + + const onDecision = async (action: Action) => { + try { + switch (action) { + case Action.Pay: + addCombatLog({ text: "You decided to pay up", color: "neon.400", icon: DollarBag }); + setSentence(getSentence(playerEntity!.status, Action.Pay)); + playSound(Sounds.Pay); + break; + case Action.Run: + addCombatLog({ + text: "You split without a second thought", + color: "neon.400", + icon: speedItem ? getShopItem(speedItem.id, speedItem.level).icon : Flipflop, + }); + setSentence(getSentence(playerEntity!.status, Action.Run)); + playSound(Sounds.Run); + break; + case Action.Fight: + //addCombatLog({ text: "Bouyakaaa", color: "neon.400" }); + setSentence(getSentence(playerEntity!.status, Action.Fight)); + switch (attackItem?.level) { + case 1: + playSound(Sounds.Knife); + break; + case 2: + playSound(Sounds.Magnum357); + break; + case 3: + playSound(Sounds.Uzi); + break; + default: + playSound(Sounds.Punch); + break; + } break; + } + + // setIsPaying(false); + // setIsRunning(false); + // setIsFigthing(false); + // return; + + // save player status + const playerStatus = playerEntity?.status; + + const { event, events } = await decide(gameId, action); + if (events) { + displayMarketEvents(events as MarketEventData[], toaster); + } + + const consequenceEvent = event as ConsequenceEventData; + + switch (consequenceEvent.outcome) { case Outcome.Died: - toast( - `You too ${event.healthLoss}HP damage and died...`, - Heart, - `http://amazing_explorer/${result.hash}`, - ); - return router.push(`/${gameId}/end`); + setIsRedirecting(true); + return router.replace(`/${gameId}/end`); - case Outcome.Escaped: case Outcome.Paid: + case Outcome.Escaped: + setIsRedirecting(true); + consequenceEvent.dmgDealt > 0 && + addCombatLog({ + text: `You dealt ${consequenceEvent.dmgDealt}HP!`, + color: "neon.400", + icon: attackItem ? getShopItem(attackItem.id, attackItem.level).icon : undefined, + }); + return router.replace( + `/${gameId}/event/consequence?outcome=${consequenceEvent.outcome}&status=${playerStatus}`, + ); + + case Outcome.Victorious: + setIsRedirecting(true); + consequenceEvent.dmgDealt > 0 && + addCombatLog({ text: `You dealt ${consequenceEvent.dmgDealt}HP!`, color: "neon.400" }); return router.replace( - `/${gameId}/event/consequence?outcome=${event.outcome}&status=${ - playerEntity!.status + `/${gameId}/event/consequence?outcome=${consequenceEvent.outcome}&status=${playerStatus}&payout=${ + encounter!.payout }`, ); + + case Outcome.Captured: + playSound(Sounds.Ooo); + consequenceEvent.dmgDealt > 0 && + addCombatLog({ + text: `You dealt ${consequenceEvent.dmgDealt}HP!`, + color: "neon.400", + icon: attackItem ? getShopItem(attackItem.id, attackItem.level).icon : Fist, + }); + addCombatLog({ text: `You lost ${consequenceEvent.healthLoss}HP!`, color: "red", icon: Heart }); + break; } - }, - [gameId, nextLocation, router, playerEntity, addEncounter, decide, toast], - ); + } catch (e) { + console.log(e); + } + }; - if (!playerEntity || !router.isReady) { + if (!playerEntity || !router.isReady || isRedirecting) { return <>; } - if (playerEntity.status == PlayerStatus.Normal && !isSubmitting) { - return router.push( - `/${gameId}/${getLocationById(playerEntity.locationId)!.slug}`, - ); + // if playerEntity is too slow to update, PlayerStatus is still Normal + if ((playerEntity.status == PlayerStatus.Normal || !encounter) && !isPending) { + //router.push(`/${gameId}/turn`); + // router.push( + // `/${gameId}/${getLocationById(playerEntity.locationId)!.slug}`, + // ); + return <>; } return ( - <> - + + onDecision(Action.Run)} - onPay={() => onDecision(Action.Pay)} + sentence={sentence} + encounter={encounter!} + playerEntity={playerEntity} + imageSrc={`/images/events/${status == PlayerStatus.BeingMugged ? "muggers.gif" : "cops.gif"}`} + flex={[0, 1]} + mb={0} + w="full" /> - - + + + + + + + + Combat Log + + + 0 ? "10px" : "0"}> + You lost {healthLoss} HP! + + + + {combatLogs && + combatLogs.map((i, key) => ( + + {i.icon && + i.icon({ + boxSize: "26", + })} + {i.text} + + ))} + + + + + + + +
+ + + + +
+
+
+ ); } @@ -142,89 +351,107 @@ const Encounter = ({ title, demand, imageSrc, - penalty, - isSubmitting, - onPay, - onRun, + sentence, + encounter, + playerEntity, + ...props }: { prefixTitle?: string; title?: string; demand?: string; imageSrc: string; - penalty?: string; - isSubmitting?: boolean; - onPay: () => void; - onRun: () => void; -}) => { - const [isPaying, setIsPaying] = useState(false); - const [isRunning, setIsRunning] = useState(false); - - useEffect(() => { - if (!isSubmitting) { - setIsPaying(false); - setIsRunning(false); - } - }, [isSubmitting]); + sentence: string; + playerEntity: PlayerEntity; + encounter: Encounter; +} & StyleProps) => { return ( - <> + - + {prefixTitle} - + {title} - adverse event - - - {isSubmitting ? ( - <> - {isRunning && You split without a second thought} - {isPaying && You decided to pay up} - - ) : ( - <> - {demand} - {penalty} - - )} + + {!IsMobile() && sentence && ( + <> + + + {sentence} + + + + + + )} + + adverse event + + + + + + + LVL {encounter.level} + + {IsMobile() ? ( + + ) : ( + + )} + + {IsMobile() ? ( + + ) : ( + + )} + + + {!IsMobile() && ( + + + + {demand} + + + )} + + -
- - -
- + {IsMobile() && ( + + {demand} + + )} +
); }; + +/// TODO: move this in a relevant place +function getEncounterNPCMaxHealth(level: number, turn: number) { + // Calculate initial health based on level and turn. + let health = level * 8 + turn; + // Ensure health does not exceed 100. + health = Math.min(health, 100); + + return health; +} diff --git a/web/src/pages/[gameId]/index.tsx b/web/src/pages/[gameId]/index.tsx index baa8b6ad4..e57d82021 100644 --- a/web/src/pages/[gameId]/index.tsx +++ b/web/src/pages/[gameId]/index.tsx @@ -1,85 +1,37 @@ -import { - Spacer, - Text, - HStack, - Divider, - UnorderedList, - ListItem, - OrderedList, -} from "@chakra-ui/react"; +import { Text, HStack, Divider, Image } from "@chakra-ui/react"; import Button from "@/components/Button"; import Layout from "@/components/Layout"; import { useRouter } from "next/router"; import { Link } from "@/components/icons"; +import { useDojoContext } from "@/dojo/hooks/useDojoContext"; +import { useEffect } from "react"; +import { Location, PlayerStatus } from "@/dojo/types"; +import { getLocationByType } from "@/dojo/helpers"; -export default function Join() { +export default function Redirector() { const router = useRouter(); - return ( - - - - - GAME NAME - - GANGSTARS - - - - - NO. OF TURNS - - 30 - - - - - LOBBY - - 5 Players - - - - - - Shinobi - Click_Save - 0x4b1...3312 - 0x523...ccde - 0xabe...49bd - + const gameId = router.query.gameId as string; + + const { playerEntityStore, account } = useDojoContext(); + const { playerEntity } = playerEntityStore; - - MATCH BEGINS IN - - 15m35s - - {/*
- - -
*/} + useEffect(() => { + if (playerEntity?.status === PlayerStatus.Normal) { + router.push(`/${gameId}/${getLocationByType(Number(playerEntity!.locationId))?.slug}`); + } else if (playerEntity?.status === PlayerStatus.AtPawnshop) { + router.push(`/${gameId}/pawnshop`); + } else if ( + playerEntity?.status === PlayerStatus.BeingArrested || + playerEntity?.status === PlayerStatus.BeingMugged + ) { + // + router.push(`/${gameId}/decision`); + } + }, [playerEntity, playerEntity?.status, playerEntity?.locationId, router, gameId]); + + return ( + + loading ); } diff --git a/web/src/pages/[gameId]/logs.tsx b/web/src/pages/[gameId]/logs.tsx new file mode 100644 index 000000000..84484df9a --- /dev/null +++ b/web/src/pages/[gameId]/logs.tsx @@ -0,0 +1,447 @@ +import Layout from "@/components/Layout"; +import { Footer } from "@/components/Footer"; + +import { useDojoContext } from "@/dojo/hooks/useDojoContext"; +import { + getActionName, + getDrugById, + getDrugByType, + getLocationById, + getOutcomeInfo, + getOutcomeName, + getShopItem, + getShopItemByType, +} from "@/dojo/helpers"; +import { useSystems } from "@/dojo/hooks/useSystems"; + +import { HStack, Heading, ListItem, Text, UnorderedList, VStack, Box, Tooltip, Image } from "@chakra-ui/react"; +import { useRouter } from "next/router"; +import Button from "@/components/Button"; +import { useEffect, useRef, useState } from "react"; +import { IsMobile, formatCash } from "@/utils/ui"; +import { Bag, DollarBag, Event } from "@/components/icons"; +import { usePlayerLogs } from "@/dojo/queries/usePlayerLogs"; +import { GameCreatedData, PlayerJoinedData, WorldEvents } from "@/dojo/generated/contractEvents"; +import { + AdverseEventData, + AtPawnshopEventData, + BoughtEventData, + BoughtItemEventData, + ConsequenceEventData, + CreateEventData, + DecisionEventData, + GameOverEventData, + JoinedEventData, + ParseEventResult, + SoldEventData, + TraveledEventData, +} from "@/dojo/events"; +import { Action, Outcome, PlayerStatus } from "@/dojo/types"; +import { SCALING_FACTOR } from "@/dojo/constants"; +import { Profile } from "@/components/ProfileButton"; + +type LogByDay = { + day: number; + location: string; + logs: ParseEventResult[]; +}; + +export default function Logs() { + const router = useRouter(); + const gameId = router.query.gameId as string; + const playerId = router.query.playerId as string; + + const { account, playerEntityStore } = useDojoContext(); + const { playerEntity } = playerEntityStore; + + const { playerLogs, isFetched } = usePlayerLogs({ gameId, playerId: playerId || account?.address }); + + const [ playerName, setPlayerName] = useState(""); + const [logs, setLogs] = useState([]); + const listRef = useRef(null); + + const isMobile = IsMobile(); + + useEffect(() => { + if (!playerLogs) return; + + const logsByDay = []; + + let dayLogs: LogByDay = { + day: 0, + location: "Hood", + logs: [], + }; + + for (let log of playerLogs?.parsedLogs) { + //console.log(`${log.log.node?.id} - ${log.parsed.eventName}`) + if (log.parsed.eventType === WorldEvents.PlayerJoined){ + setPlayerName((log.parsed as JoinedEventData).playerName) + } + if (log.parsed.eventType === WorldEvents.Traveled) { + // create new day + logsByDay.push(dayLogs); + + const travelEvent = log.parsed as TraveledEventData; + + dayLogs = { + day: travelEvent.turn, + location: travelEvent.toLocation, + logs: [], + }; + } else { + // push other events in dayLogs + dayLogs.logs.push(log.parsed); + } + } + logsByDay.push(dayLogs); + + // move day 0 hood events to day 0 location events + const day0HoodIndex = logsByDay.findIndex((i) => i.day === 0 && i.location === "Hood"); + const day0Index = logsByDay.findIndex((i) => i.day === 0 && i.location !== "Hood"); + if (day0HoodIndex > -1 && day0Index > -1) { + const day0Hood = logsByDay[day0HoodIndex]; + const day0 = logsByDay[day0Index]; + day0.logs.unshift(...day0Hood.logs); + day0Hood.logs = []; + logsByDay[day0HoodIndex] = day0Hood; + logsByDay[day0Index] = day0; + } + + setLogs(logsByDay); + }, [playerLogs]); + + useEffect(() => { + if (!listRef.current) return; + const lastEl = listRef.current["lastElementChild"]; + // @ts-ignore + lastEl && lastEl.scrollIntoView({ behavior: "smooth" }); + }, [logs]); + + const rigthPanelMaxH = isMobile ? (playerId ? "calc(100vh - 140px)" : "calc(100vh - 400px)") : "auto"; + + if (!isFetched || !logs) { + return <>; + } + + return ( + + + + } + rigthPanelMaxH={rigthPanelMaxH} + > + + {logs && logs.map((log) => /*log.logs.length > 0 &&*/ renderDay(log))} + + + ); +} + +const CustomLeftPanel = () => { + return ( + + + Hustler Log + + + + ); +}; + +function renderDay(log: LogByDay) { + return ( + <> + {log.location !== "Hood" && ( + + {getLocationById(log.location)?.icon({ color: "neon.500" })} + + DAY {log.day + 1} - {log.location} + + + )} + + + {log.logs.map((i, idx) => { + const key = `key-${log.day}-${idx}`; + + switch (i.eventType) { + case WorldEvents.BoughtItem: + return renderBoughtItem(i as BoughtItemEventData, key); + break; + + case WorldEvents.Bought: + return renderBought(i as BoughtEventData, key); + break; + + case WorldEvents.Sold: + return renderSold(i as SoldEventData, key); + break; + + case WorldEvents.AdverseEvent: + return renderAdverse(i as AdverseEventData, log, key); + break; + + case WorldEvents.PlayerJoined: + // return renderPlayerJoined(i as JoinedEventData, key); + break; + + case WorldEvents.GameOver: + return renderGameOver(i as GameOverEventData, key); + break; + + case WorldEvents.AtPawnshop: + if (log.day > 0) { + // return renderAtPawnshop(i as AtPawnshopEventData, key); + } + break; + + default: + break; + } + })} + + + ); +} + +function renderPlayerJoined(log: JoinedEventData, key: string) { + return ( + + + {log.playerName}'s life + + + ); +} + +function renderGameOver(log: GameOverEventData, key: string) { + return ( + + + RIP
~ {log.playerName} ~ +
+ rip +
+ ); +} + +function renderAtPawnshop(log: GameOverEventData, key: string) { + return ; +} + +function renderBoughtItem(log: BoughtItemEventData, key: string) { + const item = getShopItemByType(Number(log.itemId), Number(log.level)); + return ( + + ); +} + +function renderBought(log: BoughtEventData, key: string) { + const drug = getDrugByType(Number(log.drugId)); + return ( + + ); +} + +function renderSold(log: SoldEventData, key: string) { + const drug = getDrugByType(Number(log.drugId)); + return ( + + ); +} + +function renderAdverse(log: AdverseEventData, dayLog: LogByDay, key: string) { + const status = Number(log.playerStatus); + const encounter = status === 1 ? "Gang" : "Cops"; + + const decisions = dayLog.logs + .filter((i) => i.eventType === WorldEvents.Decision) + .map((i) => i as DecisionEventData) + .map((i) => getActionName(i.action)) + .join(", "); + + const consequences = dayLog.logs + .filter((i) => i.eventType === WorldEvents.Consequence) + .map((i) => i as ConsequenceEventData); + + const lastConsequence = consequences.length > 0 ? consequences[consequences.length - 1] : undefined; + const lastConsequenceName = lastConsequence ? getOutcomeName(lastConsequence.outcome) : ""; + + const totalHpLoss = + dayLog.logs.length > 0 + ? dayLog.logs + .filter((i) => i.eventType === WorldEvents.Consequence) + .map((i) => i as ConsequenceEventData) + .map((i) => i.healthLoss) + .reduce((prev, curr) => { + return prev + curr; + }, log.healthLoss) + : log.healthLoss; + + return ( + + ); +} + +// function renderDecision(log: DecisionEventData, key: string) { +// const action = getActionName(log.action); +// return ; +// } + +// function renderConsequence(log: ConsequenceEventData, key: string) { +// const action = "consequence"; +// return ; +// } + +/*************************************************************** */ + +const Line = ({ + icon, + text, + quantity, + total, + key, + color = "neon.400", + iconColor = "neon.400", +}: { + icon?: React.FC; + text?: string; + quantity?: number | string; + total?: number | string; + key: string; + color?: string; + iconColor?: string; +}) => { + return ( + + + + {icon && icon({ boxSize: "24px", color: iconColor })} + {text} + + + + {quantity} + + + {total} + + + + ); +}; + +const FightLine = ({ + icon, + text, + result, + resultInfos, + consequence, + decisions, + key, + color, +}: { + icon?: React.FC; + text?: string; + result?: string; + resultInfos?: ConsequenceEventData; + consequence?: string; + decisions?: string; + key: string; + color?: string; +}) => { + const [resultTooltip, setResultTooltip] = useState(""); + + useEffect(() => { + if (resultInfos && resultInfos.outcome === Outcome.Victorious) { + setResultTooltip(`+ ${formatCash(resultInfos.cashEarnt)}`); + } else if (resultInfos && resultInfos.outcome === Outcome.Paid) { + if (resultInfos.cashLoss > 0) { + setResultTooltip(`- ${formatCash(resultInfos.cashLoss)}`); + } else { + setResultTooltip(`- ${resultInfos.drugLoss} Drugs`); + } + } else { + setResultTooltip(""); + } + }, [resultInfos, result]); + + return ( + + + + {icon && icon({ boxSize: "24px" })} + + {text} + + + + + {consequence} + + + + + {result} + + + + + ); +}; diff --git a/web/src/pages/[gameId]/pawnshop.tsx b/web/src/pages/[gameId]/pawnshop.tsx new file mode 100644 index 000000000..efdb4242f --- /dev/null +++ b/web/src/pages/[gameId]/pawnshop.tsx @@ -0,0 +1,189 @@ +import { Footer } from "@/components/Footer"; +import Header from "@/components/Header"; +import Input from "@/components/Input"; +import Layout from "@/components/Layout"; +import Button from "@/components/Button"; +import { Alert } from "@/components/icons"; +import { InputNumber } from "@/components/InputNumber"; +import { + VStack, + HStack, + Text, + Card, + CardFooter, + CardBody, + CardHeader, + SimpleGrid, + Box, + Heading, +} from "@chakra-ui/react"; +import { useRouter } from "next/router"; +import { ReactNode, useState, useEffect } from "react"; +import { GameMode, ShopItemInfo, ItemEnum, ItemTextEnum } from "@/dojo/types"; +import { useDojoContext } from "@/dojo/hooks/useDojoContext"; +import { useSystems } from "@/dojo/hooks/useSystems"; +import { playSound, Sounds } from "@/hooks/sound"; +import { useToast } from "@/hooks/toast"; +import { usePlayerEntityStore } from "@/hooks/player"; + +import { Truck } from "@/components/icons/Truck"; +import { getLocationById, getLocationByType, getShopItem, getShopItemStatname } from "@/dojo/helpers"; +import { useAvailableShopItems } from "@/dojo/hooks/useAvailableShopItems"; +import { Inventory } from "@/components/Inventory"; +import { MarketEventData, displayMarketEvents } from "@/dojo/events"; + +export default function PawnShop() { + const router = useRouter(); + const gameId = router.query.gameId as string; + + const { account, playerEntityStore } = useDojoContext(); + const { buyItem, dropItem, skipShop, isPending } = useSystems(); + const { availableShopItems } = useAvailableShopItems(gameId); + + const { playerEntity } = playerEntityStore; + + const [isBuying, setIsBuying] = useState(false); + const [isSkipping, setIsSkipping] = useState(false); + + const toaster = useToast(); + + const [selectedShopItem, setSelectedShopItem] = useState(undefined); + + const selectItem = (shopItem: ShopItemInfo) => { + // do checks + if (selectedShopItem === shopItem) { + setSelectedShopItem(undefined); + } else { + setSelectedShopItem(shopItem); + } + }; + + const onSkip = async () => { + setIsSkipping(true); + try { + const { hash, events } = await skipShop(gameId); + + if (events) { + displayMarketEvents(events as MarketEventData[], toaster); + } + + router.push(`/${gameId}/${getLocationById(playerEntity?.nextLocationId)?.slug}`); + } catch (e) { + console.log(e); + } + setIsSkipping(false); + }; + + const buy = async () => { + if (!selectedShopItem) return; + + setIsBuying(true); + + try { + const icon = selectedShopItem.icon; + playSound(Sounds.Trade); + const { hash, events } = await buyItem(gameId, selectedShopItem.type); + + toaster.toast({ + message: `${selectedShopItem.name} equiped!`, + link: `http://amazing_explorer/${hash}`, + icon, + }); + + if (events) { + displayMarketEvents(events as MarketEventData[], toaster); + } + + router.push(`/${gameId}/${getLocationById(playerEntity?.nextLocationId)?.slug}`); + } catch (e) { + console.log(e); + } + + setIsBuying(false); + }; + + if (!playerEntity) { + return null; + } + + return ( + + + + + } + > + + + + + + For sale - choose one + + + + + {availableShopItems && + availableShopItems.map((shopItem, index) => { + return ( + + ); + })} + + + + ); +} diff --git a/web/src/pages/[gameId]/travel.tsx b/web/src/pages/[gameId]/travel.tsx index 7edfb1d70..1331e70fd 100644 --- a/web/src/pages/[gameId]/travel.tsx +++ b/web/src/pages/[gameId]/travel.tsx @@ -18,6 +18,7 @@ import { } from "@chakra-ui/react"; import { getDrugById, + getDrugByType, getLocationById, getLocationByType, locations, @@ -27,13 +28,16 @@ import { useRouter } from "next/router"; import React, { useCallback, useEffect, useMemo, useState } from "react"; import { formatCash, generatePixelBorderPath } from "@/utils/ui"; import { Map } from "@/components/map"; -import { useSystems } from "@/dojo/systems/useSystems"; -import { usePlayerEntity } from "@/dojo/entities/usePlayerEntity"; + import { useToast } from "@/hooks/toast"; -import { useDojo } from "@/dojo"; -import { useMarketPrices } from "@/dojo/components/useMarkets"; +import { useDojoContext } from "@/dojo/hooks/useDojoContext"; import { Location } from "@/dojo/types"; -import { MarketEventData } from "@/dojo/events"; +import { AdverseEventData, MarketEventData, displayMarketEvents } from "@/dojo/events"; + +import { useSystems } from "@/dojo/hooks/useSystems"; +import { useMarketPrices } from "@/dojo/queries/useMarkets"; +import { WorldEvents } from "@/dojo/generated/contractEvents"; +import { Footer } from "@/components/Footer"; interface MarketPriceInfo { id: string; @@ -47,15 +51,12 @@ export default function Travel() { const gameId = router.query.gameId as string; const [targetId, setTargetId] = useState(); const [currentLocationId, setCurrentLocationId] = useState(); - const [isSubmitting, setIsSubmitting] = useState(false); - const { toast } = useToast(); - const { account } = useDojo(); - const { travel, error: txError } = useSystems(); - const { player: playerEntity } = usePlayerEntity({ - gameId, - address: account?.address, - }); + const toaster = useToast(); + const { account, playerEntityStore } = useDojoContext(); + const { travel, isPending } = useSystems(); + + const { playerEntity } = playerEntityStore; const { locationPrices } = useMarketPrices({ gameId, @@ -68,7 +69,7 @@ export default function Travel() { }, [targetId]); useEffect(() => { - if (playerEntity && !isSubmitting) { + if (playerEntity && !isPending) { if (playerEntity.locationId) { setCurrentLocationId(playerEntity.locationId); setTargetId(playerEntity.locationId); @@ -76,22 +77,18 @@ export default function Travel() { setTargetId(getLocationByType(Location.Central)?.id); } } - }, [playerEntity, isSubmitting]); + }, [playerEntity, isPending]); const prices = useMemo(() => { if (locationPrices && targetId) { - const current = sortDrugMarkets( - locationPrices.get(currentLocationId || ""), - ); + const current = sortDrugMarkets(locationPrices.get(currentLocationId || "")); + const target = sortDrugMarkets(locationPrices.get(targetId)); return target.map((drug, index) => { if (currentLocationId) { const diff = drug.price - current[index].price; - const percentage = - (Math.abs(drug.price - current[index].price) / - current[index].price) * - 100; + const percentage = (Math.abs(drug.price - current[index].price) / current[index].price) * 100; return { id: drug.id, @@ -143,37 +140,40 @@ export default function Travel() { }, [targetId]); const onContinue = useCallback(async () => { - if (targetId) { - setIsSubmitting(true); - const { event, events, hash } = await travel(gameId, targetId); - if (event) { - return router.push(`/${gameId}/event/decision?nextId=${targetId}`); - } + if (targetId && playerEntity) { + try { + const locationId = getLocationById(targetId)!.type; + const { event, events, hash } = await travel(gameId, locationId); - toast( - `You've traveled to ${locationName}`, - Car, - `http://amazing_explorer/${hash}`, - ); - router.push(`/${gameId}/turn`); + if (event) { + if (event.eventType === WorldEvents.AdverseEvent) { + const advEvent = event as AdverseEventData; + return router.push( + `/${gameId}/event/decision?healthLoss=${advEvent.healthLoss}&demandPct=${advEvent.demandPct}`, + ); + } + if (event.eventType === WorldEvents.AtPawnshop) { + return router.push(`/${gameId}/pawnshop`); + } + } - // market events - if (events) { - for (let event of events) { - const e = event as MarketEventData; - const msg = e.increase - ? `Pigs seized ${getDrugById(e.drugId)?.name} in ${ - getLocationById(e.locationId)?.name - }` - : `A shipment of ${getDrugById(e.drugId)?.name} has arrived to ${ - getLocationById(e.locationId)?.name - }`; - const icon = e.increase ? Siren : Truck; - toast(msg, icon, `http://amazing_explorer/${hash}`, 6000); + if (events) { + displayMarketEvents(events as MarketEventData[], toaster); } + + // toaster.toast({ + // message: `You've traveled to ${locationName}`, + // icon: Car, + // link: `http://amazing_explorer/${hash}`, + // }); + + const locationSlug = getLocationById(targetId)!.slug; + router.push(`/${gameId}/${locationSlug}`); + } catch (e) { + console.log(e); } } - }, [targetId, router, gameId, travel, toast]); + }, [targetId, router, gameId, travel, locationName, toaster, playerEntity]); if (!playerEntity || !locationPrices) return <>; @@ -192,49 +192,41 @@ export default function Travel() { /> ), }} + footer={ + +
+ {playerEntity.turn > 0 && ( + + )} + +
+ } > - + - + Location - + - - - - - - - - - - - + +
); } -const LocationPrices = ({ - prices, - isCurrentLocation, -}: { - prices: MarketPriceInfo[]; - isCurrentLocation?: boolean; -}) => { +const LocationPrices = ({ prices, isCurrentLocation }: { prices: MarketPriceInfo[]; isCurrentLocation?: boolean }) => { const { isOpen: isPercentage, onToggle: togglePercentage } = useDisclosure(); return ( - + Prices @@ -321,40 +277,18 @@ const LocationPrices = ({ }} > - + {prices.map((drug, index) => { return ( - + {getDrugById(drug.id)?.icon({ boxSize: "24px", })} - - ${drug.price.toFixed(0)} - + ${drug.price.toFixed(0)} {drug.percentage && drug.diff && drug.diff !== 0 && ( - = 0 ? "neon.200" : "red"} - > - ( - {!isPercentage - ? `${drug.percentage.toFixed(0)}%` - : formatCash(drug.diff)} - ) + = 0 ? "neon.200" : "red"}> + ({!isPercentage ? `${drug.percentage.toFixed(0)}%` : formatCash(drug.diff)}) )} @@ -367,42 +301,14 @@ const LocationPrices = ({ ); }; -const LocationSelectBar = ({ - name, - onNext, - onBack, -}: { - name?: string; - onNext: () => void; - onBack: () => void; -}) => { +const LocationSelectBar = ({ name, onNext, onBack }: { name?: string; onNext: () => void; onBack: () => void }) => { return ( - - + + {name} - + ); }; diff --git a/web/src/pages/[gameId]/turn.tsx b/web/src/pages/[gameId]/turn.tsx index c769979ad..7122b7720 100644 --- a/web/src/pages/[gameId]/turn.tsx +++ b/web/src/pages/[gameId]/turn.tsx @@ -1,11 +1,10 @@ import { Footer } from "@/components/Footer"; import { Bag, Event } from "@/components/icons"; import Layout from "@/components/Layout"; -import { useDojo } from "@/dojo"; -import { useGameEntity } from "@/dojo/entities/useGameEntity"; -import { usePlayerEntity } from "@/dojo/entities/usePlayerEntity"; +import { useDojoContext } from "@/dojo/hooks/useDojoContext"; import { getDrugByType, getLocationById, getOutcomeInfo } from "@/dojo/helpers"; import { TradeDirection, usePlayerStore } from "@/hooks/state"; +import { useSystems } from "@/dojo/hooks/useSystems"; import { HStack, @@ -16,38 +15,25 @@ import { } from "@chakra-ui/react"; import { useRouter } from "next/router"; import Button from "@/components/Button"; -import { useEffect } from "react"; +import { useEffect, useState } from "react"; +import { useAvailableShopItems } from "@/dojo/hooks/useAvailableShopItems"; +import { formatCash } from "@/utils/ui"; +import Image from "next/image"; export default function Turn() { const router = useRouter(); const gameId = router.query.gameId as string; - const { account } = useDojo(); - const { player: playerEntity } = usePlayerEntity({ - gameId, - address: account?.address, - }); - const { game: gameEntity } = useGameEntity({ - gameId, - }); + const { account, playerEntityStore } = useDojoContext(); + + const { playerEntity } = playerEntityStore + const { availableShopItems } = useAvailableShopItems(gameId); const { trades, lastEncounter, resetTurn } = usePlayerStore(); - useEffect(() => { - if (gameEntity && playerEntity) { - // initial move, just forward user to location - if (gameEntity.maxTurns - playerEntity.turnsRemaining === 0) { - router.push( - `/${gameId}/${getLocationById(playerEntity.locationId)?.slug}`, - ); - } - } - }, [gameEntity, playerEntity]); - - if (!playerEntity || !gameEntity) { - return <>; - } - - if (gameEntity.maxTurns - playerEntity.turnsRemaining === 0) { + if ( + !playerEntity || + playerEntity.turn === playerEntity.maxTurns + ) { return <>; } @@ -55,7 +41,7 @@ export default function Turn() { @@ -65,7 +51,7 @@ export default function Turn() { @@ -80,7 +66,7 @@ export default function Turn() { icon={drugInfo.icon} product={drugInfo.name} quantity={`${change}${trade.quantity}`} - cost={"$$$"} + total={formatCash(Math.abs(trade.total))} /> ); @@ -132,17 +118,43 @@ export default function Turn() {
- + + + {availableShopItems && availableShopItems.length > 0 && ( + + )} + + + + +
@@ -153,13 +165,13 @@ const Product = ({ icon, product, quantity, - cost, + total, isHeader, }: { icon: React.FC | undefined; product: string; quantity: number | string; - cost: number | string; + total: number | string; isHeader?: boolean; }) => { const header = isHeader && { @@ -174,13 +186,14 @@ const Product = ({ {icon && icon({ boxSize: "24px" })} {product} - - {cost} - + - {quantity} + + + {total} + ); }; diff --git a/web/src/pages/_app.tsx b/web/src/pages/_app.tsx index 8a0cb93a3..468acf642 100644 --- a/web/src/pages/_app.tsx +++ b/web/src/pages/_app.tsx @@ -7,10 +7,12 @@ import Fonts from "@/theme/fonts"; import useKonamiCode, { starkpimpSequence } from "@/hooks/useKonamiCode"; import MakeItRain from "@/components/MakeItRain"; -import { useEffect } from "react"; -import { DojoProvider } from "@/dojo"; +import { useEffect, useState } from "react"; +import { DojoProvider } from "@/dojo/context/DojoContext"; import { QueryClient, QueryClientProvider } from "react-query"; import { Analytics } from '@vercel/analytics/react'; +import { SetupResult, setup } from "@/dojo/setup/setup"; +import RegisterEntities from "@/components/RegisterEntities"; const queryClient = new QueryClient({ defaultOptions: { @@ -34,10 +36,23 @@ export default function App({ Component, pageProps }: AppProps) { } }, [isRightSequence, setIsRightSequence, setSequence]); + const [setupResult, setSetupResult] = useState(undefined) + + + useEffect( () => { + const init = async () => { + const setupResult = await setup(); + setSetupResult(setupResult) + } + + init(); + }, []); + return ( - - + {setupResult && + + Roll your Own @@ -50,7 +65,7 @@ export default function App({ Component, pageProps }: AppProps) { - + } ); } diff --git a/web/src/pages/create.tsx b/web/src/pages/create.tsx index 2f269b6bc..d3a0dee0a 100644 --- a/web/src/pages/create.tsx +++ b/web/src/pages/create.tsx @@ -44,21 +44,13 @@ export default function Create() { @@ -78,11 +70,12 @@ export default function Create() {
- + {/* */} +
+ } + > + + + + { + playSound(Sounds.HoverClick, 0.3); + avatarId > 1 ? setAvatarId(avatarId - 1) : setAvatarId(getAvatarCount()); + }} + /> + + + + + + { + playSound(Sounds.HoverClick, 0.3); + setAvatarId((avatarId + 1) % getAvatarCount()); + }} + /> + + { + setError(""); + setName(e.target.value); + }} + /> + + + Max 20 characters + + + {error} + + + + + + ); +} diff --git a/web/src/pages/devtools.tsx b/web/src/pages/devtools.tsx new file mode 100644 index 000000000..9debd253c --- /dev/null +++ b/web/src/pages/devtools.tsx @@ -0,0 +1,45 @@ +import Header from "@/components/Header"; +import { Arrow, ArrowEnclosed } from "@/components/icons"; +import Layout from "@/components/Layout"; +import { Button, Container, HStack } from "@chakra-ui/react"; +import { useRouter } from "next/router"; +import { ReactNode, useState } from "react"; +import { useDevtools } from "@/dojo/hooks/useDevtools"; +import { useToast } from "@/hooks/toast"; +import { useSystems } from "@/dojo/hooks/useSystems"; + +export default function LeaderboardPage() { + const router = useRouter(); + + const { toast } = useToast(); + + const { feedLeaderboard } = useDevtools(); + const { failingTx } = useSystems(); + + const onFailingTx = async () => { + try { + const res = await failingTx(); + } catch (e) { + console.log(e); + } + }; + const onFeedLeaderboard = async () => { + const res = await feedLeaderboard(20); + toast({ message: "yes sir" }); + }; + + return ( + + + + + + + ); +} diff --git a/web/src/pages/index.tsx b/web/src/pages/index.tsx index eeeb176e8..8da92df4f 100644 --- a/web/src/pages/index.tsx +++ b/web/src/pages/index.tsx @@ -17,44 +17,52 @@ import { Alert, Clock } from "@/components/icons"; import { User } from "@/components/icons/archive"; import { playSound, Sounds } from "@/hooks/sound"; import Leaderboard from "@/components/Leaderboard"; -import { useSystems } from "@/dojo/systems/useSystems"; -import { useGlobalScores } from "@/dojo/components/useGlobalScores"; import { useToast } from "@/hooks/toast"; -import { useDojo } from "@/dojo"; -import { JoinedEventData } from "@/dojo/events"; +import { useDojoContext } from "@/dojo/hooks/useDojoContext"; import { getLocationById } from "@/dojo/helpers"; -import { usePlayerStore } from "@/hooks/state"; import HomeLeftPanel from "@/components/HomeLeftPanel"; import Tutorial from "@/components/Tutorial"; import { useEffect, useState } from "react"; import { play } from "@/hooks/media"; -// hardcode game params for now -const START_TIME = 0; -const MAX_PLAYERS = 1; -const NUM_TURNS = 10; - export default function Home() { const router = useRouter(); - const { account, isBurnerDeploying, createBurner } = useDojo(); - const { create: createGame, error: txError } = useSystems(); - const { scores } = useGlobalScores(); - const { resetAll } = usePlayerStore(); + + const { + account, + burner: { create: createBurner, isDeploying: isBurnerDeploying }, + } = useDojoContext(); + const { toast } = useToast(); const [isSubmitting, setIsSubmitting] = useState(false); const [isGated, setIsGated] = useState(false); useEffect( () => - //setIsGated(window.location.host === "rollyourown.preview.cartridge.gg"), - setIsGated(true), + //setIsGated(window.location.host ==! "rollyourown.preview.cartridge.gg"), + setIsGated(false), [], ); + const disableAutoPlay = process.env.NEXT_PUBLIC_DISABLE_MEDIAPLAYER_AUTOPLAY === "true"; const [isTutorialOpen, setIsTutorialOpen] = useState(false); + const onHustle = async () => { + if (!disableAutoPlay) { + play(); + } + + setIsSubmitting(true); + if (!account) { + // create burner account + await createBurner(); + } + + router.push(`/create/new`); + }; + return ( - + @@ -73,35 +81,7 @@ export default function Home() { - @@ -117,9 +97,9 @@ export default function Home() { gap="20px" sx={{ overflowY: "scroll", - "&::-webkit-scrollbar": { - display: "none", - }, + }} + __css={{ + "scrollbar-width": "none" }} > @@ -128,14 +108,12 @@ export default function Home() { )} - setIsTutorialOpen(false)} - /> + setIsTutorialOpen(false)} /> ); } +// unused const Game = ({ name, startTime, diff --git a/web/src/pages/leaderboard.tsx b/web/src/pages/leaderboard.tsx index fc38599a6..6ade387c3 100644 --- a/web/src/pages/leaderboard.tsx +++ b/web/src/pages/leaderboard.tsx @@ -16,6 +16,7 @@ export default function LeaderboardPage() { prefixTitle: "Welcome to the", imageSrc: "/images/will-smith-with-attitude.png", }} + rigthPanelScrollable={false} > diff --git a/web/src/responses.ts b/web/src/responses.ts index b4337b6d4..c51a806e9 100644 --- a/web/src/responses.ts +++ b/web/src/responses.ts @@ -1,7 +1,8 @@ -import { Outcome } from "./dojo/types"; +import { Action, Outcome, PlayerStatus } from "./dojo/types"; type Encounter = "initial" | "repeat"; + const muggerResponses: Record> = { [Outcome.Escaped]: { initial: [ @@ -45,6 +46,11 @@ const muggerResponses: Record> = { initial: [], repeat: [], }, + // Not needed + [Outcome.Victorious]: { + initial: ["Its about sending a message!"], + repeat: [], + }, }; const copResponses: Record> = { @@ -101,6 +107,11 @@ const copResponses: Record> = { initial: [], repeat: [], }, + // Not needed + [Outcome.Victorious]: { + initial: ["Its about sending a message!"], + repeat: [], + }, }; function getRandomIdx(length: number): number { @@ -131,3 +142,115 @@ export function getMuggerResponses( export function getCopResponses(outcome: Outcome, isInitial: boolean): string { return getResponse(outcome, isInitial, copResponses); } + + + + + +const encounterSentences: Record> = { + [PlayerStatus.Normal]: { + [Action.Pay]: [], + [Action.Run]: [], + [Action.Fight]: [], + }, + [PlayerStatus.AtPawnshop]: { + [Action.Pay]: [], + [Action.Run]: [], + [Action.Fight]: [], + }, + [PlayerStatus.BeingMugged]: { + [Action.Pay]: [ + "You come on my block trying to buy me off? I'll take the cash but don't come around here again.", + "Hell yeah, next time we see you, it'll be double.", + "Keep paying up, and you just might wake up tomorrow. No guarantees.", + "This'll do for now. But don't get too comfortable. I may be back for more.", + "Looks like you're starting to understand how things work around here.", + "Not bad, you paid what you owe. For now. But don't get too comfortable, kid.", + "Hah! Is that all you got? You wanna hustle in this hood you gotta step up your game.", + "You'll be seeing me again real soon to collect. Count on it.", + "Don't go thinking this payment buys you protection. It don't.", + "This payment don't even begin to make up for what you owe me.", + "This is just a down payment on the beating I still owe you." + ], + [Action.Run]: [ + "Go ahead and run you slippery rat bastard!", + "You must got some big cojones trying to run away from me!", + "You got lucky today you little cockroach.", + "You got lucky punk! Me and my boy here are gonna hunt you down and make you real sorry!", + "Ain't no escaping us. We run these streets, and we'll find you.", + "Clearly you don't know who runs these parts. But you'll learn.", + "Run while you can fool.", + "You can run, but you can't hide. Remember that rat. I'm coming for you.", + "I got friends in low places. Places you don't want to know about. Keep running.", + "You better watch your back. I'm coming for you when you least expect it.", + "I'll find you, and when I do, boom! Right between the eyes.", + "The streets talk, and word travels fast. I'll find you.", + "You'll regret the day you tried to hustle on my block.", + "My reach extends farther than you can imagine. Nowhere is safe.", + "I'm gonna make you regret ever stepping foot in my territory." + + ], + [Action.Fight]: [ + "Give me what you have before I turn yo ass to swiss cheese.", + "Dealing on my block huh? Hand over the money. Consider it a tax for operating in my hood.", + "Yo hustler, I don't think you belong here.", + "Run me that paper homie!", + "I'm gonna make you an offer you can't refuse. Hand it over, or hand over your life.", + "Hand it over if you want to keep that pretty face of yours intact. Don't test me.", + "You must have a death wish coming into my territory unannounced. Now pay the price.", + "Hand it over nice and easy, or this can get real ugly, real fast. Your choice.", + "Cough it up or you'll be coughing up blood.", + "Stealing business from me? You must have a death wish.", + "Trying to hustle on my block right under my nose?! You got guts, I'll give you that.", + "The boys and I are gonna have fun teaching you what happens when you steal from us.", + "I'll make an example out of you. Show everyone what happens when they cross us.", + "Stealing business and disrespecting me in my own neighborhood? Huge mistake." + ], + + }, + [PlayerStatus.BeingArrested]: { + [Action.Pay]: [ + "It's the least you can do for your troubles. Now get out of our face.", + "I'll let you slide for now, my snack budget's running low for the week.", + "I ought to arrest you for bribery, but this job doesn't pay enough.", + "Yeah, yeah just hand over the money and we'll call it even for now.", + "A real hustler would have tried to negotiate. You gave in too easy.", + "Is that the best those corner sales can get you? Pathetic.", + "I've seen kids offer up more than this to stay out of trouble. Amateur.", + ], + [Action.Run]: [ + "If the donut shop hadn't run out of glaze this morning, you'd be in cuffs by now.", + "You must enjoy this game of cat and mouse. Don't get too cocky.", + "This isn't over. You can't run forever.", + "You're just delaying the inevitable. There's no escape from justice.", + "Yeah, real nice. You got away this time but don't get too comfortable out there, pal.", + "You think you're some drug lord? I've seen better. Mark my words, we'll catch up to you eventually.", + "You ain't getting far, punk. I'll hunt you down if it's the last thing I do!", + "Don't get too comfortable out there. We know these streets better than you.", + "Run all you want, but next time I'm letting the police dogs off the leash to hunt you down.", + + ], + [Action.Fight]: [ + "You have the right to remain silent. Anything you say can and will be used against you in a court of law.", + "Stop right there! You fit the description. You have any drugs on you?", + "Freeze! I can't stand punks like you! Ruining our neighborhoods!", + "Congratulations, you've just won an all-inclusive stay at the local correctional resort!", + "Alright, fun's over. Hand over the drugs now!", + "Thought you were clever out there? These cuffs say otherwise.", + "For a supposed dealer, you make this way too easy. At least put up a challenge next time.", + "And you call yourself a drug dealer? Pathetic.", + "My grandma could sling better than you. You're a joke.", + ], + + }, + +} + +export function getSentence( + status: PlayerStatus, + action: Action +): string { + + const sentences = encounterSentences[status][action] + return sentences[getRandomIdx(sentences.length)] +} \ No newline at end of file diff --git a/web/src/theme/colors.ts b/web/src/theme/colors.ts index a08bde2ec..163706580 100644 --- a/web/src/theme/colors.ts +++ b/web/src/theme/colors.ts @@ -6,6 +6,7 @@ const colors: ColorsType = { neon: { 200: "#11ED83", 300: "#16C973", + 400: "#11ED83", 500: "#157342", 600: "#1F422A", 700: "#202F20", @@ -15,6 +16,7 @@ const colors: ColorsType = { neon900Alpha: "#424b42DD", yellow: { 400: "#FBCB4A", + 500: "#8a7830", }, red: "#FB744A", black: "#000000", diff --git a/web/src/theme/components/button.tsx b/web/src/theme/components/button.tsx index 659a7ad4e..80dcb041c 100644 --- a/web/src/theme/components/button.tsx +++ b/web/src/theme/components/button.tsx @@ -49,6 +49,27 @@ export const Button: ComponentStyleConfig = { })}")`, }, }, + selectable: { + color: "neon.200", + borderImageSource: `url("data:image/svg+xml,${BorderImage({ + color: colors.neon["200"].toString(), + isPressed: false, + })}")`, + _hover: { + color: "neon.300", + borderImageSource: `url("data:image/svg+xml,${BorderImage({ + color: colors.neon["300"].toString(), + isPressed: false, + })}")`, + }, + _active: { + color: colors.yellow["400"].toString(), + borderImageSource: `url("data:image/svg+xml,${BorderImage({ + color: colors.yellow["400"].toString(), + isPressed: true, + })}")`, + }, + }, pixelated: { border: 0, bg: "neon.700", diff --git a/web/src/theme/components/card.tsx b/web/src/theme/components/card.tsx index 0ea84224c..0abb3642f 100644 --- a/web/src/theme/components/card.tsx +++ b/web/src/theme/components/card.tsx @@ -1,6 +1,7 @@ import type { ComponentMultiStyleConfig } from "@chakra-ui/theme"; import BorderImage from "@/components/icons/PressableBorderImage"; import { cardStyle, cardPixelatedStyle } from "../styles"; +import colors from "../colors"; export const Card: ComponentMultiStyleConfig = { parts: ["container", "header", "body", "footer"], diff --git a/web/src/theme/components/index.ts b/web/src/theme/components/index.ts index 6e5b8fde5..70220eb55 100644 --- a/web/src/theme/components/index.ts +++ b/web/src/theme/components/index.ts @@ -11,3 +11,4 @@ export * from "./container"; export * from "./slider"; export * from "./menu"; export * from "./tabs"; +export * from "./tooltip"; diff --git a/web/src/theme/components/input.tsx b/web/src/theme/components/input.tsx index efba71982..ce816b860 100644 --- a/web/src/theme/components/input.tsx +++ b/web/src/theme/components/input.tsx @@ -1,25 +1,35 @@ import type { ComponentStyleConfig } from "@chakra-ui/theme"; import { StyleFunctionProps } from "@chakra-ui/theme-tools"; +import { cardStyle } from "../styles"; -export const Input: ComponentStyleConfig = { - variants: { - primary: (props: StyleFunctionProps) => ({ - field: { - px: "0", - color: "neon.200", - borderColor: "none", - bgColor: "transparent", - fontSize: "16px", - _placeholder: { - color: "neon.500", - }, - }, - }), - caret: (props: StyleFunctionProps) => ({ - field: {}, - }), - }, - defaultProps: { - variant: "primary", +import { inputAnatomy } from "@chakra-ui/anatomy"; +import { createMultiStyleConfigHelpers } from "@chakra-ui/react"; + +const { definePartsStyle, defineMultiStyleConfig } = createMultiStyleConfigHelpers(inputAnatomy.keys); + +const baseStyle = definePartsStyle({ + // define the part you're going to style +}); + +const primaryStyle = definePartsStyle({ + // define the part you're going to style + field: { + border: 0, + borderWidth: 0, + + ...cardStyle, + + bgColor: "transparent", + borderRadius:"12px", + overflow:"hidden", + + _focus: { + bgColor: "neon.700", + }, + _placeholder: { + color: "neon.500", + }, }, -}; +}); + +export const Input = defineMultiStyleConfig({ baseStyle, variants: { primary: primaryStyle } }); diff --git a/web/src/theme/components/tooltip.tsx b/web/src/theme/components/tooltip.tsx new file mode 100644 index 000000000..98fdef48d --- /dev/null +++ b/web/src/theme/components/tooltip.tsx @@ -0,0 +1,11 @@ +import { defineStyle, defineStyleConfig } from '@chakra-ui/react' + +// define the base component styles +const baseStyle = { + bgColor: "neon.800", + color: "yellow.400", + border: "solid 1px" +} + +// export the component theme +export const Tooltip = defineStyleConfig({ baseStyle }) \ No newline at end of file diff --git a/web/src/theme/styles.ts b/web/src/theme/styles.ts index 03f95d0f9..2d0d1b66f 100644 --- a/web/src/theme/styles.ts +++ b/web/src/theme/styles.ts @@ -15,7 +15,12 @@ export const styles = { color: "neon.200", letterSpacing: "0.04em", WebkitTapHighlightColor: "transparent", + "scrollbar-width": "none" }, + "&::-webkit-scrollbar": { + display: "none", + }, + }, }; diff --git a/web/src/utils/market.ts b/web/src/utils/market.ts index 1a1381423..69d4c1c64 100644 --- a/web/src/utils/market.ts +++ b/web/src/utils/market.ts @@ -1,5 +1,5 @@ import { TradeDirection } from "@/hooks/state"; -import { SCALING_FACTOR } from "@/dojo"; +import { SCALING_FACTOR } from "@/dojo/constants"; import { Market } from "@/generated/graphql"; export const calculateSlippage = ( diff --git a/web/src/utils/ui.ts b/web/src/utils/ui.ts index f76212329..ce13996e7 100644 --- a/web/src/utils/ui.ts +++ b/web/src/utils/ui.ts @@ -193,3 +193,30 @@ export function formatCash(cash: number): string { maximumFractionDigits: 0, }).format(cash); } + + +export function formatCashHeader(cash: number): string { + if (cash < 10_000) { + return Intl.NumberFormat("en-US", { + style: "currency", + currency: "USD", + maximumFractionDigits: 0, + }).format(cash); + } + if (cash < 1_000_000) { + return `${Intl.NumberFormat("en-US", { + style: "currency", + currency: "USD", + maximumFractionDigits: 1, + }).format(cash / 1_000)}k`; + } + else if (cash < 1_000_000_000) { + return `${Intl.NumberFormat("en-US", { + style: "currency", + currency: "USD", + maximumFractionDigits: 1, + }).format(cash / 1_000_000)}M`; + } + return "ElonMusk" + +} diff --git a/web/tsconfig.json b/web/tsconfig.json index 61c19abd6..2bb359e9d 100644 --- a/web/tsconfig.json +++ b/web/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "es5", + "target": "ES2020", "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, @@ -8,8 +8,8 @@ "forceConsistentCasingInFileNames": true, "noEmit": true, "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "node", + "module": "ES2020", + "moduleResolution": "Node", "resolveJsonModule": true, "isolatedModules": true, "jsx": "preserve", diff --git a/web/yarn.lock b/web/yarn.lock index d0b9d3bf6..461ec0d63 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -2,6 +2,11 @@ # yarn lockfile v1 +"@adraffy/ens-normalize@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.9.0.tgz#223572538f6bea336750039bb43a4016dcc8182d" + integrity sha512-iowxq3U30sghZotgl4s/oJRci6WPBfNO5YYgk2cIOMCHr3LeGPcsZjCEr+33Q4N+oV3OABDAtA+pyvWjbvBifQ== + "@ampproject/remapping@^2.2.0": version "2.2.1" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" @@ -123,6 +128,27 @@ json5 "^2.2.2" semver "^6.3.0" +"@babel/core@^7.22.9": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.0.tgz#f8259ae0e52a123eb40f552551e647b506a94d83" + integrity sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.22.13" + "@babel/generator" "^7.23.0" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-module-transforms" "^7.23.0" + "@babel/helpers" "^7.23.0" + "@babel/parser" "^7.23.0" + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.23.0" + "@babel/types" "^7.23.0" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + "@babel/generator@^7.14.0", "@babel/generator@^7.18.13", "@babel/generator@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.5.tgz#1e7bf768688acfb05cf30b2369ef855e82d984f7" @@ -143,6 +169,16 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" +"@babel/generator@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" + integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== + dependencies: + "@babel/types" "^7.23.0" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + "@babel/helper-annotate-as-pure@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" @@ -247,6 +283,14 @@ "@babel/template" "^7.22.5" "@babel/types" "^7.22.5" +"@babel/helper-function-name@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" + integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== + dependencies: + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" + "@babel/helper-hoist-variables@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" @@ -314,6 +358,17 @@ "@babel/traverse" "^7.22.5" "@babel/types" "^7.22.5" +"@babel/helper-module-transforms@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e" + integrity sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-optimise-call-expression@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" @@ -446,6 +501,15 @@ "@babel/traverse" "^7.22.5" "@babel/types" "^7.22.5" +"@babel/helpers@^7.23.0": + version "7.23.1" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.1.tgz#44e981e8ce2b9e99f8f0b703f3326a4636c16d15" + integrity sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA== + dependencies: + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.23.0" + "@babel/types" "^7.23.0" + "@babel/highlight@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" @@ -483,6 +547,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.16.tgz#180aead7f247305cce6551bea2720934e2fa2c95" integrity sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA== +"@babel/parser@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" + integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz#02dc8a03f613ed5fdc29fb2f728397c78146c962" @@ -1301,6 +1370,22 @@ debug "^4.1.0" globals "^11.1.0" +"@babel/traverse@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.0.tgz#18196ddfbcf4ccea324b7f6d3ada00d8c5a99c53" + integrity sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw== + dependencies: + "@babel/code-frame" "^7.22.13" + "@babel/generator" "^7.23.0" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.23.0" + "@babel/types" "^7.23.0" + debug "^4.1.0" + globals "^11.1.0" + "@babel/types@^7.0.0", "@babel/types@^7.16.8", "@babel/types@^7.18.13", "@babel/types@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.5.tgz#cd93eeaab025880a3a47ec881f4b096a5b786fbe" @@ -1328,56 +1413,65 @@ "@babel/helper-validator-identifier" "^7.22.19" to-fast-properties "^2.0.0" -"@chakra-ui/accordion@2.1.9": - version "2.1.9" - resolved "https://registry.yarnpkg.com/@chakra-ui/accordion/-/accordion-2.1.9.tgz#20fa86d94dc034251df2f7c8595ae4dd541a29d9" - integrity sha512-a9CKIAUHezc0f5FR/SQ4GVxnWuIb2HbDTxTEKTp58w/J9pecIbJaNrJ5TUZ0MVbDU9jkgO9RsZ29jkja8PomAw== +"@babel/types@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" + integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== dependencies: - "@chakra-ui/descendant" "3.0.13" - "@chakra-ui/icon" "3.0.16" - "@chakra-ui/react-context" "2.0.7" - "@chakra-ui/react-use-controllable-state" "2.0.8" - "@chakra-ui/react-use-merge-refs" "2.0.7" + "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.20" + to-fast-properties "^2.0.0" + +"@chakra-ui/accordion@2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/accordion/-/accordion-2.3.1.tgz#a326509e286a5c4e8478de9bc2b4b05017039e6b" + integrity sha512-FSXRm8iClFyU+gVaXisOSEw0/4Q+qZbFRiuhIAkVU6Boj0FxAMrlo9a8AV5TuF77rgaHytCdHk0Ng+cyUijrag== + dependencies: + "@chakra-ui/descendant" "3.1.0" + "@chakra-ui/icon" "3.2.0" + "@chakra-ui/react-context" "2.1.0" + "@chakra-ui/react-use-controllable-state" "2.1.0" + "@chakra-ui/react-use-merge-refs" "2.1.0" "@chakra-ui/shared-utils" "2.0.5" - "@chakra-ui/transition" "2.0.15" + "@chakra-ui/transition" "2.1.0" -"@chakra-ui/alert@2.0.17": - version "2.0.17" - resolved "https://registry.yarnpkg.com/@chakra-ui/alert/-/alert-2.0.17.tgz#b129732ec308db6a6a1afa7c06a6595ad853c967" - integrity sha512-0Y5vw+HkeXpwbL1roVpSSNM6luMRmUbwduUSHEA4OnX1ismvsDb1ZBfpi4Vxp6w8euJ2Uj6df3krbd5tbCP6tg== +"@chakra-ui/alert@2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/alert/-/alert-2.2.1.tgz#69f4fae19e4f8204ae1db906784139d416063d04" + integrity sha512-GduIqqWCkvID8hxRlKw29Jp3w93r/E9S30J2F8By3ODon9Bhk1o/KVolcPiSiQvRwKNBJCd/rBTpPpLkB+s7pw== dependencies: - "@chakra-ui/icon" "3.0.16" - "@chakra-ui/react-context" "2.0.7" + "@chakra-ui/icon" "3.2.0" + "@chakra-ui/react-context" "2.1.0" "@chakra-ui/shared-utils" "2.0.5" - "@chakra-ui/spinner" "2.0.13" + "@chakra-ui/spinner" "2.1.0" -"@chakra-ui/anatomy@2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@chakra-ui/anatomy/-/anatomy-2.1.2.tgz#ea66b1841e7195da08ddc862daaa3f3e56e565f5" - integrity sha512-pKfOS/mztc4sUXHNc8ypJ1gPWSolWT770jrgVRfolVbYlki8y5Y+As996zMF6k5lewTu6j9DQequ7Cc9a69IVQ== +"@chakra-ui/anatomy@2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/anatomy/-/anatomy-2.2.1.tgz#f7ef088dcb8be4f1d075f37101830199fb93f763" + integrity sha512-bbmyWTGwQo+aHYDMtLIj7k7hcWvwE7GFVDViLFArrrPhfUTDdQTNqhiDp1N7eh2HLyjNhc2MKXV8s2KTQqkmTg== "@chakra-ui/anatomy@^2.1.1": version "2.1.1" resolved "https://registry.yarnpkg.com/@chakra-ui/anatomy/-/anatomy-2.1.1.tgz#819a1458ff727157e5500a69fc26bfea6e944495" integrity sha512-LUHAoqJAgxAqmyckG5bUpBrfEo1FleEyY+1A8hkWciy58gZ+h3GoY9oBpHcdo7XdHPpy3G+3hieK/7i9NLwxAw== -"@chakra-ui/avatar@2.2.5": - version "2.2.5" - resolved "https://registry.yarnpkg.com/@chakra-ui/avatar/-/avatar-2.2.5.tgz#50eb7cc5a172d394b301fa0abd5f607b7f5d3563" - integrity sha512-TEHXuGE79+fEn61qJ7J/A0Ec+WjyNwobrDTATcLg9Zx2/WEMmZNfrWIAlI5ANQAwVbdSWeGVbyoLAK5mbcrE0A== +"@chakra-ui/avatar@2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/avatar/-/avatar-2.3.0.tgz#f018a2714d1e3ba5970bcf66558887925fdfccf4" + integrity sha512-8gKSyLfygnaotbJbDMHDiJoF38OHXUYVme4gGxZ1fLnQEdPVEaIWfH+NndIjOM0z8S+YEFnT9KyGMUtvPrBk3g== dependencies: - "@chakra-ui/image" "2.0.15" + "@chakra-ui/image" "2.1.0" "@chakra-ui/react-children-utils" "2.0.6" - "@chakra-ui/react-context" "2.0.7" + "@chakra-ui/react-context" "2.1.0" "@chakra-ui/shared-utils" "2.0.5" -"@chakra-ui/breadcrumb@2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@chakra-ui/breadcrumb/-/breadcrumb-2.1.4.tgz#0d249dc2a92639bd2bf46d097dd5445112bd2367" - integrity sha512-vyBx5TAxPnHhb0b8nyRGfqyjleD//9mySFhk96c9GL+T6YDO4swHw5y/kvDv3Ngc/iRwJ9hdI49PZKwPxLqsEg== +"@chakra-ui/breadcrumb@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/breadcrumb/-/breadcrumb-2.2.0.tgz#751bc48498f3c403f97b5d9aae528ebfd405ef48" + integrity sha512-4cWCG24flYBxjruRi4RJREWTGF74L/KzI2CognAW/d/zWR0CjiScuJhf37Am3LFbCySP6WSoyBOtTIoTA4yLEA== dependencies: "@chakra-ui/react-children-utils" "2.0.6" - "@chakra-ui/react-context" "2.0.7" + "@chakra-ui/react-context" "2.1.0" "@chakra-ui/shared-utils" "2.0.5" "@chakra-ui/breakpoint-utils@2.0.8": @@ -1387,107 +1481,107 @@ dependencies: "@chakra-ui/shared-utils" "2.0.5" -"@chakra-ui/button@2.0.16": - version "2.0.16" - resolved "https://registry.yarnpkg.com/@chakra-ui/button/-/button-2.0.16.tgz#ff315b57ee47c3511a6507fcfb6f00bb93e2ac7d" - integrity sha512-NjuTKa7gNhnGSUutKuTc8HoAOe9WWIigpciBG7yj3ok67kg8bXtSzPyQFZlgTY6XGdAckWTT+Do4tvhwa5LA+g== +"@chakra-ui/button@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/button/-/button-2.1.0.tgz#623ed32cc92fc8e52492923e9924791fc6f25447" + integrity sha512-95CplwlRKmmUXkdEp/21VkEWgnwcx2TOBG6NfYlsuLBDHSLlo5FKIiE2oSi4zXc4TLcopGcWPNcm/NDaSC5pvA== dependencies: - "@chakra-ui/react-context" "2.0.7" - "@chakra-ui/react-use-merge-refs" "2.0.7" + "@chakra-ui/react-context" "2.1.0" + "@chakra-ui/react-use-merge-refs" "2.1.0" "@chakra-ui/shared-utils" "2.0.5" - "@chakra-ui/spinner" "2.0.13" + "@chakra-ui/spinner" "2.1.0" -"@chakra-ui/card@2.1.6": - version "2.1.6" - resolved "https://registry.yarnpkg.com/@chakra-ui/card/-/card-2.1.6.tgz#27176bdee363ecab7d563c4997c4b2fe9e835ecc" - integrity sha512-fFd/WAdRNVY/WOSQv4skpy0WeVhhI0f7dTY1Sm0jVl0KLmuP/GnpsWtKtqWjNcV00K963EXDyhlk6+9oxbP4gw== +"@chakra-ui/card@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/card/-/card-2.2.0.tgz#b5e59dc51c171fced76ea76bf26088803b8bc184" + integrity sha512-xUB/k5MURj4CtPAhdSoXZidUbm8j3hci9vnc+eZJVDqhDOShNlD6QeniQNRPRys4lWAQLCbFcrwL29C8naDi6g== dependencies: "@chakra-ui/shared-utils" "2.0.5" -"@chakra-ui/checkbox@2.2.10": - version "2.2.10" - resolved "https://registry.yarnpkg.com/@chakra-ui/checkbox/-/checkbox-2.2.10.tgz#e4f773e7d2464f1d6e9d18dd88b679290cb33171" - integrity sha512-vzxEjw99qj7loxAdP1WuHNt4EAvj/t6cc8oxyOB2mEvkAzhxI34rLR+3zWDuHWsmhyUO+XEDh4FiWdR+DK5Siw== +"@chakra-ui/checkbox@2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/checkbox/-/checkbox-2.3.1.tgz#bde33a655a8f033656378e3e95ae0dc4c8e73864" + integrity sha512-e6qL9ntVI/Ui6g0+iljUV2chX86YMsXafldpTHBNYDEoNLjGo1lqLFzq3y6zs3iuB3DHI0X7eAG3REmMVs0A0w== dependencies: - "@chakra-ui/form-control" "2.0.17" - "@chakra-ui/react-context" "2.0.7" + "@chakra-ui/form-control" "2.1.1" + "@chakra-ui/react-context" "2.1.0" "@chakra-ui/react-types" "2.0.7" - "@chakra-ui/react-use-callback-ref" "2.0.7" - "@chakra-ui/react-use-controllable-state" "2.0.8" - "@chakra-ui/react-use-merge-refs" "2.0.7" - "@chakra-ui/react-use-safe-layout-effect" "2.0.5" - "@chakra-ui/react-use-update-effect" "2.0.7" + "@chakra-ui/react-use-callback-ref" "2.1.0" + "@chakra-ui/react-use-controllable-state" "2.1.0" + "@chakra-ui/react-use-merge-refs" "2.1.0" + "@chakra-ui/react-use-safe-layout-effect" "2.1.0" + "@chakra-ui/react-use-update-effect" "2.1.0" "@chakra-ui/shared-utils" "2.0.5" - "@chakra-ui/visually-hidden" "2.0.15" - "@zag-js/focus-visible" "0.2.1" + "@chakra-ui/visually-hidden" "2.2.0" + "@zag-js/focus-visible" "0.16.0" -"@chakra-ui/clickable@2.0.14": - version "2.0.14" - resolved "https://registry.yarnpkg.com/@chakra-ui/clickable/-/clickable-2.0.14.tgz#88093008672a2a30bdd2a30ff815dcc2c88c01a5" - integrity sha512-jfsM1qaD74ZykLHmvmsKRhDyokLUxEfL8Il1VoZMNX5RBI0xW/56vKpLTFF/v/+vLPLS+Te2cZdD4+2O+G6ulA== +"@chakra-ui/clickable@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/clickable/-/clickable-2.1.0.tgz#800fa8d10cf45a41fc50a3df32c679a3ce1921c3" + integrity sha512-flRA/ClPUGPYabu+/GLREZVZr9j2uyyazCAUHAdrTUEdDYCr31SVGhgh7dgKdtq23bOvAQJpIJjw/0Bs0WvbXw== dependencies: - "@chakra-ui/react-use-merge-refs" "2.0.7" + "@chakra-ui/react-use-merge-refs" "2.1.0" "@chakra-ui/shared-utils" "2.0.5" -"@chakra-ui/close-button@2.0.17": - version "2.0.17" - resolved "https://registry.yarnpkg.com/@chakra-ui/close-button/-/close-button-2.0.17.tgz#d43d3a2ea1f08250f8d0da7704baf0e1fbd91b4b" - integrity sha512-05YPXk456t1Xa3KpqTrvm+7smx+95dmaPiwjiBN3p7LHUQVHJd8ZXSDB0V+WKi419k3cVQeJUdU/azDO2f40sw== +"@chakra-ui/close-button@2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/close-button/-/close-button-2.1.1.tgz#995b245c56eb41465a71d8667840c238618a7b66" + integrity sha512-gnpENKOanKexswSVpVz7ojZEALl2x5qjLYNqSQGbxz+aP9sOXPfUS56ebyBrre7T7exuWGiFeRwnM0oVeGPaiw== dependencies: - "@chakra-ui/icon" "3.0.16" + "@chakra-ui/icon" "3.2.0" -"@chakra-ui/color-mode@2.1.12": - version "2.1.12" - resolved "https://registry.yarnpkg.com/@chakra-ui/color-mode/-/color-mode-2.1.12.tgz#c0caeadd5f87fadbeefc6826beabac6c4a88d8f5" - integrity sha512-sYyfJGDoJSLYO+V2hxV9r033qhte5Nw/wAn5yRGGZnEEN1dKPEdWQ3XZvglWSDTNd0w9zkoH2w6vP4FBBYb/iw== +"@chakra-ui/color-mode@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/color-mode/-/color-mode-2.2.0.tgz#828d47234c74ba2fb4c5dd63a63331aead20b9f6" + integrity sha512-niTEA8PALtMWRI9wJ4LL0CSBDo8NBfLNp4GD6/0hstcm3IlbBHTVKxN6HwSaoNYfphDQLxCjT4yG+0BJA5tFpg== dependencies: - "@chakra-ui/react-use-safe-layout-effect" "2.0.5" + "@chakra-ui/react-use-safe-layout-effect" "2.1.0" -"@chakra-ui/control-box@2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@chakra-ui/control-box/-/control-box-2.0.13.tgz#ffe9634d0c3aecb8e1eb7da19e64fb3d2b181d03" - integrity sha512-FEyrU4crxati80KUF/+1Z1CU3eZK6Sa0Yv7Z/ydtz9/tvGblXW9NFanoomXAOvcIFLbaLQPPATm9Gmpr7VG05A== +"@chakra-ui/control-box@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/control-box/-/control-box-2.1.0.tgz#0f4586797b3154c02463bc5c106782e70c88f04f" + integrity sha512-gVrRDyXFdMd8E7rulL0SKeoljkLQiPITFnsyMO8EFHNZ+AHt5wK4LIguYVEq88APqAGZGfHFWXr79RYrNiE3Mg== -"@chakra-ui/counter@2.0.14": - version "2.0.14" - resolved "https://registry.yarnpkg.com/@chakra-ui/counter/-/counter-2.0.14.tgz#6e37a863afd2e87d7c94208245e81777640e76e2" - integrity sha512-KxcSRfUbb94dP77xTip2myoE7P2HQQN4V5fRJmNAGbzcyLciJ+aDylUU/UxgNcEjawUp6Q242NbWb1TSbKoqog== +"@chakra-ui/counter@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/counter/-/counter-2.1.0.tgz#e413a2f1093a18f847bb7aa240117fde788a59e6" + integrity sha512-s6hZAEcWT5zzjNz2JIWUBzRubo9la/oof1W7EKZVVfPYHERnl5e16FmBC79Yfq8p09LQ+aqFKm/etYoJMMgghw== dependencies: "@chakra-ui/number-utils" "2.0.7" - "@chakra-ui/react-use-callback-ref" "2.0.7" + "@chakra-ui/react-use-callback-ref" "2.1.0" "@chakra-ui/shared-utils" "2.0.5" -"@chakra-ui/css-reset@2.0.12": - version "2.0.12" - resolved "https://registry.yarnpkg.com/@chakra-ui/css-reset/-/css-reset-2.0.12.tgz#6eebcbe9e971facd215e174e063ace29f647a045" - integrity sha512-Q5OYIMvqTl2vZ947kIYxcS5DhQXeStB84BzzBd6C10wOx1gFUu9pL+jLpOnHR3hhpWRMdX5o7eT+gMJWIYUZ0Q== +"@chakra-ui/css-reset@2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/css-reset/-/css-reset-2.3.0.tgz#83e3160a9c2a12431cad0ee27ebfbf3aedc5c9c7" + integrity sha512-cQwwBy5O0jzvl0K7PLTLgp8ijqLPKyuEMiDXwYzl95seD3AoeuoCLyzZcJtVqaUZ573PiBdAbY/IlZcwDOItWg== -"@chakra-ui/descendant@3.0.13": - version "3.0.13" - resolved "https://registry.yarnpkg.com/@chakra-ui/descendant/-/descendant-3.0.13.tgz#e883a2233ee07fe1ae6c014567824c0f79df11cf" - integrity sha512-9nzxZVxUSMc4xPL5fSaRkEOQjDQWUGjGvrZI7VzWk9eq63cojOtIxtWMSW383G9148PzWJjJYt30Eud5tdZzlg== +"@chakra-ui/descendant@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/descendant/-/descendant-3.1.0.tgz#f3b80ed13ffc4bf1d615b3ed5541bd0905375cca" + integrity sha512-VxCIAir08g5w27klLyi7PVo8BxhW4tgU/lxQyujkmi4zx7hT9ZdrcQLAted/dAa+aSIZ14S1oV0Q9lGjsAdxUQ== dependencies: - "@chakra-ui/react-context" "2.0.7" - "@chakra-ui/react-use-merge-refs" "2.0.7" + "@chakra-ui/react-context" "2.1.0" + "@chakra-ui/react-use-merge-refs" "2.1.0" -"@chakra-ui/dom-utils@2.0.6": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@chakra-ui/dom-utils/-/dom-utils-2.0.6.tgz#68f49f3b4a0bdebd5e416d6fd2c012c9ad64b76a" - integrity sha512-PVtDkPrDD5b8aoL6Atg7SLjkwhWb7BwMcLOF1L449L3nZN+DAO3nyAh6iUhZVJyunELj9d0r65CDlnMREyJZmA== +"@chakra-ui/dom-utils@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/dom-utils/-/dom-utils-2.1.0.tgz#d15df89e458ef19756db04c7cfd084eb552454f0" + integrity sha512-ZmF2qRa1QZ0CMLU8M1zCfmw29DmPNtfjR9iTo74U5FPr3i1aoAh7fbJ4qAlZ197Xw9eAW28tvzQuoVWeL5C7fQ== -"@chakra-ui/editable@2.0.19": - version "2.0.19" - resolved "https://registry.yarnpkg.com/@chakra-ui/editable/-/editable-2.0.19.tgz#1af2fe3c215111f61f7872fb5f599f4d8da24e7d" - integrity sha512-YxRJsJ2JQd42zfPBgTKzIhg1HugT+gfQz1ZosmUN+IZT9YZXL2yodHTUz6Lee04Vc/CdEqgBFLuREXEUNBfGtA== +"@chakra-ui/editable@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/editable/-/editable-3.1.0.tgz#065783c2e3389c3bb9ab0582cb50d38e1dc00fa1" + integrity sha512-j2JLrUL9wgg4YA6jLlbU88370eCRyor7DZQD9lzpY95tSOXpTljeg3uF9eOmDnCs6fxp3zDWIfkgMm/ExhcGTg== dependencies: - "@chakra-ui/react-context" "2.0.7" + "@chakra-ui/react-context" "2.1.0" "@chakra-ui/react-types" "2.0.7" - "@chakra-ui/react-use-callback-ref" "2.0.7" - "@chakra-ui/react-use-controllable-state" "2.0.8" - "@chakra-ui/react-use-focus-on-pointer-down" "2.0.6" - "@chakra-ui/react-use-merge-refs" "2.0.7" - "@chakra-ui/react-use-safe-layout-effect" "2.0.5" - "@chakra-ui/react-use-update-effect" "2.0.7" + "@chakra-ui/react-use-callback-ref" "2.1.0" + "@chakra-ui/react-use-controllable-state" "2.1.0" + "@chakra-ui/react-use-focus-on-pointer-down" "2.1.0" + "@chakra-ui/react-use-merge-refs" "2.1.0" + "@chakra-ui/react-use-safe-layout-effect" "2.1.0" + "@chakra-ui/react-use-update-effect" "2.1.0" "@chakra-ui/shared-utils" "2.0.5" "@chakra-ui/event-utils@2.0.8": @@ -1495,71 +1589,71 @@ resolved "https://registry.yarnpkg.com/@chakra-ui/event-utils/-/event-utils-2.0.8.tgz#e6439ba200825a2f15d8f1973d267d1c00a6d1b4" integrity sha512-IGM/yGUHS+8TOQrZGpAKOJl/xGBrmRYJrmbHfUE7zrG3PpQyXvbLDP1M+RggkCFVgHlJi2wpYIf0QtQlU0XZfw== -"@chakra-ui/focus-lock@2.0.16": - version "2.0.16" - resolved "https://registry.yarnpkg.com/@chakra-ui/focus-lock/-/focus-lock-2.0.16.tgz#bfb705b565d70b2f908d7c7a27f40426ac48dff8" - integrity sha512-UuAdGCPVrCa1lecoAvpOQD7JFT7a9RdmhKWhFt5ioIcekSLJcerdLHuuL3w0qz//8kd1/SOt7oP0aJqdAJQrCw== +"@chakra-ui/focus-lock@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/focus-lock/-/focus-lock-2.1.0.tgz#580e5450fe85356987b9a246abaff8333369c667" + integrity sha512-EmGx4PhWGjm4dpjRqM4Aa+rCWBxP+Rq8Uc/nAVnD4YVqkEhBkrPTpui2lnjsuxqNaZ24fIAZ10cF1hlpemte/w== dependencies: - "@chakra-ui/dom-utils" "2.0.6" - react-focus-lock "^2.9.2" + "@chakra-ui/dom-utils" "2.1.0" + react-focus-lock "^2.9.4" -"@chakra-ui/form-control@2.0.17": - version "2.0.17" - resolved "https://registry.yarnpkg.com/@chakra-ui/form-control/-/form-control-2.0.17.tgz#2f710325e77ce35067337616d440f903b137bdd5" - integrity sha512-34ptCaJ2LNvQNOlB6MAKsmH1AkT1xo7E+3Vw10Urr81yTOjDTM/iU6vG3JKPfRDMyXeowPjXmutlnuk72SSjRg== +"@chakra-ui/form-control@2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/form-control/-/form-control-2.1.1.tgz#05b06a52432642ddc7ed795bfe127108d160927d" + integrity sha512-LJPDzA1ITc3lhd/iDiINqGeca5bJD09PZAjePGEmmZyLPZZi8nPh/iii0RMxvKyJArsTBwXymCh+dEqK9aDzGQ== dependencies: - "@chakra-ui/icon" "3.0.16" - "@chakra-ui/react-context" "2.0.7" + "@chakra-ui/icon" "3.2.0" + "@chakra-ui/react-context" "2.1.0" "@chakra-ui/react-types" "2.0.7" - "@chakra-ui/react-use-merge-refs" "2.0.7" + "@chakra-ui/react-use-merge-refs" "2.1.0" "@chakra-ui/shared-utils" "2.0.5" -"@chakra-ui/hooks@2.1.6": - version "2.1.6" - resolved "https://registry.yarnpkg.com/@chakra-ui/hooks/-/hooks-2.1.6.tgz#4d829535868148912ef7a4ff274e03b8d1cf7c72" - integrity sha512-oMSOeoOF6/UpwTVlDFHSROAA4hPY8WgJ0erdHs1ZkuwAwHv7UzjDkvrb6xYzAAH9qHoFzc5RIBm6jVoh3LCc+Q== +"@chakra-ui/hooks@2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/hooks/-/hooks-2.2.1.tgz#b86ce5eeaaab877ddcb11a50842d1227306ace28" + integrity sha512-RQbTnzl6b1tBjbDPf9zGRo9rf/pQMholsOudTxjy4i9GfTfz6kgp5ValGjQm2z7ng6Z31N1cnjZ1AlSzQ//ZfQ== dependencies: "@chakra-ui/react-utils" "2.0.12" "@chakra-ui/utils" "2.0.15" - compute-scroll-into-view "1.0.20" + compute-scroll-into-view "3.0.3" copy-to-clipboard "3.3.3" -"@chakra-ui/icon@3.0.16": - version "3.0.16" - resolved "https://registry.yarnpkg.com/@chakra-ui/icon/-/icon-3.0.16.tgz#6413ec637c0c3acc204301485f05451b5bcd6ba4" - integrity sha512-RpA1X5Ptz8Mt39HSyEIW1wxAz2AXyf9H0JJ5HVx/dBdMZaGMDJ0HyyPBVci0m4RCoJuyG1HHG/DXJaVfUTVAeg== +"@chakra-ui/icon@3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/icon/-/icon-3.2.0.tgz#92b9454aa0d561b4994bcd6a1b3bb1fdd5c67bef" + integrity sha512-xxjGLvlX2Ys4H0iHrI16t74rG9EBcpFvJ3Y3B7KMQTrnW34Kf7Da/UC8J67Gtx85mTHW020ml85SVPKORWNNKQ== dependencies: "@chakra-ui/shared-utils" "2.0.5" -"@chakra-ui/image@2.0.15": - version "2.0.15" - resolved "https://registry.yarnpkg.com/@chakra-ui/image/-/image-2.0.15.tgz#7f275f8f3edbb420e0613afd5023ad9cf442d09d" - integrity sha512-w2rElXtI3FHXuGpMCsSklus+pO1Pl2LWDwsCGdpBQUvGFbnHfl7MftQgTlaGHeD5OS95Pxva39hKrA2VklKHiQ== +"@chakra-ui/image@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/image/-/image-2.1.0.tgz#6c205f1ca148e3bf58345b0b5d4eb3d959eb9f87" + integrity sha512-bskumBYKLiLMySIWDGcz0+D9Th0jPvmX6xnRMs4o92tT3Od/bW26lahmV2a2Op2ItXeCmRMY+XxJH5Gy1i46VA== dependencies: - "@chakra-ui/react-use-safe-layout-effect" "2.0.5" + "@chakra-ui/react-use-safe-layout-effect" "2.1.0" "@chakra-ui/shared-utils" "2.0.5" -"@chakra-ui/input@2.0.20": - version "2.0.20" - resolved "https://registry.yarnpkg.com/@chakra-ui/input/-/input-2.0.20.tgz#8db3ec46b52be901c94599b3659a9003bdb2dd07" - integrity sha512-ypmsy4n4uNBVgn6Gd24Zrpi+qRf/T9WEzWkysuYC9Qfxo+i7yuf3snp7XmBy8KSGVSiXE11eO8ZN5oCg6Xg0jg== +"@chakra-ui/input@2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/input/-/input-2.1.1.tgz#c9666bd1efd7763458bec713fb87cc3f365ec15d" + integrity sha512-RQYzQ/qcak3eCuCfvSqc1kEFx0sCcnIeiSi7i0r70CeBnAUK/CP1/4Uz849FpKz81K4z2SikC9MkHPQd8ZpOwg== dependencies: - "@chakra-ui/form-control" "2.0.17" - "@chakra-ui/object-utils" "2.0.8" + "@chakra-ui/form-control" "2.1.1" + "@chakra-ui/object-utils" "2.1.0" "@chakra-ui/react-children-utils" "2.0.6" - "@chakra-ui/react-context" "2.0.7" + "@chakra-ui/react-context" "2.1.0" "@chakra-ui/shared-utils" "2.0.5" -"@chakra-ui/layout@2.1.16": - version "2.1.16" - resolved "https://registry.yarnpkg.com/@chakra-ui/layout/-/layout-2.1.16.tgz#9d90f25cf9f0537d19cd36a417f7ddc1461e8591" - integrity sha512-QFS3feozIGsvB0H74lUocev55aRF26eNrdmhfJifwikZAiq+zzZAMdBdNU9UJhHClnMOU8/iGZ0MF7ti4zQS1A== +"@chakra-ui/layout@2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/layout/-/layout-2.3.1.tgz#0601c5eb91555d24a7015a7c9d4e01fed2698557" + integrity sha512-nXuZ6WRbq0WdgnRgLw+QuxWAHuhDtVX8ElWqcTK+cSMFg/52eVP47czYBE5F35YhnoW2XBwfNoNgZ7+e8Z01Rg== dependencies: "@chakra-ui/breakpoint-utils" "2.0.8" - "@chakra-ui/icon" "3.0.16" - "@chakra-ui/object-utils" "2.0.8" + "@chakra-ui/icon" "3.2.0" + "@chakra-ui/object-utils" "2.1.0" "@chakra-ui/react-children-utils" "2.0.6" - "@chakra-ui/react-context" "2.0.7" + "@chakra-ui/react-context" "2.1.0" "@chakra-ui/shared-utils" "2.0.5" "@chakra-ui/lazy-utils@2.0.5": @@ -1567,73 +1661,73 @@ resolved "https://registry.yarnpkg.com/@chakra-ui/lazy-utils/-/lazy-utils-2.0.5.tgz#363c3fa1d421362790b416ffa595acb835e1ae5b" integrity sha512-UULqw7FBvcckQk2n3iPO56TMJvDsNv0FKZI6PlUNJVaGsPbsYxK/8IQ60vZgaTVPtVcjY6BE+y6zg8u9HOqpyg== -"@chakra-ui/live-region@2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@chakra-ui/live-region/-/live-region-2.0.13.tgz#1d00a637b74372d1ee0b215c649ebd4a33893e58" - integrity sha512-Ja+Slk6ZkxSA5oJzU2VuGU7TpZpbMb/4P4OUhIf2D30ctmIeXkxTWw1Bs1nGJAVtAPcGS5sKA+zb89i8g+0cTQ== +"@chakra-ui/live-region@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/live-region/-/live-region-2.1.0.tgz#02b4b1d997075f19a7a9a87187e08c72e82ef0dd" + integrity sha512-ZOxFXwtaLIsXjqnszYYrVuswBhnIHHP+XIgK1vC6DePKtyK590Wg+0J0slDwThUAd4MSSIUa/nNX84x1GMphWw== -"@chakra-ui/media-query@3.2.12": - version "3.2.12" - resolved "https://registry.yarnpkg.com/@chakra-ui/media-query/-/media-query-3.2.12.tgz#75e31f3c88818e687a4d90a2993286c2c3ca2453" - integrity sha512-8pSLDf3oxxhFrhd40rs7vSeIBfvOmIKHA7DJlGUC/y+9irD24ZwgmCtFnn+y3gI47hTJsopbSX+wb8nr7XPswA== +"@chakra-ui/media-query@3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/media-query/-/media-query-3.3.0.tgz#40f9151dedb6a7af9df3be0474b59a799c92c619" + integrity sha512-IsTGgFLoICVoPRp9ykOgqmdMotJG0CnPsKvGQeSFOB/dZfIujdVb14TYxDU4+MURXry1MhJ7LzZhv+Ml7cr8/g== dependencies: "@chakra-ui/breakpoint-utils" "2.0.8" - "@chakra-ui/react-env" "3.0.0" + "@chakra-ui/react-env" "3.1.0" "@chakra-ui/shared-utils" "2.0.5" -"@chakra-ui/menu@2.1.9": - version "2.1.9" - resolved "https://registry.yarnpkg.com/@chakra-ui/menu/-/menu-2.1.9.tgz#2f3239a9b2855fd77fc317d9e6b904c1ad50d7c6" - integrity sha512-ue5nD4QJcl3H3UwN0zZNJmH89XUebnvEdW6THAUL41hDjJ0J/Fjpg9Sgzwug2aBbBXBNbVMsUuhcCj6x91d+IQ== +"@chakra-ui/menu@2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/menu/-/menu-2.2.1.tgz#7d9810d435f6b40fa72ed867a33b88a1ef75073f" + integrity sha512-lJS7XEObzJxsOwWQh7yfG4H8FzFPRP5hVPN/CL+JzytEINCSBvsCDHrYPQGp7jzpCi8vnTqQQGQe0f8dwnXd2g== dependencies: - "@chakra-ui/clickable" "2.0.14" - "@chakra-ui/descendant" "3.0.13" + "@chakra-ui/clickable" "2.1.0" + "@chakra-ui/descendant" "3.1.0" "@chakra-ui/lazy-utils" "2.0.5" - "@chakra-ui/popper" "3.0.13" + "@chakra-ui/popper" "3.1.0" "@chakra-ui/react-children-utils" "2.0.6" - "@chakra-ui/react-context" "2.0.7" - "@chakra-ui/react-use-animation-state" "2.0.8" - "@chakra-ui/react-use-controllable-state" "2.0.8" - "@chakra-ui/react-use-disclosure" "2.0.8" - "@chakra-ui/react-use-focus-effect" "2.0.9" - "@chakra-ui/react-use-merge-refs" "2.0.7" - "@chakra-ui/react-use-outside-click" "2.0.7" - "@chakra-ui/react-use-update-effect" "2.0.7" + "@chakra-ui/react-context" "2.1.0" + "@chakra-ui/react-use-animation-state" "2.1.0" + "@chakra-ui/react-use-controllable-state" "2.1.0" + "@chakra-ui/react-use-disclosure" "2.1.0" + "@chakra-ui/react-use-focus-effect" "2.1.0" + "@chakra-ui/react-use-merge-refs" "2.1.0" + "@chakra-ui/react-use-outside-click" "2.2.0" + "@chakra-ui/react-use-update-effect" "2.1.0" "@chakra-ui/shared-utils" "2.0.5" - "@chakra-ui/transition" "2.0.15" + "@chakra-ui/transition" "2.1.0" -"@chakra-ui/modal@2.2.9": - version "2.2.9" - resolved "https://registry.yarnpkg.com/@chakra-ui/modal/-/modal-2.2.9.tgz#aad65a2c60aa974e023f8b3facc0e79eb742e006" - integrity sha512-nTfNp7XsVwn5+xJOtstoFA8j0kq/9sJj7KesyYzjEDaMKvCZvIOntRYowoydho43jb4+YC7ebKhp0KOIINS0gg== +"@chakra-ui/modal@2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/modal/-/modal-2.3.1.tgz#524dc32b6b4f545b54ae531dbf6c74e1052ee794" + integrity sha512-TQv1ZaiJMZN+rR9DK0snx/OPwmtaGH1HbZtlYt4W4s6CzyK541fxLRTjIXfEzIGpvNW+b6VFuFjbcR78p4DEoQ== dependencies: - "@chakra-ui/close-button" "2.0.17" - "@chakra-ui/focus-lock" "2.0.16" - "@chakra-ui/portal" "2.0.15" - "@chakra-ui/react-context" "2.0.7" + "@chakra-ui/close-button" "2.1.1" + "@chakra-ui/focus-lock" "2.1.0" + "@chakra-ui/portal" "2.1.0" + "@chakra-ui/react-context" "2.1.0" "@chakra-ui/react-types" "2.0.7" - "@chakra-ui/react-use-merge-refs" "2.0.7" + "@chakra-ui/react-use-merge-refs" "2.1.0" "@chakra-ui/shared-utils" "2.0.5" - "@chakra-ui/transition" "2.0.15" - aria-hidden "^1.2.2" - react-remove-scroll "^2.5.5" - -"@chakra-ui/number-input@2.0.18": - version "2.0.18" - resolved "https://registry.yarnpkg.com/@chakra-ui/number-input/-/number-input-2.0.18.tgz#072a00ef869ebafa4960cfdee8caae8208864289" - integrity sha512-cPkyAFFHHzeFBselrT1BtjlzMkJ6TKrTDUnHFlzqXy6aqeXuhrjFhMfXucjedSpOqedsP9ZbKFTdIAhu9DdL/A== - dependencies: - "@chakra-ui/counter" "2.0.14" - "@chakra-ui/form-control" "2.0.17" - "@chakra-ui/icon" "3.0.16" - "@chakra-ui/react-context" "2.0.7" + "@chakra-ui/transition" "2.1.0" + aria-hidden "^1.2.3" + react-remove-scroll "^2.5.6" + +"@chakra-ui/number-input@2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/number-input/-/number-input-2.1.1.tgz#5308a30e972cd45a017f613996d7d5c1f32bd89f" + integrity sha512-B4xwUPyr0NmjGN/dBhOmCD2xjX6OY1pr9GmGH3GQRozMsLAClD3TibwiZetwlyCp02qQqiFwEcZmUxaX88794Q== + dependencies: + "@chakra-ui/counter" "2.1.0" + "@chakra-ui/form-control" "2.1.1" + "@chakra-ui/icon" "3.2.0" + "@chakra-ui/react-context" "2.1.0" "@chakra-ui/react-types" "2.0.7" - "@chakra-ui/react-use-callback-ref" "2.0.7" - "@chakra-ui/react-use-event-listener" "2.0.7" - "@chakra-ui/react-use-interval" "2.0.5" - "@chakra-ui/react-use-merge-refs" "2.0.7" - "@chakra-ui/react-use-safe-layout-effect" "2.0.5" - "@chakra-ui/react-use-update-effect" "2.0.7" + "@chakra-ui/react-use-callback-ref" "2.1.0" + "@chakra-ui/react-use-event-listener" "2.1.0" + "@chakra-ui/react-use-interval" "2.1.0" + "@chakra-ui/react-use-merge-refs" "2.1.0" + "@chakra-ui/react-use-safe-layout-effect" "2.1.0" + "@chakra-ui/react-use-update-effect" "2.1.0" "@chakra-ui/shared-utils" "2.0.5" "@chakra-ui/number-utils@2.0.7": @@ -1641,221 +1735,221 @@ resolved "https://registry.yarnpkg.com/@chakra-ui/number-utils/-/number-utils-2.0.7.tgz#aaee979ca2fb1923a0373a91619473811315db11" integrity sha512-yOGxBjXNvLTBvQyhMDqGU0Oj26s91mbAlqKHiuw737AXHt0aPllOthVUqQMeaYLwLCjGMg0jtI7JReRzyi94Dg== -"@chakra-ui/object-utils@2.0.8": - version "2.0.8" - resolved "https://registry.yarnpkg.com/@chakra-ui/object-utils/-/object-utils-2.0.8.tgz#307f927f6434f99feb32ba92bdf451a6b59a6199" - integrity sha512-2upjT2JgRuiupdrtBWklKBS6tqeGMA77Nh6Q0JaoQuH/8yq+15CGckqn3IUWkWoGI0Fg3bK9LDlbbD+9DLw95Q== +"@chakra-ui/object-utils@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/object-utils/-/object-utils-2.1.0.tgz#a4ecf9cea92f1de09f5531f53ffdc41e0b19b6c3" + integrity sha512-tgIZOgLHaoti5PYGPTwK3t/cqtcycW0owaiOXoZOcpwwX/vlVb+H1jFsQyWiiwQVPt9RkoSLtxzXamx+aHH+bQ== -"@chakra-ui/pin-input@2.0.19": - version "2.0.19" - resolved "https://registry.yarnpkg.com/@chakra-ui/pin-input/-/pin-input-2.0.19.tgz#f9b196174f0518feec5c1ee3fcaf2134c301148a" - integrity sha512-6O7s4vWz4cqQ6zvMov9sYj6ZqWAsTxR/MNGe3DNgu1zWQg8veNCYtj1rNGhNS3eZNUMAa8uM2dXIphGTP53Xow== +"@chakra-ui/pin-input@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/pin-input/-/pin-input-2.1.0.tgz#61e6bbf909ec510634307b2861c4f1891a9f8d81" + integrity sha512-x4vBqLStDxJFMt+jdAHHS8jbh294O53CPQJoL4g228P513rHylV/uPscYUHrVJXRxsHfRztQO9k45jjTYaPRMw== dependencies: - "@chakra-ui/descendant" "3.0.13" + "@chakra-ui/descendant" "3.1.0" "@chakra-ui/react-children-utils" "2.0.6" - "@chakra-ui/react-context" "2.0.7" - "@chakra-ui/react-use-controllable-state" "2.0.8" - "@chakra-ui/react-use-merge-refs" "2.0.7" + "@chakra-ui/react-context" "2.1.0" + "@chakra-ui/react-use-controllable-state" "2.1.0" + "@chakra-ui/react-use-merge-refs" "2.1.0" "@chakra-ui/shared-utils" "2.0.5" -"@chakra-ui/popover@2.1.8": - version "2.1.8" - resolved "https://registry.yarnpkg.com/@chakra-ui/popover/-/popover-2.1.8.tgz#e906ce0533693d735b6e13a3a6ffe16d8e0a9ab4" - integrity sha512-ob7fAz+WWmXIq7iGHVB3wDKzZTj+T+noYBT/U1Q+jIf+jMr2WOpJLTfb0HTZcfhvn4EBFlfBg7Wk5qbXNaOn7g== +"@chakra-ui/popover@2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/popover/-/popover-2.2.1.tgz#89cfd29817abcd204da570073c0f2b4d8072c3a3" + integrity sha512-K+2ai2dD0ljvJnlrzesCDT9mNzLifE3noGKZ3QwLqd/K34Ym1W/0aL1ERSynrcG78NKoXS54SdEzkhCZ4Gn/Zg== dependencies: - "@chakra-ui/close-button" "2.0.17" + "@chakra-ui/close-button" "2.1.1" "@chakra-ui/lazy-utils" "2.0.5" - "@chakra-ui/popper" "3.0.13" - "@chakra-ui/react-context" "2.0.7" + "@chakra-ui/popper" "3.1.0" + "@chakra-ui/react-context" "2.1.0" "@chakra-ui/react-types" "2.0.7" - "@chakra-ui/react-use-animation-state" "2.0.8" - "@chakra-ui/react-use-disclosure" "2.0.8" - "@chakra-ui/react-use-focus-effect" "2.0.9" - "@chakra-ui/react-use-focus-on-pointer-down" "2.0.6" - "@chakra-ui/react-use-merge-refs" "2.0.7" + "@chakra-ui/react-use-animation-state" "2.1.0" + "@chakra-ui/react-use-disclosure" "2.1.0" + "@chakra-ui/react-use-focus-effect" "2.1.0" + "@chakra-ui/react-use-focus-on-pointer-down" "2.1.0" + "@chakra-ui/react-use-merge-refs" "2.1.0" "@chakra-ui/shared-utils" "2.0.5" -"@chakra-ui/popper@3.0.13": - version "3.0.13" - resolved "https://registry.yarnpkg.com/@chakra-ui/popper/-/popper-3.0.13.tgz#914a90e9ae2b83d39a0f40a5454267f1266a2cb6" - integrity sha512-FwtmYz80Ju8oK3Z1HQfisUE7JIMmDsCQsRBu6XuJ3TFQnBHit73yjZmxKjuRJ4JgyT4WBnZoTF3ATbRKSagBeg== +"@chakra-ui/popper@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/popper/-/popper-3.1.0.tgz#92a9180c6894763af3b22a6003f9a9d958fe2659" + integrity sha512-ciDdpdYbeFG7og6/6J8lkTFxsSvwTdMLFkpVylAF6VNC22jssiWfquj2eyD4rJnzkRFPvIWJq8hvbfhsm+AjSg== dependencies: "@chakra-ui/react-types" "2.0.7" - "@chakra-ui/react-use-merge-refs" "2.0.7" + "@chakra-ui/react-use-merge-refs" "2.1.0" "@popperjs/core" "^2.9.3" -"@chakra-ui/portal@2.0.15": - version "2.0.15" - resolved "https://registry.yarnpkg.com/@chakra-ui/portal/-/portal-2.0.15.tgz#21e1f97c4407fc15df8c365cb5cf799dac73ce41" - integrity sha512-z8v7K3j1/nMuBzp2+wRIIw7s/eipVtnXLdjK5yqbMxMRa44E8Mu5VNJLz3aQFLHXEUST+ifqrjImQeli9do6LQ== +"@chakra-ui/portal@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/portal/-/portal-2.1.0.tgz#9e7f57424d7041738b6563cac80134561080bd27" + integrity sha512-9q9KWf6SArEcIq1gGofNcFPSWEyl+MfJjEUg/un1SMlQjaROOh3zYr+6JAwvcORiX7tyHosnmWC3d3wI2aPSQg== dependencies: - "@chakra-ui/react-context" "2.0.7" - "@chakra-ui/react-use-safe-layout-effect" "2.0.5" + "@chakra-ui/react-context" "2.1.0" + "@chakra-ui/react-use-safe-layout-effect" "2.1.0" -"@chakra-ui/progress@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@chakra-ui/progress/-/progress-2.1.5.tgz#eb6a47adf2bff93971262d163461d390782a04ff" - integrity sha512-jj5Vp4lxUchuwp4RPCepM0yAyKi344bgsOd3Apd+ldxclDcewPc82fbwDu7g/Xv27LqJkT+7E/SlQy04wGrk0g== +"@chakra-ui/progress@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/progress/-/progress-2.2.0.tgz#67444ea9779631d7c8395b2c9c78e5634f994999" + integrity sha512-qUXuKbuhN60EzDD9mHR7B67D7p/ZqNS2Aze4Pbl1qGGZfulPW0PY8Rof32qDtttDQBkzQIzFGE8d9QpAemToIQ== dependencies: - "@chakra-ui/react-context" "2.0.7" + "@chakra-ui/react-context" "2.1.0" -"@chakra-ui/provider@2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@chakra-ui/provider/-/provider-2.1.2.tgz#b025cb718826b003b3c9535b6961e8f3be70ebd5" - integrity sha512-4lLlz8QuJv00BhfyKzWpzfoti9MDOdJ/MqXixJV/EZ02RMBOdE9qy9bSz/WckPC2MVhtRUuwMkxH+0QY21PXuw== +"@chakra-ui/provider@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/provider/-/provider-2.4.1.tgz#0c6c1bab2b50fdf9dfbcbb363df8982988c54d65" + integrity sha512-u4g02V9tJ9vVYfkLz5jBn/bKlAyjLdg4Sh3f7uckmYVAZpOL/uUlrStyADrynu3tZhI+BE8XdmXC4zs/SYD7ow== dependencies: - "@chakra-ui/css-reset" "2.0.12" - "@chakra-ui/portal" "2.0.15" - "@chakra-ui/react-env" "3.0.0" - "@chakra-ui/system" "2.5.1" + "@chakra-ui/css-reset" "2.3.0" + "@chakra-ui/portal" "2.1.0" + "@chakra-ui/react-env" "3.1.0" + "@chakra-ui/system" "2.6.1" "@chakra-ui/utils" "2.0.15" -"@chakra-ui/radio@2.0.19": - version "2.0.19" - resolved "https://registry.yarnpkg.com/@chakra-ui/radio/-/radio-2.0.19.tgz#8d5c02eae8eddbced4476b1b50921ade62f0a744" - integrity sha512-PlJiV59eGSmeKP4v/4+ccQUWGRd0cjPKkj/p3L+UbOf8pl9dWm8y9kIeL5TYbghQSDv0nzkrH4+yMnnDTZjdMQ== +"@chakra-ui/radio@2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/radio/-/radio-2.1.1.tgz#399983ce8a1bbc81e7cddfbaf091f54a1645fb7e" + integrity sha512-5JXDVvMWsF/Cprh6BKfcTLbLtRcgD6Wl2zwbNU30nmKIE8+WUfqD7JQETV08oWEzhi3Ea4e5EHvyll2sGx8H3w== dependencies: - "@chakra-ui/form-control" "2.0.17" - "@chakra-ui/react-context" "2.0.7" + "@chakra-ui/form-control" "2.1.1" + "@chakra-ui/react-context" "2.1.0" "@chakra-ui/react-types" "2.0.7" - "@chakra-ui/react-use-merge-refs" "2.0.7" + "@chakra-ui/react-use-merge-refs" "2.1.0" "@chakra-ui/shared-utils" "2.0.5" - "@zag-js/focus-visible" "0.2.1" + "@zag-js/focus-visible" "0.16.0" "@chakra-ui/react-children-utils@2.0.6": version "2.0.6" resolved "https://registry.yarnpkg.com/@chakra-ui/react-children-utils/-/react-children-utils-2.0.6.tgz#6c480c6a60678fcb75cb7d57107c7a79e5179b92" integrity sha512-QVR2RC7QsOsbWwEnq9YduhpqSFnZGvjjGREV8ygKi8ADhXh93C8azLECCUVgRJF2Wc+So1fgxmjLcbZfY2VmBA== -"@chakra-ui/react-context@2.0.7": - version "2.0.7" - resolved "https://registry.yarnpkg.com/@chakra-ui/react-context/-/react-context-2.0.7.tgz#f79a2b072d04d4280ec8799dc03a8a1af521ca2e" - integrity sha512-i7EGmSU+h2GB30cwrKB4t1R5BMHyGoJM5L2Zz7b+ZUX4aAqyPcfe97wPiQB6Rgr1ImGXrUeov4CDVrRZ2FPgLQ== +"@chakra-ui/react-context@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-context/-/react-context-2.1.0.tgz#4858be1d5ff1c8ac0a0ec088d93a3b7f1cbbff99" + integrity sha512-iahyStvzQ4AOwKwdPReLGfDesGG+vWJfEsn0X/NoGph/SkN+HXtv2sCfYFFR9k7bb+Kvc6YfpLlSuLvKMHi2+w== -"@chakra-ui/react-env@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@chakra-ui/react-env/-/react-env-3.0.0.tgz#2c3c9dc0e529b9b474a386a2b24988317b2a0811" - integrity sha512-tfMRO2v508HQWAqSADFrwZgR9oU10qC97oV6zGbjHh9ALP0/IcFR+Bi71KRTveDTm85fMeAzZYGj57P3Dsipkw== +"@chakra-ui/react-env@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-env/-/react-env-3.1.0.tgz#7d3c1c05a501bb369524d9f3d38c9325eb16ab50" + integrity sha512-Vr96GV2LNBth3+IKzr/rq1IcnkXv+MLmwjQH6C8BRtn3sNskgDFD5vLkVXcEhagzZMCh8FR3V/bzZPojBOyNhw== dependencies: - "@chakra-ui/react-use-safe-layout-effect" "2.0.5" + "@chakra-ui/react-use-safe-layout-effect" "2.1.0" "@chakra-ui/react-types@2.0.7": version "2.0.7" resolved "https://registry.yarnpkg.com/@chakra-ui/react-types/-/react-types-2.0.7.tgz#799c166a44882b23059c8f510eac9bd5d0869ac4" integrity sha512-12zv2qIZ8EHwiytggtGvo4iLT0APris7T0qaAWqzpUGS0cdUtR8W+V1BJ5Ocq+7tA6dzQ/7+w5hmXih61TuhWQ== -"@chakra-ui/react-use-animation-state@2.0.8": - version "2.0.8" - resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-animation-state/-/react-use-animation-state-2.0.8.tgz#544ef3007498d4a0629b9d1916056ddaf59aa286" - integrity sha512-xv9zSF2Rd1mHWQ+m5DLBWeh4atF8qrNvsOs3MNrvxKYBS3f79N3pqcQGrWAEvirXWXfiCeje2VAkEggqFRIo+Q== +"@chakra-ui/react-use-animation-state@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-animation-state/-/react-use-animation-state-2.1.0.tgz#eab661fbafd96804fe867b0df0c27e78feefe6e2" + integrity sha512-CFZkQU3gmDBwhqy0vC1ryf90BVHxVN8cTLpSyCpdmExUEtSEInSCGMydj2fvn7QXsz/za8JNdO2xxgJwxpLMtg== dependencies: - "@chakra-ui/dom-utils" "2.0.6" - "@chakra-ui/react-use-event-listener" "2.0.7" + "@chakra-ui/dom-utils" "2.1.0" + "@chakra-ui/react-use-event-listener" "2.1.0" -"@chakra-ui/react-use-callback-ref@2.0.7": - version "2.0.7" - resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-callback-ref/-/react-use-callback-ref-2.0.7.tgz#9b844a81037d0ecaaa8031979fa050165635e211" - integrity sha512-YjT76nTpfHAK5NxplAlZsQwNju5KmQExnqsWNPFeOR6vvbC34+iPSTr+r91i1Hdy7gBSbevsOsd5Wm6RN3GuMw== +"@chakra-ui/react-use-callback-ref@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-callback-ref/-/react-use-callback-ref-2.1.0.tgz#a508085f4d9e7d84d4ceffdf5f41745c9ac451d7" + integrity sha512-efnJrBtGDa4YaxDzDE90EnKD3Vkh5a1t3w7PhnRQmsphLy3g2UieasoKTlT2Hn118TwDjIv5ZjHJW6HbzXA9wQ== -"@chakra-ui/react-use-controllable-state@2.0.8": - version "2.0.8" - resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-controllable-state/-/react-use-controllable-state-2.0.8.tgz#6b71187e03be632c244dde9f16ed685428087ec9" - integrity sha512-F7rdCbLEmRjwwODqWZ3y+mKgSSHPcLQxeUygwk1BkZPXbKkJJKymOIjIynil2cbH7ku3hcSIWRvuhpCcfQWJ7Q== +"@chakra-ui/react-use-controllable-state@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-controllable-state/-/react-use-controllable-state-2.1.0.tgz#8fb6fa2f45d0c04173582ae8297e604ffdb9c7d9" + integrity sha512-QR/8fKNokxZUs4PfxjXuwl0fj/d71WPrmLJvEpCTkHjnzu7LnYvzoe2wB867IdooQJL0G1zBxl0Dq+6W1P3jpg== dependencies: - "@chakra-ui/react-use-callback-ref" "2.0.7" + "@chakra-ui/react-use-callback-ref" "2.1.0" -"@chakra-ui/react-use-disclosure@2.0.8": - version "2.0.8" - resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-disclosure/-/react-use-disclosure-2.0.8.tgz#e0e0445afc6d6d96bb262b99751e675034c31497" - integrity sha512-2ir/mHe1YND40e+FyLHnDsnDsBQPwzKDLzfe9GZri7y31oU83JSbHdlAXAhp3bpjohslwavtRCp+S/zRxfO9aQ== +"@chakra-ui/react-use-disclosure@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-disclosure/-/react-use-disclosure-2.1.0.tgz#90093eaf45db1bea7a6851dd0ce5cdb3eb66f90a" + integrity sha512-Ax4pmxA9LBGMyEZJhhUZobg9C0t3qFE4jVF1tGBsrLDcdBeLR9fwOogIPY9Hf0/wqSlAryAimICbr5hkpa5GSw== dependencies: - "@chakra-ui/react-use-callback-ref" "2.0.7" + "@chakra-ui/react-use-callback-ref" "2.1.0" -"@chakra-ui/react-use-event-listener@2.0.7": - version "2.0.7" - resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-event-listener/-/react-use-event-listener-2.0.7.tgz#ed08164164e79183d876eeb71e12c6bfaca3ad17" - integrity sha512-4wvpx4yudIO3B31pOrXuTHDErawmwiXnvAN7gLEOVREi16+YGNcFnRJ5X5nRrmB7j2MDUtsEDpRBFfw5Z9xQ5g== +"@chakra-ui/react-use-event-listener@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-event-listener/-/react-use-event-listener-2.1.0.tgz#afea2645bd9b38f754fc2b8eb858f9bb22385ded" + integrity sha512-U5greryDLS8ISP69DKDsYcsXRtAdnTQT+jjIlRYZ49K/XhUR/AqVZCK5BkR1spTDmO9H8SPhgeNKI70ODuDU/Q== dependencies: - "@chakra-ui/react-use-callback-ref" "2.0.7" + "@chakra-ui/react-use-callback-ref" "2.1.0" -"@chakra-ui/react-use-focus-effect@2.0.9": - version "2.0.9" - resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-focus-effect/-/react-use-focus-effect-2.0.9.tgz#9f94c0cb54e6e14ac9f048ca4d32a1fdcea067c1" - integrity sha512-20nfNkpbVwyb41q9wxp8c4jmVp6TUGAPE3uFTDpiGcIOyPW5aecQtPmTXPMJH+2aa8Nu1wyoT1btxO+UYiQM3g== +"@chakra-ui/react-use-focus-effect@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-focus-effect/-/react-use-focus-effect-2.1.0.tgz#963fb790370dfadd51d12666ff2da60706f53a2a" + integrity sha512-xzVboNy7J64xveLcxTIJ3jv+lUJKDwRM7Szwn9tNzUIPD94O3qwjV7DDCUzN2490nSYDF4OBMt/wuDBtaR3kUQ== dependencies: - "@chakra-ui/dom-utils" "2.0.6" - "@chakra-ui/react-use-event-listener" "2.0.7" - "@chakra-ui/react-use-safe-layout-effect" "2.0.5" - "@chakra-ui/react-use-update-effect" "2.0.7" + "@chakra-ui/dom-utils" "2.1.0" + "@chakra-ui/react-use-event-listener" "2.1.0" + "@chakra-ui/react-use-safe-layout-effect" "2.1.0" + "@chakra-ui/react-use-update-effect" "2.1.0" -"@chakra-ui/react-use-focus-on-pointer-down@2.0.6": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-focus-on-pointer-down/-/react-use-focus-on-pointer-down-2.0.6.tgz#13330eb518c17e591c908cb8f4a30d43a978e3f2" - integrity sha512-OigXiLRVySn3tyVqJ/rn57WGuukW8TQe8fJYiLwXbcNyAMuYYounvRxvCy2b53sQ7QIZamza0N0jhirbH5FNoQ== +"@chakra-ui/react-use-focus-on-pointer-down@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-focus-on-pointer-down/-/react-use-focus-on-pointer-down-2.1.0.tgz#2fbcf6bc7d06d97606747e231a908d5c387ca0cc" + integrity sha512-2jzrUZ+aiCG/cfanrolsnSMDykCAbv9EK/4iUyZno6BYb3vziucmvgKuoXbMPAzWNtwUwtuMhkby8rc61Ue+Lg== dependencies: - "@chakra-ui/react-use-event-listener" "2.0.7" + "@chakra-ui/react-use-event-listener" "2.1.0" -"@chakra-ui/react-use-interval@2.0.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-interval/-/react-use-interval-2.0.5.tgz#c1a0043bf188b19b790a27668f4e860391335a60" - integrity sha512-1nbdwMi2K87V6p5f5AseOKif2CkldLaJlq1TOqaPRwb7v3aU9rltBtYdf+fIyuHSToNJUV6wd9budCFdLCl3Fg== +"@chakra-ui/react-use-interval@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-interval/-/react-use-interval-2.1.0.tgz#2602c097b3ab74b6644812e4f5efaad621218d98" + integrity sha512-8iWj+I/+A0J08pgEXP1J1flcvhLBHkk0ln7ZvGIyXiEyM6XagOTJpwNhiu+Bmk59t3HoV/VyvyJTa+44sEApuw== dependencies: - "@chakra-ui/react-use-callback-ref" "2.0.7" + "@chakra-ui/react-use-callback-ref" "2.1.0" -"@chakra-ui/react-use-latest-ref@2.0.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-latest-ref/-/react-use-latest-ref-2.0.5.tgz#b61dc4dadda340f7b14df0ec1d50ab2e507b3b3e" - integrity sha512-3mIuFzMyIo3Ok/D8uhV9voVg7KkrYVO/pwVvNPJOHsDQqCA6DpYE4WDsrIx+fVcwad3Ta7SupexR5PoI+kq6QQ== +"@chakra-ui/react-use-latest-ref@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-latest-ref/-/react-use-latest-ref-2.1.0.tgz#d1e926130102566ece1d39f8a48ed125e0c8441a" + integrity sha512-m0kxuIYqoYB0va9Z2aW4xP/5b7BzlDeWwyXCH6QpT2PpW3/281L3hLCm1G0eOUcdVlayqrQqOeD6Mglq+5/xoQ== -"@chakra-ui/react-use-merge-refs@2.0.7": - version "2.0.7" - resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-merge-refs/-/react-use-merge-refs-2.0.7.tgz#1a1fe800fb5501ec3da4088fbac78c03bbad13a7" - integrity sha512-zds4Uhsc+AMzdH8JDDkLVet9baUBgtOjPbhC5r3A0ZXjZvGhCztFAVE3aExYiVoMPoHLKbLcqvCWE6ioFKz1lw== +"@chakra-ui/react-use-merge-refs@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-merge-refs/-/react-use-merge-refs-2.1.0.tgz#c0c233527abdbea9a1348269c192012205762314" + integrity sha512-lERa6AWF1cjEtWSGjxWTaSMvneccnAVH4V4ozh8SYiN9fSPZLlSG3kNxfNzdFvMEhM7dnP60vynF7WjGdTgQbQ== -"@chakra-ui/react-use-outside-click@2.0.7": - version "2.0.7" - resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-outside-click/-/react-use-outside-click-2.0.7.tgz#56c668f020fbc6331db4c3b61c8b845a68c4a134" - integrity sha512-MsAuGLkwYNxNJ5rb8lYNvXApXxYMnJ3MzqBpQj1kh5qP/+JSla9XMjE/P94ub4fSEttmNSqs43SmPPrmPuihsQ== +"@chakra-ui/react-use-outside-click@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-outside-click/-/react-use-outside-click-2.2.0.tgz#5570b772a255f6f02b69e967127397c1b5fa3d3c" + integrity sha512-PNX+s/JEaMneijbgAM4iFL+f3m1ga9+6QK0E5Yh4s8KZJQ/bLwZzdhMz8J/+mL+XEXQ5J0N8ivZN28B82N1kNw== dependencies: - "@chakra-ui/react-use-callback-ref" "2.0.7" + "@chakra-ui/react-use-callback-ref" "2.1.0" -"@chakra-ui/react-use-pan-event@2.0.9": - version "2.0.9" - resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-pan-event/-/react-use-pan-event-2.0.9.tgz#0ff33a285e75a692d1ed52dbb9f3046a593b8004" - integrity sha512-xu35QXkiyrgsHUOnctl+SwNcwf9Rl62uYE5y8soKOZdBm8E+FvZIt2hxUzK1EoekbJCMzEZ0Yv1ZQCssVkSLaQ== +"@chakra-ui/react-use-pan-event@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-pan-event/-/react-use-pan-event-2.1.0.tgz#51c21bc3c0e9e73d1faef5ea4f7e3c3d071a2758" + integrity sha512-xmL2qOHiXqfcj0q7ZK5s9UjTh4Gz0/gL9jcWPA6GVf+A0Od5imEDa/Vz+533yQKWiNSm1QGrIj0eJAokc7O4fg== dependencies: "@chakra-ui/event-utils" "2.0.8" - "@chakra-ui/react-use-latest-ref" "2.0.5" + "@chakra-ui/react-use-latest-ref" "2.1.0" framesync "6.1.2" -"@chakra-ui/react-use-previous@2.0.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-previous/-/react-use-previous-2.0.5.tgz#65836cc81e3a1bf4252cd08a71094f1be827b56c" - integrity sha512-BIZgjycPE4Xr+MkhKe0h67uHXzQQkBX/u5rYPd65iMGdX1bCkbE0oorZNfOHLKdTmnEb4oVsNvfN6Rfr+Mnbxw== +"@chakra-ui/react-use-previous@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-previous/-/react-use-previous-2.1.0.tgz#f6046e6f7398b1e8d7e66ff7ebb8d61c92a2d3d0" + integrity sha512-pjxGwue1hX8AFcmjZ2XfrQtIJgqbTF3Qs1Dy3d1krC77dEsiCUbQ9GzOBfDc8pfd60DrB5N2tg5JyHbypqh0Sg== -"@chakra-ui/react-use-safe-layout-effect@2.0.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-safe-layout-effect/-/react-use-safe-layout-effect-2.0.5.tgz#6cf388c37fd2a42b5295a292e149b32f860a00a7" - integrity sha512-MwAQBz3VxoeFLaesaSEN87reVNVbjcQBDex2WGexAg6hUB6n4gc1OWYH/iXp4tzp4kuggBNhEHkk9BMYXWfhJQ== +"@chakra-ui/react-use-safe-layout-effect@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-safe-layout-effect/-/react-use-safe-layout-effect-2.1.0.tgz#3a95f0ba6fd5d2d0aa14919160f2c825f13e686f" + integrity sha512-Knbrrx/bcPwVS1TorFdzrK/zWA8yuU/eaXDkNj24IrKoRlQrSBFarcgAEzlCHtzuhufP3OULPkELTzz91b0tCw== -"@chakra-ui/react-use-size@2.0.9": - version "2.0.9" - resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-size/-/react-use-size-2.0.9.tgz#00717867b98a24c3bdcfaa0c3e70732404193486" - integrity sha512-Jce7QmO1jlQZq+Y77VKckWzroRnajChzUQ8xhLQZO6VbYvrpg3cu+X2QCz3G+MZzB+1/hnvvAqmZ+uJLd8rEJg== +"@chakra-ui/react-use-size@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-size/-/react-use-size-2.1.0.tgz#fcf3070eaade8b4a84af8ce5341c4d5ca0a42bec" + integrity sha512-tbLqrQhbnqOjzTaMlYytp7wY8BW1JpL78iG7Ru1DlV4EWGiAmXFGvtnEt9HftU0NJ0aJyjgymkxfVGI55/1Z4A== dependencies: - "@zag-js/element-size" "0.3.1" + "@zag-js/element-size" "0.10.5" -"@chakra-ui/react-use-timeout@2.0.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-timeout/-/react-use-timeout-2.0.5.tgz#13c4e48e48d4b84ce1e062f0f1c9ec401ece78c9" - integrity sha512-QqmB+jVphh3h/CS60PieorpY7UqSPkrQCB7f7F+i9vwwIjtP8fxVHMmkb64K7VlzQiMPzv12nlID5dqkzlv0mw== +"@chakra-ui/react-use-timeout@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-timeout/-/react-use-timeout-2.1.0.tgz#24415f54267d7241a3c1d36a5cae4d472834cef7" + integrity sha512-cFN0sobKMM9hXUhyCofx3/Mjlzah6ADaEl/AXl5Y+GawB5rgedgAcu2ErAgarEkwvsKdP6c68CKjQ9dmTQlJxQ== dependencies: - "@chakra-ui/react-use-callback-ref" "2.0.7" + "@chakra-ui/react-use-callback-ref" "2.1.0" -"@chakra-ui/react-use-update-effect@2.0.7": - version "2.0.7" - resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-update-effect/-/react-use-update-effect-2.0.7.tgz#f94b7975ebb150c03d410e754b54f0e9dd263134" - integrity sha512-vBM2bmmM83ZdDtasWv3PXPznpTUd+FvqBC8J8rxoRmvdMEfrxTiQRBJhiGHLpS9BPLLPQlosN6KdFU97csB6zg== +"@chakra-ui/react-use-update-effect@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/react-use-update-effect/-/react-use-update-effect-2.1.0.tgz#5c57cd1f50c2a6a8119e0f57f69510723d69884b" + integrity sha512-ND4Q23tETaR2Qd3zwCKYOOS1dfssojPLJMLvUtUbW5M9uW1ejYWgGUobeAiOVfSplownG8QYMmHTP86p/v0lbA== "@chakra-ui/react-utils@2.0.12": version "2.0.12" @@ -1864,69 +1958,71 @@ dependencies: "@chakra-ui/utils" "2.0.15" -"@chakra-ui/react@^2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@chakra-ui/react/-/react-2.5.1.tgz#05414db2b512bd4402e42eecc6b915d85102c576" - integrity sha512-ugkaqfcNMb9L4TkalWiF3rnqfr0TlUUD46JZaDIZiORVisaSwXTZTQrVfG40VghhaJT28rnC5WtiE8kd567ZBQ== - dependencies: - "@chakra-ui/accordion" "2.1.9" - "@chakra-ui/alert" "2.0.17" - "@chakra-ui/avatar" "2.2.5" - "@chakra-ui/breadcrumb" "2.1.4" - "@chakra-ui/button" "2.0.16" - "@chakra-ui/card" "2.1.6" - "@chakra-ui/checkbox" "2.2.10" - "@chakra-ui/close-button" "2.0.17" - "@chakra-ui/control-box" "2.0.13" - "@chakra-ui/counter" "2.0.14" - "@chakra-ui/css-reset" "2.0.12" - "@chakra-ui/editable" "2.0.19" - "@chakra-ui/focus-lock" "2.0.16" - "@chakra-ui/form-control" "2.0.17" - "@chakra-ui/hooks" "2.1.6" - "@chakra-ui/icon" "3.0.16" - "@chakra-ui/image" "2.0.15" - "@chakra-ui/input" "2.0.20" - "@chakra-ui/layout" "2.1.16" - "@chakra-ui/live-region" "2.0.13" - "@chakra-ui/media-query" "3.2.12" - "@chakra-ui/menu" "2.1.9" - "@chakra-ui/modal" "2.2.9" - "@chakra-ui/number-input" "2.0.18" - "@chakra-ui/pin-input" "2.0.19" - "@chakra-ui/popover" "2.1.8" - "@chakra-ui/popper" "3.0.13" - "@chakra-ui/portal" "2.0.15" - "@chakra-ui/progress" "2.1.5" - "@chakra-ui/provider" "2.1.2" - "@chakra-ui/radio" "2.0.19" - "@chakra-ui/react-env" "3.0.0" - "@chakra-ui/select" "2.0.18" - "@chakra-ui/skeleton" "2.0.24" - "@chakra-ui/slider" "2.0.21" - "@chakra-ui/spinner" "2.0.13" - "@chakra-ui/stat" "2.0.17" - "@chakra-ui/styled-system" "2.6.1" - "@chakra-ui/switch" "2.0.22" - "@chakra-ui/system" "2.5.1" - "@chakra-ui/table" "2.0.16" - "@chakra-ui/tabs" "2.1.8" - "@chakra-ui/tag" "2.0.17" - "@chakra-ui/textarea" "2.0.18" - "@chakra-ui/theme" "2.2.5" - "@chakra-ui/theme-utils" "2.0.11" - "@chakra-ui/toast" "6.0.1" - "@chakra-ui/tooltip" "2.2.6" - "@chakra-ui/transition" "2.0.15" +"@chakra-ui/react@^2.8.1": + version "2.8.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/react/-/react-2.8.1.tgz#fd80632b0ef34434443d8999d03d297f130aabcf" + integrity sha512-UL9Rtj4DovP3+oVbI06gsdfyJJb+wmS2RYnGNXjW9tsjCyXxjlBw9TAUj0jyOfWe0+zd/4juL8+J+QCwmdhptg== + dependencies: + "@chakra-ui/accordion" "2.3.1" + "@chakra-ui/alert" "2.2.1" + "@chakra-ui/avatar" "2.3.0" + "@chakra-ui/breadcrumb" "2.2.0" + "@chakra-ui/button" "2.1.0" + "@chakra-ui/card" "2.2.0" + "@chakra-ui/checkbox" "2.3.1" + "@chakra-ui/close-button" "2.1.1" + "@chakra-ui/control-box" "2.1.0" + "@chakra-ui/counter" "2.1.0" + "@chakra-ui/css-reset" "2.3.0" + "@chakra-ui/editable" "3.1.0" + "@chakra-ui/focus-lock" "2.1.0" + "@chakra-ui/form-control" "2.1.1" + "@chakra-ui/hooks" "2.2.1" + "@chakra-ui/icon" "3.2.0" + "@chakra-ui/image" "2.1.0" + "@chakra-ui/input" "2.1.1" + "@chakra-ui/layout" "2.3.1" + "@chakra-ui/live-region" "2.1.0" + "@chakra-ui/media-query" "3.3.0" + "@chakra-ui/menu" "2.2.1" + "@chakra-ui/modal" "2.3.1" + "@chakra-ui/number-input" "2.1.1" + "@chakra-ui/pin-input" "2.1.0" + "@chakra-ui/popover" "2.2.1" + "@chakra-ui/popper" "3.1.0" + "@chakra-ui/portal" "2.1.0" + "@chakra-ui/progress" "2.2.0" + "@chakra-ui/provider" "2.4.1" + "@chakra-ui/radio" "2.1.1" + "@chakra-ui/react-env" "3.1.0" + "@chakra-ui/select" "2.1.1" + "@chakra-ui/skeleton" "2.1.0" + "@chakra-ui/skip-nav" "2.1.0" + "@chakra-ui/slider" "2.1.0" + "@chakra-ui/spinner" "2.1.0" + "@chakra-ui/stat" "2.1.1" + "@chakra-ui/stepper" "2.3.1" + "@chakra-ui/styled-system" "2.9.1" + "@chakra-ui/switch" "2.1.1" + "@chakra-ui/system" "2.6.1" + "@chakra-ui/table" "2.1.0" + "@chakra-ui/tabs" "3.0.0" + "@chakra-ui/tag" "3.1.1" + "@chakra-ui/textarea" "2.1.1" + "@chakra-ui/theme" "3.3.0" + "@chakra-ui/theme-utils" "2.0.20" + "@chakra-ui/toast" "7.0.1" + "@chakra-ui/tooltip" "2.3.0" + "@chakra-ui/transition" "2.1.0" "@chakra-ui/utils" "2.0.15" - "@chakra-ui/visually-hidden" "2.0.15" + "@chakra-ui/visually-hidden" "2.2.0" -"@chakra-ui/select@2.0.18": - version "2.0.18" - resolved "https://registry.yarnpkg.com/@chakra-ui/select/-/select-2.0.18.tgz#4eb6092610067c1b4131353fe39b4466e251395b" - integrity sha512-1d2lUT5LM6oOs5x4lzBh4GFDuXX62+lr+sgV7099g951/5UNbb0CS2hSZHsO7yZThLNbr7QTWZvAOAayVcGzdw== +"@chakra-ui/select@2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/select/-/select-2.1.1.tgz#0792eeebdb82b1710c4527e7e8e2e07c686c714d" + integrity sha512-CERDATncv5w05Zo5/LrFtf1yKp1deyMUyDGv6eZvQG/etyukH4TstsuIHt/0GfNXrCF3CJLZ8lINzpv5wayVjQ== dependencies: - "@chakra-ui/form-control" "2.0.17" + "@chakra-ui/form-control" "2.1.1" "@chakra-ui/shared-utils" "2.0.5" "@chakra-ui/shared-utils@2.0.5": @@ -1934,176 +2030,191 @@ resolved "https://registry.yarnpkg.com/@chakra-ui/shared-utils/-/shared-utils-2.0.5.tgz#cb2b49705e113853647f1822142619570feba081" integrity sha512-4/Wur0FqDov7Y0nCXl7HbHzCg4aq86h+SXdoUeuCMD3dSj7dpsVnStLYhng1vxvlbUnLpdF4oz5Myt3i/a7N3Q== -"@chakra-ui/skeleton@2.0.24": - version "2.0.24" - resolved "https://registry.yarnpkg.com/@chakra-ui/skeleton/-/skeleton-2.0.24.tgz#dc9dcca6fc43005544fabfd38a444943b0a29cad" - integrity sha512-1jXtVKcl/jpbrJlc/TyMsFyI651GTXY5ma30kWyTXoby2E+cxbV6OR8GB/NMZdGxbQBax8/VdtYVjI0n+OBqWA== +"@chakra-ui/skeleton@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/skeleton/-/skeleton-2.1.0.tgz#e3b25dd3afa330029d6d63be0f7cb8d44ad25531" + integrity sha512-JNRuMPpdZGd6zFVKjVQ0iusu3tXAdI29n4ZENYwAJEMf/fN0l12sVeirOxkJ7oEL0yOx2AgEYFSKdbcAgfUsAQ== dependencies: - "@chakra-ui/media-query" "3.2.12" - "@chakra-ui/react-use-previous" "2.0.5" + "@chakra-ui/media-query" "3.3.0" + "@chakra-ui/react-use-previous" "2.1.0" "@chakra-ui/shared-utils" "2.0.5" -"@chakra-ui/slider@2.0.21": - version "2.0.21" - resolved "https://registry.yarnpkg.com/@chakra-ui/slider/-/slider-2.0.21.tgz#f65b15bf0d5f827699ff9a2d6faee35006e2bfce" - integrity sha512-Mm76yJxEqJl21+3waEcKg3tM8Y4elJ7mcViN6Brj35PTfzUJfSJxeBGo1nLPJ+X5jLj7o/L4kfBmUk3lY4QYEQ== +"@chakra-ui/skip-nav@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/skip-nav/-/skip-nav-2.1.0.tgz#cac27eecc6eded1e83c8f0cf7445d727739cb325" + integrity sha512-Hk+FG+vadBSH0/7hwp9LJnLjkO0RPGnx7gBJWI4/SpoJf3e4tZlWYtwGj0toYY4aGKl93jVghuwGbDBEMoHDug== + +"@chakra-ui/slider@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/slider/-/slider-2.1.0.tgz#1caeed18761ba2a390777418cc9389ba25e39bce" + integrity sha512-lUOBcLMCnFZiA/s2NONXhELJh6sY5WtbRykPtclGfynqqOo47lwWJx+VP7xaeuhDOPcWSSecWc9Y1BfPOCz9cQ== dependencies: "@chakra-ui/number-utils" "2.0.7" - "@chakra-ui/react-context" "2.0.7" + "@chakra-ui/react-context" "2.1.0" "@chakra-ui/react-types" "2.0.7" - "@chakra-ui/react-use-callback-ref" "2.0.7" - "@chakra-ui/react-use-controllable-state" "2.0.8" - "@chakra-ui/react-use-latest-ref" "2.0.5" - "@chakra-ui/react-use-merge-refs" "2.0.7" - "@chakra-ui/react-use-pan-event" "2.0.9" - "@chakra-ui/react-use-size" "2.0.9" - "@chakra-ui/react-use-update-effect" "2.0.7" - -"@chakra-ui/spinner@2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@chakra-ui/spinner/-/spinner-2.0.13.tgz#64fe919c18305c653ced046e25d5883ee4c1e7d7" - integrity sha512-T1/aSkVpUIuiYyrjfn1+LsQEG7Onbi1UE9ccS/evgf61Dzy4GgTXQUnDuWFSgpV58owqirqOu6jn/9eCwDlzlg== + "@chakra-ui/react-use-callback-ref" "2.1.0" + "@chakra-ui/react-use-controllable-state" "2.1.0" + "@chakra-ui/react-use-latest-ref" "2.1.0" + "@chakra-ui/react-use-merge-refs" "2.1.0" + "@chakra-ui/react-use-pan-event" "2.1.0" + "@chakra-ui/react-use-size" "2.1.0" + "@chakra-ui/react-use-update-effect" "2.1.0" + +"@chakra-ui/spinner@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/spinner/-/spinner-2.1.0.tgz#aa24a3d692c6ac90714e0f0f82c76c12c78c8e60" + integrity sha512-hczbnoXt+MMv/d3gE+hjQhmkzLiKuoTo42YhUG7Bs9OSv2lg1fZHW1fGNRFP3wTi6OIbD044U1P9HK+AOgFH3g== dependencies: "@chakra-ui/shared-utils" "2.0.5" -"@chakra-ui/stat@2.0.17": - version "2.0.17" - resolved "https://registry.yarnpkg.com/@chakra-ui/stat/-/stat-2.0.17.tgz#2cd712cc7e0d58d9cbd542deea911f1b0925074f" - integrity sha512-PhD+5oVLWjQmGLfeZSmexp3AtLcaggWBwoMZ4z8QMZIQzf/fJJWMk0bMqxlpTv8ORDkfY/4ImuFB/RJHvcqlcA== +"@chakra-ui/stat@2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/stat/-/stat-2.1.1.tgz#a204ba915795345996a16c79794d84826d7dcc2d" + integrity sha512-LDn0d/LXQNbAn2KaR3F1zivsZCewY4Jsy1qShmfBMKwn6rI8yVlbvu6SiA3OpHS0FhxbsZxQI6HefEoIgtqY6Q== dependencies: - "@chakra-ui/icon" "3.0.16" - "@chakra-ui/react-context" "2.0.7" + "@chakra-ui/icon" "3.2.0" + "@chakra-ui/react-context" "2.1.0" "@chakra-ui/shared-utils" "2.0.5" -"@chakra-ui/styled-system@2.6.1": - version "2.6.1" - resolved "https://registry.yarnpkg.com/@chakra-ui/styled-system/-/styled-system-2.6.1.tgz#302d496d34c0b7b30c646a7e3c9b113a2f4588da" - integrity sha512-jy/1dVi1LxjoRCm+Eo5mqBgvPy5SCWMlIcz6GbIZBDpkGeKZwtqrZLjekxxLBCy8ORY+kJlUB0FT6AzVR/1tjw== +"@chakra-ui/stepper@2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/stepper/-/stepper-2.3.1.tgz#a0a0b73e147f202ab4e51cae55dad45489cc89fd" + integrity sha512-ky77lZbW60zYkSXhYz7kbItUpAQfEdycT0Q4bkHLxfqbuiGMf8OmgZOQkOB9uM4v0zPwy2HXhe0vq4Dd0xa55Q== + dependencies: + "@chakra-ui/icon" "3.2.0" + "@chakra-ui/react-context" "2.1.0" + "@chakra-ui/shared-utils" "2.0.5" + +"@chakra-ui/styled-system@2.9.1": + version "2.9.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/styled-system/-/styled-system-2.9.1.tgz#888a4901b2afa174461259a8875379adb0363934" + integrity sha512-jhYKBLxwOPi9/bQt9kqV3ELa/4CjmNNruTyXlPp5M0v0+pDMUngPp48mVLoskm9RKZGE0h1qpvj/jZ3K7c7t8w== dependencies: "@chakra-ui/shared-utils" "2.0.5" csstype "^3.0.11" lodash.mergewith "4.6.2" -"@chakra-ui/switch@2.0.22": - version "2.0.22" - resolved "https://registry.yarnpkg.com/@chakra-ui/switch/-/switch-2.0.22.tgz#7b35e2b10ea4cf91fb49f5175b4335c61dcd25b3" - integrity sha512-+/Yy6y7VFD91uSPruF8ZvePi3tl5D8UNVATtWEQ+QBI92DLSM+PtgJ2F0Y9GMZ9NzMxpZ80DqwY7/kqcPCfLvw== +"@chakra-ui/switch@2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/switch/-/switch-2.1.1.tgz#8049963e6421cdd5eaaac1d20d9febae8d731b62" + integrity sha512-cOHIhW5AlLZSFENxFEBYTBniqiduOowa1WdzslP1Fd0usBFaD5iAgOY1Fvr7xKhE8nmzzeMCkPB3XBvUSWnawQ== dependencies: - "@chakra-ui/checkbox" "2.2.10" + "@chakra-ui/checkbox" "2.3.1" "@chakra-ui/shared-utils" "2.0.5" -"@chakra-ui/system@2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@chakra-ui/system/-/system-2.5.1.tgz#bc03a11ae31e795966c7618280548d5cd866f47e" - integrity sha512-4+86OrcSoq7lGkm5fh+sJ3IWXSTzjz+HOllRbCW2Rtnmcg7ritiXVNV2VygEg2DrCcx5+tNqRHDM764zW+AEug== +"@chakra-ui/system@2.6.1": + version "2.6.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/system/-/system-2.6.1.tgz#22ee50ddc9e1f56b974a0dd42d86108391a2f372" + integrity sha512-P5Q/XRWy3f1pXJ7IxDkV+Z6AT7GJeR2JlBnQl109xewVQcBLWWMIp702fFMFw8KZ2ALB/aYKtWm5EmQMddC/tg== dependencies: - "@chakra-ui/color-mode" "2.1.12" - "@chakra-ui/object-utils" "2.0.8" + "@chakra-ui/color-mode" "2.2.0" + "@chakra-ui/object-utils" "2.1.0" "@chakra-ui/react-utils" "2.0.12" - "@chakra-ui/styled-system" "2.6.1" - "@chakra-ui/theme-utils" "2.0.11" + "@chakra-ui/styled-system" "2.9.1" + "@chakra-ui/theme-utils" "2.0.20" "@chakra-ui/utils" "2.0.15" - react-fast-compare "3.2.0" + react-fast-compare "3.2.2" -"@chakra-ui/table@2.0.16": - version "2.0.16" - resolved "https://registry.yarnpkg.com/@chakra-ui/table/-/table-2.0.16.tgz#e69736cba5cfb218c5e40592ad9280c6e32f6fe7" - integrity sha512-vWDXZ6Ad3Aj66curp1tZBHvCfQHX2FJ4ijLiqGgQszWFIchfhJ5vMgEBJaFMZ+BN1draAjuRTZqaQefOApzvRg== +"@chakra-ui/table@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/table/-/table-2.1.0.tgz#20dce14c5e4d70dc7c6c0e87cce9b05907ff8c50" + integrity sha512-o5OrjoHCh5uCLdiUb0Oc0vq9rIAeHSIRScc2ExTC9Qg/uVZl2ygLrjToCaKfaaKl1oQexIeAcZDKvPG8tVkHyQ== dependencies: - "@chakra-ui/react-context" "2.0.7" + "@chakra-ui/react-context" "2.1.0" "@chakra-ui/shared-utils" "2.0.5" -"@chakra-ui/tabs@2.1.8": - version "2.1.8" - resolved "https://registry.yarnpkg.com/@chakra-ui/tabs/-/tabs-2.1.8.tgz#e83071380f9a3633810308d45de51be7a74f5eb9" - integrity sha512-B7LeFN04Ny2jsSy5TFOQxnbZ6ITxGxLxsB2PE0vvQjMSblBrUryOxdjw80HZhfiw6od0ikK9CeKQOIt9QCguSw== +"@chakra-ui/tabs@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/tabs/-/tabs-3.0.0.tgz#854c06880af26158d7c72881c4b5e0453f6c485d" + integrity sha512-6Mlclp8L9lqXmsGWF5q5gmemZXOiOYuh0SGT/7PgJVNPz3LXREXlXg2an4MBUD8W5oTkduCX+3KTMCwRrVrDYw== dependencies: - "@chakra-ui/clickable" "2.0.14" - "@chakra-ui/descendant" "3.0.13" + "@chakra-ui/clickable" "2.1.0" + "@chakra-ui/descendant" "3.1.0" "@chakra-ui/lazy-utils" "2.0.5" "@chakra-ui/react-children-utils" "2.0.6" - "@chakra-ui/react-context" "2.0.7" - "@chakra-ui/react-use-controllable-state" "2.0.8" - "@chakra-ui/react-use-merge-refs" "2.0.7" - "@chakra-ui/react-use-safe-layout-effect" "2.0.5" + "@chakra-ui/react-context" "2.1.0" + "@chakra-ui/react-use-controllable-state" "2.1.0" + "@chakra-ui/react-use-merge-refs" "2.1.0" + "@chakra-ui/react-use-safe-layout-effect" "2.1.0" "@chakra-ui/shared-utils" "2.0.5" -"@chakra-ui/tag@2.0.17": - version "2.0.17" - resolved "https://registry.yarnpkg.com/@chakra-ui/tag/-/tag-2.0.17.tgz#97adb86db190ddb3526060b78c590392e0ac8b4c" - integrity sha512-A47zE9Ft9qxOJ+5r1cUseKRCoEdqCRzFm0pOtZgRcckqavglk75Xjgz8HbBpUO2zqqd49MlqdOwR8o87fXS1vg== +"@chakra-ui/tag@3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/tag/-/tag-3.1.1.tgz#d05284b6549a84d3a08e57eec57df3ad0eebd882" + integrity sha512-Bdel79Dv86Hnge2PKOU+t8H28nm/7Y3cKd4Kfk9k3lOpUh4+nkSGe58dhRzht59lEqa4N9waCgQiBdkydjvBXQ== dependencies: - "@chakra-ui/icon" "3.0.16" - "@chakra-ui/react-context" "2.0.7" + "@chakra-ui/icon" "3.2.0" + "@chakra-ui/react-context" "2.1.0" -"@chakra-ui/textarea@2.0.18": - version "2.0.18" - resolved "https://registry.yarnpkg.com/@chakra-ui/textarea/-/textarea-2.0.18.tgz#da6d629b465f65bbc7b48039c2e48a4ae1d853b4" - integrity sha512-aGHHb29vVifO0OtcK/k8cMykzjOKo/coDTU0NJqz7OOLAWIMNV2eGenvmO1n9tTZbmbqHiX+Sa1nPRX+pd14lg== +"@chakra-ui/textarea@2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/textarea/-/textarea-2.1.1.tgz#3e33404ff8470140e877840a5702a406996a3834" + integrity sha512-28bpwgmXg3BzSpg8i1Ao9h7pHaE1j2mBBFJpWaqPgMhS0IHm0BQsqqyWU6PsxxJDvrC4HN6MTzrIL4C1RA1I0A== dependencies: - "@chakra-ui/form-control" "2.0.17" + "@chakra-ui/form-control" "2.1.1" "@chakra-ui/shared-utils" "2.0.5" -"@chakra-ui/theme-tools@2.0.17": - version "2.0.17" - resolved "https://registry.yarnpkg.com/@chakra-ui/theme-tools/-/theme-tools-2.0.17.tgz#9496094336c9480f950c8d7ab6e05f1c19caa955" - integrity sha512-Auu38hnihlJZQcPok6itRDBbwof3TpXGYtDPnOvrq4Xp7jnab36HLt7KEXSDPXbtOk3ZqU99pvI1en5LbDrdjg== +"@chakra-ui/theme-tools@2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/theme-tools/-/theme-tools-2.1.1.tgz#c7f3072ab533d7abc6a3831666be3c172f992554" + integrity sha512-n14L5L3ej3Zy+Xm/kDKO1G6/DkmieT7Li1C7NzMRcUj5C9YybQpyo7IZZ0BBUh3u+OVnKVhNC3d4P2NYDGRXmA== dependencies: - "@chakra-ui/anatomy" "2.1.2" + "@chakra-ui/anatomy" "2.2.1" "@chakra-ui/shared-utils" "2.0.5" - color2k "^2.0.0" + color2k "^2.0.2" -"@chakra-ui/theme-utils@2.0.11": - version "2.0.11" - resolved "https://registry.yarnpkg.com/@chakra-ui/theme-utils/-/theme-utils-2.0.11.tgz#c01b1d14fdd63326d1ad11fd8f0872921ea43872" - integrity sha512-lBAay6Sq3/fl7exd3mFxWAbzgdQowytor0fnlHrpNStn1HgFjXukwsf6356XQOie2Vd8qaMM7qZtMh4AiC0dcg== +"@chakra-ui/theme-utils@2.0.20": + version "2.0.20" + resolved "https://registry.yarnpkg.com/@chakra-ui/theme-utils/-/theme-utils-2.0.20.tgz#fdc4947ac4b95c16ff5885707c9a931c43b80cf6" + integrity sha512-IkAzSmwBlRIZ3dN2InDz0tf9SldbckVkgwylCobSFmYP8lnMjykL8Lex1BBo9U8UQjZxEDVZ+Qw6SeayKRntOQ== dependencies: "@chakra-ui/shared-utils" "2.0.5" - "@chakra-ui/styled-system" "2.6.1" - "@chakra-ui/theme" "2.2.5" + "@chakra-ui/styled-system" "2.9.1" + "@chakra-ui/theme" "3.3.0" lodash.mergewith "4.6.2" -"@chakra-ui/theme@2.2.5": - version "2.2.5" - resolved "https://registry.yarnpkg.com/@chakra-ui/theme/-/theme-2.2.5.tgz#18ed1755ff27c1ff1f1a77083ffc546c361c926e" - integrity sha512-hYASZMwu0NqEv6PPydu+F3I+kMNd44yR4TwjR/lXBz/LEh64L6UPY6kQjebCfgdVtsGdl3HKg+eLlfa7SvfRgw== +"@chakra-ui/theme@3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/theme/-/theme-3.3.0.tgz#7fe364322e75c7bdfa45b96dd3db6dac7eb8f7ef" + integrity sha512-VHY2ax5Wqgfm83U/zYBk0GS0TGD8m41s/rxQgnEq8tU+ug1YZjvOZmtOq/VjfKP/bQraFhCt05zchcxXmDpEYg== dependencies: - "@chakra-ui/anatomy" "2.1.2" + "@chakra-ui/anatomy" "2.2.1" "@chakra-ui/shared-utils" "2.0.5" - "@chakra-ui/theme-tools" "2.0.17" + "@chakra-ui/theme-tools" "2.1.1" -"@chakra-ui/toast@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@chakra-ui/toast/-/toast-6.0.1.tgz#726b67a57cdd592320bb3f450c66d007a2a1d902" - integrity sha512-ej2kJXvu/d2h6qnXU5D8XTyw0qpsfmbiU7hUffo/sPxkz89AUOQ08RUuUmB1ssW/FZcQvNMJ5WgzCTKHGBxtxw== - dependencies: - "@chakra-ui/alert" "2.0.17" - "@chakra-ui/close-button" "2.0.17" - "@chakra-ui/portal" "2.0.15" - "@chakra-ui/react-context" "2.0.7" - "@chakra-ui/react-use-timeout" "2.0.5" - "@chakra-ui/react-use-update-effect" "2.0.7" +"@chakra-ui/toast@7.0.1": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/toast/-/toast-7.0.1.tgz#11113b9185409ed1dc7a062f0498673f0840a013" + integrity sha512-V5JUhw6RZxbGRTijvd5k4iEMLCfbzTLNWbZLZhRZk10YvFfAP5OYfRCm68zpE/t3orN/f+4ZLL3P+Wb4E7oSmw== + dependencies: + "@chakra-ui/alert" "2.2.1" + "@chakra-ui/close-button" "2.1.1" + "@chakra-ui/portal" "2.1.0" + "@chakra-ui/react-context" "2.1.0" + "@chakra-ui/react-use-timeout" "2.1.0" + "@chakra-ui/react-use-update-effect" "2.1.0" "@chakra-ui/shared-utils" "2.0.5" - "@chakra-ui/styled-system" "2.6.1" - "@chakra-ui/theme" "2.2.5" + "@chakra-ui/styled-system" "2.9.1" + "@chakra-ui/theme" "3.3.0" -"@chakra-ui/tooltip@2.2.6": - version "2.2.6" - resolved "https://registry.yarnpkg.com/@chakra-ui/tooltip/-/tooltip-2.2.6.tgz#a38f9ff2dd8a574c8cf49526c3846533455f8ddd" - integrity sha512-4cbneidZ5+HCWge3OZzewRQieIvhDjSsl+scrl4Scx7E0z3OmqlTIESU5nGIZDBLYqKn/UirEZhqaQ33FOS2fw== +"@chakra-ui/tooltip@2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/tooltip/-/tooltip-2.3.0.tgz#88e61a2c5a4d99af805840377dc940d3b17c806e" + integrity sha512-2s23f93YIij1qEDwIK//KtEu4LLYOslhR1cUhDBk/WUzyFR3Ez0Ee+HlqlGEGfGe9x77E6/UXPnSAKKdF/cpsg== dependencies: - "@chakra-ui/popper" "3.0.13" - "@chakra-ui/portal" "2.0.15" + "@chakra-ui/dom-utils" "2.1.0" + "@chakra-ui/popper" "3.1.0" + "@chakra-ui/portal" "2.1.0" "@chakra-ui/react-types" "2.0.7" - "@chakra-ui/react-use-disclosure" "2.0.8" - "@chakra-ui/react-use-event-listener" "2.0.7" - "@chakra-ui/react-use-merge-refs" "2.0.7" + "@chakra-ui/react-use-disclosure" "2.1.0" + "@chakra-ui/react-use-event-listener" "2.1.0" + "@chakra-ui/react-use-merge-refs" "2.1.0" "@chakra-ui/shared-utils" "2.0.5" -"@chakra-ui/transition@2.0.15": - version "2.0.15" - resolved "https://registry.yarnpkg.com/@chakra-ui/transition/-/transition-2.0.15.tgz#c640df2ea82f5ad58c55a6e1a7c338f377cb96d8" - integrity sha512-o9LBK/llQfUDHF/Ty3cQ6nShpekKTqHUoJlUOzNKhoTsNpoRerr9v0jwojrX1YI02KtVjfhFU6PiqXlDfREoNw== +"@chakra-ui/transition@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/transition/-/transition-2.1.0.tgz#c8e95564f7ab356e78119780037bae5ad150c7b3" + integrity sha512-orkT6T/Dt+/+kVwJNy7zwJ+U2xAZ3EU7M3XCs45RBvUnZDr/u9vdmaM/3D/rOpmQJWgQBwKPJleUXrYWUagEDQ== dependencies: "@chakra-ui/shared-utils" "2.0.5" @@ -2117,17 +2228,41 @@ framesync "6.1.2" lodash.mergewith "4.6.2" -"@chakra-ui/visually-hidden@2.0.15": - version "2.0.15" - resolved "https://registry.yarnpkg.com/@chakra-ui/visually-hidden/-/visually-hidden-2.0.15.tgz#60df64e0ab97d95fee4e6c61ccabd15fd5ace398" - integrity sha512-WWULIiucYRBIewHKFA7BssQ2ABLHLVd9lrUo3N3SZgR0u4ZRDDVEUNOy+r+9ruDze8+36dGbN9wsN1IdELtdOw== +"@chakra-ui/visually-hidden@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/visually-hidden/-/visually-hidden-2.2.0.tgz#9b0ecef8f01263ab808ba3bda7b36a0d91b4d5c1" + integrity sha512-KmKDg01SrQ7VbTD3+cPWf/UfpF5MSwm3v7MWi0n5t8HnnadT13MF0MJCDSXbBWnzLv1ZKJ6zlyAOeARWX+DpjQ== + +"@dojoengine/core@^0.1.30": + version "0.1.30" + resolved "https://registry.yarnpkg.com/@dojoengine/core/-/core-0.1.30.tgz#9904b376986236f3d865dacac8c6c1d4fcc45ae2" + integrity sha512-f3kVOvNHx+1grBTv+SZg43hEzOwW2wQ7YwvTJHd8U5809V+6yb2c74XFxz+DdpuGQ4OIZdE5y+/BcF/CpruZMg== + dependencies: + starknet "^5.19.5" -"@cspotcode/source-map-support@^0.8.0": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" - integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== +"@dojoengine/create-burner@0.1.30": + version "0.1.30" + resolved "https://registry.yarnpkg.com/@dojoengine/create-burner/-/create-burner-0.1.30.tgz#dfbbf7af5dbc146e86dc0509eb30d1897fb8caca" + integrity sha512-h13jabWndF7ZewJoY9ZLnsbCUFeiCHJDDarCZbWOQFjshilVXABpzBMXH9vzPrvGgYMqsA4v8t9FWR7bd+GYOg== dependencies: - "@jridgewell/trace-mapping" "0.3.9" + "@starknet-react/core" "^1.0.3" + encoding "^0.1.13" + get-starknet-core "^3.2.0" + js-cookie "^3.0.5" + +"@dojoengine/torii@link:../../dojo-packages/packages/torii": + version "0.0.0" + uid "" + +"@dojoengine/utils@0.1.30": + version "0.1.30" + resolved "https://registry.yarnpkg.com/@dojoengine/utils/-/utils-0.1.30.tgz#4567e952cf189cb3e164382cad52f3c280906fe8" + integrity sha512-xBugIPCFkvDTw2YV1/j7CFXMJCDr2765rxF4lb1RLKqLIuylXzXpsRLuI5zNh1CuyOBuQ36WPWLyc+py3c6AWw== + dependencies: + "@latticexyz/recs" "^2.0.0-next.11" + "@latticexyz/utils" "^2.0.0-next.11" + micro-starknet "^0.2.3" + starknet "^5.19.5" "@emotion/babel-plugin@^11.10.6": version "11.10.6" @@ -2280,56 +2415,397 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.36.0.tgz#9837f768c03a1e4a30bd304a64fb8844f0e72efe" integrity sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg== -"@graphql-codegen/cli@^2.6.2": - version "2.16.5" - resolved "https://registry.yarnpkg.com/@graphql-codegen/cli/-/cli-2.16.5.tgz#b3b5eeec357af01c1cb72f6a4ea96e52bd49e662" - integrity sha512-XYPIp+q7fB0xAGSAoRykiTe4oY80VU+z+dw5nuv4mLY0+pv7+pa2C6Nwhdw7a65lXOhFviBApWCCZeqd54SMnA== +"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" + integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" + integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + +"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" + integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/address@5.7.0", "@ethersproject/address@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" + integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + +"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" + integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + +"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" + integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" + integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + bn.js "^5.2.1" + +"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" + integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" + integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + +"@ethersproject/contracts@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" + integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== + dependencies: + "@ethersproject/abi" "^5.7.0" + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + +"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" + integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" + integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wordlists" "^5.7.0" + +"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" + integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hdnode" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + aes-js "3.0.0" + scrypt-js "3.0.1" + +"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" + integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + js-sha3 "0.8.0" + +"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" + integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== + +"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" + integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" + integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + +"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" + integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/providers@5.7.2": + version "5.7.2" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" + integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + bech32 "1.1.4" + ws "7.4.6" + +"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" + integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" + integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" + integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + hash.js "1.1.7" + +"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" + integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + bn.js "^5.2.1" + elliptic "6.5.4" + hash.js "1.1.7" + +"@ethersproject/solidity@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" + integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" + integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" + integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + +"@ethersproject/units@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" + integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/wallet@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" + integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/hdnode" "^5.7.0" + "@ethersproject/json-wallets" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wordlists" "^5.7.0" + +"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" + integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== + dependencies: + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" + integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@graphql-codegen/cli@5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@graphql-codegen/cli/-/cli-5.0.0.tgz#761dcf08cfee88bbdd9cdf8097b2343445ec6f0a" + integrity sha512-A7J7+be/a6e+/ul2KI5sfJlpoqeqwX8EzktaKCeduyVKgOLA6W5t+NUGf6QumBDXU8PEOqXk3o3F+RAwCWOiqA== dependencies: "@babel/generator" "^7.18.13" "@babel/template" "^7.18.10" "@babel/types" "^7.18.13" - "@graphql-codegen/core" "^2.6.8" - "@graphql-codegen/plugin-helpers" "^3.1.2" - "@graphql-tools/apollo-engine-loader" "^7.3.6" - "@graphql-tools/code-file-loader" "^7.3.13" - "@graphql-tools/git-loader" "^7.2.13" - "@graphql-tools/github-loader" "^7.3.20" - "@graphql-tools/graphql-file-loader" "^7.5.0" - "@graphql-tools/json-file-loader" "^7.4.1" - "@graphql-tools/load" "^7.8.0" - "@graphql-tools/prisma-loader" "^7.2.49" - "@graphql-tools/url-loader" "^7.13.2" - "@graphql-tools/utils" "^9.0.0" - "@whatwg-node/fetch" "^0.6.0" + "@graphql-codegen/core" "^4.0.0" + "@graphql-codegen/plugin-helpers" "^5.0.1" + "@graphql-tools/apollo-engine-loader" "^8.0.0" + "@graphql-tools/code-file-loader" "^8.0.0" + "@graphql-tools/git-loader" "^8.0.0" + "@graphql-tools/github-loader" "^8.0.0" + "@graphql-tools/graphql-file-loader" "^8.0.0" + "@graphql-tools/json-file-loader" "^8.0.0" + "@graphql-tools/load" "^8.0.0" + "@graphql-tools/prisma-loader" "^8.0.0" + "@graphql-tools/url-loader" "^8.0.0" + "@graphql-tools/utils" "^10.0.0" + "@whatwg-node/fetch" "^0.8.0" chalk "^4.1.0" - chokidar "^3.5.2" - cosmiconfig "^7.0.0" - cosmiconfig-typescript-loader "^4.3.0" + cosmiconfig "^8.1.3" debounce "^1.2.0" detect-indent "^6.0.0" - graphql-config "^4.4.0" + graphql-config "^5.0.2" inquirer "^8.0.0" is-glob "^4.0.1" + jiti "^1.17.1" json-to-pretty-yaml "^1.2.2" listr2 "^4.0.5" log-symbols "^4.0.0" + micromatch "^4.0.5" shell-quote "^1.7.3" string-env-interpolation "^1.0.1" ts-log "^2.2.3" - ts-node "^10.9.1" tslib "^2.4.0" - yaml "^1.10.0" + yaml "^2.3.1" yargs "^17.0.0" -"@graphql-codegen/core@^2.6.8": - version "2.6.8" - resolved "https://registry.yarnpkg.com/@graphql-codegen/core/-/core-2.6.8.tgz#00c4011e3619ddbc6af5e41b2f254d6f6759556e" - integrity sha512-JKllNIipPrheRgl+/Hm/xuWMw9++xNQ12XJR/OHHgFopOg4zmN3TdlRSyYcv/K90hCFkkIwhlHFUQTfKrm8rxQ== +"@graphql-codegen/core@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@graphql-codegen/core/-/core-4.0.0.tgz#b29c911746a532a675e33720acb4eb2119823e01" + integrity sha512-JAGRn49lEtSsZVxeIlFVIRxts2lWObR+OQo7V2LHDJ7ohYYw3ilv7nJ8pf8P4GTg/w6ptcYdSdVVdkI8kUHB/Q== dependencies: - "@graphql-codegen/plugin-helpers" "^3.1.1" - "@graphql-tools/schema" "^9.0.0" - "@graphql-tools/utils" "^9.1.1" - tslib "~2.4.0" + "@graphql-codegen/plugin-helpers" "^5.0.0" + "@graphql-tools/schema" "^10.0.0" + "@graphql-tools/utils" "^10.0.0" + tslib "~2.5.0" "@graphql-codegen/fragment-matcher@^3.2.1": version "3.3.3" @@ -2372,6 +2848,18 @@ lodash "~4.17.0" tslib "~2.4.0" +"@graphql-codegen/plugin-helpers@^5.0.0", "@graphql-codegen/plugin-helpers@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@graphql-codegen/plugin-helpers/-/plugin-helpers-5.0.1.tgz#e2429fcfba3f078d5aa18aa062d46c922bbb0d55" + integrity sha512-6L5sb9D8wptZhnhLLBcheSPU7Tg//DGWgc5tQBWX46KYTOTQHGqDpv50FxAJJOyFVJrveN9otWk9UT9/yfY4ww== + dependencies: + "@graphql-tools/utils" "^10.0.0" + change-case-all "1.0.15" + common-tags "1.8.2" + import-from "4.0.0" + lodash "~4.17.0" + tslib "~2.5.0" + "@graphql-codegen/schema-ast@^2.4.1", "@graphql-codegen/schema-ast@^2.6.1": version "2.6.1" resolved "https://registry.yarnpkg.com/@graphql-codegen/schema-ast/-/schema-ast-2.6.1.tgz#8ba1b38827c034b51ecd3ce88622c2ae6cd3fe1a" @@ -2472,182 +2960,180 @@ parse-filepath "^1.0.2" tslib "~2.4.0" -"@graphql-tools/apollo-engine-loader@^7.3.6": - version "7.3.26" - resolved "https://registry.yarnpkg.com/@graphql-tools/apollo-engine-loader/-/apollo-engine-loader-7.3.26.tgz#91e54460d5579933e42a2010b8688c3459c245d8" - integrity sha512-h1vfhdJFjnCYn9b5EY1Z91JTF0KB3hHVJNQIsiUV2mpQXZdeOXQoaWeYEKaiI5R6kwBw5PP9B0fv3jfUIG8LyQ== +"@graphql-tools/apollo-engine-loader@^8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/apollo-engine-loader/-/apollo-engine-loader-8.0.0.tgz#ac1f351cbe41508411784f25757f5557b0f27489" + integrity sha512-axQTbN5+Yxs1rJ6cWQBOfw3AEeC+fvIuZSfJLPLLvFJLj4pUm9fhxey/g6oQZAAQJqKPfw+tLDUQvnfvRK8Kmg== dependencies: "@ardatan/sync-fetch" "^0.0.1" - "@graphql-tools/utils" "^9.2.1" - "@whatwg-node/fetch" "^0.8.0" + "@graphql-tools/utils" "^10.0.0" + "@whatwg-node/fetch" "^0.9.0" tslib "^2.4.0" -"@graphql-tools/batch-execute@^8.5.22": - version "8.5.22" - resolved "https://registry.yarnpkg.com/@graphql-tools/batch-execute/-/batch-execute-8.5.22.tgz#a742aa9d138fe794e786d8fb6429665dc7df5455" - integrity sha512-hcV1JaY6NJQFQEwCKrYhpfLK8frSXDbtNMoTur98u10Cmecy1zrqNKSqhEyGetpgHxaJRqszGzKeI3RuroDN6A== +"@graphql-tools/batch-execute@^9.0.1": + version "9.0.2" + resolved "https://registry.yarnpkg.com/@graphql-tools/batch-execute/-/batch-execute-9.0.2.tgz#5ac3257501e7941fad40661bb5e1110d6312f58b" + integrity sha512-Y2uwdZI6ZnatopD/SYfZ1eGuQFI7OU2KGZ2/B/7G9ISmgMl5K+ZZWz/PfIEXeiHirIDhyk54s4uka5rj2xwKqQ== dependencies: - "@graphql-tools/utils" "^9.2.1" + "@graphql-tools/utils" "^10.0.5" dataloader "^2.2.2" tslib "^2.4.0" value-or-promise "^1.0.12" -"@graphql-tools/code-file-loader@^7.3.13": - version "7.3.23" - resolved "https://registry.yarnpkg.com/@graphql-tools/code-file-loader/-/code-file-loader-7.3.23.tgz#33793f9a1f8e74981f8ae6ec4ab7061f9713db15" - integrity sha512-8Wt1rTtyTEs0p47uzsPJ1vAtfAx0jmxPifiNdmo9EOCuUPyQGEbMaik/YkqZ7QUFIEYEQu+Vgfo8tElwOPtx5Q== +"@graphql-tools/code-file-loader@^8.0.0": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@graphql-tools/code-file-loader/-/code-file-loader-8.0.2.tgz#224b9ce29d9229c52d8bd7b6d976038f4ea5d3f4" + integrity sha512-AKNpkElUL2cWocYpC4DzNEpo6qJw8Lp+L3bKQ/mIfmbsQxgLz5uve6zHBMhDaFPdlwfIox41N3iUSvi77t9e8A== dependencies: - "@graphql-tools/graphql-tag-pluck" "7.5.2" - "@graphql-tools/utils" "^9.2.1" + "@graphql-tools/graphql-tag-pluck" "8.0.2" + "@graphql-tools/utils" "^10.0.0" globby "^11.0.3" tslib "^2.4.0" unixify "^1.0.0" -"@graphql-tools/delegate@^9.0.31": - version "9.0.35" - resolved "https://registry.yarnpkg.com/@graphql-tools/delegate/-/delegate-9.0.35.tgz#94683f4bcec63520b4a6c8b2abf2e2e9324ea4f1" - integrity sha512-jwPu8NJbzRRMqi4Vp/5QX1vIUeUPpWmlQpOkXQD2r1X45YsVceyUUBnktCrlJlDB4jPRVy7JQGwmYo3KFiOBMA== +"@graphql-tools/delegate@^10.0.0", "@graphql-tools/delegate@^10.0.3": + version "10.0.3" + resolved "https://registry.yarnpkg.com/@graphql-tools/delegate/-/delegate-10.0.3.tgz#2d0e133da94ca92c24e0c7360414e5592321cf2d" + integrity sha512-Jor9oazZ07zuWkykD3OOhT/2XD74Zm6Ar0ENZMk75MDD51wB2UWUIMljtHxbJhV5A6UBC2v8x6iY0xdCGiIlyw== dependencies: - "@graphql-tools/batch-execute" "^8.5.22" - "@graphql-tools/executor" "^0.0.20" - "@graphql-tools/schema" "^9.0.19" - "@graphql-tools/utils" "^9.2.1" + "@graphql-tools/batch-execute" "^9.0.1" + "@graphql-tools/executor" "^1.0.0" + "@graphql-tools/schema" "^10.0.0" + "@graphql-tools/utils" "^10.0.5" dataloader "^2.2.2" tslib "^2.5.0" - value-or-promise "^1.0.12" -"@graphql-tools/executor-graphql-ws@^0.0.14": - version "0.0.14" - resolved "https://registry.yarnpkg.com/@graphql-tools/executor-graphql-ws/-/executor-graphql-ws-0.0.14.tgz#e0f53fc4cfc8a06cc461b2bc1edb4bb9a8e837ed" - integrity sha512-P2nlkAsPZKLIXImFhj0YTtny5NQVGSsKnhi7PzXiaHSXc6KkzqbWZHKvikD4PObanqg+7IO58rKFpGXP7eeO+w== +"@graphql-tools/executor-graphql-ws@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/executor-graphql-ws/-/executor-graphql-ws-1.1.0.tgz#7727159ebaa9df4dc793d0d02e74dd1ca4a7cc60" + integrity sha512-yM67SzwE8rYRpm4z4AuGtABlOp9mXXVy6sxXnTJRoYIdZrmDbKVfIY+CpZUJCqS0FX3xf2+GoHlsj7Qswaxgcg== dependencies: - "@graphql-tools/utils" "^9.2.1" - "@repeaterjs/repeater" "3.0.4" + "@graphql-tools/utils" "^10.0.2" "@types/ws" "^8.0.0" - graphql-ws "5.12.1" - isomorphic-ws "5.0.0" + graphql-ws "^5.14.0" + isomorphic-ws "^5.0.0" tslib "^2.4.0" - ws "8.13.0" + ws "^8.13.0" -"@graphql-tools/executor-http@^0.1.7", "@graphql-tools/executor-http@^0.1.9": - version "0.1.10" - resolved "https://registry.yarnpkg.com/@graphql-tools/executor-http/-/executor-http-0.1.10.tgz#faf48e18e62a925796c9653c2f50cf2095bc8e6f" - integrity sha512-hnAfbKv0/lb9s31LhWzawQ5hghBfHS+gYWtqxME6Rl0Aufq9GltiiLBcl7OVVOnkLF0KhwgbYP1mB5VKmgTGpg== +"@graphql-tools/executor-http@^1.0.0": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@graphql-tools/executor-http/-/executor-http-1.0.2.tgz#d7964a6e5ec883842f9a8e3f104f93c9b8f472be" + integrity sha512-JKTB4E3kdQM2/1NEcyrVPyQ8057ZVthCV5dFJiKktqY9IdmF00M8gupFcW3jlbM/Udn78ickeUBsUzA3EouqpA== dependencies: - "@graphql-tools/utils" "^9.2.1" + "@graphql-tools/utils" "^10.0.2" "@repeaterjs/repeater" "^3.0.4" - "@whatwg-node/fetch" "^0.8.1" - dset "^3.1.2" + "@whatwg-node/fetch" "^0.9.0" extract-files "^11.0.0" meros "^1.2.1" tslib "^2.4.0" value-or-promise "^1.0.12" -"@graphql-tools/executor-legacy-ws@^0.0.11": - version "0.0.11" - resolved "https://registry.yarnpkg.com/@graphql-tools/executor-legacy-ws/-/executor-legacy-ws-0.0.11.tgz#a1e12be8279e92a363a23d4105461a34cd9e389e" - integrity sha512-4ai+NnxlNfvIQ4c70hWFvOZlSUN8lt7yc+ZsrwtNFbFPH/EroIzFMapAxM9zwyv9bH38AdO3TQxZ5zNxgBdvUw== +"@graphql-tools/executor-legacy-ws@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@graphql-tools/executor-legacy-ws/-/executor-legacy-ws-1.0.3.tgz#de04eaa816fa27f46b401e8d5c28d9c0562b4993" + integrity sha512-rr3IDeO9Dh+8u8KIro++5kzJJYPHkcrIAWzqXtN663nhInC85iW7Ko91yOYwf7ovBci/7s+4Rqe4ZRyca1LGjQ== dependencies: - "@graphql-tools/utils" "^9.2.1" + "@graphql-tools/utils" "^10.0.0" "@types/ws" "^8.0.0" isomorphic-ws "5.0.0" tslib "^2.4.0" - ws "8.13.0" + ws "8.14.1" -"@graphql-tools/executor@^0.0.20": - version "0.0.20" - resolved "https://registry.yarnpkg.com/@graphql-tools/executor/-/executor-0.0.20.tgz#d51d159696e839522dd49d936636af251670e425" - integrity sha512-GdvNc4vszmfeGvUqlcaH1FjBoguvMYzxAfT6tDd4/LgwymepHhinqLNA5otqwVLW+JETcDaK7xGENzFomuE6TA== +"@graphql-tools/executor@^1.0.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/executor/-/executor-1.2.0.tgz#6c45f4add765769d9820c4c4405b76957ba39c79" + integrity sha512-SKlIcMA71Dha5JnEWlw4XxcaJ+YupuXg0QCZgl2TOLFz4SkGCwU/geAsJvUJFwK2RbVLpQv/UMq67lOaBuwDtg== dependencies: - "@graphql-tools/utils" "^9.2.1" + "@graphql-tools/utils" "^10.0.0" "@graphql-typed-document-node/core" "3.2.0" "@repeaterjs/repeater" "^3.0.4" tslib "^2.4.0" value-or-promise "^1.0.12" -"@graphql-tools/git-loader@^7.2.13": - version "7.3.0" - resolved "https://registry.yarnpkg.com/@graphql-tools/git-loader/-/git-loader-7.3.0.tgz#ca10c17d4f58c4592432d9d2ac1c2b393aebad16" - integrity sha512-gcGAK+u16eHkwsMYqqghZbmDquh8QaO24Scsxq+cVR+vx1ekRlsEiXvu+yXVDbZdcJ6PBIbeLcQbEu+xhDLmvQ== +"@graphql-tools/git-loader@^8.0.0": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@graphql-tools/git-loader/-/git-loader-8.0.2.tgz#d26d87e176ff0cea86e0acfe7c2072f32fd836c3" + integrity sha512-AuCB0nlPvsHh8u42zRZdlD/ZMaWP9A44yAkQUVCZir1E/LG63fsZ9svTWJ+CbusW3Hd0ZP9qpxEhlHxnd4Tlsg== dependencies: - "@graphql-tools/graphql-tag-pluck" "7.5.2" - "@graphql-tools/utils" "^9.2.1" + "@graphql-tools/graphql-tag-pluck" "8.0.2" + "@graphql-tools/utils" "^10.0.0" is-glob "4.0.3" micromatch "^4.0.4" tslib "^2.4.0" unixify "^1.0.0" -"@graphql-tools/github-loader@^7.3.20": - version "7.3.28" - resolved "https://registry.yarnpkg.com/@graphql-tools/github-loader/-/github-loader-7.3.28.tgz#a7166b136e8442bd8b3ab943ad3b66c84bcabfcf" - integrity sha512-OK92Lf9pmxPQvjUNv05b3tnVhw0JRfPqOf15jZjyQ8BfdEUrJoP32b4dRQQem/wyRL24KY4wOfArJNqzpsbwCA== +"@graphql-tools/github-loader@^8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/github-loader/-/github-loader-8.0.0.tgz#683195800618364701cfea9bc6f88674486f053b" + integrity sha512-VuroArWKcG4yaOWzV0r19ElVIV6iH6UKDQn1MXemND0xu5TzrFme0kf3U9o0YwNo0kUYEk9CyFM0BYg4he17FA== dependencies: "@ardatan/sync-fetch" "^0.0.1" - "@graphql-tools/executor-http" "^0.1.9" - "@graphql-tools/graphql-tag-pluck" "^7.4.6" - "@graphql-tools/utils" "^9.2.1" - "@whatwg-node/fetch" "^0.8.0" + "@graphql-tools/executor-http" "^1.0.0" + "@graphql-tools/graphql-tag-pluck" "^8.0.0" + "@graphql-tools/utils" "^10.0.0" + "@whatwg-node/fetch" "^0.9.0" tslib "^2.4.0" value-or-promise "^1.0.12" -"@graphql-tools/graphql-file-loader@^7.3.7", "@graphql-tools/graphql-file-loader@^7.5.0": - version "7.5.17" - resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-file-loader/-/graphql-file-loader-7.5.17.tgz#7c281617ea3ab4db4d42a2bdb49850f2b937f0f9" - integrity sha512-hVwwxPf41zOYgm4gdaZILCYnKB9Zap7Ys9OhY1hbwuAuC4MMNY9GpUjoTU3CQc3zUiPoYStyRtUGkHSJZ3HxBw== +"@graphql-tools/graphql-file-loader@^8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-file-loader/-/graphql-file-loader-8.0.0.tgz#a2026405bce86d974000455647511bf65df4f211" + integrity sha512-wRXj9Z1IFL3+zJG1HWEY0S4TXal7+s1vVhbZva96MSp0kbb/3JBF7j0cnJ44Eq0ClccMgGCDFqPFXty4JlpaPg== dependencies: - "@graphql-tools/import" "6.7.18" - "@graphql-tools/utils" "^9.2.1" + "@graphql-tools/import" "7.0.0" + "@graphql-tools/utils" "^10.0.0" globby "^11.0.3" tslib "^2.4.0" unixify "^1.0.0" -"@graphql-tools/graphql-tag-pluck@7.5.2", "@graphql-tools/graphql-tag-pluck@^7.4.6": - version "7.5.2" - resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-7.5.2.tgz#502f1e066e19d832ebdeba5f571d7636dc27572d" - integrity sha512-RW+H8FqOOLQw0BPXaahYepVSRjuOHw+7IL8Opaa5G5uYGOBxoXR7DceyQ7BcpMgktAOOmpDNQ2WtcboChOJSRA== +"@graphql-tools/graphql-tag-pluck@8.0.2", "@graphql-tools/graphql-tag-pluck@^8.0.0": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-8.0.2.tgz#c1ce8226c951583a27765dccceea19dc5827a948" + integrity sha512-U6fE4yEHxuk/nqmPixHpw1WhqdS6aYuaV60m1bEmUmGJNbpAhaMBy01JncpvpF15yZR5LZ0UjkHg+A3Lhoc8YQ== dependencies: + "@babel/core" "^7.22.9" "@babel/parser" "^7.16.8" "@babel/plugin-syntax-import-assertions" "^7.20.0" "@babel/traverse" "^7.16.8" "@babel/types" "^7.16.8" - "@graphql-tools/utils" "^9.2.1" + "@graphql-tools/utils" "^10.0.0" tslib "^2.4.0" -"@graphql-tools/import@6.7.18": - version "6.7.18" - resolved "https://registry.yarnpkg.com/@graphql-tools/import/-/import-6.7.18.tgz#ad092d8a4546bb6ffc3e871e499eec7ac368680b" - integrity sha512-XQDdyZTp+FYmT7as3xRWH/x8dx0QZA2WZqfMF5EWb36a0PiH7WwlRQYIdyYXj8YCLpiWkeBXgBRHmMnwEYR8iQ== +"@graphql-tools/import@7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/import/-/import-7.0.0.tgz#a6a91a90a707d5f46bad0fd3fde2f407b548b2be" + integrity sha512-NVZiTO8o1GZs6OXzNfjB+5CtQtqsZZpQOq+Uu0w57kdUkT4RlQKlwhT8T81arEsbV55KpzkpFsOZP7J1wdmhBw== dependencies: - "@graphql-tools/utils" "^9.2.1" + "@graphql-tools/utils" "^10.0.0" resolve-from "5.0.0" tslib "^2.4.0" -"@graphql-tools/json-file-loader@^7.3.7", "@graphql-tools/json-file-loader@^7.4.1": - version "7.4.18" - resolved "https://registry.yarnpkg.com/@graphql-tools/json-file-loader/-/json-file-loader-7.4.18.tgz#d78ae40979bde51cfc59717757354afc9e35fba2" - integrity sha512-AJ1b6Y1wiVgkwsxT5dELXhIVUPs/u3VZ8/0/oOtpcoyO/vAeM5rOvvWegzicOOnQw8G45fgBRMkkRfeuwVt6+w== +"@graphql-tools/json-file-loader@^8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/json-file-loader/-/json-file-loader-8.0.0.tgz#9b1b62902f766ef3f1c9cd1c192813ea4f48109c" + integrity sha512-ki6EF/mobBWJjAAC84xNrFMhNfnUFD6Y0rQMGXekrUgY0NdeYXHU0ZUgHzC9O5+55FslqUmAUHABePDHTyZsLg== dependencies: - "@graphql-tools/utils" "^9.2.1" + "@graphql-tools/utils" "^10.0.0" globby "^11.0.3" tslib "^2.4.0" unixify "^1.0.0" -"@graphql-tools/load@^7.5.5", "@graphql-tools/load@^7.8.0": - version "7.8.14" - resolved "https://registry.yarnpkg.com/@graphql-tools/load/-/load-7.8.14.tgz#f2356f9a5f658a42e33934ae036e4b2cadf2d1e9" - integrity sha512-ASQvP+snHMYm+FhIaLxxFgVdRaM0vrN9wW2BKInQpktwWTXVyk+yP5nQUCEGmn0RTdlPKrffBaigxepkEAJPrg== +"@graphql-tools/load@^8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/load/-/load-8.0.0.tgz#62e00f48c39b4085167a096f66ba6c21fb3fc796" + integrity sha512-Cy874bQJH0FP2Az7ELPM49iDzOljQmK1PPH6IuxsWzLSTxwTqd8dXA09dcVZrI7/LsN26heTY2R8q2aiiv0GxQ== dependencies: - "@graphql-tools/schema" "^9.0.18" - "@graphql-tools/utils" "^9.2.1" + "@graphql-tools/schema" "^10.0.0" + "@graphql-tools/utils" "^10.0.0" p-limit "3.1.0" tslib "^2.4.0" -"@graphql-tools/merge@^8.2.6", "@graphql-tools/merge@^8.4.1": - version "8.4.2" - resolved "https://registry.yarnpkg.com/@graphql-tools/merge/-/merge-8.4.2.tgz#95778bbe26b635e8d2f60ce9856b388f11fe8288" - integrity sha512-XbrHAaj8yDuINph+sAfuq3QCZ/tKblrTLOpirK0+CAgNlZUCHs0Fa+xtMUURgwCVThLle1AF7svJCxFizygLsw== +"@graphql-tools/merge@^9.0.0": + version "9.0.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/merge/-/merge-9.0.0.tgz#b0a3636c82716454bff88e9bb40108b0471db281" + integrity sha512-J7/xqjkGTTwOJmaJQJ2C+VDBDOWJL3lKrHJN4yMaRLAJH3PosB7GiPRaSDZdErs0+F77sH2MKs2haMMkywzx7Q== dependencies: - "@graphql-tools/utils" "^9.2.1" + "@graphql-tools/utils" "^10.0.0" tslib "^2.4.0" "@graphql-tools/optimize@^1.3.0": @@ -2657,22 +3143,22 @@ dependencies: tslib "^2.4.0" -"@graphql-tools/prisma-loader@^7.2.49": - version "7.2.72" - resolved "https://registry.yarnpkg.com/@graphql-tools/prisma-loader/-/prisma-loader-7.2.72.tgz#6304fc23600458396f3ede713d8e2371df7850e3" - integrity sha512-0a7uV7Fky6yDqd0tI9+XMuvgIo6GAqiVzzzFV4OSLry4AwiQlI3igYseBV7ZVOGhedOTqj/URxjpiv07hRcwag== +"@graphql-tools/prisma-loader@^8.0.0": + version "8.0.1" + resolved "https://registry.yarnpkg.com/@graphql-tools/prisma-loader/-/prisma-loader-8.0.1.tgz#0a013c69b04e0779b5be15757173d458cdf94e35" + integrity sha512-bl6e5sAYe35Z6fEbgKXNrqRhXlCJYeWKBkarohgYA338/SD9eEhXtg3Cedj7fut3WyRLoQFpHzfiwxKs7XrgXg== dependencies: - "@graphql-tools/url-loader" "^7.17.18" - "@graphql-tools/utils" "^9.2.1" + "@graphql-tools/url-loader" "^8.0.0" + "@graphql-tools/utils" "^10.0.0" "@types/js-yaml" "^4.0.0" "@types/json-stable-stringify" "^1.0.32" - "@whatwg-node/fetch" "^0.8.2" + "@whatwg-node/fetch" "^0.9.0" chalk "^4.1.0" debug "^4.3.1" dotenv "^16.0.0" graphql-request "^6.0.0" - http-proxy-agent "^6.0.0" - https-proxy-agent "^6.0.0" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.0" jose "^4.11.4" js-yaml "^4.0.0" json-stable-stringify "^1.0.1" @@ -2690,35 +3176,44 @@ "@graphql-tools/utils" "^9.2.1" tslib "^2.4.0" -"@graphql-tools/schema@^9.0.0", "@graphql-tools/schema@^9.0.18", "@graphql-tools/schema@^9.0.19": - version "9.0.19" - resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-9.0.19.tgz#c4ad373b5e1b8a0cf365163435b7d236ebdd06e7" - integrity sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w== +"@graphql-tools/schema@^10.0.0": + version "10.0.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-10.0.0.tgz#7b5f6b6a59f51c927de8c9069bde4ebbfefc64b3" + integrity sha512-kf3qOXMFcMs2f/S8Y3A8fm/2w+GaHAkfr3Gnhh2LOug/JgpY/ywgFVxO3jOeSpSEdoYcDKLcXVjMigNbY4AdQg== dependencies: - "@graphql-tools/merge" "^8.4.1" - "@graphql-tools/utils" "^9.2.1" + "@graphql-tools/merge" "^9.0.0" + "@graphql-tools/utils" "^10.0.0" tslib "^2.4.0" value-or-promise "^1.0.12" -"@graphql-tools/url-loader@^7.13.2", "@graphql-tools/url-loader@^7.17.18", "@graphql-tools/url-loader@^7.9.7": - version "7.17.18" - resolved "https://registry.yarnpkg.com/@graphql-tools/url-loader/-/url-loader-7.17.18.tgz#3e253594d23483e4c0dd3a4c3dd2ad5cd0141192" - integrity sha512-ear0CiyTj04jCVAxi7TvgbnGDIN2HgqzXzwsfcqiVg9cvjT40NcMlZ2P1lZDgqMkZ9oyLTV8Bw6j+SyG6A+xPw== +"@graphql-tools/url-loader@^8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/url-loader/-/url-loader-8.0.0.tgz#8d952d5ebb7325e587cb914aaebded3dbd078cf6" + integrity sha512-rPc9oDzMnycvz+X+wrN3PLrhMBQkG4+sd8EzaFN6dypcssiefgWKToXtRKI8HHK68n2xEq1PyrOpkjHFJB+GwA== dependencies: "@ardatan/sync-fetch" "^0.0.1" - "@graphql-tools/delegate" "^9.0.31" - "@graphql-tools/executor-graphql-ws" "^0.0.14" - "@graphql-tools/executor-http" "^0.1.7" - "@graphql-tools/executor-legacy-ws" "^0.0.11" - "@graphql-tools/utils" "^9.2.1" - "@graphql-tools/wrap" "^9.4.2" + "@graphql-tools/delegate" "^10.0.0" + "@graphql-tools/executor-graphql-ws" "^1.0.0" + "@graphql-tools/executor-http" "^1.0.0" + "@graphql-tools/executor-legacy-ws" "^1.0.0" + "@graphql-tools/utils" "^10.0.0" + "@graphql-tools/wrap" "^10.0.0" "@types/ws" "^8.0.0" - "@whatwg-node/fetch" "^0.8.0" + "@whatwg-node/fetch" "^0.9.0" isomorphic-ws "^5.0.0" tslib "^2.4.0" value-or-promise "^1.0.11" ws "^8.12.0" +"@graphql-tools/utils@^10.0.0", "@graphql-tools/utils@^10.0.2", "@graphql-tools/utils@^10.0.5": + version "10.0.6" + resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-10.0.6.tgz#8a809d6bc0df27ffe8964696f182af2383b5974b" + integrity sha512-hZMjl/BbX10iagovakgf3IiqArx8TPsotq5pwBld37uIX1JiZoSbgbCIFol7u55bh32o6cfDEiiJgfAD5fbeyQ== + dependencies: + "@graphql-typed-document-node/core" "^3.1.1" + dset "^3.1.2" + tslib "^2.4.0" + "@graphql-tools/utils@^8.8.0": version "8.13.1" resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-8.13.1.tgz#b247607e400365c2cd87ff54654d4ad25a7ac491" @@ -2726,7 +3221,7 @@ dependencies: tslib "^2.4.0" -"@graphql-tools/utils@^9.0.0", "@graphql-tools/utils@^9.1.1", "@graphql-tools/utils@^9.2.1": +"@graphql-tools/utils@^9.0.0", "@graphql-tools/utils@^9.2.1": version "9.2.1" resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-9.2.1.tgz#1b3df0ef166cfa3eae706e3518b17d5922721c57" integrity sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A== @@ -2734,14 +3229,14 @@ "@graphql-typed-document-node/core" "^3.1.1" tslib "^2.4.0" -"@graphql-tools/wrap@^9.4.2": - version "9.4.2" - resolved "https://registry.yarnpkg.com/@graphql-tools/wrap/-/wrap-9.4.2.tgz#30835587c4c73be1780908a7cb077d8013aa2703" - integrity sha512-DFcd9r51lmcEKn0JW43CWkkI2D6T9XI1juW/Yo86i04v43O9w2/k4/nx2XTJv4Yv+iXwUw7Ok81PGltwGJSDSA== +"@graphql-tools/wrap@^10.0.0": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@graphql-tools/wrap/-/wrap-10.0.1.tgz#9e3d27d2723962c26c4377d5d7ab0d3038bf728c" + integrity sha512-Cw6hVrKGM2OKBXeuAGltgy4tzuqQE0Nt7t/uAqnuokSXZhMHXJUb124Bnvxc2gPZn5chfJSDafDe4Cp8ZAVJgg== dependencies: - "@graphql-tools/delegate" "^9.0.31" - "@graphql-tools/schema" "^9.0.18" - "@graphql-tools/utils" "^9.2.1" + "@graphql-tools/delegate" "^10.0.3" + "@graphql-tools/schema" "^10.0.0" + "@graphql-tools/utils" "^10.0.0" tslib "^2.4.0" value-or-promise "^1.0.12" @@ -2783,11 +3278,6 @@ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== -"@jridgewell/resolve-uri@^3.0.3": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - "@jridgewell/set-array@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" @@ -2811,14 +3301,6 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/trace-mapping@0.3.9": - version "0.3.9" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": version "0.3.18" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" @@ -2827,10 +3309,66 @@ "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" -"@next/env@13.2.4": - version "13.2.4" - resolved "https://registry.yarnpkg.com/@next/env/-/env-13.2.4.tgz#8b763700262b2445140a44a8c8d088cef676dbae" - integrity sha512-+Mq3TtpkeeKFZanPturjcXt+KHfKYnLlX6jMLyCrmpq6OOs4i1GqBOAauSkii9QeKCMTYzGppar21JU57b/GEA== +"@latticexyz/recs@2.0.0-next.9": + version "2.0.0-next.9" + resolved "https://registry.yarnpkg.com/@latticexyz/recs/-/recs-2.0.0-next.9.tgz#c93d6071e84a9dd11cc4f9b3838590e87d49f8a5" + integrity sha512-OkB09HcoRnhXrMoLmhlZ/4aHIJ8wBNQMO1bzfdTrKKzRG6c7z9aPniHOXkWyMre+HSKSr5dmFFJXFwrd6RfSEA== + dependencies: + "@latticexyz/schema-type" "2.0.0-next.9" + "@latticexyz/utils" "2.0.0-next.9" + mobx "^6.7.0" + rxjs "7.5.5" + +"@latticexyz/recs@^2.0.0-next.11": + version "2.0.0-snapshot-test-32d38619" + resolved "https://registry.yarnpkg.com/@latticexyz/recs/-/recs-2.0.0-snapshot-test-32d38619.tgz#18daf1727ef505dadbfe569eba7017d0fd1ccf7c" + integrity sha512-7730rgGjVAzXvkAclghy3P65y/s7ELgCf6CnIkcujeNOwBjJjH7UPj718ddzdW1VEoJzzD5+9NHME+GBCR4llg== + dependencies: + "@latticexyz/schema-type" "2.0.0-snapshot-test-32d38619" + "@latticexyz/utils" "2.0.0-snapshot-test-32d38619" + mobx "^6.7.0" + rxjs "7.5.5" + +"@latticexyz/schema-type@2.0.0-next.9": + version "2.0.0-next.9" + resolved "https://registry.yarnpkg.com/@latticexyz/schema-type/-/schema-type-2.0.0-next.9.tgz#5d7993e217c38ea9fb081d19a70c951fbc55c4e2" + integrity sha512-MZUrZllVaHXYJriYsVZtd2Uo3G359FVTw6uKibFJm6YnPgGLxvSCvsicZU6Nh4wnyqvdxHtmxj5DZNQR7Ucokw== + dependencies: + abitype "0.9.3" + viem "1.6.0" + +"@latticexyz/schema-type@2.0.0-snapshot-test-32d38619": + version "2.0.0-snapshot-test-32d38619" + resolved "https://registry.yarnpkg.com/@latticexyz/schema-type/-/schema-type-2.0.0-snapshot-test-32d38619.tgz#89b174870db379897323875cbb2914fa44bedc7f" + integrity sha512-gBMIV5nOuy2uyKnSPPQ6bECNoENTt+3JEyYJK3LRjpXdRiokqq+LljHrJcYom15HcXbnlrHcjuQ1tLFvEyjZdg== + dependencies: + abitype "0.9.3" + viem "1.6.0" + +"@latticexyz/utils@2.0.0-next.9": + version "2.0.0-next.9" + resolved "https://registry.yarnpkg.com/@latticexyz/utils/-/utils-2.0.0-next.9.tgz#58bea8bf2b731d7f9d943e05d5a358b282cdc72f" + integrity sha512-G9WahgFSm9VUuzYcHgfLzxdWHQWbdZ9z0azmB1mWvqdx7zwvAwTLWmdM+Jl5BtgKoGOuK3oZaTTL8vNqKcZUjg== + dependencies: + ethers "^5.7.2" + mobx "^6.7.0" + proxy-deep "^3.1.1" + rxjs "7.5.5" + +"@latticexyz/utils@2.0.0-snapshot-test-32d38619", "@latticexyz/utils@^2.0.0-next.11": + version "2.0.0-snapshot-test-32d38619" + resolved "https://registry.yarnpkg.com/@latticexyz/utils/-/utils-2.0.0-snapshot-test-32d38619.tgz#def809eea74df31bd1283f3622e42a7d928e5d7a" + integrity sha512-LKCni+jtKhIpGB67ZQV2A0imhFeR7Oh/u5HQj4IHWsNCdsLMPCFOKZPmd9QXGZ9pYTPO7kVHl8BJ3Z1PRrEcuA== + dependencies: + ethers "^5.7.2" + mobx "^6.7.0" + proxy-deep "^3.1.1" + rxjs "7.5.5" + +"@next/env@13.5.3": + version "13.5.3" + resolved "https://registry.yarnpkg.com/@next/env/-/env-13.5.3.tgz#402da9a0af87f93d853519f0c2a602b1ab637c2c" + integrity sha512-X4te86vsbjsB7iO4usY9jLPtZ827Mbx+WcwNBGUOIuswuTAKQtzsuoxc/6KLxCMvogKG795MhrR1LDhYgDvasg== "@next/eslint-plugin-next@13.2.4": version "13.2.4" @@ -2839,70 +3377,64 @@ dependencies: glob "7.1.7" -"@next/swc-android-arm-eabi@13.2.4": - version "13.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.2.4.tgz#758d0403771e549f9cee71cbabc0cb16a6c947c0" - integrity sha512-DWlalTSkLjDU11MY11jg17O1gGQzpRccM9Oes2yTqj2DpHndajrXHGxj9HGtJ+idq2k7ImUdJVWS2h2l/EDJOw== - -"@next/swc-android-arm64@13.2.4": - version "13.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.2.4.tgz#834d586523045110d5602e0c8aae9028835ac427" - integrity sha512-sRavmUImUCf332Gy+PjIfLkMhiRX1Ez4SI+3vFDRs1N5eXp+uNzjFUK/oLMMOzk6KFSkbiK/3Wt8+dHQR/flNg== - -"@next/swc-darwin-arm64@13.2.4": - version "13.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.2.4.tgz#5006fca179a36ef3a24d293abadec7438dbb48c6" - integrity sha512-S6vBl+OrInP47TM3LlYx65betocKUUlTZDDKzTiRDbsRESeyIkBtZ6Qi5uT2zQs4imqllJznVjFd1bXLx3Aa6A== - -"@next/swc-darwin-x64@13.2.4": - version "13.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.2.4.tgz#6549c7c04322766acc3264ccdb3e1b43fcaf7946" - integrity sha512-a6LBuoYGcFOPGd4o8TPo7wmv5FnMr+Prz+vYHopEDuhDoMSHOnC+v+Ab4D7F0NMZkvQjEJQdJS3rqgFhlZmKlw== - -"@next/swc-freebsd-x64@13.2.4": - version "13.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.2.4.tgz#0bbe28979e3e868debc2cc06e45e186ce195b7f4" - integrity sha512-kkbzKVZGPaXRBPisoAQkh3xh22r+TD+5HwoC5bOkALraJ0dsOQgSMAvzMXKsN3tMzJUPS0tjtRf1cTzrQ0I5vQ== - -"@next/swc-linux-arm-gnueabihf@13.2.4": - version "13.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.2.4.tgz#1d28d2203f5a7427d6e7119d7bcb5fc40959fb3e" - integrity sha512-7qA1++UY0fjprqtjBZaOA6cas/7GekpjVsZn/0uHvquuITFCdKGFCsKNBx3S0Rpxmx6WYo0GcmhNRM9ru08BGg== - -"@next/swc-linux-arm64-gnu@13.2.4": - version "13.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.2.4.tgz#eb26448190948cdf4c44b8f34110a3ecea32f1d0" - integrity sha512-xzYZdAeq883MwXgcwc72hqo/F/dwUxCukpDOkx/j1HTq/J0wJthMGjinN9wH5bPR98Mfeh1MZJ91WWPnZOedOg== - -"@next/swc-linux-arm64-musl@13.2.4": - version "13.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.2.4.tgz#c4227c0acd94a420bb14924820710e6284d234d3" - integrity sha512-8rXr3WfmqSiYkb71qzuDP6I6R2T2tpkmf83elDN8z783N9nvTJf2E7eLx86wu2OJCi4T05nuxCsh4IOU3LQ5xw== - -"@next/swc-linux-x64-gnu@13.2.4": - version "13.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.2.4.tgz#6bcb540944ee9b0209b33bfc23b240c2044dfc3e" - integrity sha512-Ngxh51zGSlYJ4EfpKG4LI6WfquulNdtmHg1yuOYlaAr33KyPJp4HeN/tivBnAHcZkoNy0hh/SbwDyCnz5PFJQQ== - -"@next/swc-linux-x64-musl@13.2.4": - version "13.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.2.4.tgz#ce21e43251eaf09a09df39372b2c3e38028c30ff" - integrity sha512-gOvwIYoSxd+j14LOcvJr+ekd9fwYT1RyMAHOp7znA10+l40wkFiMONPLWiZuHxfRk+Dy7YdNdDh3ImumvL6VwA== - -"@next/swc-win32-arm64-msvc@13.2.4": - version "13.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.2.4.tgz#68220063d8e5e082f5465498675640dedb670ff1" - integrity sha512-q3NJzcfClgBm4HvdcnoEncmztxrA5GXqKeiZ/hADvC56pwNALt3ngDC6t6qr1YW9V/EPDxCYeaX4zYxHciW4Dw== - -"@next/swc-win32-ia32-msvc@13.2.4": - version "13.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.2.4.tgz#7c120ab54a081be9566df310bed834f168252990" - integrity sha512-/eZ5ncmHUYtD2fc6EUmAIZlAJnVT2YmxDsKs1Ourx0ttTtvtma/WKlMV5NoUsyOez0f9ExLyOpeCoz5aj+MPXw== +"@next/swc-darwin-arm64@13.5.3": + version "13.5.3" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.3.tgz#f72eac8c7b71d33e0768bd3c8baf68b00fea0160" + integrity sha512-6hiYNJxJmyYvvKGrVThzo4nTcqvqUTA/JvKim7Auaj33NexDqSNwN5YrrQu+QhZJCIpv2tULSHt+lf+rUflLSw== + +"@next/swc-darwin-x64@13.5.3": + version "13.5.3" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.3.tgz#96eda3a1247a713579eb241d76d3f503291c8938" + integrity sha512-UpBKxu2ob9scbpJyEq/xPgpdrgBgN3aLYlxyGqlYX5/KnwpJpFuIHU2lx8upQQ7L+MEmz+fA1XSgesoK92ppwQ== + +"@next/swc-linux-arm64-gnu@13.5.3": + version "13.5.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.3.tgz#132e155a029310fffcdfd3e3c4255f7ce9fd2714" + integrity sha512-5AzM7Yx1Ky+oLY6pHs7tjONTF22JirDPd5Jw/3/NazJ73uGB05NqhGhB4SbeCchg7SlVYVBeRMrMSZwJwq/xoA== + +"@next/swc-linux-arm64-musl@13.5.3": + version "13.5.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.3.tgz#981d7d8fdcf040bd0c89588ef4139c28805f5cf1" + integrity sha512-A/C1shbyUhj7wRtokmn73eBksjTM7fFQoY2v/0rTM5wehpkjQRLOXI8WJsag2uLhnZ4ii5OzR1rFPwoD9cvOgA== + +"@next/swc-linux-x64-gnu@13.5.3": + version "13.5.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.3.tgz#b8263663acda7b84bc2c4ffa39ca4b0172a78060" + integrity sha512-FubPuw/Boz8tKkk+5eOuDHOpk36F80rbgxlx4+xty/U71e3wZZxVYHfZXmf0IRToBn1Crb8WvLM9OYj/Ur815g== + +"@next/swc-linux-x64-musl@13.5.3": + version "13.5.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.3.tgz#cd0bed8ee92032c25090bed9d95602ac698d925f" + integrity sha512-DPw8nFuM1uEpbX47tM3wiXIR0Qa+atSzs9Q3peY1urkhofx44o7E1svnq+a5Q0r8lAcssLrwiM+OyJJgV/oj7g== + +"@next/swc-win32-arm64-msvc@13.5.3": + version "13.5.3" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.3.tgz#7f556674ca97e6936220d10c58252cc36522d80a" + integrity sha512-zBPSP8cHL51Gub/YV8UUePW7AVGukp2D8JU93IHbVDu2qmhFAn9LWXiOOLKplZQKxnIPUkJTQAJDCWBWU4UWUA== + +"@next/swc-win32-ia32-msvc@13.5.3": + version "13.5.3" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.3.tgz#4912721fb8695f11daec4cde42e73dc57bcc479f" + integrity sha512-ONcL/lYyGUj4W37D4I2I450SZtSenmFAvapkJQNIJhrPMhzDU/AdfLkW98NvH1D2+7FXwe7yclf3+B7v28uzBQ== + +"@next/swc-win32-x64-msvc@13.5.3": + version "13.5.3" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.3.tgz#97340a709febb60ff73003566b99d127d4e5b881" + integrity sha512-2Vz2tYWaLqJvLcWbbTlJ5k9AN6JD7a5CN2pAeIzpbecK8ZF/yobA39cXtv6e+Z8c5UJuVOmaTldEAIxvsIux/Q== + +"@noble/curves@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.1.0.tgz#f13fc667c89184bc04cccb9b11e8e7bae27d8c3d" + integrity sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA== + dependencies: + "@noble/hashes" "1.3.1" -"@next/swc-win32-x64-msvc@13.2.4": - version "13.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.2.4.tgz#5abda92fe12b9829bf7951c4a221282c56041144" - integrity sha512-0MffFmyv7tBLlji01qc0IaPP/LVExzvj7/R5x1Jph1bTAIj4Vu81yFQWHHQAP6r4ff9Ukj1mBK6MDNVXm7Tcvw== +"@noble/curves@~1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.0.0.tgz#e40be8c7daf088aaf291887cbc73f43464a92932" + integrity sha512-2upgEu0iLiDVDZkNLeFV2+ht0BAVgQnEmCk6JsOch9Rp8xfkMCbvbAZlA2pBHQc73dbl+vFOXfqkf4uemdn0bw== + dependencies: + "@noble/hashes" "1.3.0" "@noble/curves@~1.2.0": version "1.2.0" @@ -2911,7 +3443,17 @@ dependencies: "@noble/hashes" "1.3.2" -"@noble/hashes@1.3.2", "@noble/hashes@~1.3.2": +"@noble/hashes@1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.0.tgz#085fd70f6d7d9d109671090ccae1d3bec62554a1" + integrity sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg== + +"@noble/hashes@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.1.tgz#8831ef002114670c603c458ab8b11328406953a9" + integrity sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA== + +"@noble/hashes@1.3.2", "@noble/hashes@~1.3.0", "@noble/hashes@~1.3.2": version "1.3.2" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== @@ -2981,7 +3523,7 @@ resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.6.tgz#cee20bd55e68a1720bdab363ecf0c821ded4cd45" integrity sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw== -"@repeaterjs/repeater@3.0.4", "@repeaterjs/repeater@^3.0.4": +"@repeaterjs/repeater@^3.0.4": version "3.0.4" resolved "https://registry.yarnpkg.com/@repeaterjs/repeater/-/repeater-3.0.4.tgz#a04d63f4d1bf5540a41b01a921c9a7fddc3bd1ca" integrity sha512-AW8PKd6iX3vAZ0vA43nOUOnbq/X5ihgU+mSXXqunMkeQADGiqw/PY0JNeYtD5sr0PAy51YPgAPbDoeapv9r8WA== @@ -3058,6 +3600,28 @@ resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz#8be36a1f66f3265389e90b5f9c9962146758f728" integrity sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg== +"@scure/base@~1.1.0": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.3.tgz#8584115565228290a6c6c4961973e0903bb3df2f" + integrity sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q== + +"@scure/bip32@1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.0.tgz#6c8d980ef3f290987736acd0ee2e0f0d50068d87" + integrity sha512-bcKpo1oj54hGholplGLpqPHRbIsnbixFtc06nwuNM5/dwSXOq/AAYoIBRsBmnZJSdfeNW5rnff7NTAz3ZCqR9Q== + dependencies: + "@noble/curves" "~1.0.0" + "@noble/hashes" "~1.3.0" + "@scure/base" "~1.1.0" + +"@scure/bip39@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.0.tgz#a207e2ef96de354de7d0002292ba1503538fc77b" + integrity sha512-SX/uKq52cuxm4YFXWFaVByaSHJh2w3BnokVSeUJVCv6K7WulT9u2BuNRBhuFl8vAuYnzx9bEu9WgpcNYTrYieg== + dependencies: + "@noble/hashes" "~1.3.0" + "@scure/base" "~1.1.0" + "@scure/starknet@~0.3.0": version "0.3.0" resolved "https://registry.yarnpkg.com/@scure/starknet/-/starknet-0.3.0.tgz#b8273a42fc721025f8098b1f1d96368a7067e1c4" @@ -3066,6 +3630,15 @@ "@noble/curves" "~1.2.0" "@noble/hashes" "~1.3.2" +"@starknet-react/core@^1.0.3": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@starknet-react/core/-/core-1.0.4.tgz#08ed280382621cc78d031095a4293f043dbadc98" + integrity sha512-TQiRnb0moqim6+HqioGGzd3FgjPVJFMdMH8Q5AQlJ7oEUNprKkFyHlVGJJlcwvdRaCPD5BQuD2WUL2rQfgMRuw== + dependencies: + "@tanstack/react-query" "^4.29.12" + immutable "^4.3.0" + zod "^3.21.4" + "@surma/rollup-plugin-off-main-thread@^2.2.3": version "2.2.3" resolved "https://registry.yarnpkg.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz#ee34985952ca21558ab0d952f00298ad2190c053" @@ -3076,32 +3649,25 @@ magic-string "^0.25.0" string.prototype.matchall "^4.0.6" -"@swc/helpers@0.4.14": - version "0.4.14" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.14.tgz#1352ac6d95e3617ccb7c1498ff019654f1e12a74" - integrity sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw== +"@swc/helpers@0.5.2": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.2.tgz#85ea0c76450b61ad7d10a37050289eded783c27d" + integrity sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw== dependencies: tslib "^2.4.0" -"@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== - -"@tsconfig/node12@^1.0.7": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" - integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== - -"@tsconfig/node14@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" - integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== +"@tanstack/query-core@4.35.3": + version "4.35.3" + resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-4.35.3.tgz#1c127e66b4ad1beeac052db83a812d7cb67369e1" + integrity sha512-PS+WEjd9wzKTyNjjQymvcOe1yg8f3wYc6mD+vb6CKyZAKvu4sIJwryfqfBULITKCla7P9C4l5e9RXePHvZOZeQ== -"@tsconfig/node16@^1.0.2": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" - integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== +"@tanstack/react-query@^4.29.12": + version "4.35.3" + resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-4.35.3.tgz#03d726ef6a19d426166427c6539b003dd9606d1b" + integrity sha512-UgTPioip/rGG3EQilXfA2j4BJkhEQsR+KAbF+KIuvQ7j4MkgnTCJF01SfRpIRNtQTlEfz/+IL7+jP8WA8bFbsw== + dependencies: + "@tanstack/query-core" "4.35.3" + use-sync-external-store "^1.2.0" "@types/estree@0.0.39": version "0.0.39" @@ -3223,6 +3789,13 @@ dependencies: "@types/node" "*" +"@types/ws@^8.5.4": + version "8.5.6" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.6.tgz#e9ad51f0ab79b9110c50916c9fcbddc36d373065" + integrity sha512-8B5EO9jLVCy+B58PLHvLDuOD8DRVMgQzq8d55SjLCOn9kqGyqOvy27exVaTio1q1nX5zLu8/6N0n2ThSxOM6tg== + dependencies: + "@types/node" "*" + "@typescript-eslint/parser@^5.42.0": version "5.55.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.55.0.tgz#8c96a0b6529708ace1dcfa60f5e6aec0f5ed2262" @@ -3272,28 +3845,22 @@ resolved "https://registry.yarnpkg.com/@vercel/analytics/-/analytics-1.0.2.tgz#7af719a1bf33734840aee6f04eb548d2cedab9ec" integrity sha512-BZFxVrv24VbNNl5xMxqUojQIegEeXMI6rX3rg1uVLYUEXsuKNBSAEQf4BWEcjQDp/8aYJOj6m8V4PUA3x/cxgg== -"@whatwg-node/events@^0.0.2": - version "0.0.2" - resolved "https://registry.yarnpkg.com/@whatwg-node/events/-/events-0.0.2.tgz#7b7107268d2982fc7b7aff5ee6803c64018f84dd" - integrity sha512-WKj/lI4QjnLuPrim0cfO7i+HsDSXHxNv1y0CrJhdntuO3hxWZmnXCwNDnwOvry11OjRin6cgWNF+j/9Pn8TN4w== +"@wagmi/chains@1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@wagmi/chains/-/chains-1.6.0.tgz#eb992ad28dbaaab729b5bcab3e5b461e8a035656" + integrity sha512-5FRlVxse5P4ZaHG3GTvxwVANSmYJas1eQrTBHhjxVtqXoorm0aLmCHbhmN8Xo1yu09PaWKlleEvfE98yH4AgIw== "@whatwg-node/events@^0.0.3": version "0.0.3" resolved "https://registry.yarnpkg.com/@whatwg-node/events/-/events-0.0.3.tgz#13a65dd4f5893f55280f766e29ae48074927acad" integrity sha512-IqnKIDWfXBJkvy/k6tzskWTc2NK3LcqHlb+KHGCrjOCH4jfQckRX0NAiIcC/vIqQkzLYw2r2CTSwAxcrtcD6lA== -"@whatwg-node/fetch@^0.6.0": - version "0.6.9" - resolved "https://registry.yarnpkg.com/@whatwg-node/fetch/-/fetch-0.6.9.tgz#6cc694cc0378e27b8dfed427c5bf633eda6972b9" - integrity sha512-JfrBCJdMu9n9OARc0e/hPHcD98/8Nz1CKSdGYDg6VbObDkV/Ys30xe5i/wPOatYbxuvatj1kfWeHf7iNX3i17w== - dependencies: - "@peculiar/webcrypto" "^1.4.0" - "@whatwg-node/node-fetch" "^0.0.5" - busboy "^1.6.0" - urlpattern-polyfill "^6.0.2" - web-streams-polyfill "^3.2.1" +"@whatwg-node/events@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@whatwg-node/events/-/events-0.1.1.tgz#0ca718508249419587e130da26d40e29d99b5356" + integrity sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w== -"@whatwg-node/fetch@^0.8.0", "@whatwg-node/fetch@^0.8.1", "@whatwg-node/fetch@^0.8.2": +"@whatwg-node/fetch@^0.8.0": version "0.8.8" resolved "https://registry.yarnpkg.com/@whatwg-node/fetch/-/fetch-0.8.8.tgz#48c6ad0c6b7951a73e812f09dd22d75e9fa18cae" integrity sha512-CdcjGC2vdKhc13KKxgsc6/616BQ7ooDIgPeTuAiE8qfCnS0mGzcfCOoZXypQSz73nxI+GWc7ZReIAVhxoE1KCg== @@ -3304,14 +3871,13 @@ urlpattern-polyfill "^8.0.0" web-streams-polyfill "^3.2.1" -"@whatwg-node/node-fetch@^0.0.5": - version "0.0.5" - resolved "https://registry.yarnpkg.com/@whatwg-node/node-fetch/-/node-fetch-0.0.5.tgz#bebf18891088e5e2fc449dea8d1bc94af5ec38df" - integrity sha512-hbccmaSZaItdsRuBKBEEhLoO+5oXJPxiyd0kG2xXd0Dh3Rt+vZn4pADHxuSiSHLd9CM+S2z4+IxlEGbWUgiz9g== +"@whatwg-node/fetch@^0.9.0": + version "0.9.13" + resolved "https://registry.yarnpkg.com/@whatwg-node/fetch/-/fetch-0.9.13.tgz#1d084cd546b9cd425ae89cbb1252a3e47a9a2e1c" + integrity sha512-PPtMwhjtS96XROnSpowCQM85gCUG2m7AXZFw0PZlGbhzx2GK7f2iOXilfgIJ0uSlCuuGbOIzfouISkA7C4FJOw== dependencies: - "@whatwg-node/events" "^0.0.2" - busboy "^1.6.0" - tslib "^2.3.1" + "@whatwg-node/node-fetch" "^0.4.17" + urlpattern-polyfill "^9.0.0" "@whatwg-node/node-fetch@^0.3.6": version "0.3.6" @@ -3324,15 +3890,33 @@ fast-url-parser "^1.1.3" tslib "^2.3.1" -"@zag-js/element-size@0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@zag-js/element-size/-/element-size-0.3.1.tgz#f9f6ae98355e2250d18d0f6e2f1134a0ae4c6a2f" - integrity sha512-jR5j4G//bRzcxwAACWi9EfITnwjNmn10LxF4NmALrdZU7/PNWP3uUCdhCxd/0SCyeiJXUl0yvD57rWAbKPs1nw== +"@whatwg-node/node-fetch@^0.4.17": + version "0.4.19" + resolved "https://registry.yarnpkg.com/@whatwg-node/node-fetch/-/node-fetch-0.4.19.tgz#29c72ff65a8e450949238612ff17a3d3717736d3" + integrity sha512-AW7/m2AuweAoSXmESrYQr/KBafueScNbn2iNO0u6xFr2JZdPmYsSm5yvAXYk6yDLv+eDmSSKrf7JnFZ0CsJIdA== + dependencies: + "@whatwg-node/events" "^0.1.0" + busboy "^1.6.0" + fast-querystring "^1.1.1" + fast-url-parser "^1.1.3" + tslib "^2.3.1" + +"@zag-js/dom-query@0.16.0": + version "0.16.0" + resolved "https://registry.yarnpkg.com/@zag-js/dom-query/-/dom-query-0.16.0.tgz#bca46bcd78f78c900064478646d95f9781ed098e" + integrity sha512-Oqhd6+biWyKnhKwFFuZrrf6lxBz2tX2pRQe6grUnYwO6HJ8BcbqZomy2lpOdr+3itlaUqx+Ywj5E5ZZDr/LBfQ== -"@zag-js/focus-visible@0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@zag-js/focus-visible/-/focus-visible-0.2.1.tgz#bf4f1009f4fd35a9728dfaa9214d8cb318fe8b1e" - integrity sha512-19uTjoZGP4/Ax7kSNhhay9JA83BirKzpqLkeEAilrpdI1hE5xuq6q+tzJOsrMOOqJrm7LkmZp5lbsTQzvK2pYg== +"@zag-js/element-size@0.10.5": + version "0.10.5" + resolved "https://registry.yarnpkg.com/@zag-js/element-size/-/element-size-0.10.5.tgz#a24bad2eeb7e2c8709e32be5336e158e1a1a174f" + integrity sha512-uQre5IidULANvVkNOBQ1tfgwTQcGl4hliPSe69Fct1VfYb2Fd0jdAcGzqQgPhfrXFpR62MxLPB7erxJ/ngtL8w== + +"@zag-js/focus-visible@0.16.0": + version "0.16.0" + resolved "https://registry.yarnpkg.com/@zag-js/focus-visible/-/focus-visible-0.16.0.tgz#c9e53e3dbab0f2649d04a489bb379f5800f4f069" + integrity sha512-a7U/HSopvQbrDU4GLerpqiMcHKEkQkNPeDZJWz38cw/6Upunh41GjHetq5TB84hxyCaDzJ6q2nEdNoBQfC0FKA== + dependencies: + "@zag-js/dom-query" "0.16.0" abi-wan-kanabi@^1.0.1, abi-wan-kanabi@^1.0.3: version "1.0.3" @@ -3345,17 +3929,17 @@ abi-wan-kanabi@^1.0.1, abi-wan-kanabi@^1.0.3: typescript "^4.9.5" yargs "^17.7.2" +abitype@0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-0.9.3.tgz#294d25288ee683d72baf4e1fed757034e3c8c277" + integrity sha512-dz4qCQLurx97FQhnb/EIYTk/ldQ+oafEDUqC0VVIeQS1Q48/YWt/9YNfMmp9SLFqN41ktxny3c8aYxHjmFIB/w== + acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-walk@^8.1.1: - version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - -acorn@^8.4.1, acorn@^8.8.0: +acorn@^8.8.0: version "8.8.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== @@ -3365,6 +3949,11 @@ acorn@^8.8.2: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== +aes-js@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" + integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== + agent-base@^7.0.2, agent-base@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.0.tgz#536802b76bc0b34aa50195eb2442276d613e3434" @@ -3431,25 +4020,12 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - argparse@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -aria-hidden@^1.2.2: +aria-hidden@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.2.3.tgz#14aeb7fb692bbb72d69bebfa47279c1fd725e954" integrity sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ== @@ -3695,6 +4271,11 @@ base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== +bech32@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" + integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== + big-integer@^1.6.16: version "1.6.51" resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" @@ -3705,11 +4286,6 @@ big.js@^5.2.2: resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - bl@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" @@ -3719,6 +4295,16 @@ bl@^4.1.0: inherits "^2.0.4" readable-stream "^3.4.0" +bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -3734,7 +4320,7 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^3.0.2, braces@~3.0.2: +braces@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -3755,6 +4341,11 @@ broadcast-channel@^3.4.1: rimraf "3.0.2" unload "2.2.0" +brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + browserslist@^4.21.10, browserslist@^4.21.9: version "4.21.10" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.10.tgz#dbbac576628c13d3b2231332cb2ec5a46e015bb0" @@ -3800,7 +4391,7 @@ builtin-modules@^3.1.0: resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== -busboy@^1.6.0: +busboy@1.6.0, busboy@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== @@ -3929,21 +4520,6 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -chokidar@^3.5.2: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - 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" - optionalDependencies: - fsevents "~2.3.2" - clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" @@ -4033,7 +4609,7 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color2k@^2.0.0: +color2k@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/color2k/-/color2k-2.0.2.tgz#ac2b4aea11c822a6bcb70c768b5a289f4fffcebb" integrity sha512-kJhwH5nAwb34tmyuqq/lgjEKzlFXn1U99NlnB6Ws4qVaERcRUYeYP1cBw6BJ4vxaWStAUEef4WMr7WjOCnBt8w== @@ -4065,10 +4641,10 @@ commondir@^1.0.1: resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== -compute-scroll-into-view@1.0.20: - version "1.0.20" - resolved "https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz#1768b5522d1172754f5d0c9b02de3af6be506a43" - integrity sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg== +compute-scroll-into-view@3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-3.0.3.tgz#c418900a5c56e2b04b885b54995df164535962b1" + integrity sha512-nadqwNxghAGTamwIqQSG433W6OADZx2vCo3UXHNrzTRHK/htu+7+L0zhjEoaeaQVNAi3YgqWDv8+tzf0hRfR+A== concat-map@0.0.1: version "0.0.1" @@ -4089,6 +4665,11 @@ convert-source-map@^1.5.0, convert-source-map@^1.7.0: resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + copy-to-clipboard@3.3.3: version "3.3.3" resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz#55ac43a1db8ae639a4bd99511c148cdd1b83a1b0" @@ -4103,21 +4684,6 @@ core-js-compat@^3.31.0: dependencies: browserslist "^4.21.10" -cosmiconfig-typescript-loader@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.3.0.tgz#c4259ce474c9df0f32274ed162c0447c951ef073" - integrity sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q== - -cosmiconfig@8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.0.0.tgz#e9feae014eab580f858f8a0288f38997a7bebe97" - integrity sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ== - dependencies: - import-fresh "^3.2.1" - js-yaml "^4.1.0" - parse-json "^5.0.0" - path-type "^4.0.0" - cosmiconfig@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" @@ -4129,10 +4695,15 @@ cosmiconfig@^7.0.0: path-type "^4.0.0" yaml "^1.10.0" -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== +cosmiconfig@^8.1.0, cosmiconfig@^8.1.3: + version "8.3.6" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" + integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== + dependencies: + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + path-type "^4.0.0" cross-fetch@^3.1.5: version "3.1.6" @@ -4229,11 +4800,6 @@ deep-is@^0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== -deepmerge@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" - integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA== - deepmerge@^4.2.2: version "4.3.1" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" @@ -4315,11 +4881,6 @@ detect-node@^2.0.4, detect-node@^2.1.0: resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -4376,6 +4937,19 @@ electron-to-chromium@^1.4.477: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.523.tgz#f82f99243c827df05c26776d49712cb284972df6" integrity sha512-9AreocSUWnzNtvLcbpng6N+GkXnCcBR80IQkxRC9Dfdyg4gaWNUPBujAHUpKkiUkoSoR9UlhA4zD/IgBklmhzg== +elliptic@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -4391,6 +4965,13 @@ emojis-list@^3.0.0: resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== +encoding@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + enhanced-resolve@^5.10.0: version "5.12.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634" @@ -4756,6 +5337,42 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +ethers@^5.7.2: + version "5.7.2" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" + integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== + dependencies: + "@ethersproject/abi" "5.7.0" + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/abstract-signer" "5.7.0" + "@ethersproject/address" "5.7.0" + "@ethersproject/base64" "5.7.0" + "@ethersproject/basex" "5.7.0" + "@ethersproject/bignumber" "5.7.0" + "@ethersproject/bytes" "5.7.0" + "@ethersproject/constants" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/hash" "5.7.0" + "@ethersproject/hdnode" "5.7.0" + "@ethersproject/json-wallets" "5.7.0" + "@ethersproject/keccak256" "5.7.0" + "@ethersproject/logger" "5.7.0" + "@ethersproject/networks" "5.7.1" + "@ethersproject/pbkdf2" "5.7.0" + "@ethersproject/properties" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@ethersproject/random" "5.7.0" + "@ethersproject/rlp" "5.7.0" + "@ethersproject/sha2" "5.7.0" + "@ethersproject/signing-key" "5.7.0" + "@ethersproject/solidity" "5.7.0" + "@ethersproject/strings" "5.7.0" + "@ethersproject/transactions" "5.7.0" + "@ethersproject/units" "5.7.0" + "@ethersproject/wallet" "5.7.0" + "@ethersproject/web" "5.7.1" + "@ethersproject/wordlists" "5.7.0" + external-editor@^3.0.3: version "3.1.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" @@ -4946,19 +5563,6 @@ form-data@^3.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" -formik@^2.2.9: - version "2.2.9" - resolved "https://registry.yarnpkg.com/formik/-/formik-2.2.9.tgz#8594ba9c5e2e5cf1f42c5704128e119fc46232d0" - integrity sha512-LQLcISMmf1r5at4/gyJigGn0gOwFbeEAlji+N9InZF6LIMXnFNkO42sCI8Jt84YZggpD4cPWObAZaxpEFtSzNA== - dependencies: - deepmerge "^2.1.1" - hoist-non-react-statics "^3.3.0" - lodash "^4.17.21" - lodash-es "^4.17.21" - react-fast-compare "^2.0.1" - tiny-warning "^1.0.2" - tslib "^1.10.0" - framer-motion@^10.5.0: version "10.5.0" resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-10.5.0.tgz#0519193acdd60669ec27fde948a389d8e1f5251b" @@ -5073,6 +5677,11 @@ get-own-enumerable-property-symbols@^3.0.0: resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== +get-starknet-core@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/get-starknet-core/-/get-starknet-core-3.2.0.tgz#44cabcbd573262340d575cb6b9a38e469a8029ed" + integrity sha512-SZhxtLlKoPKLZ2H3l9WIU7CiNmkL3qLWGksALmvZdAXa/9PykYfLtvIB5B8A2UZMpf2ojTZlWLfuo1KhgmVobA== + get-symbol-description@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" @@ -5086,7 +5695,7 @@ get-tsconfig@^4.2.0: resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.4.0.tgz#64eee64596668a81b8fce18403f94f245ee0d4e5" integrity sha512-0Gdjo/9+FzsYhXCEFueo2aY1z1tpXrxWZzP7k8ul9qt1U5o8rYJwTJYmaeHdrVosYIVYkOy2iwCJ9FdpocJhPQ== -glob-parent@^5.1.2, glob-parent@~5.1.2: +glob-parent@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -5100,6 +5709,11 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + glob@7.1.7: version "7.1.7" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" @@ -5194,7 +5808,7 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" -graceful-fs@^4.1.6, graceful-fs@^4.2.0: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -5209,21 +5823,21 @@ grapheme-splitter@^1.0.4: resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== -graphql-config@^4.4.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/graphql-config/-/graphql-config-4.5.0.tgz#257c2338950b8dce295a27f75c5f6c39f8f777b2" - integrity sha512-x6D0/cftpLUJ0Ch1e5sj1TZn6Wcxx4oMfmhaG9shM0DKajA9iR+j1z86GSTQ19fShbGvrSSvbIQsHku6aQ6BBw== - dependencies: - "@graphql-tools/graphql-file-loader" "^7.3.7" - "@graphql-tools/json-file-loader" "^7.3.7" - "@graphql-tools/load" "^7.5.5" - "@graphql-tools/merge" "^8.2.6" - "@graphql-tools/url-loader" "^7.9.7" - "@graphql-tools/utils" "^9.0.0" - cosmiconfig "8.0.0" - jiti "1.17.1" - minimatch "4.2.3" - string-env-interpolation "1.0.1" +graphql-config@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/graphql-config/-/graphql-config-5.0.2.tgz#7e962f94ccddcc2ee0aa71d75cf4491ec5092bdb" + integrity sha512-7TPxOrlbiG0JplSZYCyxn2XQtqVhXomEjXUmWJVSS5ET1nPhOJSsIb/WTwqWhcYX6G0RlHXSj9PLtGTKmxLNGg== + dependencies: + "@graphql-tools/graphql-file-loader" "^8.0.0" + "@graphql-tools/json-file-loader" "^8.0.0" + "@graphql-tools/load" "^8.0.0" + "@graphql-tools/merge" "^9.0.0" + "@graphql-tools/url-loader" "^8.0.0" + "@graphql-tools/utils" "^10.0.0" + cosmiconfig "^8.1.0" + jiti "^1.18.2" + minimatch "^4.2.3" + string-env-interpolation "^1.0.1" tslib "^2.4.0" graphql-request@^5.0.0: @@ -5251,10 +5865,15 @@ graphql-tag@^2.11.0: dependencies: tslib "^2.1.0" -graphql-ws@5.12.1: - version "5.12.1" - resolved "https://registry.yarnpkg.com/graphql-ws/-/graphql-ws-5.12.1.tgz#c62d5ac54dbd409cc6520b0b39de374b3d59d0dd" - integrity sha512-umt4f5NnMK46ChM2coO36PTFhHouBrK9stWWBczERguwYrGnPNxJ9dimU6IyOBfOkC6Izhkg4H8+F51W/8CYDg== +graphql-ws@^5.14.0: + version "5.14.0" + resolved "https://registry.yarnpkg.com/graphql-ws/-/graphql-ws-5.14.0.tgz#766f249f3974fc2c48fae0d1fb20c2c4c79cd591" + integrity sha512-itrUTQZP/TgswR4GSSYuwWUzrE/w5GhbwM2GX3ic2U7aw33jgEsayfIlvaj7/GcIvZgNMzsPTrE5hqPuFUiE5g== + +graphql-ws@^5.14.1: + version "5.14.1" + resolved "https://registry.yarnpkg.com/graphql-ws/-/graphql-ws-5.14.1.tgz#d05dba9c2cbf1582c990a2dfec4b8f6a55d99da4" + integrity sha512-aqkls1espsygP1PfkAuuLIV96IbztQ6EaADse97pw8wRIMT3+AL/OYfS8V2iCRkc0gzckitoDRGCQEdnySggiA== graphql@^16.3.0: version "16.6.0" @@ -5307,6 +5926,14 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" +hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + header-case@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/header-case/-/header-case-2.0.4.tgz#5a42e63b55177349cf405beb8d775acabb92c063" @@ -5315,7 +5942,16 @@ header-case@^2.0.4: capital-case "^1.0.4" tslib "^2.0.3" -hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.1: +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hoist-non-react-statics@^3.3.1: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== @@ -5327,18 +5963,18 @@ howler@^2.2.3: resolved "https://registry.yarnpkg.com/howler/-/howler-2.2.3.tgz#a2eff9b08b586798e7a2ee17a602a90df28715da" integrity sha512-QM0FFkw0LRX1PR8pNzJVAY25JhIWvbKMBFM4gqk+QdV+kPXOhleWGCB6AiAF/goGjIHK2e/nIElplvjQwhr0jg== -http-proxy-agent@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-6.1.1.tgz#dc04f1a84e09511740cfbd984a56f86cc42e4277" - integrity sha512-JRCz+4Whs6yrrIoIlrH+ZTmhrRwtMnmOHsHn8GFEn9O2sVfSE+DAZ3oyyGIKF8tjJEeSJmP89j7aTjVsSqsU0g== +http-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz#e9096c5afd071a3fce56e6252bb321583c124673" + integrity sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ== dependencies: agent-base "^7.1.0" debug "^4.3.4" -https-proxy-agent@^6.0.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-6.2.1.tgz#0965ab47371b3e531cf6794d1eb148710a992ba7" - integrity sha512-ONsE3+yfZF2caH5+bJlcddtWqNI3Gvs5A38+ngvljxaBiRXRswym2c7yf8UAeFpRFKjFNHIFEHqR/OLAWJzyiA== +https-proxy-agent@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz#e2645b846b90e96c6e6f347fb5b2e41f1590b09b" + integrity sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA== dependencies: agent-base "^7.0.2" debug "4" @@ -5350,6 +5986,13 @@ iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + idb@^7.0.1: version "7.1.1" resolved "https://registry.yarnpkg.com/idb/-/idb-7.1.1.tgz#d910ded866d32c7ced9befc5bfdf36f572ced72b" @@ -5365,12 +6008,17 @@ ignore@^5.2.0: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== +immutable@^4.3.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.4.tgz#2e07b33837b4bb7662f288c244d1ced1ef65a78f" + integrity sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA== + immutable@~3.7.6: version "3.7.6" resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.7.6.tgz#13b4d3cb12befa15482a26fe1b2ebae640071e4b" integrity sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw== -import-fresh@^3.0.0, import-fresh@^3.2.1: +import-fresh@^3.0.0, import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -5480,13 +6128,6 @@ is-bigint@^1.0.1: dependencies: has-bigints "^1.0.1" -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - is-boolean-object@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" @@ -5536,7 +6177,7 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-glob@4.0.3, is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: +is-glob@4.0.3, is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== @@ -5782,10 +6423,10 @@ jest-worker@^27.4.5: merge-stream "^2.0.0" supports-color "^8.0.0" -jiti@1.17.1: - version "1.17.1" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.17.1.tgz#264daa43ee89a03e8be28c3d712ccc4eb9f1e8ed" - integrity sha512-NZIITw8uZQFuzQimqjUxIrIcEdxYDFIe/0xYfIlVXTkiBjjyBEvgasj5bb0/cHtPRD/NziPbT312sFrkI5ALpw== +jiti@^1.17.1, jiti@^1.18.2: + version "1.20.0" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.20.0.tgz#2d823b5852ee8963585c8dd8b7992ffc1ae83b42" + integrity sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA== jose@^4.11.4: version "4.14.4" @@ -5975,11 +6616,6 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" -lodash-es@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" - integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== - lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" @@ -6077,11 +6713,6 @@ make-dir@^3.0.2, make-dir@^3.1.0: dependencies: semver "^6.0.0" -make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - map-cache@^0.2.0: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -6110,7 +6741,15 @@ meros@^1.2.1: resolved "https://registry.yarnpkg.com/meros/-/meros-1.3.0.tgz#c617d2092739d55286bf618129280f362e6242f2" integrity sha512-2BNGOimxEz5hmjUG2FwoxCt5HN7BXdaWyFqEwxPTrJzVdABtrL4TiHTcsWSFAxPQ/tOnEaQEJh3qWq71QRMY+w== -micromatch@^4.0.4: +micro-starknet@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/micro-starknet/-/micro-starknet-0.2.3.tgz#ff4e7caf599255d2110e9c57bb483dfaf493ccb3" + integrity sha512-6XBcC+GerlwJSR4iA0VaeXtS2wrayWFcA4PEzrJPMuFmWCaUtuGIq5K/DB5F/XgnL54/zl2Bxo690Lj7mYVA8A== + dependencies: + "@noble/curves" "~1.0.0" + "@noble/hashes" "~1.3.0" + +micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== @@ -6140,12 +6779,15 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -minimatch@4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-4.2.3.tgz#b4dcece1d674dee104bb0fb833ebb85a78cbbca6" - integrity sha512-lIUdtK5hdofgCTu3aT0sOaHsYR37viUuIc0rwnnDXImbwFRcumyLMeZaM0t0I/fgxS6s6JMfu0rLD1Wz9pv1ng== - dependencies: - brace-expansion "^1.1.7" +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" @@ -6154,6 +6796,13 @@ minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" +minimatch@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-4.2.3.tgz#b4dcece1d674dee104bb0fb833ebb85a78cbbca6" + integrity sha512-lIUdtK5hdofgCTu3aT0sOaHsYR37viUuIc0rwnnDXImbwFRcumyLMeZaM0t0I/fgxS6s6JMfu0rLD1Wz9pv1ng== + dependencies: + brace-expansion "^1.1.7" + minimatch@^5.0.1: version "5.1.6" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" @@ -6166,6 +6815,11 @@ minimist@^1.2.0, minimist@^1.2.6: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== +mobx@^6.10.2, mobx@^6.7.0: + version "6.10.2" + resolved "https://registry.yarnpkg.com/mobx/-/mobx-6.10.2.tgz#96e123deef140750360ca9a5b02a8b91fbffd4d9" + integrity sha512-B1UGC3ieK3boCjnMEcZSwxqRDMdzX65H/8zOHbuTY8ZhvrIjTUoLRR2TP2bPqIgYRfb3+dUigu8yMZufNjn0LQ== + ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" @@ -6210,30 +6864,29 @@ next-pwa@^5.6.0: workbox-webpack-plugin "^6.5.4" workbox-window "^6.5.4" -next@13.2.4: - version "13.2.4" - resolved "https://registry.yarnpkg.com/next/-/next-13.2.4.tgz#2363330392b0f7da02ab41301f60857ffa7f67d6" - integrity sha512-g1I30317cThkEpvzfXujf0O4wtaQHtDCLhlivwlTJ885Ld+eOgcz7r3TGQzeU+cSRoNHtD8tsJgzxVdYojFssw== +next@^13.5.3: + version "13.5.3" + resolved "https://registry.yarnpkg.com/next/-/next-13.5.3.tgz#631efcbcc9d756c610855d9b94f3d8c4e73ee131" + integrity sha512-4Nt4HRLYDW/yRpJ/QR2t1v63UOMS55A38dnWv3UDOWGezuY0ZyFO1ABNbD7mulVzs9qVhgy2+ppjdsANpKP1mg== dependencies: - "@next/env" "13.2.4" - "@swc/helpers" "0.4.14" + "@next/env" "13.5.3" + "@swc/helpers" "0.5.2" + busboy "1.6.0" caniuse-lite "^1.0.30001406" postcss "8.4.14" styled-jsx "5.1.1" + watchpack "2.4.0" + zod "3.21.4" optionalDependencies: - "@next/swc-android-arm-eabi" "13.2.4" - "@next/swc-android-arm64" "13.2.4" - "@next/swc-darwin-arm64" "13.2.4" - "@next/swc-darwin-x64" "13.2.4" - "@next/swc-freebsd-x64" "13.2.4" - "@next/swc-linux-arm-gnueabihf" "13.2.4" - "@next/swc-linux-arm64-gnu" "13.2.4" - "@next/swc-linux-arm64-musl" "13.2.4" - "@next/swc-linux-x64-gnu" "13.2.4" - "@next/swc-linux-x64-musl" "13.2.4" - "@next/swc-win32-arm64-msvc" "13.2.4" - "@next/swc-win32-ia32-msvc" "13.2.4" - "@next/swc-win32-x64-msvc" "13.2.4" + "@next/swc-darwin-arm64" "13.5.3" + "@next/swc-darwin-x64" "13.5.3" + "@next/swc-linux-arm64-gnu" "13.5.3" + "@next/swc-linux-arm64-musl" "13.5.3" + "@next/swc-linux-x64-gnu" "13.5.3" + "@next/swc-linux-x64-musl" "13.5.3" + "@next/swc-win32-arm64-msvc" "13.5.3" + "@next/swc-win32-ia32-msvc" "13.5.3" + "@next/swc-win32-x64-msvc" "13.5.3" no-case@^3.0.4: version "3.0.4" @@ -6279,11 +6932,6 @@ normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - nullthrows@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" @@ -6491,7 +7139,7 @@ parse-filepath@^1.0.2: map-cache "^0.2.0" path-root "^0.1.1" -parse-json@^5.0.0: +parse-json@^5.0.0, parse-json@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== @@ -6564,7 +7212,7 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1: +picomatch@^2.2.2, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -6638,6 +7286,11 @@ prop-types@^15.6.2, prop-types@^15.8.1: object-assign "^4.1.1" react-is "^16.13.1" +proxy-deep@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/proxy-deep/-/proxy-deep-3.1.1.tgz#481f8e35f528ec734c41eae3b391e317599a5282" + integrity sha512-kppbvLUNJ4IOMZds9/4gz/rtT5OFiesy3XosLsgMKlF3vb6GA5Y3ptyDlzKLcOcUBW+zaY+RiMINTsgE+O6e+Q== + punycode@^1.3.2: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" @@ -6687,20 +7340,15 @@ react-dom@18.2.0: loose-envify "^1.1.0" scheduler "^0.23.0" -react-fast-compare@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb" - integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA== +react-fast-compare@3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz#929a97a532304ce9fee4bcae44234f1ce2c21d49" + integrity sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ== -react-fast-compare@^2.0.1: - version "2.0.4" - resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9" - integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== - -react-focus-lock@^2.9.2: - version "2.9.4" - resolved "https://registry.yarnpkg.com/react-focus-lock/-/react-focus-lock-2.9.4.tgz#4753f6dcd167c39050c9d84f9c63c71b3ff8462e" - integrity sha512-7pEdXyMseqm3kVjhdVH18sovparAzLg5h6WvIx7/Ck3ekjhrrDMEegHSa3swwC8wgfdd7DIdUVRGeiHT9/7Sgg== +react-focus-lock@^2.9.4: + version "2.9.5" + resolved "https://registry.yarnpkg.com/react-focus-lock/-/react-focus-lock-2.9.5.tgz#8a82f4f0128cccc27b9e77a4472e8a22f1b52189" + integrity sha512-h6vrdgUbsH2HeD5I7I3Cx1PPrmwGuKYICS+kB9m+32X/9xHRrAbxgvaBpG7BFBN9h3tO+C3qX1QAVESmi4CiIA== dependencies: "@babel/runtime" "^7.0.0" focus-lock "^0.11.6" @@ -6723,7 +7371,7 @@ react-query@^3.39.2: broadcast-channel "^3.4.1" match-sorter "^6.0.2" -react-remove-scroll-bar@^2.3.3: +react-remove-scroll-bar@^2.3.4: version "2.3.4" resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz#53e272d7a5cb8242990c7f144c44d8bd8ab5afd9" integrity sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A== @@ -6731,12 +7379,12 @@ react-remove-scroll-bar@^2.3.3: react-style-singleton "^2.2.1" tslib "^2.0.0" -react-remove-scroll@^2.5.5: - version "2.5.5" - resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz#1e31a1260df08887a8a0e46d09271b52b3a37e77" - integrity sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw== +react-remove-scroll@^2.5.6: + version "2.5.6" + resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.5.6.tgz#7510b8079e9c7eebe00e65a33daaa3aa29a10336" + integrity sha512-bO856ad1uDYLefgArk559IzUNeQ6SWH4QnrevIUjH+GczV56giDfl3h0Idptf2oIKxQmd1p9BN25jleKodTALg== dependencies: - react-remove-scroll-bar "^2.3.3" + react-remove-scroll-bar "^2.3.4" react-style-singleton "^2.2.1" tslib "^2.1.0" use-callback-ref "^1.3.0" @@ -6767,13 +7415,6 @@ readable-stream@^3.4.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - regenerate-unicode-properties@^10.1.0: version "10.1.1" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" @@ -6994,6 +7635,13 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +rxjs@7.5.5: + version "7.5.5" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.5.tgz#2ebad89af0f560f460ad5cc4213219e1f7dd4e9f" + integrity sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw== + dependencies: + tslib "^2.1.0" + rxjs@^7.5.5: version "7.8.1" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" @@ -7025,7 +7673,7 @@ safe-regex-test@^1.0.0: get-intrinsic "^1.1.3" is-regex "^1.1.4" -"safer-buffer@>= 2.1.2 < 3": +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -7055,6 +7703,11 @@ schema-utils@^3.1.1: ajv "^6.12.5" ajv-keywords "^3.5.2" +scrypt-js@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + scuid@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/scuid/-/scuid-1.1.0.tgz#d3f9f920956e737a60f72d0e4ad280bf324d5dab" @@ -7238,10 +7891,10 @@ sponge-case@^1.0.1: dependencies: tslib "^2.0.3" -starknet@^5.19.6: - version "5.19.6" - resolved "https://registry.yarnpkg.com/starknet/-/starknet-5.19.6.tgz#61e43e083888ef64598473bc2e4bd3e1e07fe9d4" - integrity sha512-MyO48QKu+d8CBH/7ruI/RPrDwoFRNV/uxql2nBeA4ccqBXs698FkeGkMhZv++VIwf1MRajHcTM91KuyZQMyMLw== +starknet@^5.19.5: + version "5.19.5" + resolved "https://registry.yarnpkg.com/starknet/-/starknet-5.19.5.tgz#59a2e0f707dc1f64fbe9894195984ae97f623449" + integrity sha512-S7V4ifyYd+ApsIwYTd7YA5U2Px+NZkCsQPnmgY/wkc5LLFKhYMNpzHQ5nIA15p70AwtSXCcsEBnHNRBOuci13Q== dependencies: "@noble/curves" "~1.2.0" "@scure/starknet" "~0.3.0" @@ -7263,7 +7916,7 @@ streamsearch@^1.1.0: resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== -string-env-interpolation@1.0.1, string-env-interpolation@^1.0.1: +string-env-interpolation@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/string-env-interpolation/-/string-env-interpolation-1.0.1.tgz#ad4397ae4ac53fe6c91d1402ad6f6a52862c7152" integrity sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg== @@ -7515,11 +8168,6 @@ tiny-invariant@^1.0.6: resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642" integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw== -tiny-warning@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" - integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== - title-case@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/title-case/-/title-case-3.0.3.tgz#bc689b46f02e411f1d1e1d081f7c3deca0489982" @@ -7568,25 +8216,6 @@ ts-log@^2.2.3: resolved "https://registry.yarnpkg.com/ts-log/-/ts-log-2.2.5.tgz#aef3252f1143d11047e2cb6f7cfaac7408d96623" integrity sha512-PGcnJoTBnVGy6yYNFxWVNkdcAuAMstvutN9MgDJIV6L0oG8fB+ZNNy1T+wJzah8RPGor1mZuPQkVfXNDpy9eHA== -ts-node@^10.9.1: - version "10.9.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" - integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== - dependencies: - "@cspotcode/source-map-support" "^0.8.0" - "@tsconfig/node10" "^1.0.7" - "@tsconfig/node12" "^1.0.7" - "@tsconfig/node14" "^1.0.0" - "@tsconfig/node16" "^1.0.2" - acorn "^8.4.1" - acorn-walk "^8.1.1" - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - v8-compile-cache-lib "^3.0.1" - yn "3.1.1" - tsconfig-paths@^3.14.1: version "3.14.2" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" @@ -7602,7 +8231,7 @@ tslib@2.4.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== -tslib@^1.10.0, tslib@^1.8.1: +tslib@^1.8.1: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== @@ -7612,7 +8241,7 @@ tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.5.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== -tslib@^2.3.1: +tslib@^2.3.1, tslib@~2.5.0: version "2.5.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.3.tgz#24944ba2d990940e6e982c4bea147aba80209913" integrity sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w== @@ -7690,7 +8319,12 @@ typed-array-length@^1.0.4: for-each "^0.3.3" is-typed-array "^1.1.9" -typescript@^4.8.4, typescript@^4.9.5: +typescript@5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" + integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== + +typescript@^4.9.5: version "4.9.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== @@ -7804,18 +8438,16 @@ url-join@^4.0.1: resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== -urlpattern-polyfill@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-6.0.2.tgz#a193fe773459865a2a5c93b246bb794b13d07256" - integrity sha512-5vZjFlH9ofROmuWmXM9yj2wljYKgWstGwe8YTyiqM7hVum/g9LyCizPZtb3UqsuppVwety9QJmfc42VggLpTgg== - dependencies: - braces "^3.0.2" - urlpattern-polyfill@^8.0.0: version "8.0.2" resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-8.0.2.tgz#99f096e35eff8bf4b5a2aa7d58a1523d6ebc7ce5" integrity sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ== +urlpattern-polyfill@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-9.0.0.tgz#bc7e386bb12fd7898b58d1509df21d3c29ab3460" + integrity sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g== + use-callback-ref@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.0.tgz#772199899b9c9a50526fedc4993fc7fa1f7e32d5" @@ -7836,7 +8468,7 @@ use-sidecar@^1.1.2: detect-node-es "^1.1.0" tslib "^2.0.0" -use-sync-external-store@1.2.0: +use-sync-external-store@1.2.0, use-sync-external-store@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== @@ -7846,16 +8478,35 @@ util-deprecate@^1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -v8-compile-cache-lib@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" - integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== - value-or-promise@^1.0.11, value-or-promise@^1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/value-or-promise/-/value-or-promise-1.0.12.tgz#0e5abfeec70148c78460a849f6b003ea7986f15c" integrity sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q== +viem@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/viem/-/viem-1.6.0.tgz#8befa678c3ac79b9558dfd1708130b2ecb1994f4" + integrity sha512-ae9Twkd0q2Qlj4yYpWjb4DzYAhKY0ibEpRH8FJaTywZXNpTjFidSdBaT0CVn1BaH7O7cnX4/O47zvDUMGJD1AA== + dependencies: + "@adraffy/ens-normalize" "1.9.0" + "@noble/curves" "1.1.0" + "@noble/hashes" "1.3.0" + "@scure/bip32" "1.3.0" + "@scure/bip39" "1.2.0" + "@types/ws" "^8.5.4" + "@wagmi/chains" "1.6.0" + abitype "0.9.3" + isomorphic-ws "5.0.0" + ws "8.12.0" + +watchpack@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" + integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + wcwidth@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" @@ -8172,11 +8823,31 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@8.13.0, ws@^8.12.0: +ws@7.4.6: + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + +ws@8.12.0: + version "8.12.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.12.0.tgz#485074cc392689da78e1828a9ff23585e06cddd8" + integrity sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig== + +ws@8.14.1: + version "8.14.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.1.tgz#4b9586b4f70f9e6534c7bb1d3dc0baa8b8cf01e0" + integrity sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A== + +ws@^8.12.0: version "8.13.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== +ws@^8.13.0: + version "8.14.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.2.tgz#6c249a806eb2db7a20d26d51e7709eab7b2e6c7f" + integrity sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g== + y18n@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" @@ -8207,6 +8878,11 @@ yaml@^1.10.0: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== +yaml@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.2.tgz#f522db4313c671a0ca963a75670f1c12ea909144" + integrity sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg== + yargs-parser@^18.1.2: version "18.1.3" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" @@ -8250,16 +8926,21 @@ yargs@^17.0.0, yargs@^17.7.2: y18n "^5.0.5" yargs-parser "^21.1.1" -yn@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +zod@3.21.4: + version "3.21.4" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.21.4.tgz#10882231d992519f0a10b5dd58a38c9dabbb64db" + integrity sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw== + +zod@^3.21.4: + version "3.22.2" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.2.tgz#3add8c682b7077c05ac6f979fea6998b573e157b" + integrity sha512-wvWkphh5WQsJbVk1tbx1l1Ly4yg+XecD+Mq280uBGt9wa5BKSWf4Mhp6GmrkPixhMxmabYY7RbzlwVP32pbGCg== + zustand@^4.3.7: version "4.3.7" resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.3.7.tgz#501b1f0393a7f1d103332e45ab574be5747fedce"

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�mBn5}u ze&FtN0L+N}b7)&BVkGc+HN;3K4}0Yuh1-_P^D2hh9}_vd8d_Oao@OL3&C%~+_*jNb zSBS^2Ow_>YpWOqQOQ%3nMI9Y)v?_+g))8sIQIC*2Ur8YYx5Y`f`)od8UE=4$C9hE7 zsYE>kS{pA_%fLqrR9s%-VJJogEVh>&DeoxkZO6lfF{#kURpM6Y=bab8@AC-lPBCf7 zN47P>QP*+k2@QbP=Z>gi@<-;ZT*#Fg2X`?Fh6K1e5;H~x76sG`o5fz{3JUdignGd( z@lyqkO8K9b51@I#44K+2_+0v}$kHA@{vy30l&ppG;)Mdy%Rzh?p>`Z?`9-?9(3{dt zCXF0s8Ro$(N-Tr*u>>Ln11)1q=Ja5Y>0p2$94Of8QI4>?Ovz{B2fScpv-tkP!4XD! zbPS#ROPfKVMk}o?{da(`xFMiAC!q@@Cz$IK^$l=wLWVGBz&&cFFKwdXN1EQzSDtl= zg_dvc__akUpJa&}5BW>uuAn;3?3D&VWOF2OdCFYL@Qy`yUvJY$`%8$?hDmcO*$B(0kUxZU#;Nnt z$(q22)OZw1LV+}o%>xpm%oTc-Kp?|A7&wo`vNdV|T#mvE$1n*}fDCUcIf42EVil;^H1~LA3Uc zR@NfAfTB>UK_-?YCGfaepLJ=5{Sn-vq=SU1Nn`R}mvodHpZodmOMu z-v&7$6aLcHsG)!t#_4el!sb)FMvooQW1_f~Mw_KEUnz50OYfwNAaN^nf3@ccnM6hx zK^&wZ0k=ue>EOmWH*6b(w-6)wT+ONC=;J#*78vO4jVz)9^x4Nbq1t_rc;7O(L%os` zvWS9~x5O*zg2+FkBo%VhDfA?wl8=Dw5#Sv}k6g&er}2I+u8`00B6$2*I)l(3!e+=L z?cqp_jN?57B;Y|33<*IM0whckAXYJ!`7r|YPitq@q(`ftQbMd*n5R#0IPh$PK&1Qw{)v2gV*1@D)vgi{H3Ho_Spi4^y zwL}L7NdnDscc1~SRzXnBQ>3EN+#cwKGwy20Nw}4o$O^3-EbhLTKMNZr;lR80zFQzU zBNZe;&OCp?+=`L*S7=m}2x_FoGfZbK&;{cdqNTYZj#j}S8sH)DIyyz}UMC!X_CxYo zKsJSvH|hn4B9%jzCTRHc6UyiHL;K-IkZ5^N9m9{IK%9(*W6V!}d5!gACpcf`zeM6z z=w;u2c0{Z9g-3>cYxB?zG-fV5c!`2%mlHXdTivbTPGG7|fz#cuRSUw|)dQ|omwJtLP|_`OXXP*+_Y{vc+=3*aB3L=wM7Z)<2_ zr?GQj!X%2f9)&&*PJr+@@p-_62+i8XegvcGX|mwCy6xcXv;#A9> zSU(RFW-+X?aL%Ht&wu8=HRzN?Q&kTYpUXp_YhuC=rw|3CpE6MjO!j6J!Ic2)T zG3DxU((*B9mz@vYk?(^gbGUE7!}EGjYF6g*)~K*6jEr9#*K#gTjxTc*)p0QA&9kF?`FxrDldpBod(;5`Vm0BBh?T&*ucI z!bW?en z8S>@JNSH2#ymvc$BTP+9hIA4~w-RK`?sbykLxcXew8^`O%1WFl+vm?@pV@98mK;d|fbJ4+s z@IM`OmouDrT~5|n2{kzVP7gS{oly1ML74Z@{P+ydp^NKKA@4a|4ydg;ckkC;`-yef zeS}-qe6F6w>&cpLd;%tA+~lKa3q=Qp*kO!^ziA(1h6xX1X;eX)ger6ig{_e&OsY{d-^-feEJHXAG7+5b4b10fzCt*g2KGGfr=%$-J) zeerr`=g+fz@Ap61=9-eQ875`izZ%(BQ$)gm9^edC8EmG>6_FS)Ty!;%=Bk09y^Zd{$@l~(zIn#jh97!C zA>v_)6q%DUy!ZotHZv(}MDNf~yjQ>53(}yRn0876w=1yD1vF&VuTai}Wr`V4qni%T z?0F748(P8I)dyN_0^ISbPe7}*XWiX*-CGclN@C^#usbaU|9bZ&IDhu+Ch~IQSo*pF1Xf%dF%Wo%eJgZ%#WGfO(edev3q&2!n9_yyz4{5kN0XMUY`J2MyegX7!Yg}=k3jJL$C&^Io11K} z+qJgjnP<1%@wrc|`|i>QwvDtOH7b2UfS5dQzU&C=d?#gOk>K+lC3b4>w17uKqUByY zv;~{tP)GqcDHem9^V8PE(S!^hBZK1*Z_jhADy6@=B*NgBBE=S5(cVj#+%=WR!0F#x$h zM!(=CXr3(yiPKXd|BI`jv7!df{qqD}OVB_M`a`h)-Ey|-!=oF1@Z=0E|E+)+MTGv* z&_q<~OC>)rlj|^r8^6S(&&AYxCide9&c-qlDeJK~CNA6czg*&0=x_b#MXG$zlg7jp zoD8$(EixW@s~nVi6@At$@gOlqBqak`p_W6ZxeZPvpEg$dTMB-->Cp`yyNjNSjt?PD zhUdccGGtNPzdi0NxE$LP}6e-$Tzmz=WW~*G*&Ock8bq z*1U|w(p+S+*FaCG7glMP!E~a`5&o74^_>WL(QCNWfhKs_%0#>N!K`-Z^*RfJMOHk};iagM3Arr8%uNAyOAxTc9p=CSj3=O0& z%A%dz5SC7ymMkC)5Sd&YZ}h~2R!?02ab7ll=Q|a@vwPMWbOtlNrh$?WpU}s11HhO~ zP{vDYs?HUksyGTO@48{s{lqak)+%OVjWBb?eCT*{7c~|qWn>vE5lTq{Nd%@N#*rWF z1HI6u(}Gtq9|kxlywd#^d^P>EwD&oZS+xWW(AU@ow$^@lc-B4J;1YzUwPLM!Fg6YW zwM1_8yZkWRQ$|x%BOq+9UME!izc*pZ3L_-XBJg^@4YcW6KCUg}^IveykZYxM9m2K5 zYx6|HP>A^Wc;t?TqT*bwMF0}*{68HlE&9XnerFOh(P?x)o~ahSOfs=4JWg*s6Vq*)W8C0{x zJC$fD1l?h771l6jHDf**L%c$#>~3U0&C$+-7I!n4ea&#* zW22nM^gV(Wc%4qrX%eAbI{+CB3&-3SASB~ph1LXf6**MNqcm{cB%bc1%uramap{n| z-$ z>;<3SPs;)8&Yg$sl}1R*&*JX_*&&la?KFdyUII^!=blh{fDUO0FU2Qyg*ZOhofhd9rrnvRkexP1Glj3Sm+sjS`N)sFJVF zGe2GV+QtR*7qA&=S!S4&5e0b`M$_q^TldiBx8E&W+-Dvzg|dSz$1((c^Ft2_Twz8! zVspqiKpXSKxVv4UZMnpALm(8ZiXd!S|)L>TEq3a zG3w>;$+$3G>&4%F>)C&ps?Svyty*^d?%3T9}j!pqViWhf^5-bBD-&>*K%j-e{BujfBhl1h6KFq3D>vW)# zCBht8E{z6y%m!0EP8BY@sd37=DdlmCO~-hjfN+{Kr@2`y^FOk@%s zvc{l8r^jJD@!?@M|GE|C&4mw}WBv{k;Gl19EM=PxoGS_Vd@LiC!nT+G0uMj;W8jEE zbztv4V?s(YBuUah(W;{DCDjQkV$^wzk2RJ8T^&6jAn*}2?}f-V4}ISQDiv$lT(~ag zMSXMOS7=Mk-H*LA@=oZ2g?K|NhAzAC_54r9L}c>cE`Eo9)V9Tie3!Jso$ktl9T#3N z?{{^BRq28xMgvO{7gM6Cexl4v-TUEK)rVkjv%uB!uMfw}HNA)ou+nbT)kzcAyb zm}2Ra2O-9ovRo~%%2_zwIDf|M;m<`K6r!A!Qb?JXP8=I4b%1bf;9D*W9VR&*ox;*x z{0Y~blVfrJpofG8iDN|R(=S1(hdZ~Cf0ouxTCOIda@?hKauW{_ew8%tG&Xg1g1Mo# z;OwE3TMxg#kCn(2+sIoM0`s#s-hW5o#ucB7x##+%T)xDu&}qU?RLq+yMTr0*5oLq5 zmVQ@&TA=n0Doi6()#l>=YE6RzK;pDDdGt%gZ#e94#`M1FY6O;4^7%TvTsI)vht8XbYz z)o`tJ9%Z&df((TDECCzXT>TKus&ePmx58f;YlR2O#vsqFKiESVdy?C zxxz_kUFJ^q^tn?-8iuF11WKhEp!XhO&S^7dfW}XZy>34=)-=ocf)Ik(8WUL~S$;`S`gQcgdi^cK#Q2v^V+kd*Yf;oM@fE%KiV-tq2x)CzhQQm)R zS4oSxxgc|D4jkNB4xf1B3t*g*yP>49d^7RV*TAGqxWu33&PDXO$YzA4NIW?RubWW0 zXDprqY4fvqg~@Q?p3-5RBgTM*WB3ep2sb70gJ1YKF6_-CISgL06!`2>%FiB!8Alhc z@qbH%FcCihQFjIWyduW#XuLwdG|bsYtY^#?&77G>TcCQ#CmE8{KrJ(n*HTEABtc)u z7UpZmTzo8MQ_-uE(JR93jF8SxCp7t;u1_fhVW|-G0J@BdrOrWI&(vPjcLiX zE8s%?1!G<1=@N39LKrWR@%bAf)7Mz??8zPL_wCnM z|Jb9|L7sD8T@Pq-4RAcM2K-DAdhA^UCX_>S(|Pdue3Y*t5mGFRW-r|?9%t$AgWjf2 zcz?$(G#WOK^*Ov7!NeR=_9sX;2L1kmuGZFJ-oAMOeoP$8^(rRM{7l_j8;^f@s3bKlmG_c4z64XLQ^Sgz zuQzL_r^T#vle03a60(yDBy!}a=M!&pW>2%sC5FwRgCD}Te)5B|vKL=2Qrs+CZD8dv zDIbl*uh4nU%&-Dy1lSzoJyIm%a7*bR>^{{F`WzNAm*nsXCsN_#2Jxsv_#BL&pz-}g zZ5kvpI$o(!mCb-st)j_qJPmneqhNy9jjXSx1Vr3_QPv!?JX9qW$Cd8Z9%XK8)XCra*BpL%mf}C!@ zCF}uW7(*ghJ0dJbV`wyEnxP&)dLZUjjhkH^X>{;Pl1fq?Zpgvd=#E`whEa+F_hBciMKC zlo4h2vIQ1%ZB6lSkG--uibmpokXqTZ1)7}?*Se+5eK4TCQYl8Ni#vLFJ4D$i1$O$EU02|S~pf4cQ zg!84XlvR*+cmwM6&`xF{fqDWDBWos>uZgU2a0!fRJ73*Vu=l06;m)<6q}lse9-B=Z zkOd}_#m;c~n^(jhqFR05eOqe1wHs_*ePpHMzhmx{+@=O|z2&x|Pi}l<#+}=qsePls zn4N9DU7def`3#eC=@Pd>7rD4aZN`TSiZh?T$3o^NaUZF$=;rjbX_pykH&xOg*#rqe5OD;(_GnaH!e4>J|p)!_W zgA;PY*mY@z;l;U>Yh-~e4{P}T)q@0+Z$K#H`Ln&eOv$R&!#I*vj004|$zHH-?0%XpT>PJ(o4l{8=H@DuODvPZ51b&?L;-A<6t zknbSlz&!LwS`Hh>vv6Bnz-eMLJfnN5k0^qp!eKQKS@TqhTHxea~&yWX~GfC!=~&;*z+7t`tU+ ziI_W194X(RMSzo(1~sjz)FkU@);n67(P$+Tt&D&Z1~}hcO(Iye2t|kY2VS4$r!9h6 z>TDW+4n|Vt1TUQLNnRPKhh5IYP-fW!7S0(yUid)%7*3#;W%xR7iXL2o^wm@s`1CCy90c_ZR+L z`Ql%nt=#b5uNuGouU}Q}_cfZzUw^rB_ul6lzw_>s1*4tUL%bk`Tm`IZ{4_eH^$3K7 zF%ygT#$0+C7x)3u*v)t3~B+5BRDPWnfQO?nR=*TAL zvwLZH!O>x(6+&Xdu&vcf6nzL*-EjkCs8V9SgoFOt0(YOIC?PEgv<5xhhKl@BlsU?+ zSKqqDQs2+td*QbB^mMawcPRhcWxs8#ReZkL7LkFYWj44ZX7{wAF7tA?h1b)Y0jhd#qV-&Q4R_;NqIesK+w#2rGP7@=i6 z5zoisakBg0{=nq2J0UqKCA=87wKg03Iy+hP#41l7GU|c`BoAV9=1$x5>fcJ%E?&6O zDDL~zp?{P#_cs?LsM)F?6n>e;0X+@}SezE}T&0m4VE0zvHqHf+6fy`Wk%{qox;2hTKU7pI6&nip`TM}}*MLc8a-|Z2 z^HOLso<1`HQWx;`>GW1Y{4yb`2d(ue$Q=h9dJUid_CxDHq6)*UDlJ=;l9Uc^g_}UE zc9=3F*Mgb4&Gz;RuhqR4%OFMRcMmijZ#ZV0mO3rGO&3s^-K`cg39!O=2?aQXtR_h; z@W*A0r~f8l6IoD%B*YVq4dQNcv_EdloxaxUwi%66a>04fPD`-TxU^xJ-Kai~4o$@% zn1xQONyb5Gm>{8a*bNzF^MAgH;E%rYKX4vF!hN;YQ1! z?eDJp@YJ62YEMmBYGOu##42GKE|4(%5fY)wDvoC%E)e4(j1Ugvc+x9OY(wwX*-ez% zxpq2-9c1oecoN4t#?3KluH!@tK_BceP~St#)v$*Et^;Copph190SU9dH@-$;lNEgQTaXf;vG5ZijQ!{d`iWP_b%o+N{Xr2P1s#;kRSn)MNv~36Z!J zx?ClrBqx$EQ<{VhSWll5>}^(HRxqF?%AF2sqIfaxg|**4PgKK-=wvP_L%XQ;fDJN; z@0ue?qH$-D5XPyT0v*8t>e1>YT2Se<;C9-;<+6j6DD}jI3{Xq8Jdlnd0BnQE$shp? zgNSKxJYj~ZKPWbSVT9VwOXDQOF)CBZXn3L8Q3G}va!)(?d;)C-xP4^cle-&`allFv z!Rl)Q39)Wn#8APkcsuvl~>b9(KO)s);owk$dIX z-g&NdEu)n{KlHQzQ~K+Y->>=ZIy`>Q*}eDvr1AN+Uoc*`C6CD)mrPrPMky2<%MG5? z=P}8-v!^ZRFPw&3SKO8x>oN6?R{J^&|lXJwl)hSOiiSWasg)mEKU8C zAcvN%k;O%wsOC=ME|QJZHZ3llPdlYOP4lGp1M_Hnyjs15$IdM%@n~ z^-q>Q0@kix2uOk>e(j6a)957VNx9+@w?Ys2c`Cv%4>(_oK`9C`R*v2=B{>n8%qU+m zLi3z7vVWA&$T5>n&7bQDENI|s*o+@9BrtWDf3zaC>2^7v%bY} zJn*HV=tUNw@nh1f+D~)iTi8Ss^VjN_8R3DIrdl{7ln=nCmrjt-r&ic zxG`n^yoKh)E0)5;Id`s$^%xKNhon`wU==FzMn_@7b*!;Y3MmN#CBniLrkK#3!xei= z&zw7pf94IlgOF5%$Rn;beHXgHLX`MGeJ@`X3L#!!sn->Bb={t;(Ec%!+B;T3ZH)G13R>EcFO`41d2VDbxf~O#e5_ zC8T&q6@>|jZM3G6z(UrRerP*nhACGWX?-^;d1Zns(nth^u`a+-lu8_X0F&TzfOxKI zMoE4YR1wdTWI|FxA#M;={uzxl1Mqffkgu5=R&Nrn<9AR0dbzcswwY43;OSeh6C zR!4F9yEs`;S1aoZ|&o*7>U1DA%lj3`_v_9ixy$~-3d=G-+E5T_-LsTh0@ zgRz$^%2g5Pv(OmyP_X!#ldA<>!d!@01BOwD)t$- z&Le*-!Wr##yUsz{yiBUx`)a!(h=enNP)wvz^fLv-G#;@G*o+-D&5${B>Ztpj4YU@2 z?(1KGw1pXvoSZ(wMKCawAYLLU@=1L@F>;Ch(8cm9F5F>^8tnTdiUB%I*D)=Bj+Ly|)qEu09}gGo9KSVjf!ISzx_*}%j55}}!aglAt039SJw zhWT)-eCZ(1T>QUCDuYV>(^GF1`m8f>T6UT!bUtI03tjpu+}+&`oeeE8b?S`azZ*o& z!!Sz}a}k{=CCL#=(VDwkp|0xepz{n$mJ?4ZqQD`JryM7f|H9GJ#=Lp6ux=|hg-%a< zh1(#}q`1MGF4SINcfGp9==b>GuHw&@mp<`4grp%hJwF?qr@Y0D)eY>)`lGD6PrIS@ zK+}e_MVaIwa*(V_XPXapY;CT)0GcUU@OV6M;k{bp+?fjt$Z5CHY+>p62J2{NKFTaO z3Aul?qN1%tV-Z@$Dv7;}ljfqwxekn|I6Zt(2hAZOF}K7SDX{$E>*2&-_ft-etG|0Q zMdF(F*3$4Cu48><&D0Vlj_;%RTzrY1qr*xaqDZO5m=^`Z$LdBFLlRpt`>KVTYy;L& z_tQxIWqCKuDskGaafLI&m4K5PeL^H|g-(eOm`K?eoj3xy43=3~8vDT3IsiG>&H#I- z4Y181Qp2LciJSz&V-yqGkaT7qQRqjBGWUf19G zN?dl8plo7}qDw~ZR5owQOtvA|KudAa`^E&;q-p7JzU(9rM2gOFWYVB>0Gm5$m7pVD zd-vH6;sAA$ajpoDHAcwBx93OH4L z;01#;k!Fk|Y&K7p1Jh+0R3S@+)-AyBY;Qc74Bw$mZ1ob|h$WiW9Uwvzi(WcWeL}W9 zb6Flb|4{;30mIA*hHnvjk&z*?>_HThozS?%YPW%Nz%kf381Cd^-i_dq(#it*UA*wI zlOcu<&+jkfVQ`!!eRdX`I3tx-OkmtGH7y-F`a0-6^4UG$Ac|X`W}pV5$L4`#tpbu} zrP4*yYxN*cCOt3hR5#9oNlVC%70ifjxo5`z5+;Snl+F}mmoH(DN(NV`dsjT`z{uL~ zs`;j(hO-Sksv{V#LBEfl9i1DW(-%I4oIvl$g4b8u1GeS?KD;B7gv)_xKlA{v{6pTr zsKyLm^~M_jJ^kHK+I_^dCT+!-_iD+!B^A?W&V=))&yBS!K@R+&Fc53GXJju(GUCNW ziU1E5pu z6RMkQOyOR-;f5n5Zp_)?jm}*VBxB_oc0S)1oeMxGf#BW5qo(}F9N$tk$nl)#cy1ay zM_O3qWD^v7NWh}$zT}mUoJT9sz%)e$Ri6i(C!xpQ!Fyc*m&xoUiAoB9FpaJF#V$Vc zAP|1=X7bb1(g{bZj)5W30Jg4v;F;})>^lqufe#TokNE~{d^^#YWrDoUAzwnDnq9m&AYxH9>exxvVCOTG)eB!l7p!H-u7(xjnT?9CMZX@F$Rnb7SOqW|&io=c81%45;GPWfS014!K89eB%3I%N&`iN}hjytF@sYdK3{UjkNCx1L7QcO#*^p4+S3OaGmHf=3fo$ES*Ffad?Yzz zt%KEEhwmFrtm5@u#*BH>M$O}q5ST@!9nV=hDWY6bQXB)!AcaJ0ErExx zaREj`1hhmkXx&xSMh2)Gf^+zu-h9&${ybC(N0n+J=}U8nz)wWEoBbUGviH!M_lPnZ ztkp1^JXx0k(+x9(%5{puQg2nrirC~^(3tO@fcdhDh5|f8NM41mhhW}2Y zjbTt~A$>{~^tbgux+)2Ba&lpywI}L4aPi;3$E82E%4C@9`sNEiD|fh^?C+lX1Drf| zl+_y(!0UE{LMem7m8;h@H#C%_&&y_Sx$_S5{zH3>2=z4|tD^>D`obyTk$R!8v93tJ zaw)K^Y&$t+1t;VpjF((ET4fUR8zw#Pk5;xGe973}-m>X)pZN5~n3VgKeqLjoKjh;T zDuy8uYDYuVMU-{*YgOQNc*8k2*nGv&%6}bonobBak}wVx(2P4JY-&}1xT!ESLbd5qsy>U5Upt! zJF)R{u{W%hYTTCio(Q& zW;|z*gm$<An1Q-m8j8Acy}aT!8vtGBy25a5lsm=21^!i{Gc z7-L^L{Us7gAoJm4yJ(V|wW*($RJ!_{Gyu?zMZs*<}ZHs+Ny)(*zDb1~hpE8{j>2+UuO-!kxs#crznrx(V^(fEUx_A|rEb z518MVA_k1utc4L$=71)pc>UMg z_#VkzI2J#8g1jhL$BL*(JdiuyGpUqWO;G7PqUs39k=H(v z1-I2s6WZi@0zDFg(WA0dTy@P=xx3zZ%e41M#cB`nVroyH1(i+>GxKJ``P%ao*>N&K zICK6e2K10fh9+SevXh9%K0Y1SvS;O1kb7TD4cHim2{T^9X;KDBi=^A4PfLg`oFc@r zV-;FaJD%1pDm}99dHNinPSk>7Y9dwc$g-(R*Yl{OP^OCW9~C)<2F2w;T%>5itGHk? zLKJZX35OWS{%O;)K%>!{AqGJPxNp7m(=A!^ry0+e9v=GuZe&W`k;Z=X8jb`()}8^# z%FTgE8Gngep*QcZ1Bp~dv2BFbu`>`Re4sFLhQxdl$Y9pW*B!$rkD^pa a-#>EDnpEji+qwb6+Xm(%I2z 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 z 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 diff --git a/web/public/images/events/paid.png b/web/public/images/events/paid.png new file mode 100644 index 0000000000000000000000000000000000000000..470399d7965a4d575ba519a2c9aa720bf3e2f7d8 GIT binary patch literal 82604 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 literal 0 HcmV?d00001 diff --git a/web/public/images/events/victorious.png b/web/public/images/events/victorious.png new file mode 100644 index 0000000000000000000000000000000000000000..614613ee27be1a6a7ee578c003681f46fb2e97d1 GIT binary patch literal 104553 zcmYIPbyQUU(L z&UydXy=O0n`>B~{o_S_&h_a##E*3c!5)u-woUEiO5)#TN;`8M>I^vFe^%xW4f@veG z0Y*Z?CVc!LBc-H~B5opsRb}2Gl??-T5I>%oh%1OAA^ncTzST!VLQcGwlNA5xjJ$u> z5(ylrWe+a>wFF(d@kaiFAI0=DcD>Ia+3uO~1FC_gcpwh4Hmm+K@gpinFfe(MRjh1g z!9=>Ck(~5v6O%+nTONaiv?UoAb*wLrOChg+yU=CYVtni#-OJCC(o-^Czf-kDvu5J| zBa1ed`bMl?cHPa6goEzaek?pjRX3XPQICTZCs0NT8F5R`S*x0XFw8R>ZZpx6>2Rc5 zZmsMdxMr}#)3CpkiF&JovQMchP}2>uS#0rAI`5VuEIYp-(mVTlS$1)bMEG6Z-5KNY zF*9VMKJAF-QsJj@vc;+jmrcFx@Y=HD*h4Y!lo3DgBh{O%p;pNET!`Pf|0~(|Ygq*S zEFHJIn}-xJF?~Aerz!Pz{c@vJy&&@u=P(K2^P5xdanY@TY`6BOvIT?kE7uH=iG<7V zM;05jdm0CX4fV9NSR~wbtZ zO69e)WLU94;MD+EwucTkp$E;M-_*)W0WiF04cv8a|JH~emW}f+*5K89+P5(PberyV zRYgo%po=cLc^*>J`22--Z)u#5Mg zu2MlZ+{<$ENnIUV#Gu2&-l*#nz20omabjW`vLd@U=V1^VqmHZ_PAg}pFnWPj{e7a{ zJ>ZjQ!eyB!(@}ma>y;*&apj(}QfopxdiB+o*XSLk6Y`B0=HoX1TOUr2i1_zT3O$f5 zy*K(Q{_=-}{MK)tTxgZS()Ws=s6S2DVk=+f4Le2l);z19ZVf{i;Se2q~{|9YfoWFIGPo+pKN!R0$D%U|+%T4$*3Q91f1GkNmiyI5{5J zV+O*M5_NQ*kX@AhwU53-zExdGHI||dUVCMp^l3&itBju>BmiY1y&8$OsfNeMwJ3IJ z$PtaZFLKaA%oZ|p>YqD)8);Dn=~gOrtuGzTKAyPf^RNzm#Fa_5+u)qKsr=7|P^Fk6 zEX)+|4?7-I{RM{!yi=qbR~>UuUmCC4Chv%F164&(>?bwMrn#2(emq^Yc$Oh32T%CW zpYTo@^k@Qv0cekhvND>H^`iS|6rZUp-q+ie=hR_nun>pn9cR)GvU<$CUg|@zb*o zgCfhK?V>9d6uW*&khhKJzuwGRm)x#7Y2B!I4m}h!HEhU6zC5zD1Dc+>UoV`u+ zyD*q)v{?u4UXhM5QfpP*aX*?AxA&t-t=nJ$V%@9#V@(Cp1t?e&t zrhUx6#$^GH8m<>d?GKVl6}C@ku3i|} z4Es)|Ge3v6WGbH!!}WR&-8QEWL)&Qsio8e3=zOtoD)9eqy?P_v<>DwfoY9o3%+F!? z-bdHd2gr^j$s#dpI@}wVj^0Nz-GK(en37@3xAtE{HNgcX{Hi(*nfG57t`9!OiwcNd zGRBHp?oE_R7GcT7Irql3(i#g|Tb5X{qJLTBTLMc)349c1VO%2II=`21PuuK@%MO+X^;j8ArL!z$Zlg{idp#T0?2Qe# z58jCA;cgh#hJeXd_7D2belNC!h3-!+m2WqFc{MQk^;3{7`AZrn zT4Zb=x>)Z2I~Uh@fZSO(n&0a_(vb`#7H@FCnd_9W% zE3Nep2?< z3g9#+O{1;Kr5J=m6$!;73{+nRbucL zWERmzz@OA_Y`;-ettXhX_+{!uy0NUQp1P^Bo2?lKRCzRa0?7~_)bejk7r)IRogc%n z=%2#RFCEttX0hTpiNlRtBNyiVhMHDO6~Fn=biDxA#icT{HQqAnVR-UM!u_y2Kz8Io#ULwCa5?8tKr^$HteZ1DKB#FmT z#)uUn9@Y69J%%F~`d=zjaO69Z6@gYxbSJ*~>dezM5P;u}2UFcEW|I9v%uKKlztnFQ z#X!flpVP``e{1@+1?p1Qw-@j!Pq*X9LCS)xJCo-rqxG;(lQU*J`p zyv^~}iqKWyUT~WA)6H+2+A-)0;mO=P1RWrT>So=+9&jEl16hv<4}o)oD%EM>&$3lU zrC*vap$&FAh(kZTp}0;IsFTOsUa&=LNk_xpVy^48Le_tACb($qieG7S99P%; z`HtJk8CfU3TZn`8J>>$qB^`OMU9b@L7QCG(O+U(mgqpBBO9>{{Vv2=6UfM3l za4n`?zII_b$e`$uP~~ngQe#D=3+IYc8@=+W15Sfn1OsB{g`)O4KL^)C-5Okn->HcZ zcY!2nbjfKJO$1HoJrk~6j)jCX-iQ)AEsU!*PVb63etKv?8$)a!NdIZ`+{ZGskc`5c zGWWo@n!oUc*V#qx^foXEO$0H?nP$jah^P+bM{4pd%-w+C95ZH%Zhd;t$$vP$@IKV@ zuJzVHhhtu$Fd(!62WYm7{my2Ge}qY99@g58an^9tMCkRU9?BF+(Xg43dT5^u21`QI z{I)DF%d`1M&#vPw9X)^5l+!GS6CyU|@V^8f1niBFDehYQY(3PuA%M3t#iK-0^u6h| zA(QXN6Dli(;w$;&*Ys`)cy4A zKHt~&3$+=x747~j>{TH{jY-k)x7idkBxl|}jem2cRL4iplQJst^)u{`_qUAEqi-|o zoU(VJmHf)Oz@*Etb@?Vz!9#%v*q3uoeO)I0OoX3uEc_?EikRlev$LwZ!ehH_6wn5F zP+Kwf;Ad5cpkHgj=|r8((B^qNcLp~GyP6D|`pHQthY!#skq@9`TcKDcv|R}X%qZW#Xp<++`SpqxX}=Zi{iUz# z^B#tO;D;z3F3o5dbs^%|)ISW}$r8C=c6_*RaJ!Q)s3pqScli7Bg(nx|aQQ?yP2ZP$ zEFp7Bzg(vJZfkD5nW%aBc74p|^vki8cRa%#I=;DIjvZ$jy6wegwWbP4GQb_U#(4JK zMZF|>9R<0a8LB^w5Ti&ip#iW8NPpN89*@xAI5V)`5y0& z*?qy%$f!~)_UFYf{W+aVK<9D}?uR#^kwxZiAJ#W-NpYNfo`6@a!>iowuC8OUyR9Mt z%~(+_`Kpr^o;z#Kay6h!_rB9*HUmWo+`Ye3xtYukgZ>_*oAP=lYRqKWdAYu{Qp4<``(9KQUqAIu znAqz`=Rw1%8RZe8QJ)}M={edx-opdnhd68K=+-L#>edSeXZv*AV3!kW1KK$M!-do` zj}vuW2xw(UpZc8*|K7FT!DbS#Bop@m@WHvE)~OQw$rl?PHQwOEQ6IyE*i?0RYT3v| zd0!3CC_7;<$76h()(>?Koxh&4z(;xI1E>`C`&9;iq}l5<=nA39aqoApKbree0XhVzT9ca zKhilp_-s)!`-@l}S_>W@#jcDthf7sfTatUTKw^JDm(`@T7qnxNN^ACggnVVUdAg|8WTKrJWQ^+$PB;DDU5qJA65h2S`~_}lQL z@X=Z=J~v`kVo!8g7%fgLS^t^|@-Yp{BU_iRh(ce0>n=Oo?gY|?gaHTPRK zK&Ce~)9;L;m~6Cq+zpqZFTZ_f0y9(mvG*#$2F-6J{3nf*V7}s+n?}21Ye*1Ib^};E_niOPVSs=nvZv_R z%HvNh{7zx3*sWzoQJOV1+#(MWvNrEK9bkMO%Eriik>7J-%sF#Elg=LyHB{PeB+i)? zzC#xwx_}mt%VcYloO_FYO5Pt4+H`yoh5c1cb>STN{*Q{(l#kz3gVqBM$};K0+6+G0 zD0XXYod=35H|aeZGWEMR4a36V1M*r_jNN*DtiL)*g)E`GeBZU159>s&CVr<51k9vn zSR-cn^*^WJf=U;0ZKSsEeUj@FGkBd?=%h$q3mBJ$li4j*ddmXir`mh6`^<-1y zHMSd;pHydBm`_w`lLhY7v|V#Qe_=g;%s`+vC8oH8Ij_ob=)ESfMyM)nng+GI#XQ6Y z#!;U|xKO=mpu&L*@9i4*alRtTkgKS3#t_=kMr3dj-mEVXfV51Kx8N;wOpIYSh>V9m zA&Z-JU1zDwqrZn{0%Lp5vQ2)ArDde~?NYwI{1EuLR4mRw4Zv6ny)$2paB}tpgxT_5 zdW!cGQ~!Y1o6s!?I&VpNv9Izng7ljDBN+fx(Ux;tZWzOU>w4=gYg7q2;0d>wj#xe5 z)!MbY@DcrjTfrZM(B=4#j@AXPZ}pGtl$u_uwyAN|eO}|*nrj`d27JO2)ZO(+sExUg z@UB}fdq)u7bZ=J1rcHQNx6ZcCtfe^@X2fF2JNBFx9y~2W#m1xv4AoX|DhkaLK9oVX zj>*{);~&8Xm)fpK5(a!@nl|?q7?uwf_$&XMV&wVxw~fP6b1Jt=vInNC{38(rV$9%? zJc>qz-smWoq{}1Tyu#UHr7@>+T{Q~x+>ome5qmZ|D(}5WN!d3Axdo2+wz{NkeC8;E z>xVI+Nez(jeIUO^N&Y^(_ka`q82Wdac?ZUglZ(D(66sU7Qr10Exp&3^rk(k(=GJm5 zqnm6_74NulRopec>z8allF zn14I|OK{CUbX*LbRow`Uy}0KAl`2Gvqe%CfvnHji6h{&+Nkx>Tz7bZ=gt3W-X~^|< zcXwMjs9#E{JbO+0q_RX}@@ac7&oYICPl(mR; zhrRH^vKm{Sy?cRp+N%bN5_)jVmhigYK=KTYu+^X}cH&|sB6ZTo_{Thve&F`1P#WvQ z+D+WJpkgDeRJop7VmK!T)#5_Ni!R&(hrV^6obKPF)J(A96dUPNpH`DWm2d45j_x}L zHsFrPoF=MJ3e;m-<$_iUhH3_uCE@upPPA0#L(ovC<8F4Cdc1i5#%RKTrym-#Bh zt1r!_Xo+t5{tpQ;IZmMEKh0&z=623OV7w(W)HF(a)R}aU`HgY9nOf6WjpFn;R~xTf^&ABW#2Ng znv*lEeP{~TA}THT1p6C7tI9>Iz5N%wzKEKL;8HkkPb$hmo7RM!YQMWase=#asb93o zzBh#-9Lb8UopTD}-KNsBt~snkvRw-L0au=EGG6I5a06)MTIv!WS`3w=pnBjO_sZ$^ z7f$+~#UcjgisOYiloQPr@)uPw{D9$&Ml$uYpEa_7Gsv61% zA{{4rEOB;zeU~)OyvnT}H4VvlPd`^907wbj$}e#_spT8=DY!8$=D&P$iJE^_C;vgf z??;x{UT&c%M@<&CKPc_0Dg?{BSsiC9hh@f0{PYTr*vPhHKCa zJ!SBALoLGM6->n90@EEi&!(AMNO+jF-$sT01?ncDtbK}5$F^DiYiI6(-ZEP8QT&1T zj<+KGHh2v^#5Y-4ay~k<fdte=hKJM^{{Q$+MO;__X7{&^}q&019ljMI_n1xl)`dWWKq zdD!NJBc@EF=Qu#P^odxFC?;2+T zw$kA#7b-(~glg~q9%ay2F=<1xhMxzR*8V=Xh91qh!4lz?8_~$sJF97E@>vizzUY}L)&b-*l3QV`<+H!8R2ZB1 zl6e@nt$To~CG7%O=ZH2|wxGIR6mo z1{>FOH`3)xD~ZO@dI=*k>T#4d^gwoW{C)*KM40}kj^JZY9XU+k3`w=1FCj@{G?4P^ zBYl-KTru2WQM*dwYo^h$kRl&jfOKHpSZp9YB>Y`&F6qR5dl8R&n1(hk)66&|HMbQq zQ!n5xoo>4HE~TcJF3KZGyrqQgtgffYQ!k`(l12c!<-A@_9<4qgPQDKUU4yM$4#{SGy!ba8N_rzn2p#2)0|QDtrtO zfIQgHAlJlJ2q|lfkGklpHSEue)m{K5@^AI0Br1S5TQ8u${hQtfvXxY_2*ZNx3| z%)b4&Z&Dh>X^9-6p{UyL45LZgZhMd_J2sI$uR+zVuQEC#bL{o)%@cV|-mgup%Kt?q z9;1-WPq^O*p4geT9ey`5K^kZK+9**ixi!{#u<@6(+wGf@c!V6{>HHM5sgPA-?D`f~ z))zvI_`N34QgS0bBG|3!w3=h+FnyIb4a}F`OpW+db*TMyP^?Pr?tWos{|pN_4~UxE z=O0;ZevuSo!|K6GJ4)z@+Pmn$%U$d?N^M2+EY)!5p(-xCMWG2jFJ*mj7QC;9Hk#X* zT7GBQWH`)uGDP7iM!pHPG^MKD&E&0T%5OP_ihSSs+Bp>4xsgHDgYavo;GpZPQADEu zYEKSma9PD~Oazc@&;wN-XL2fMqXirS0rh%4wVy@Ua@!cr*fk-1i&t*b$t#Q|smgC{ z3<<`RTZeKu*M!Hn=tSKp1Z+Ajj>IPl)$p>x3rS%dun_TcBd0_8dVJ>;EY?s%K6=2OC(I?-n6joR66S~MC?8hxM;#}beU$#X=F|dLlbsVTI$Cq+ZfG$Yl zX=vZfa>=9Bwb?()suF9jw&G&;7krwf1d-G@_-!mUfS|3)9}R!tnhxcuW`7^hR(wUK z*rZvPv3UFHUDOtMevB;eoft6JQ_{B&51S08fFBgxhww2xcp@j!RLBmQo$*ZTmGWLk zS!U8~26-{lu-}6GOnO36{8SHXGGnm^TBOft9oWZa^n@}nrULGtBPPRvlxu?sPC>{! zxYlde5nB~Hi!V3D)MFY*eu2hE9$InyR=+YaJZGo4nuti1ziaVpwb%S1a9kGB=0nEn z>dtx)Sv&Y$i74_0q^wr)hnFTu9o~}sjZ=loGKGI) z4t065i!o)A6qg|w>v;&pXYVMm=KC;%ES`K&v{eOL@D@_TYHimZTl-B*{2`dti@BbC zdoTN-i-IAuEE@tZ-__C87x|ub&`~5YIG9jzF3s=cJxy@*>Emeurr`WRiL!2&@DWFy zUAg!Nn10LQD8sV+X{+f603s33`Vm&_@>_6w)iln(=Liq)3OU)TIsd+-tM8? z8AO3(2l<~f1SGw$oWX9b^JgEqB>F;w@YFC=#1|DowI18uRTELG?PcOmG&URIC>TRA zs5?NA+Fw+d!1+aCjj^Uou|Rspu6YAjWl3ru&S|QuoU>;lf^gUxp4Z9SlDF zG~7cfz0VPK97<;1A&SH|y6LbYy z@F5m9ME#!MQDdlGZ2MhhXQM?9|0s2H4*KP|QPli&)Uw73)JU0aFWwFP`!d~ z>o1_z+WXvp`q^gc?h&dLI0cyTC&Fz|Br%BAJ-FS4;x0`2Y}RfBLaEV^k`OJ^J6tMRjCZH1XUS$|grRzAD-m(b*$X8F!t+9cJvi=2lLz z%^&7}Vk3;!&Cec~PhxPh|KESu{A&IHC%&-`6D7wS67VjOYu{#IwO z`K{>U7(30JRQPk~!U51q^n_LOcc14(pHJv#D5j;z<2p%5_&DEOe29p?)DHQWZSxBo z!THdi+6r!DvUEQZIDUu@XO&Hz5$Am!(yztPJE-1`Q`CVZybl)@jed(Qh5^o2cfJ#Twl>aVLg&K zv18TFf~pN;)X*I9rp8#Hs1dx$`fwlA1p8G5leF^y&!8XJrltp(E=gZaE(ldMPb zX9fhD7rr5OyS9hhs`ZQt4)%uiA>TEUtzetXW7jnY2@cLjd<|d5=SUrbwRyhv zu~ve7cy;TF7>cg*v9)Lwr1B14ClGX;gc5(aFh-1)KUfpMC>FlrG64yCIajesPDK^*AcR4=?bgb{`tsLQ zweGtF3{PrP$omHy>o(i`?zEEGmJ2uYD4ol5%@%7xh5EU}w6hsno#!r7=|SKDY)zL4 zRz%I#(}pyl6CuJ=JF6tdgyoheslq#Cw5D`^lv&Ycoy*-|{60w3;KNU?DY6bPe7P5>q+X&x6oc7CzE1e}eyN%< z3W`VFRiGz`*lOe_Di;}wjg@!z?yc%vy}$F#VG7B-k=L*c9_-|`Fa=RZrxo*QvJQh9 z+$yVbM1Ls*!G~6>d*_wh@z-9qkIB#I@Li{PxWBSuc;HC8&i25xQyiz!Rw6%@4I>|VT&VJU0c$5SP0!xTT44QYt{2c zp-pgpy~~?{X>O3ZyRF-yx;2m!*?Xv20ip< zOmyRP4ODWMDxiOwgZLkFyuh!RIfOKnuWSmV{ak6Fket&XoT)>?lpqC=SCxVqqF;s3-q_1k?8<*)jH zM!UoHw|?XErAbYi8*?u+1#D8jx(+mdat;){7=|8U;&(4D;nvNxHaXYTI3kibj#nIb zh$OCFlw;&0T4#M|R%{|&xbC(Y8ljWpnJT<0l`EK`ne?~!QKZss7D3BCgYU)0^kI#B zEvaq$rR-LX_HkNu-Qe%1I_hJvI3(<_c5G8n@VD-FU(tNEXkd{l@(s_Sl(%}OY%vm# zst)}SfV<#n_}|8xqxYFf6)ZU;Hxpm?K+8dj_Rr3m7Mm>*#d^5a6aLqW+IXwp7%rWc z1AjpldB|<&76AxsU(${EX&2+0WW1>`Ul%}0^-Qei^n<>2(3m@p&I{h2M zq9!iHMjjhJsjN1lZJ9IkvB@kz9AWig;jc)R&T}g_)p4k+e1Jbro(v{>TlYNXOfflq z6bMikWqF$QWl+=cN8CVbtTle{=LUGxIH@SM1~fj__^n`A`>|ig69joi*=11*U)HvS z3H(-3=w2Bi!H!`gQYf;vzn^8=!rZ7Z%XEHK8Z%If}J0vFpuwJ4UpQ+Xa@4JVC%_&Ne1!aMU+ht>)^ zo$JjSBS`JP1!pMVDm6`ev05%`T8Ir=qU6`TcAv8+|IJpga7_g+~9I74OoRwqZ17`Q=^?btg0IK3(cakGGk;G@}PCh55OJsbk49zlh1J^qSombZrQrH{2{l(5!=`Uv_e%< z&-wLsNr;}v5`pIbK+-xcL-&@|2bmjf;K1A^6B%8N6p1(=y0-RGW{^XTVq-TWtq7!n z%D?F%boguiujh!^vYM3())uyx@i3S#qS~2A7ea&yosA9=?GrwMt9lpnk6jvY>kMFw zush*rsNcQRA^IvDa2|D|$Bn;^)C!nT1){>Rb4;T`sxWE}%w#jCauJT`)rL_%Z4N1Y8XuZ@*+ zQ>3}ZdSg`2N&99XV2y>nD5K|Ugxi(TM}=FfYKpIOCMJZmk&oiIaYSg+a8|8;8G-k7?N1t-70ukc)T^Sq5Tgx) zvV(k!!05C%8(WXBXSS19{H|n1??Md3d}fmc0n3nxZ;M*Su|=r3!hF>X;5H;asG8{4 z`3rdWM62bdx;N{$1b=ZlVeSRA)>|UpAXN|vE;mGZk*npM<4yl z{?Z<~rdR9RRBIIeU@j=G+fvs*f+JBXko4O~8`@xY>lPZA?w6>arQb*)PNl%Q8Y#5r zh6ru&XY7LGxm%QQ{h)-{!2o$pa0M2CJ)^BfG6@k+5Fp^NX?DLeV})mUn4pkdc%x&{nJ`l$L3hUV_iU8 ztx-haKel6JVd7(Y1_-?o;nHXqdl>K-^G+-s`lk?E;~6|;e*blv%?}x7%sAQ{J4C6{ zoF#uGVCF4J>ft-+43!nmOb`C*(#d&0#v@sN!g(9@FeaftWF6+uZ}o8O-oqUkuas_h zntLI61ssW4L$me%ZHBDv7&cObmjPPZ-II5B=!a=bv*9&@+=jgfYFb{+K=E8T`pI}d&826phPs|H?vU_EH8bo>DP-kSK{ zX#C@K8pxSoi0raxh95)6dFGW#JOQ`~VGH;uPe`Jz9KgaFj1E4LbUdchlJnuZFqaP?pCoy>$w3>9mgqedwOPJse4N2BH%wNJW>?%d*<&b42^K${29rzllVP5 z`|9r%{s$kWWm1MYJviq-Rz*2yxPkw$q$V9)E3fluaeAR(y@JJESpG`F zO;)q3`RmKGT5Knu9P=Z`=DjQF_PwIYojpbTH+kd2f;b22naPF18-#!Lq$NP<{rr5w zt!Hg2atU9=K**Br;5S03kOoZsK6mgg)Tu}`KFnk1DF5Oa^u$R|vm1p9bx`}rvpq|f z=sV=gM6ClKsi*9}jD&wxJ_7Q|q<%ICDa8S0Qx6W*2d2**r62VBh7W@s9TPOA$R-dZc1@RtUK!G>1_Rw8>{seo+ zdGt+Fqv{(Xz@n|m`188wP^3Z2vUfgjXB%)XkW5VGW6c{#=J*uc8%a_lnyv$O!7NAe zE83{}ckfX)-@zAihw0b!k5<&&&^&dD_Hj(3v(%Wf!{v{ynG6N7H69lD)%5y#F{o-N zg6K|iqg}wl`{Y*GRI!Gwp1(g%n@?4%f;O*n-HIAwwGoS&ZF|I5eLlE?lx*J`_>}OL z5ap!8{P#&{ahu+mk)0Ktk%LwQ@@nu7X7%qM_=gccmGHV0kpRf5Zdget&K=WT7gF65 z&l?r_KC|kqYt8y2@0a&)F+mzHE!5ET|I4LvGE+i6Ft0T`m#WMf=V1Q^lUos9=iQ=H zKF{R6*>Kdd2OWHBH*N;lfojTc*25$O-ws#DH?lQ<=KUmGRwADqB=P$sAcIVHs+7`qQ&+Yb=J|0Q(H{B3=WB``Drdf9$XW?>9JZr_!JezH}3UHWf|@`-ph38>ka#ib&MZ& z;fim?EHc?p@$^EuCdN=2rFQ|gZoeoRPGja{tcwSAm*c~^ry-?EjnsEkRcrCh<*)h6 z{CQXB95*GYF)v@3WE76^T+yO6-yKpJel2K&ys@BGwpL}uyaea+FP^8M`MpM@A=Fq; zoc2KFcJpBj4e$UtT=Y5qlIWB8!;~}i$`aKS&$)4bH>AK)R(j6X`mRsg(dFE?s)q`D z3!{!LxU-Ry$-suBX+z2ZG$4|H*){e$eJ2u_6q_SO=i0&kMZ}k@cE&`4H(HXy2%Il6 zx5EXgjx}_m#Nm+nqYwJw@jYLpe@Uh1>n)HH861*KIE1|QuCj3P+}hi3Z_Qzuflsmf z?TjSIBPu9dxBFt4o*;9Seji+pdB90AUrbZ)pmF)$C>hX^nGpaJb6$C?L<&?wsNr^_ zH*GNEu>96QA)~zXa1G1& zwOIFT55KD5^t0foz$?wEJlKa9VD?WMlW6^m&S7>b{ZJ2ujV9AKCTBq!neey2i-?Bp zej%m|gPLX_{^~b3DUd1K|rx|mQ7Jl-D;JivR-%UKpO&OI84& z0d}QjVWz|`>84oxa=QGJA9Z}ET@u0s&`*3|IK?8yZoS1VRT^{n-_^@cb_$xdWUu@+ z9Liy7*Jqg3jt*ZwOvi^0XVv|Q^TZ@2hpK(LAoImLYx+i|mKkyAzP#fy!%J|1Tz%Z; zlpT$*3lrR@D10E6YD<(qip{oC0-%ZG({;vd`}Uf2?Mg>IEyxyl~M&X2PNA``vM{1AHq*3&urSYuKwZb3ML z4RaaD^T7NszWd6*pM;sIWB*8Z3;0D^c$)_lt+iP6Ee4Qm8%Th3X<_GX{7Kpe7V?JT zbZ2e2ojDT5-~Y?ns`GM6ZPs!e5s}G1^dJJW1^$NnH7>)&?qMe6U0(jJzqccoObs&L zsMaVirZ^?*U}xKak*GYVz)pE#yV1?-IooKS9`5GKt(9BHiBtgYt!DSWrTU1tHY@wI zPMLrmF9H>?t<2V=UFvz$!LmkaW|lD*4i$ZMkk1GIm4CXCGKd|>7!IL0@UU%Neb+rz zqvVl-k@?dDRmUWCSA6$X+fX>SZSia83nK!H)Aq_!vu=?7u`6}5Zrtzr*UnqK*w`7k zh*!{_JW!h>;EOIC#o%Cx;aO=>^L5NLHToEJgtz#d_|L*tws^eizaKB`Oy5J3+nQ}W zXWGInb<}3}gk=OrdAjB%0V_Q5UrS*u2O+#CpqUN(9Cg=>F2M4=zlZAFq)4Xf!S_L6 zxgE%3=jIhQQw!eP2wUT{8^JM!w@T4UuI}9oLv#pnCQ!z|$OduIR`#2|eC^3{svPOJ zbhP`!^TO)|jn4P(*_ko1toX^w9^P1GrS`0GYR5FF{PUDQ;4I5J42K+w=Yk_C+y@pN zjUUxqaDEq@3d1)XGV)uX7`pHBV8Y+81;@%n{;F0hb)#o$@w&#rc4*cKBMnFALB^TK z`XzrRZmvjWTo>cIhrg@qJ_-eTaOtP_H)qgDEk0LzmlV*13qa!I5|2N&VYib2S)|={ zqm}6Nvb1~?m0*oMu{Lbks!%_;E~Zr81|YuAZH-ag-7=4S;X};D9Q|S|*1;lw`9~qF zkC0R5O1V1fl07fu>wrSBUHW%0%SdDYnhto z$6Vw_cd+~uYzySz_|-Vgd`MVTK_r>bk=z4oT(P$QIhQLk-Aht4@qq5IMP(*rKD#H<{cM7u=~ zkWx_FD@v$gUYv0D&9E4kHa_^J$c-fOl1xHoE}FTbNKUp`qD#lm5O-GO-|KIW28>xV zX-r>cp7NNrFJTw3DZ3TI_W1`)2zcGDUTnYiENsUf-d4R)vf!R8^Z4$C%^R!m`dPZE z7S7CM>@X}JzA!87O6acX@htG#hn!b-VVntQoRPbh#Ynm%BnS> zm&5k2EfNuLbG5k!cCQO&olaz1{s@> zM(;du#Rst{bgwVM$gflSah>n2=e-k`L+vy2MRsl14Tfc*4JsbI z1UtfpZnwKm{p5;G1C0(x9u3vUktz2HlEfZa$Tt{4KcyGB5&71ru-5R{|KzJb6DiKRCU= z)FkGyfwDDyo6#Sqv_!v2c