InventoryHub
WebSocket hub for inventory operations. All operations verify that the character belongs to the authenticated user.
Endpoint: /inventoryHub
Authorization: All methods require authentication ([Authorize])
Methods
GetBagGrid
Get the bag grid state for a character (placement positions for items).
public async Task<InventoryGrid> GetBagGrid(Guid characterId, string seasonId)
Returns: InventoryGrid
{
width: number;
height: number;
items: GridItem[]; // Items with positions
}
GetBagItems
Get all items in a character's bag.
public async Task<IReadOnlyDictionary<Guid, Item>> GetBagItems(
Guid characterId,
string seasonId)
Returns: Record<string, Item> - Map of item ID to Item
Item Structure:
{
itemId: string;
baseTypeId: string;
name: string;
rarity: ItemRarity; // Normal, Magic, Rare, Unique
itemLevel: number;
prefixes: Modifier[];
suffixes: Modifier[];
implicits: Modifier[];
sockets: Socket[];
quality: number;
identified: boolean;
}
GetEquipped
Get equipped items for a character.
public async Task<IReadOnlyDictionary<EquipmentSlot, Item>> GetEquipped(
Guid characterId,
string seasonId)
EquipmentSlot Enum:
enum EquipmentSlot {
Head = 0,
Body = 1,
Gloves = 2,
Boots = 3,
MainHand = 4,
OffHand = 5,
Amulet = 6,
Ring1 = 7,
Ring2 = 8,
Belt = 9
}
MoveBagItem
Move an item within the bag grid.
public async Task<bool> MoveBagItem(
Guid characterId,
string seasonId,
Guid itemId,
int newX,
int newY)
Returns: boolean - true if move succeeded, false if position blocked
Equip
Equip an item from the bag to an equipment slot.
public async Task<EquipResult> Equip(
Guid characterId,
string seasonId,
Guid bagItemId,
EquipmentSlot slot)
Returns: EquipResult
{
success: boolean;
swappedItem?: Item; // Previously equipped item (now in bag)
errorMessage?: string;
}
Unequip
Unequip an item from an equipment slot to the bag.
public async Task<Item?> Unequip(
Guid characterId,
string seasonId,
EquipmentSlot slot)
Returns: The unequipped Item, or null if slot was empty.
GetStats
Get calculated character stats (including equipment bonuses).
public async Task<CharacterStats> GetStats(Guid characterId, string seasonId)
Returns: CharacterStats
{
baseStats: Record<string, number>; // Without equipment
totalStats: Record<string, number>; // With equipment bonuses
bonuses: StatBonus[]; // Breakdown of bonuses
}