Appearance
Stockage persistant : dataStorage / userDataStorage / logsStorage
Trois stockages propres à l'appli (absents en widget), persistés côté serveur. Choisis selon la granularité.
| Service | Granularité | Forme | Usage |
|---|---|---|---|
kapp.dataStorage | 1 par app+channel | objet mutable | état global du jeu/outil |
kapp.userDataStorage | 1 par viewer | objet mutable | progression/inventaire d'un viewer |
kapp.logsStorage | liste empilée | append-only | historique (scores, événements) |
kapp.dataStorage (état global)
await get(): Promise<Record<string, any> | null>— l'état (ounullsi jamais écrit).await set(data): Promise<Record<string, any>>— remplace l'état complet (pas de merge).await delete(): Promise<void>— efface.
js
const state = (await kapp.dataStorage.get()) ?? { rounds: 0 };
state.rounds += 1;
await kapp.dataStorage.set(state); // relis + fusionne toi-même : set() écrase toutkapp.userDataStorage (état par viewer)
await set(user_id: number, data): Promise<void>— sauvegarde l'état d'un viewer.await reset(labels: string[] = []): Promise<void>— efface (tout silabelsvide).- Plus pratique : passer par l'objet
User—await user.getAppData(): Promise<AppDataData | null>await user.setAppData(data): Promise<this>(chaînable)
js
const user = await kapp.users.get('toto');
const data = (await user.getAppData()) ?? { score: 0 };
data.score += 10;
await user.setAppData(data);kapp.logsStorage (historique)
await get(count = 100): Promise<Record<string, any>[]>— les N entrées les plus récentes.await add(data): Promise<void>— ajoute une entrée.await clear(): Promise<void>— vide tout.
js
await kapp.logsStorage.add({ at: Date.now(), winner: user.login, points: 50 });Pièges
dataStorage.set()écrase : toujoursget()→ muter →set().userDataStorage/getAppData/setAppDatalèventAppMethodErrorhors contexte appli (n'existent pas en widget).logsStorageest append-only : pour de l'état mutable, utilisedataStorage/userDataStorage.