feat: vampire expansion chunk 4 — API routes and services

Adds six new routes (vampire-boss, vampire-upgrade, vampire-craft,
vampire-explore, siring, vampire-awakening) with matching siring and
awakening services, and all necessary request/response types.
This commit is contained in:
2026-04-16 09:48:50 -07:00
committed by Naomi Carrigan
parent 7f43dc725e
commit 8fa5d12f05
11 changed files with 2026 additions and 0 deletions
+20
View File
@@ -47,8 +47,12 @@ export type {
ApotheosisRequest,
ApotheosisResponse,
AuthResponse,
AwakeningRequest,
AwakeningResponse,
BossChallengeRequest,
BossChallengeResponse,
BuyAwakeningUpgradeRequest,
BuyAwakeningUpgradeResponse,
BuyConsecrationUpgradeRequest,
BuyConsecrationUpgradeResponse,
BuyEchoUpgradeRequest,
@@ -59,6 +63,10 @@ export type {
BuyGoddessUpgradeResponse,
BuyPrestigeUpgradeRequest,
BuyPrestigeUpgradeResponse,
BuySiringUpgradeRequest,
BuySiringUpgradeResponse,
BuyVampireUpgradeRequest,
BuyVampireUpgradeResponse,
ConsecrationRequest,
ConsecrationResponse,
CraftRecipeRequest,
@@ -93,11 +101,23 @@ export type {
PublicProfileResponse,
SaveRequest,
SaveResponse,
SiringRequest,
SiringResponse,
SyncNewContentResponse,
TranscendenceRequest,
TranscendenceResponse,
UpdateProfileRequest,
UpdateProfileResponse,
VampireBossChallengeRequest,
VampireBossChallengeResponse,
VampireCraftRequest,
VampireCraftResponse,
VampireExploreClaimableResponse,
VampireExploreCollectEventResult,
VampireExploreCollectRequest,
VampireExploreCollectResponse,
VampireExploreStartRequest,
VampireExploreStartResponse,
} from "./interfaces/api.js";
export type { Boss, BossStatus } from "./interfaces/boss.js";
export type {
+161
View File
@@ -754,14 +754,159 @@ interface GoddessExploreClaimableResponse {
claimable: boolean;
}
interface VampireBossChallengeRequest {
bossId: string;
}
interface VampireBossChallengeResponse {
won: boolean;
partyDPS: number;
bossDPS: number;
bossHpBefore: number;
bossMaxHp: number;
bossHpAtBattleEnd: number;
bossNewHp: number;
partyMaxHp: number;
partyHpRemaining: number;
rewards?: {
blood: number;
ichor: number;
soulShards: number;
upgradeIds: Array<string>;
equipmentIds: Array<string>;
bountyIchor: number;
};
casualties?: Array<{
thrallId: string;
killed: number;
}>;
/**
* HMAC-SHA256 signature of the updated state for anti-cheat chain continuity.
*/
signature?: string;
}
type SiringRequest = Record<string, never>;
interface SiringResponse {
/**
* Ichor earned from this siring.
*/
ichorEarned: number;
// eslint-disable-next-line unicorn/no-keyword-prefix -- API field name matches server response
newSiringCount: number;
}
interface BuySiringUpgradeRequest {
upgradeId: string;
}
interface BuySiringUpgradeResponse {
ichorRemaining: number;
purchasedUpgradeIds: Array<string>;
ichorBloodMultiplier: number;
ichorThrallsMultiplier: number;
ichorCombatMultiplier: number;
}
type AwakeningRequest = Record<string, never>;
interface AwakeningResponse {
/**
* Soul Shards earned from this awakening.
*/
soulShardsEarned: number;
// eslint-disable-next-line unicorn/no-keyword-prefix -- API field name matches server response
newAwakeningCount: number;
}
interface BuyAwakeningUpgradeRequest {
upgradeId: string;
}
interface BuyAwakeningUpgradeResponse {
soulShardsRemaining: number;
purchasedUpgradeIds: Array<string>;
soulShardsBloodMultiplier: number;
soulShardsCombatMultiplier: number;
soulShardsSiringThresholdMultiplier: number;
soulShardsSiringIchorMultiplier: number;
soulShardsMetaMultiplier: number;
}
interface BuyVampireUpgradeRequest {
upgradeId: string;
}
interface BuyVampireUpgradeResponse {
bloodRemaining: number;
ichorRemaining: number;
soulShardsRemaining: number;
}
interface VampireCraftRequest {
recipeId: string;
}
interface VampireCraftResponse {
recipeId: string;
bonusType: string;
bonusValue: number;
craftedBloodMultiplier: number;
craftedIchorMultiplier: number;
craftedCombatMultiplier: number;
materials: Array<{ materialId: string; quantity: number }>;
}
interface VampireExploreStartRequest {
areaId: string;
}
interface VampireExploreStartResponse {
areaId: string;
endsAt: number;
}
interface VampireExploreCollectRequest {
areaId: string;
}
interface VampireExploreCollectEventResult {
text: string;
bloodChange: number;
ichorChange: number;
materialGained: { materialId: string; quantity: number } | null;
thrallLostCount: number;
}
interface VampireExploreCollectResponse {
foundNothing: boolean;
nothingMessage?: string;
materialsFound: Array<{ materialId: string; quantity: number }>;
event: VampireExploreCollectEventResult | null;
}
interface VampireExploreClaimableResponse {
claimable: boolean;
}
export type {
AboutResponse,
ApiError,
ApotheosisRequest,
ApotheosisResponse,
AuthResponse,
AwakeningRequest,
AwakeningResponse,
BossChallengeRequest,
BossChallengeResponse,
BuyAwakeningUpgradeRequest,
BuyAwakeningUpgradeResponse,
BuyConsecrationUpgradeRequest,
BuyConsecrationUpgradeResponse,
BuyEchoUpgradeRequest,
@@ -772,6 +917,10 @@ export type {
BuyGoddessUpgradeResponse,
BuyPrestigeUpgradeRequest,
BuyPrestigeUpgradeResponse,
BuySiringUpgradeRequest,
BuySiringUpgradeResponse,
BuyVampireUpgradeRequest,
BuyVampireUpgradeResponse,
ConsecrationRequest,
ConsecrationResponse,
CraftRecipeRequest,
@@ -806,9 +955,21 @@ export type {
PublicProfileResponse,
SaveRequest,
SaveResponse,
SiringRequest,
SiringResponse,
SyncNewContentResponse,
TranscendenceRequest,
TranscendenceResponse,
UpdateProfileRequest,
UpdateProfileResponse,
VampireBossChallengeRequest,
VampireBossChallengeResponse,
VampireCraftRequest,
VampireCraftResponse,
VampireExploreClaimableResponse,
VampireExploreCollectEventResult,
VampireExploreCollectRequest,
VampireExploreCollectResponse,
VampireExploreStartRequest,
VampireExploreStartResponse,
};