from __future__ import annotations from typing import Literal from pydantic import BaseModel, ConfigDict, Field class PointsBalanceResponse(BaseModel): model_config = ConfigDict(populate_by_name=True, serialize_by_alias=True) balance: int = Field(ge=0) frozen_balance: int = Field(alias="frozenBalance", ge=0) available_balance: int = Field(alias="availableBalance", ge=0) run_cost: int = Field(alias="runCost", gt=0) can_run: bool = Field(alias="canRun") class PackageInfo(BaseModel): model_config = ConfigDict(populate_by_name=True, serialize_by_alias=True) product_code: str = Field(alias="productCode", min_length=1, max_length=128) app_store_product_id: str = Field( alias="appStoreProductId", min_length=1, max_length=256 ) type: Literal["starter", "regular"] price: float = Field(ge=0) credits: int = Field(ge=1) is_starter: bool = Field(alias="isStarter") starter_eligible: bool = Field(alias="starterEligible") sort_order: int = Field(alias="sortOrder", ge=0) class PackagesResponse(BaseModel): model_config = ConfigDict(populate_by_name=True, serialize_by_alias=True) region: str = Field(min_length=1, max_length=8) currency: str = Field(min_length=1, max_length=8) packages: list[PackageInfo]