feat(nano): federating hasJoined multiplexer with per-source UUID namespacing

This commit is contained in:
flyemoji committed 2026-07-12 02:09:47 +09:00
1 parent 667c6d33d2
commit ff550c41ef
5 files changed
+362 -1

No files matched your search

+35
View File
@@ -439,6 +439,41 @@ paths:
'503':
$ref: '#/components/responses/ServiceUnavailable'
/session/minecraft/hasJoined:
get:
tags: [nano]
operationId: hasJoined
summary: Multi-source session verifier (Felis-nano hasJoined multiplexer).
description: >-
Velocity's authlib is pointed here via -Dmojang.sessionserver or a thin login
hook. Unauthenticated — the vanilla sessionserver protocol carries no token. The
query is fanned out to the configured Yggdrasil roots in priority order (the
Mojang identity source first); the first source to validate the serverId hash
wins. A non-identity source's self-asserted UUID is rewritten into a per-source
namespace (UUIDv3) before return, so it can never land in Mojang's UUID space.
A rejected or barred login is 204, which authlib maps to a verify failure.
x-felis-face: [internal]
x-felis-tier: public
security: []
parameters:
- { name: username, in: query, required: true, schema: { type: string } }
- { name: serverId, in: query, required: true, schema: { type: string } }
- { name: ip, in: query, required: false, schema: { type: string } }
responses:
'200':
description: A source validated the session; the canonical game profile.
content:
application/json:
schema:
type: object
required: [id, name]
properties:
id: { type: string, description: Canonical UUID, undashed 32-hex. }
name: { type: string }
properties: { type: array, items: { type: object } }
'204':
description: No source validated the session, or the resolved UUID is barred.
# -------------------------------------------------- internal: servers ------
/api/v1/servers:
get: