import {z} from 'zod' export type Region = 'JP' | 'NA' | 'CN' | 'KR' | 'TW'; export type Trait = 'unknown' | 'genderMale' | 'genderFemale' | 'genderUnknown' | 'classSaber' | 'classLancer' | 'classArcher' | 'classRider' | 'classCaster' | 'classAssassin' | 'classBerserker' | 'classShielder' | 'classRuler' | 'classAlterEgo' | 'classAvenger' | 'classDemonGodPillar' | 'classLoreGrandCaster' | 'classBeastI' | 'classBeastII' | 'classMoonCancer' | 'classBeastIIIR' | 'classForeigner' | 'classBeastIIIL' | 'classBeastUnknown' | 'classPretender' | 'classUOlgaMarie' | 'classUOlgaMarieGrand' | 'classGrandUnBeastUOlgaMarieAlienGod' | 'classAquaFragment' | 'classUOlgaMarieStellar' | 'classUnBeastOlgaMarie' | 'classGrandSaber' | 'classGrandLancer' | 'classGrandArcher' | 'classGrandRider' | 'classGrandCaster' | 'classGrandAssassin' | 'classGrandBerserker' | 'classGrandShielder' | 'classGrandRuler' | 'classGrandAlterego' | 'classGrandAvenger' | 'classGrandMoonCancer' | 'classGrandForeigner' | 'classGrandPretender' | 'classGrandUnBeast' | 'attributeSky' | 'attributeEarth' | 'attributeHuman' | 'attributeStar' | 'attributeBeast' | 'alignmentLawful' | 'alignmentChaotic' | 'alignmentNeutral' | 'alignmentGood' | 'alignmentEvil' | 'alignmentBalanced' | 'alignmentMadness' | 'alignmentSummer' | 'basedOnServant' | 'human' | 'undead' | 'artificialDemon' | 'demonBeast' | 'daemon' | 'demon' | 'soldier' | 'amazoness' | 'skeleton' | 'zombie' | 'ghost' | 'automata' | 'golem' | 'spellBook' | 'homunculus' | 'lamia' | 'centaur' | 'werebeast' | 'chimera' | 'wyvern' | 'dragonType' | 'gazer' | 'handOrDoor' | 'demonGodPillar' | 'oni' | 'hand' | 'door' | 'threatToHumanity' | 'divine' | 'humanoid' | 'dragon' | 'dragonSlayer' | 'roman' | 'wildbeast' | 'atalante' | 'saberface' | 'weakToEnumaElish' | 'riding' | 'arthur' | 'skyOrEarth' | 'skyOrEarthServant' | 'brynhildsBeloved' | 'undeadOrDaemon' | 'undeadOrDemon' | 'demonic' | 'skyOrEarthExceptPseudoAndDemi' | 'skyOrEarthExceptPseudoAndDemiServant' | 'divineOrDaemonOrUndead' | 'divineOrDemonOrUndead' | 'saberClassServant' | 'superGiant' | 'king' | 'greekMythologyMales' | 'illya' | 'feminineLookingServant' | 'argonaut' | 'associatedToTheArgo' | 'genderCaenisServant' | 'hominidaeServant' | 'blessedByKur' | 'demonicBeastServant' | 'canBeInBattle' | 'notBasedOnServant' | 'livingHuman' | 'cardArts' | 'cardBuster' | 'cardQuick' | 'cardExtra' | 'buffPositiveEffect' | 'buffNegativeEffect' | 'buffIncreaseDamage' | 'buffIncreaseDefence' | 'buffDecreaseDamage' | 'buffDecreaseDefence' | 'buffMentalEffect' | 'buffPoison' | 'buffCharm' | 'buffPetrify' | 'buffStun' | 'buffBurn' | 'buffSpecialResistUp' | 'buffSpecialResistDown' | 'buffEvadeAndInvincible' | 'buffSureHit' | 'buffNpSeal' | 'buffEvade' | 'buffInvincible' | 'buffTargetFocus' | 'buffGuts' | 'skillSeal' | 'buffCurse' | 'buffAtkUp' | 'buffPowerModStrUp' | 'buffDamagePlus' | 'buffNpDamageUp' | 'buffCritDamageUp' | 'buffCritRateUp' | 'buffAtkDown' | 'buffPowerModStrDown' | 'buffDamageMinus' | 'buffNpDamageDown' | 'buffCritDamageDown' | 'buffCritRateDown' | 'buffDeathResistDown' | 'buffDefenceUp' | 'buffMaxHpUpPercent' | 'buffMaxHpDownPercent' | 'buffMaxHpUp' | 'buffMaxHpDown' | 'buffImmobilize' | 'buffIncreasePoisonEffectiveness' | 'buffPigify' | 'buffCurseEffectUp' | 'buffTerrorStunChanceAfterTurn' | 'buffConfusion' | 'buffOffensiveMode' | 'buffDefensiveMode' | 'buffLockCardsDeck' | 'buffDisableColorCard' | 'buffChangeField' | 'buffIncreaseDefenceAgainstIndividuality' | 'buffDefUp' | 'buffInvinciblePierce' | 'buffHpRecoveryPerTurn' | 'buffNegativeEffectImmunity' | 'buffNegativeEffectAtTurnEnd' | 'attackPhysical' | 'attackProjectile' | 'attackMagical' | 'criticalHit' | 'faceCard' | 'cardNP' | 'kingproteaGrowth' | 'kingproteaInfiniteProliferation' | 'kingproteaProliferation' | 'kingproteaProliferationNPDefense' | 'fieldSunlight' | 'fieldShore' | 'fieldForest' | 'fieldBurning' | 'fieldCity' | 'shadowServant' | 'aoeNP' | 'stNP' | 'giant' | 'childServant' | 'buffSpecialInvincible' | 'buffSkillRankUp' | 'buffSleep' | 'nobunaga' | 'fieldImaginarySpace' | 'existenceOutsideTheDomain' | 'curse' | 'fieldShoreOrImaginarySpace' | 'shutenOnField' | 'shuten' | 'genji' | 'vengeance' | 'enemyGardenOfSinnersLivingCorpse' | 'enemyGardenOfSinnersApartmentGhostAndSkeleton' | 'enemyGardenOfSinnersBaseModel' | 'enemyGardenOfSinnersVengefulSpiritOfSevenPeople' | 'enemySaberEliWerebeastAndHomunculusAndKnight' | 'enemySaberEliSkeletonAndGhostAndLamia' | 'enemySaberEliBugAndGolem' | 'enemySeraphEater' | 'enemySeraphShapeshifter' | 'enemySeraphTypeI' | 'enemySeraphTypeSakura' | 'enemyHimejiCastleKnightAndGazerAndMassProduction' | 'enemyHimejiCastleDronesAndHomunculusAndAutomata' | 'enemyHimejiCastleSkeletonAndScarecrow' | 'enemyGuda3MiniNobu' | 'enemyDavinciTrueEnemy' | 'enemyDavinciFalseEnemy' | 'enemyCaseFilesRareEnemy' | 'enemyLasVegasBonusEnemy' | 'enemySummerCampRareEnemy' | 'enemyLittleBigTenguTsuwamonoEnemy' | 'eventSaberWars' | 'eventRashomon' | 'eventOnigashima' | 'eventOnigashimaRaid' | 'eventPrisma' | 'eventPrismaWorldEndMatch' | 'eventNeroFest2' | 'eventGuda2' | 'eventNeroFest3' | 'eventSetsubun' | 'eventApocrypha' | 'eventBattleInNewYork1' | 'eventOniland' | 'eventOoku' | 'eventGuda4' | 'eventLasVegas' | 'eventBattleInNewYork2' | 'eventSaberWarsII' | 'eventSummerCamp' | 'eventGuda5' | 'cursedBook' | 'buffCharmFemale' | 'mechanical' | 'fae' | 'hasCostume' | 'weakPointsRevealed' | 'chenGongNpBlock' | 'knightsOfTheRound' | 'divineSpirit' | 'buffNullifyBuff' | 'enemyGudaMiniNobu' | 'burningLove' | 'buffStrongAgainstWildBeast' | 'buffStrongAgainstDragon' | 'fairyTaleServant' | 'classBeastIV' | 'havingAnimalsCharacteristics' | 'like' | 'exaltation' | 'gubijin' | 'yuMeiren' | 'milleniumCastle' | 'protoMerlinNPChargeBlock' | 'valkyrie' | 'immuneToPigify' | 'summerModeServant' | 'shinsengumiServant' | 'ryozanpaku' | 'demonUnused' | 'levitating' | 'obstacleMaker' | 'defender' | 'hasGoddessMetamorphosis' | 'servantsWithSkyAttribute' | 'moon' | 'cardWeak' | 'cardStrong' | 'servant' | 'shadow' | 'chenGongNp' | 'cantBeSacrificed' | 'gutsBlock' | 'classBeastILost' | 'holdingHolyGrail' | 'standardClassServant' | 'classBeast' | 'classBeastVI' | 'classBeastVIBoss' | 'buffBound' | 'buffDamageCut' | 'marking' | 'manuscriptComplete' | 'myFairSoldier' | 'zeroStarServant' | 'oneStarServant' | 'twoStarServant' | 'threeStarServant' | 'fourStarServant' | 'fiveStarServant' | 'wrathOfTheEnshrinedDeity' | 'caitCuCerpriestessAscension0To2' | 'caitCuCerpriestessAscension3To4' | 'fieldAir' | 'caitCuCerpriestessOnTheField' | 'buffNpPerTurn' | 'buffStarPerTurn' | 'burnEffectivenessUp' | 'murasamaAscension0' | 'classUOlgaMarieFlare' | 'elementalsWrath' | 'buffBuffSuccessRateUp' | 'groupServant' | 'takeruDummyTrait' | 'artsBuff' | 'busterBuff' | 'quickBuff' | 'FSNServant' | 'fieldDarkness' | 'magicBullet' | 'protagonistCorrection' | 'normalAokoBuff' | 'magicBulletAtkBuff' | 'demeritFunction' | 'extraBuff' | 'robinCounter' | 'kuonjiAliceHasSkill3' | 'kuonjiAliceStage3' | 'instantDeathFunction' | 'forceInstantDeathFunction' | 'buffGutsOnInstantDeath' | 'robinAllGone' | 'classBeastEresh' | 'alignmentBeast' | 'bunnyServant' | 'buffSpecialDmgAgainstAlignmentGood' | 'buffSpecialDmgAgainstAlignmentEvil' | 'hasSupereffectiveNPAgainstAlignmentGood' | 'hasSupereffectiveNPAgainstAlignmentEvil' | 'happyHalloween' | 'happyHalloweenCounter' | 'protectedByBBDubai' | 'notProtectedByBBDubai' | 'canFlyInSpace' | 'buffSpecialInvinciblePierce' | 'sakuraSeries' | 'buffDefenceDown' | 'fieldHeaven' | 'fieldHell' | 'markOfSin' | 'quickChain' | 'artsChain' | 'busterChain' | 'mightyChain' | 'braveChain' | 'chainError' | 'classBeastDraco'; export type Language = 'jp' | 'en'; export type GetApiBasicRegionNPSearchArgs = {region: Region, reverse?: boolean | undefined, name?: (string | null) | undefined, card?: (Array | null) | undefined, individuality?: (Array) | undefined, hits?: (Array | null) | undefined, strengthStatus?: (Array | null) | undefined, numFunctions?: (Array | null) | undefined, minNpNpGain?: (number | null) | undefined, maxNpNpGain?: (number | null) | undefined, svalsContain?: (string | null) | undefined, triggerSkillId?: (Array | null) | undefined, lang?: (Language | null) | undefined}; export type GetApiBasicRegionNPSearchOptions = {baseUrl?: string | undefined, fetch?: typeof fetch | undefined}; export const niceSvtType = z.enum(["normal", "heroine", "combineMaterial", "enemy", "enemyCollection", "servantEquip", "statusUp", "svtEquipMaterial", "enemyCollectionDetail", "all", "commandCode", "svtMaterialTd"]); export const niceSvtFlag = z.enum(["onlyUseForNpc", "svtEquipFriendShip", "ignoreCombineLimitSpecial", "svtEquipExp", "svtEquipChocolate", "svtEquipManaExchange", "svtEquipCampaign", "svtEquipEvent", "svtEquipEventReward", "svtEquipRarityLevelNumMission", "normal", "goetia", "matDropRateUpCe", "unknown"]); export const niceSvtFlagOriginal = z.enum(["onlyUseForNpc", "svtEquipFriendShip", "ignoreCombineLimitSpecial", "svtEquipExp", "svtEquipChocolate", "svtEquipManaExchange", "svtEquipCampaign", "svtEquipEvent", "svtEquipEventReward", "svtEquipRarityLevelNumMission"]); export const svtClass = z.enum(["saber", "archer", "lancer", "rider", "caster", "assassin", "berserker", "shielder", "ruler", "alterEgo", "avenger", "demonGodPillar", "loreGrandSaber", "loreGrandArcher", "loreGrandLancer", "loreGrandRider", "loreGrandCaster", "loreGrandAssassin", "loreGrandBerserker", "beastII", "ushiChaosTide", "beastI", "moonCancer", "beastIIIR", "foreigner", "beastIIIL", "beastUnknown", "pretender", "beastIV", "beastILost", "uOlgaMarieAlienGod", "uOlgaMarie", "beast", "beastVI", "beastVIBoss", "beastVII", "uOlgaMarieFlare", "beastEresh", "uOlgaMarieAqua", "uOlgaMarieGrand", "uOlgaMarieStellar", "unBeastOlgaMarie", "aquaFragment", "unknown", "agarthaPenth", "cccFinaleEmiyaAlter", "salemAbby", "OTHER", "ALL", "EXTRA", "MIX", "EXTRA1", "EXTRA2", "uOlgaMarieFlareCollection", "uOlgaMarieAquaCollection", "uOlgaMarieGrandCollection", "uOlgaMarieStellarCollection", "atlasUnmappedClass", "grandSaber", "grandArcher", "grandLancer", "grandRider", "grandCaster", "grandAssassin", "grandBerserker", "grandShielder", "grandRuler", "grandAlterego", "grandAvenger", "grandMoonCancer", "grandForeigner", "grandPretender", "grandUnBeastUOlgaMarieAlienGod", "grandUnBeastDraco", "grandUnBeastEresh", "grandUnBeastUOlgaMarie"]); export const attribute = z.enum(["none", "default", "human", "sky", "earth", "star", "beast", "void"]); export const trait = z.enum(["unknown", "genderMale", "genderFemale", "genderUnknown", "classSaber", "classLancer", "classArcher", "classRider", "classCaster", "classAssassin", "classBerserker", "classShielder", "classRuler", "classAlterEgo", "classAvenger", "classDemonGodPillar", "classLoreGrandCaster", "classBeastI", "classBeastII", "classMoonCancer", "classBeastIIIR", "classForeigner", "classBeastIIIL", "classBeastUnknown", "classPretender", "classUOlgaMarie", "classUOlgaMarieGrand", "classGrandUnBeastUOlgaMarieAlienGod", "classAquaFragment", "classUOlgaMarieStellar", "classUnBeastOlgaMarie", "classGrandSaber", "classGrandLancer", "classGrandArcher", "classGrandRider", "classGrandCaster", "classGrandAssassin", "classGrandBerserker", "classGrandShielder", "classGrandRuler", "classGrandAlterego", "classGrandAvenger", "classGrandMoonCancer", "classGrandForeigner", "classGrandPretender", "classGrandUnBeast", "attributeSky", "attributeEarth", "attributeHuman", "attributeStar", "attributeBeast", "alignmentLawful", "alignmentChaotic", "alignmentNeutral", "alignmentGood", "alignmentEvil", "alignmentBalanced", "alignmentMadness", "alignmentSummer", "basedOnServant", "human", "undead", "artificialDemon", "demonBeast", "daemon", "demon", "soldier", "amazoness", "skeleton", "zombie", "ghost", "automata", "golem", "spellBook", "homunculus", "lamia", "centaur", "werebeast", "chimera", "wyvern", "dragonType", "gazer", "handOrDoor", "demonGodPillar", "oni", "hand", "door", "threatToHumanity", "divine", "humanoid", "dragon", "dragonSlayer", "roman", "wildbeast", "atalante", "saberface", "weakToEnumaElish", "riding", "arthur", "skyOrEarth", "skyOrEarthServant", "brynhildsBeloved", "undeadOrDaemon", "undeadOrDemon", "demonic", "skyOrEarthExceptPseudoAndDemi", "skyOrEarthExceptPseudoAndDemiServant", "divineOrDaemonOrUndead", "divineOrDemonOrUndead", "saberClassServant", "superGiant", "king", "greekMythologyMales", "illya", "feminineLookingServant", "argonaut", "associatedToTheArgo", "genderCaenisServant", "hominidaeServant", "blessedByKur", "demonicBeastServant", "canBeInBattle", "notBasedOnServant", "livingHuman", "cardArts", "cardBuster", "cardQuick", "cardExtra", "buffPositiveEffect", "buffNegativeEffect", "buffIncreaseDamage", "buffIncreaseDefence", "buffDecreaseDamage", "buffDecreaseDefence", "buffMentalEffect", "buffPoison", "buffCharm", "buffPetrify", "buffStun", "buffBurn", "buffSpecialResistUp", "buffSpecialResistDown", "buffEvadeAndInvincible", "buffSureHit", "buffNpSeal", "buffEvade", "buffInvincible", "buffTargetFocus", "buffGuts", "skillSeal", "buffCurse", "buffAtkUp", "buffPowerModStrUp", "buffDamagePlus", "buffNpDamageUp", "buffCritDamageUp", "buffCritRateUp", "buffAtkDown", "buffPowerModStrDown", "buffDamageMinus", "buffNpDamageDown", "buffCritDamageDown", "buffCritRateDown", "buffDeathResistDown", "buffDefenceUp", "buffMaxHpUpPercent", "buffMaxHpDownPercent", "buffMaxHpUp", "buffMaxHpDown", "buffImmobilize", "buffIncreasePoisonEffectiveness", "buffPigify", "buffCurseEffectUp", "buffTerrorStunChanceAfterTurn", "buffConfusion", "buffOffensiveMode", "buffDefensiveMode", "buffLockCardsDeck", "buffDisableColorCard", "buffChangeField", "buffIncreaseDefenceAgainstIndividuality", "buffDefUp", "buffInvinciblePierce", "buffHpRecoveryPerTurn", "buffNegativeEffectImmunity", "buffNegativeEffectAtTurnEnd", "attackPhysical", "attackProjectile", "attackMagical", "criticalHit", "faceCard", "cardNP", "kingproteaGrowth", "kingproteaInfiniteProliferation", "kingproteaProliferation", "kingproteaProliferationNPDefense", "fieldSunlight", "fieldShore", "fieldForest", "fieldBurning", "fieldCity", "shadowServant", "aoeNP", "stNP", "giant", "childServant", "buffSpecialInvincible", "buffSkillRankUp", "buffSleep", "nobunaga", "fieldImaginarySpace", "existenceOutsideTheDomain", "curse", "fieldShoreOrImaginarySpace", "shutenOnField", "shuten", "genji", "vengeance", "enemyGardenOfSinnersLivingCorpse", "enemyGardenOfSinnersApartmentGhostAndSkeleton", "enemyGardenOfSinnersBaseModel", "enemyGardenOfSinnersVengefulSpiritOfSevenPeople", "enemySaberEliWerebeastAndHomunculusAndKnight", "enemySaberEliSkeletonAndGhostAndLamia", "enemySaberEliBugAndGolem", "enemySeraphEater", "enemySeraphShapeshifter", "enemySeraphTypeI", "enemySeraphTypeSakura", "enemyHimejiCastleKnightAndGazerAndMassProduction", "enemyHimejiCastleDronesAndHomunculusAndAutomata", "enemyHimejiCastleSkeletonAndScarecrow", "enemyGuda3MiniNobu", "enemyDavinciTrueEnemy", "enemyDavinciFalseEnemy", "enemyCaseFilesRareEnemy", "enemyLasVegasBonusEnemy", "enemySummerCampRareEnemy", "enemyLittleBigTenguTsuwamonoEnemy", "eventSaberWars", "eventRashomon", "eventOnigashima", "eventOnigashimaRaid", "eventPrisma", "eventPrismaWorldEndMatch", "eventNeroFest2", "eventGuda2", "eventNeroFest3", "eventSetsubun", "eventApocrypha", "eventBattleInNewYork1", "eventOniland", "eventOoku", "eventGuda4", "eventLasVegas", "eventBattleInNewYork2", "eventSaberWarsII", "eventSummerCamp", "eventGuda5", "cursedBook", "buffCharmFemale", "mechanical", "fae", "hasCostume", "weakPointsRevealed", "chenGongNpBlock", "knightsOfTheRound", "divineSpirit", "buffNullifyBuff", "enemyGudaMiniNobu", "burningLove", "buffStrongAgainstWildBeast", "buffStrongAgainstDragon", "fairyTaleServant", "classBeastIV", "havingAnimalsCharacteristics", "like", "exaltation", "gubijin", "yuMeiren", "milleniumCastle", "protoMerlinNPChargeBlock", "valkyrie", "immuneToPigify", "summerModeServant", "shinsengumiServant", "ryozanpaku", "demonUnused", "levitating", "obstacleMaker", "defender", "hasGoddessMetamorphosis", "servantsWithSkyAttribute", "moon", "cardWeak", "cardStrong", "servant", "shadow", "chenGongNp", "cantBeSacrificed", "gutsBlock", "classBeastILost", "holdingHolyGrail", "standardClassServant", "classBeast", "classBeastVI", "classBeastVIBoss", "buffBound", "buffDamageCut", "marking", "manuscriptComplete", "myFairSoldier", "zeroStarServant", "oneStarServant", "twoStarServant", "threeStarServant", "fourStarServant", "fiveStarServant", "wrathOfTheEnshrinedDeity", "caitCuCerpriestessAscension0To2", "caitCuCerpriestessAscension3To4", "fieldAir", "caitCuCerpriestessOnTheField", "buffNpPerTurn", "buffStarPerTurn", "burnEffectivenessUp", "murasamaAscension0", "classUOlgaMarieFlare", "elementalsWrath", "buffBuffSuccessRateUp", "groupServant", "takeruDummyTrait", "artsBuff", "busterBuff", "quickBuff", "FSNServant", "fieldDarkness", "magicBullet", "protagonistCorrection", "normalAokoBuff", "magicBulletAtkBuff", "demeritFunction", "extraBuff", "robinCounter", "kuonjiAliceHasSkill3", "kuonjiAliceStage3", "instantDeathFunction", "forceInstantDeathFunction", "buffGutsOnInstantDeath", "robinAllGone", "classBeastEresh", "alignmentBeast", "bunnyServant", "buffSpecialDmgAgainstAlignmentGood", "buffSpecialDmgAgainstAlignmentEvil", "hasSupereffectiveNPAgainstAlignmentGood", "hasSupereffectiveNPAgainstAlignmentEvil", "happyHalloween", "happyHalloweenCounter", "protectedByBBDubai", "notProtectedByBBDubai", "canFlyInSpace", "buffSpecialInvinciblePierce", "sakuraSeries", "buffDefenceDown", "fieldHeaven", "fieldHell", "markOfSin", "quickChain", "artsChain", "busterChain", "mightyChain", "braveChain", "chainError", "classBeastDraco"]); export const niceTrait = z.object({id: z.number().int(), name: trait, negative: z.boolean().nullable().optional()}); export const basicCostume = z.object({id: z.number().int(), costumeCollectionNo: z.number().int(), battleCharaId: z.number().int(), shortName: z.string()}); export const basicServant = z.object({id: z.number().int(), collectionNo: z.number().int(), name: z.string(), originalName: z.string(), overwriteName: z.string().nullable().optional(), originalOverwriteName: z.string().nullable().optional(), type: niceSvtType, flag: niceSvtFlag, flags: z.array(niceSvtFlagOriginal), classId: z.number().int(), className: z.union([svtClass, z.string()]), attribute: attribute, traits: z.array(niceTrait), rarity: z.number().int(), atkMax: z.number().int(), hpMax: z.number().int(), face: z.string().min(1).max(2083), costume: z.record(z.string(), basicCostume)}); export const mCAssets = z.object({male: z.string().min(1).max(2083), female: z.string().min(1).max(2083)}); export const basicMysticCode = z.object({id: z.number().int(), name: z.string(), item: mCAssets}); export const basicCommandCode = z.object({id: z.number().int(), collectionNo: z.number().int(), name: z.string(), rarity: z.number().int(), face: z.string().min(1).max(2083)}); export const basicReversedSkillTd = z.object({servant: z.array(basicServant).optional(), MC: z.array(basicMysticCode).optional(), CC: z.array(basicCommandCode).optional()}); export const basicReversedSkillTdType = z.object({basic: basicReversedSkillTd.nullable().optional()}); export const basicTdReverse = z.object({id: z.number().int(), name: z.string(), ruby: z.string(), reverse: basicReversedSkillTdType.nullable().optional()}); export const getApiBasicRegionNPSearchResponse = z.array(basicTdReverse); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Find and get NP data * * GET /basic/{region}/NP/search */ export const getApiBasicRegionNPSearch = async (args: GetApiBasicRegionNPSearchArgs, options?: GetApiBasicRegionNPSearchOptions) => { const {baseUrl = "https://api.atlasacademy.io", fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.reverse != null) query.append("reverse", String(args.reverse)) if (args.name != null) query.append("name", String(args.name)) for (const item of args.card ?? []) query.append("card", String(item)) for (const item of args.individuality ?? []) query.append("individuality", String(item)) for (const item of args.hits ?? []) query.append("hits", String(item)) for (const item of args.strengthStatus ?? []) query.append("strengthStatus", String(item)) for (const item of args.numFunctions ?? []) query.append("numFunctions", String(item)) if (args.minNpNpGain != null) query.append("minNpNpGain", String(args.minNpNpGain)) if (args.maxNpNpGain != null) query.append("maxNpNpGain", String(args.maxNpNpGain)) if (args.svalsContain != null) query.append("svalsContain", String(args.svalsContain)) for (const item of args.triggerSkillId ?? []) query.append("triggerSkillId", String(item)) if (args.lang != null) query.append("lang", String(args.lang)) const url = `${baseUrl.replace(/\/+$/, '')}/basic/${encodeURIComponent(String(args.region))}/NP/search${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(getApiBasicRegionNPSearchResponse, await res.json()) };