Skip to content

feat(emotes): add GET and PUT /me/emote-bar - #111

Merged
diangogav merged 4 commits into
mainfrom
feat/emote-bar-api
Oct 15, 2026
Merged

diangogav merged 4 commits into
mainfrom
feat/emote-bar-api

Conversation

@diangogav

@diangogav diangogav commented Oct 14, 2026 •

Copy link
Copy Markdown
Owner

Summary

  • GET /me/emote-bar returns the player's 8 slots. A player without a saved bar gets the default bar.
  • PUT /me/emote-bar with body { "slots": string[8] } replaces the whole bar.
    • A default id is always accepted.
    • A pack ref is accepted only if the pack is an active EMOTE_PACK that the player can use (same rule as equipping) and <key>.json exists in the pack.
    • An invalid or unknown ref returns 400 and names the ref.
    • A pack the player cannot use returns 403.
  • Each slot is { ref, packId, assetUrl, packUrl, assetsExpiresAt }.
    • For pack emotes these are short-lived signed URLs for <key>.json and pack.json.
    • For default emotes they are all null, because the client bundles those animations.
  • A saved slot whose pack is no longer usable reads as a default emote. Storage is not rewritten.
  • Both routes use banGuard and Cache-Control: private, no-store, like the other signed-asset routes.

Chain context

This is part of the emote packs feature: emote packs become cosmetics, and each player builds an 8-slot emote bar from the default emotes and the emotes of packs they own. The duel server already relays any emote id up to 48 bytes (diangogav/EDOpro-server-ts#418).

This is a stacked chain into main. Merge the PRs in order. After each merge, retarget the next PR to main.

main
└── #109 EMOTE_PACK cosmetic type and pack validation
  └── #110 emote bar domain and persistence
    └── #111 GET and PUT /me/emote-bar 📍
      └── #112 emote bar fixes

Size

765 changed lines: 272 production, 493 tests. The maintainer accepted a size exception because the excess over the budget is tests.

Verification

  • bun test, bun run lint and bun run build --noEmit all pass on the top of the chain.

Base automatically changed from feat/emote-bar-domain to main October 15, 2026 00:04
@diangogav diangogav self-assigned this Oct 15, 2026
@diangogav
diangogav merged commit dbf80d7 into main Oct 15, 2026
@diangogav
diangogav deleted the feat/emote-bar-api branch October 15, 2026 00:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant