コード例 #1
0
from dependency_injector.wiring import Provide, inject
from fastapi.params import Depends

from server.container import AppContainer
from server.requests import ZLibRequest
from server.utils import make_router
from tarkov.dependencies import profile_manager
from tarkov.models import TarkovSuccessResponse
from tarkov.offraid.requests import OffraidSaveRequest
from tarkov.offraid.services import OffraidSaveService
from tarkov.profile.profile import Profile

offraid_router = make_router(tags=["Offraid"])


@offraid_router.put("/raid/profile/save")
@inject
def singleplayer_raid_profile_save(
    request: OffraidSaveRequest,
    profile: Profile = Depends(profile_manager.with_profile),
    offraid_service: OffraidSaveService = Depends(
        Provide[AppContainer.offraid.service]),
) -> TarkovSuccessResponse:
    if request.is_player_scav:
        raise NotImplementedError

    offraid_service.update_profile(
        profile=profile,
        raid_profile=request.profile,
        raid_health=request.health,
    )
コード例 #2
0
from typing import Dict, List, Union

from dependency_injector.wiring import Provide, inject
from fastapi.params import Depends
from pydantic import BaseModel

from server.container import AppContainer
from server.utils import make_router
from tarkov.profile.dependencies import with_profile
from tarkov.inventory.types import ItemId, TemplateId
from tarkov.models import TarkovErrorResponse, TarkovSuccessResponse
from tarkov.profile.profile import Profile
from tarkov.trader.manager import TraderManager
from tarkov.trader.models import TraderType

insurance_router = make_router(tags=["Insurance"])


class InsuranceListCostRequest(BaseModel):
    traders: List[str]
    items: List[ItemId]


@insurance_router.post("/client/insurance/items/list/cost")
@inject
async def items_list_cost(
    request: InsuranceListCostRequest,
    profile: Profile = Depends(with_profile),
    trader_manager: TraderManager = Depends(
        Provide[AppContainer.trader.manager]),
) -> Union[TarkovSuccessResponse[Dict[str, dict]], TarkovErrorResponse]:
コード例 #3
0
from typing import List

from server.utils import make_router
from tarkov.hideout import repositories as hideout_repositories
from tarkov.hideout.repositories.areas import HideoutAreaTemplate
from tarkov.hideout.repositories.production import HideoutProductionModel
from tarkov.hideout.repositories.scavcase_production import ScavcaseProductionModel
from tarkov.hideout.repositories.settings import HideoutSettingsModel
from tarkov.models import TarkovSuccessResponse

hideout_router = make_router(tags=["Hideout"])


@hideout_router.post("/client/hideout/areas")
def hideout_areas() -> TarkovSuccessResponse[List[HideoutAreaTemplate]]:
    return TarkovSuccessResponse(
        data=hideout_repositories.areas_repository.areas)


@hideout_router.post("/client/hideout/settings")
def hideout_settings() -> TarkovSuccessResponse[HideoutSettingsModel]:
    return TarkovSuccessResponse(data=hideout_repositories.settings)


@hideout_router.post("/client/hideout/production/recipes")
def client_hideout_production_recipes(
) -> TarkovSuccessResponse[List[HideoutProductionModel]]:
    return TarkovSuccessResponse(
        data=hideout_repositories.production_repository.production)

コード例 #4
0
import zlib

from dependency_injector.wiring import Provide, inject
from fastapi.params import Body, Depends
from fastapi.requests import Request
from fastapi.responses import PlainTextResponse

from server.container import AppContainer
from server.utils import get_request_url_root, make_router
from tarkov.exceptions import NotFoundError
from tarkov.launcher.accounts import AccountService
from tarkov.launcher.models import Account
from tarkov.launcher.helpers import available_editions

launcher_router = make_router(tags=["Launcher"])


@launcher_router.get("/launcher/server/connect")
@inject
async def connect(request: Request, ) -> dict:
    return {
        "backendUrl": get_request_url_root(request).rstrip("/"),
        "name": "Jet Py",
        "editions": available_editions(),
    }


