import { Observable } from 'rxjs'; import { GameAvatarMetadata } from '../../components/atoms/game-avatar/types'; import { GameProfile, HandleAvailabilityResponse, PublicGameProfile, UpsertGameProfileRequest } from './types'; import * as i0 from "@angular/core"; /** * GameProfileService — identidad de jugador transversal a todos los juegos del * factory (handle + avatar). Consume `/v1/game-profile/*`. * * Independiente del perfil de plataforma (`AuthService.user()`): un usuario * tiene los dos. El avatar es generativo (DiceBear, ver `game-avatar/svg.ts`) — * este servicio lo rasteriza a PNG y lo sube a `users/{uid}/game-avatar.png` * (path cross-app: un solo archivo por usuario, no uno por juego), y persiste * la receta (style/seed/backgroundColor) además de la URL para poder reabrir * el editor en el avatar exacto elegido. */ export declare class GameProfileService { private config; private http; private auth; private storage; private firebase; private image; private collections; private usersCol; private get baseUrl(); /** * Perfil del usuario autenticado. 404 si todavía no lo creó — estado * normal para cualquier cuenta nueva, no un error. Marcado con * EXPECTED_NOT_FOUND para que el interceptor de observabilidad no lo * loguee como `[error]` ni lo reporte a Analytics (mismo criterio que el * 401 del refresh de auth). */ getMyProfile(): Observable; /** * Lectura reactiva del mirror Firestore `/users/{uid}.gameProfile` (mismo * doc/regla que el perfil de plataforma, ver `UserMirrorDoc`) con fallback a * `getMyProfile()` — el mismo patrón que `profile-content.component.ts` * usa para el perfil clásico. `null` significa "sin perfil de juego * todavía" (nunca lanza; equivalente al 404 de `getMyProfile()`). * * Preferir este método sobre `getMyProfile()` en cualquier vista que deba * reflejar cambios de avatar/handle sin depender de que el componente se * vuelva a instanciar (ej. header del home). */ watchMyProfile(): Observable; /** Proyección pública de otro jugador — oponentes online, leaderboards. */ getPublicProfile(handle: string): Observable; /** Chequeo en vivo para el editor de handle. Nunca rechaza por handle inválido/tomado. */ checkHandleAvailability(handle: string): Observable; /** * Rasteriza la receta del avatar a PNG y la sube a `users/{uid}/game-avatar.png` * (archivo único por usuario — la próxima elección lo sobrescribe). Requiere * `StorageService` y `AuthService` configurados (`provideValtechFirebase` + * `provideValtechAuth`). */ uploadAvatar(avatar: Pick): Promise; /** * Sube el avatar elegido y guarda el perfil en un solo paso — el flujo que * usa el editor. `uploadAvatar` + `upsertProfile` quedan expuestos por * separado para consumers que ya tienen la URL (ej. re-guardar solo el * handle sin re-subir el avatar). */ saveProfile(req: UpsertGameProfileRequest): Promise; upsertProfile(req: UpsertGameProfileRequest): Promise; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵprov: i0.ɵɵInjectableDeclaration; }