@launcher_router.post("/launcher/profile/login")
@inject
def login(
    email: str = Body(..., embed=True),
コード例 #5
0
from typing import Any, List

from fastapi import Request
from fastapi.params import Depends
from pydantic import BaseModel

from server.utils import make_router
from tarkov.profile.dependencies import with_profile
from tarkov.lib import locations
from tarkov.models import TarkovSuccessResponse
from tarkov.profile.models import ProfileModel
from tarkov.profile.profile import Profile

singleplayer_router = make_router(tags=["Singleplayer"])


@singleplayer_router.get("/singleplayer/bundles")
def singleplayer_bundles() -> List:
    return []


@singleplayer_router.get("/singleplayer/settings/raid/menu")
def singleplayer_settings_raid_menu() -> dict:
    # TODO: Put that into the config file !
    return {
        "aiAmount": "AsOnline",
        "aiDifficulty": "AsOnline",
        "bossEnabled": True,
        "scavWars": False,
        "taggedAndCursed": False,
    }
コード例 #6
0
ファイル: routes.py プロジェクト: JustEmuTarkov/jet_py
from fastapi.params import Body, Cookie, Depends
from fastapi.requests import Request

from server import logger
from server.container import AppContainer
from server.utils import get_request_url_root, make_router
from tarkov.inventory_dispatcher import DispatcherManager
from tarkov.inventory_dispatcher.manager import DispatcherResponse
from tarkov.launcher.accounts import AccountService
from tarkov.models import TarkovErrorResponse, TarkovSuccessResponse
from tarkov.profile.dependencies import with_profile
from tarkov.profile.profile import Profile
from tarkov.profile.profile_manager import ProfileManager
from tarkov.profile.service import ProfileService

profile_router = make_router(tags=["Profile"])


@profile_router.post(
    "/client/game/profile/items/moving",
    response_model=TarkovSuccessResponse[DispatcherResponse],
    response_model_exclude_none=True,
    response_model_exclude_unset=False,
)
@inject
def client_game_profile_item_move(
    profile: Profile = Depends(with_profile),
    body: dict = Body(...),
) -> Union[TarkovSuccessResponse[DispatcherResponse], TarkovErrorResponse]:
    dispatcher = DispatcherManager(profile)
    response = dispatcher.dispatch(body["data"])
コード例 #7
0
import asyncio
from typing import Optional

import orjson
from dependency_injector.wiring import Provide, inject
from fastapi import Request
from fastapi.params import Cookie, Depends
from fastapi.responses import PlainTextResponse

from server import logger
from server.container import AppContainer
from server.utils import get_request_url_root, make_router
from tarkov.models import TarkovSuccessResponse
from .notifier import NotifierService

notifier_router = make_router(tags=["NotifierService"])


@notifier_router.post("/client/notifier/channel/create")
def client_notifier_channel_create(
    request: Request,
    profile_id: Optional[str] = Cookie(alias="PHPSESSID", default=None),
) -> TarkovSuccessResponse[dict]:
    url_root = get_request_url_root(request).rstrip("/")
    notifier_server_url = f"{url_root}/notifierServer/get/{profile_id}"
    response = {
        "notifier": {
            "server": f"{url_root}/",
            "channel_id": "testChannel",
            "url": notifier_server_url,
        },
コード例 #8
0
from typing import Dict, Optional, Type, Union

import ujson
from dependency_injector.wiring import Provide, inject
from fastapi.params import Cookie, Depends
from fastapi.requests import Request

from server import db_dir, start_time
from server.container import AppContainer
from server.utils import get_request_url_root, make_router
from tarkov.config import FleaMarketConfig
from tarkov.inventory.repositories import AnyTemplate, ItemTemplatesRepository
from tarkov.inventory.types import TemplateId
from tarkov.models import TarkovErrorResponse, TarkovSuccessResponse

misc_router = make_router(tags=["Misc/Bootstrap"])


@misc_router.post("/client/locations")
def client_locations() -> TarkovSuccessResponse[dict]:
    locations_base_path = db_dir.joinpath("base", "locations.json")
    locations_base: dict = ujson.load(locations_base_path.open())

    for file in (db_dir / "locations").glob("*.json"):
        map_data = ujson.load(file.open("r"))
        map_id = map_data["base"]["_Id"]
        locations_base["locations"][map_id] = map_data["base"]

    return TarkovSuccessResponse(data=locations_base)

コード例 #9
0
ファイル: routes.py プロジェクト: socek/jet_py
from dependency_injector.wiring import Provide, inject
from fastapi import Request
from fastapi.params import Body, Depends

from server.container import AppContainer
from server.utils import make_router
from tarkov.fleamarket.fleamarket import FleaMarket
from tarkov.fleamarket.models import FleaMarketRequest, FleaMarketResponse
from tarkov.inventory.types import TemplateId
from tarkov.models import TarkovSuccessResponse

flea_market_router = make_router(tags=["FleaMarket"])


@flea_market_router.post(
    "/client/ragfair/find",
    response_model_exclude_none=True,
    response_model_exclude_unset=False,
    response_model=TarkovSuccessResponse[FleaMarketResponse],
)
@inject
async def find(
    req: Request,
    flea_market: FleaMarket = Depends(Provide[AppContainer.flea.market]),
) -> TarkovSuccessResponse[FleaMarketResponse]:
    request = FleaMarketRequest.parse_obj(await req.json())
    return TarkovSuccessResponse(data=flea_market.view.get_response(request))


@flea_market_router.post("/client/items/prices")
def client_items_prices() -> TarkovSuccessResponse:
コード例 #10
0
ファイル: routes.py プロジェクト: socek/jet_py
from typing import Dict, List, Union

from fastapi.params import Body, Depends

from server.utils import make_router
from tarkov.dependencies import profile_manager
from tarkov.mail.requests import GetAllAttachmentsRequest, MailDialogViewRequest
from tarkov.models import TarkovErrorResponse, TarkovSuccessResponse
from tarkov.profile.profile import Profile

mail_router = make_router(tags=["Notifier"])


@mail_router.post("/client/mail/dialog/list")
def mail_dialog_list(
    profile: Profile = Depends(profile_manager.with_profile),
) -> Union[TarkovSuccessResponse[List[Dict]], TarkovErrorResponse]:
    return TarkovSuccessResponse(
        data=profile.mail.view.view_dialogue_preview_list())


@mail_router.post("/client/mail/dialog/info")
async def mail_dialog_info(
    dialogue_id: str = Body(..., alias="dialogId", embed=True),
    profile: Profile = Depends(profile_manager.with_profile),
) -> Union[TarkovSuccessResponse[dict], TarkovErrorResponse]:
    dialogue_preview = profile.mail.view.view_dialog_preview(
        dialogue_id=dialogue_id)
    return TarkovSuccessResponse(data=dialogue_preview)

コード例 #11
0
ファイル: router.py プロジェクト: JustEmuTarkov/jet_py
from typing import Dict, List, Optional, Union

from dependency_injector.wiring import Provide, inject
from fastapi.params import Cookie, Depends

from server.container import AppContainer
from server.utils import make_router
from tarkov.profile.dependencies import with_profile, with_profile_readonly
from tarkov.inventory.models import Item
from tarkov.inventory.types import ItemId
from tarkov.models import Base, TarkovErrorResponse, TarkovSuccessResponse
from tarkov.profile.profile import Profile
from tarkov.trader.manager import TraderManager
from tarkov.trader.models import BarterSchemeEntry, TraderType

trader_router = make_router(tags=["Traders"])


@trader_router.post(
    "/client/trading/customization/storage",
    response_model=TarkovSuccessResponse[dict],
)
async def customization_storage(
    profile_id: Optional[str] = Cookie(alias="PHPSESSID", default=None),
) -> Union[TarkovSuccessResponse[dict], TarkovErrorResponse]:
    if profile_id is None:
        return TarkovErrorResponse(data="",
                                   err=True,
                                   errmsg="No session cookie provided")
    # customization_data = ujson.load(
    #     root_dir.joinpath('resources', 'profiles', profile_id, 'storage.json').open('r', encoding='utf8')
コード例 #12
0
ファイル: match.py プロジェクト: socek/jet_py
from typing import Literal, Union

import ujson
from fastapi import Request
from fastapi.params import Depends

from server import db_dir
from server.utils import make_router
from tarkov.dependencies import profile_manager
from tarkov.models import TarkovErrorResponse, TarkovSuccessResponse
from tarkov.profile.profile import Profile

match_router = make_router(tags=["Match"])


@match_router.post("/client/match/group/status")
def group_status() -> TarkovSuccessResponse[dict]:
    return TarkovSuccessResponse(data={
        "players": [],
        "invite": [],
        "group": [],
    })


@match_router.post("/client/match/group/exit_from_menu")
def exit_from_menu() -> TarkovSuccessResponse[Literal[None]]:
    return TarkovSuccessResponse(data=None)


@match_router.post("/client/match/available")
def available() -> TarkovSuccessResponse[Literal[True]]:
コード例 #13
0
from typing import List

import ujson
from dependency_injector.wiring import Provide, inject
from fastapi.params import Depends
from fastapi.requests import Request

from server import db_dir, logger
from server.utils import make_router
from tarkov.bots.generator import BotGenerator
from tarkov.bots.container import BotContainer
from tarkov.models import TarkovSuccessResponse

bots_router = make_router(tags=["Bots"])


@bots_router.get(
    "/singleplayer/settings/bot/difficulty/{bot_type}/{difficulty}")
def bot_difficulty_settings(bot_type: str, difficulty: str) -> dict:
    if bot_type == "core":
        return ujson.load(
            db_dir.joinpath("base", "botCore.json").open(encoding="utf8"))

    bot_file = db_dir.joinpath("bots", bot_type, "difficulty",
                               f"{difficulty}.json").open(encoding="utf8")

    return ujson.load(bot_file)


@bots_router.get("/singleplayer/settings/bot/limit/{bot_type}")
def settings_bot_limit(bot_type: str) -> int:  # pylint: disable=unused-argument
コード例 #14
0
from functools import lru_cache

import ujson

from server import db_dir
from server.utils import make_router
from tarkov.library import load_locale
from tarkov.models import TarkovSuccessResponse

lang_router = make_router(tags=["Locale"])


@lru_cache(8)
def _client_menu_locale(locale_type: str) -> dict:
    locale_path = db_dir / "locales" / locale_type / "menu.json"
    return ujson.load(locale_path.open("r", encoding="utf8"))["data"]


@lang_router.post("/client/menu/locale/{locale_type}")
def client_menu_locale(locale_type: str) -> TarkovSuccessResponse[dict]:
    return TarkovSuccessResponse(data=_client_menu_locale(locale_type))


@lang_router.post("/client/languages")
def client_languages() -> TarkovSuccessResponse[list]:
    languages_data_list = []
    languages_dir = db_dir / "locales"
    for dir_ in languages_dir.glob("*"):
        language_file = dir_ / f"{dir_.stem}.json"
        languages_data_list.append(
            ujson.load(language_file.open("r", encoding="utf8")))
コード例 #15
0
ファイル: friend.py プロジェクト: socek/jet_py
from server.utils import make_router
from tarkov.models import TarkovSuccessResponse

friend_router = make_router(tags=["Friends"])


@friend_router.post("/client/friend/list")
def client_friend_list() -> TarkovSuccessResponse[dict]:
    return TarkovSuccessResponse(data={
        "Friends": [],
        "Ignore": [],
        "InIgnoreList": []
    })


@friend_router.post("/client/friend/request/list/inbox")
def client_friend_request_list_inbox() -> TarkovSuccessResponse[list]:
    return TarkovSuccessResponse(data=[])


@friend_router.post("/client/friend/request/list/outbox")
def client_friend_request_list_outbox() -> TarkovSuccessResponse[list]:
    return TarkovSuccessResponse(data=[])