@ix-xs/metamob.api 1.0.9 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,10 +1,6 @@
1
- <div align=center>
2
- <span style="font-size:30px;">@ix-xs/metamob.api</span><br>
3
- <br>
4
- </div>
5
-
6
1
  <img align=right src="https://metamob.fr/img/otomai.png">
7
2
  <h1><img src="https://metamob.fr/img/logo.png">Metamob</h1>
3
+ <h3>Gérez vos monstres de l'Eternelle Moisson sur Dofus !</h3>
8
4
  <a href="https://metamob.fr/connexion">Connectez-vous</a> ou <a href="https://metamob.fr/inscription">Inscrivez-vous</a> pour profiter des avantages du site :
9
5
  <ul>
10
6
  <li>Suivez votre avancement dans la quête</li>
@@ -15,106 +11,262 @@
15
11
  </ul>
16
12
  <br>
17
13
  <br>
18
- <h1>🌐API</h1>
19
- Une clé API sert à interroger les données de Metamob pour pouvoir les utiliser ailleurs: dans une feuille Google Sheets, sur une application web, dans un bot Discord...
20
- <br><br>
21
- Vous trouverez plus d'informations dans <a href="https://metamob.fr/aide/api">la page d'aide</a>.
22
- <br><br>
23
- <span style="background-color: DarkRed;">Utiliser une clé API requiert des connaissances en développement. Si vous ne savez pas ce qu'est une API ni comment l'utiliser, ce n'est pas la peine de créer une clé.<br>
24
- Les clés API sont automatiquement supprimées au bout de 90 jours sans utilisation.</span>
25
- <br>
26
- <br>
27
- <h3> 🗝️Récupérer une clé </h3>
28
- Pour créer votre clé, rendez-vous dans <a href="https://metamob.fr/utilisateur/mon_profil">votre espace</a> et cliquez sur l'onglet "API".
29
- Vous devrez saisir un nom. Gardez à l'esprit que vous ne pouvez créer qu'une seule clé API pour l'instant.<br>
30
- <b>Votre clé sera immédiatement utilisable.</b>
31
- <br>
32
- <h2>✨Installation</h2>
33
14
 
34
- `npm install @ix-xs/metamob.api`
35
- <br>
36
- <h2>👀Utilisation</h2>
37
- <h3>1. Créez un nouveau client en fournissant votre clé API Metamob :</h3>
15
+ # 🔥 @ix-xs/metamob.api
16
+
17
+ <div align="center">
18
+
19
+ ![Node.js](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white)
20
+ ![JavaScript](https://img.shields.io/badge/javascript-%23323330.svg?style=for-the-badge&logo=javascript&logoColor=%23F7DF1E)
21
+ ![NPM](https://img.shields.io/badge/NPM-%23CB3837.svg?style=for-the-badge&logo=npm&logoColor=white)
22
+ ![GitHub](https://img.shields.io/badge/github-%23121011.svg?style=for-the-badge&logo=github&logoColor=white)
23
+
24
+ **🚀 SDK JavaScript officieux pour l'API Metamob - Dofus 🐉**
25
+
26
+ *Une librairie performante pour interagir avec l'écosystème Dofus via Metamob*
27
+
28
+ [![npm version](https://badge.fury.io/js/%40ix-xs%2Fmetamob.api.svg)](https://www.npmjs.com/package/@ix-xs/metamob.api)
29
+ [![Downloads](https://img.shields.io/npm/dm/@ix-xs/metamob.api.svg)](https://www.npmjs.com/package/@ix-xs/metamob.api)
30
+ [![License](https://img.shields.io/npm/l/@ix-xs/metamob.api.svg)](https://github.com/ix-xs/metamob.api/blob/main/LICENSE)
31
+
32
+ </div>
33
+
34
+ ---
35
+
36
+ ## 🌟 Aperçu
37
+
38
+ **@ix-xs/metamob.api** est un SDK JavaScript moderne et puissant conçu spécialement pour l'API Metamob, permettant aux développeurs de créer facilement des applications Dofus avec une intégration fluide et performante.
39
+
40
+ ### ✨ Fonctionnalités principales
41
+
42
+ - 🔥 **Cache intelligent** avec synchronisation automatique disque/mémoire
43
+ - ⚡ **Performances optimales** grâce à un système de cache avancé
44
+ - 🛡️ **Sécurité renforcée** avec écriture atomique des fichiers
45
+ - 🎯 **API moderne** avec support complet TypeScript (jsdoc)
46
+ - 📖 **Documentation complète** avec exemples pratiques
47
+ - 🔄 **Rate limiting** automatique avec retry intelligent
48
+ - 🌐 **Support complet** de toutes les endpoints Metamob
49
+
50
+ ---
51
+
52
+ ## 🚀 Installation rapide
53
+
54
+ ```bash
55
+ # NPM
56
+ npm install @ix-xs/metamob.api
38
57
 
39
- ```js
40
- const MetamobAPI = require("@ix-xs/metamob.api");
58
+ # Yarn
59
+ yarn add @ix-xs/metamob.api
41
60
 
42
- const client = new MetamobAPI({ apiKey:"votre_clé_api" });
61
+ # PNPM
62
+ pnpm add @ix-xs/metamob.api
43
63
  ```
44
64
 
45
- <img src="https://user-images.githubusercontent.com/114710533/234149976-268042b8-9300-4fda-92f8-fa781541abad.png">
65
+ ### 📋 Prérequis
46
66
 
47
- <br>
48
- <h3>2. Liste des appels possibles</h3>
49
- <br>
67
+ - **Node.js** >= 18.0.0
68
+ - **NPM** >= 8.0.0
69
+ - Une clé API Metamob valide
50
70
 
51
- Méthode | options | Description |
52
- | --- | --- | --- |
53
- | `getUser()` | `username`:string; | Récupère les informations d'un utilisateur. Non sensible à la casse. |
54
- | `getUserMonsters()` | `username`:string;<br>{<br>`type?`:string;<br>`monstre?`:string;<br>`etape?`:string;<br>`quantite?`:string;<br>`etat?`:string;<br>} | Récupère les monstres d'un utilisateur. Le nom d'utilisateur n'est pas sensible à la casse. |
55
- | `getMonsters()` | {<br>`monstre?`:string;<br>`etape?`:string;<br>`type?`:string;<br>} | Récupère les monstres. |
56
- | `getServers()` | `server?`:string; | Récupère les serveurs. |
57
- | `getKralamoures()` | {<br>`serveur?`:string;<br>`date_debut?`:string;<br>`date_fin?`:string;<br>} | Récupère les kralamoures. |
58
- | `getZones()` | `zone?`:string; | Récupère les zones. |
59
- | `getSouszones()` | `souszone?`:string; | Récupère les sous-zones. |
60
- | `putUserMonsters()` | `username`:string<br>`uniqueId`:string<br>`body`:Array<{<br>`monstre`:string;<br>`quantite?`:string;<br>`etat?`:string;<br>}> | Met à jour les informations de monstre d'un compte utilisateur.<br>Le champ quantite indique l'opération à effectuer sur la quantité:<br>• Si la quantité renseigner commence par "===", la quantité du monstre sera forcée à cette valeur.<br>• Si la quantité renseigner commence par "+", la quantité du monstre sera incrémenter de cette valeur<br>• Si la quantité renseigner commence par "-", la quantité du monstre sera décrémenter de cette valeur |
61
- | `resetUserMonsters()` | `username`:string;<br>`uniqueId`:string; | Réinitialise les monstres sur le compte. Cela signifie que toutes les informations relatives aux monstres seront supprimées !<br>Les monstres seront mis à l'état aucun (ni recherché ni proposé), avec une quantité nulle (0). |
71
+ ---
62
72
 
63
- <br>
64
- <h3>3. Exemples</h3>
65
- <br>
73
+ ## 💡 Utilisation de base
74
+
75
+ ```javascript
76
+ const metamobAPI = require("@ix-xs/metamob.api");
77
+ const client = new metamobAPI("VOTRE_CLÉ_API_METAMOB");
66
78
 
79
+ // Utilisation du cache (recommandé)
80
+ console.log(client.cache.servers); // Serveurs en cache
81
+ console.log(client.cache.monsters); // Monstres en cache
82
+ console.log(client.cache.areas); // Zones en cache
67
83
 
68
- ```js
69
- const MetamobAPI = require("@ix-xs/metamob.api");
84
+ // Ou récupération via API
85
+ const servers = await client.getServers();
86
+ const user = await client.getUser("Ix-xs");
87
+ const monsters = await client.getUserMonsters("Ix-xs");
88
+ ```
70
89
 
71
- const client = new MetamobAPI({ apiKey:"votre_clé_api" });
90
+ ---
72
91
 
73
- // Renvoie les informations de l'utilisateur
74
- client.getUser("popop").then(console.log);
92
+ ## 🏗️ Architecture du cache
75
93
 
76
- // Renvoie les monstres "proposés" dont l'utilisateur possède en + de 1 exemplaire
77
- client.getUserMonsters("popop", { etat:"propose", quantite:">1" }).then(console.log);
78
- // Renvoie les monstres de l'utilisateur à l'étape 20
79
- client.getUserMonsters("popop", { etape:"20" }).then(console.log);
94
+ ### 🧠 Cache intelligent multicouche
95
+
96
+ Notre système de cache combine :
97
+
98
+ - **📁 Cache disque** : Persistance des données via JSON
99
+ - **💾 Cache mémoire** : Accès ultra-rapide via `require()`
100
+ - **🔄 Synchronisation automatique** : Mise à jour seamless
101
+ - **🛡️ Écriture atomique** : Prévention de la corruption des données
102
+
103
+ ```javascript
104
+ // Le cache est automatiquement synchronisé
105
+ await client.getServers(); // Met à jour le cache si nécessaire
106
+
107
+ // Accès instantané depuis le cache mémoire
108
+ const servers = client.cache.servers;
109
+ ```
80
110
 
81
- // Renvoie la liste de tous les monstres
82
- client.getMonsters().then(console.log);
83
- // Renvoie la liste de tous les archimonstres
84
- client.getMonsters({ type:"archimonstre" }).then(console.log);
111
+ ### 📊 Types de cache disponibles
85
112
 
86
- // Renvoie la liste de tous les serveurs
87
- client.getServers().then(console.log);
88
- // Renvoie les informations sur le serveur "Tylezia"
89
- client.getServers("Tylezia").then(console.log);
113
+ | Type | Description | Endpoint |
114
+ |------|-------------|----------|
115
+ | `servers` | Serveurs Dofus | `/serveurs` |
116
+ | `monsters` | Base de données des monstres | `/monstres` |
117
+ | `areas` | Zones de jeu | `/zones` |
118
+ | `subareas` | Sous-zones détaillées | `/sous-zones` |
90
119
 
91
- // Renvoie la liste des ouvertures prévues entre la date du jour et 1 mois plus tard
92
- client.getKralamoures().then(console.log);
93
- // Renvoie la liste des ouvertures prévues entre la date du jour et le 01 juin 2024 sur le serveur Tylezia
94
- client.getKralamoures({ serveur:"Tylezia", date_fin:"2023-06-01" }).then(console.log);
120
+ ---
95
121
 
96
- // Renvoie la liste de toutes les zones
97
- client.getZones().then(console.log);
98
- // Renvoie les informations sur la zone Amakna
99
- client.getZones("Amakna").then(console.log);
122
+ ## 🔧 API complète
100
123
 
101
- // Renvoie la liste de toutes les sous-zones.
102
- client.getSouszones().then(console.log);
103
- // Renvoie les informations sur la sous-zones Aerdala
104
- client.getSouszones("Aerdala").then(console.log);
124
+ ### 👤 Gestion des utilisateurs
105
125
 
106
- // La quantité du monstre Arakne sera incrémenter de 5 et passera à l'état proposé
107
- // La quantité du monstre Larchimaide la Poussée passera à 3
108
- // La quantité du monstre Bouftou Royal sera décrémenter de 2
109
- client.putUserMonsters("nom_utilisateur", "id_unique_utilisateur", [
110
- { monstre:"Arakne", quantite:"+5", etat:"propose" },
111
- { monstre:"Larchimaide la Poussée", quantite:"===3" },
112
- { monstre:"Bouftou Royal", quantite:"-2" },
113
- ]).then(console.log);
126
+ ```javascript
127
+ // Informations utilisateur
128
+ const user = await client.getUser("pseudo");
114
129
 
115
- // Tous les monstres de l'utilisateur seront réinitialiser (quantite à 0 et aucun état)
116
- client.resestUserMonsters("pseudo_utilisateur", "id_unique_utilisateur").then(console.log);
130
+ // Monstres d'un utilisateur
131
+ const userMonsters = await client.getUserMonsters("pseudo");
132
+
133
+ // Mise à jour des monstres
134
+ await client.setUserMonsters("pseudo", "unique_id", [
135
+ { monstre: "Arakne", etat: "recherche", quantite: 5 },
136
+ { monstre: "Boufton Blanc", etat: "propose", quantite: 2 }
137
+ ]);
138
+
139
+ // Réinitialisation des monstres
140
+ await client.resetUserMonsters("pseudo", "unique_id");
117
141
  ```
118
- <br>
119
- <br>
120
- Contactez moi sur Discord si vous rencontrez des difficultés : ix_xs
142
+
143
+ ### 🎮 Données de jeu
144
+
145
+ ```javascript
146
+ // Cache instantané (recommandé)
147
+ const servers = client.cache.servers;
148
+ const monsters = client.cache.monsters;
149
+ const areas = client.cache.areas;
150
+ const subareas = client.cache.subareas;
151
+
152
+ // Ou via API avec mise à jour du cache
153
+ const freshServers = await client.getServers();
154
+ const freshMonsters = await client.getMonsters();
155
+ const freshAreas = await client.getAreas();
156
+ const freshSubareas = await client.getSubareas();
157
+ ```
158
+
159
+ ### 🐙 Kralamoures
160
+
161
+ ```javascript
162
+ // Toutes les ouvertures kralamoures
163
+ const kralamoures = await client.getKralamoures();
164
+
165
+ // Avec filtres
166
+ const filtered = await client.getKralamoures({
167
+ server: "Salar",
168
+ start_date: "2025-01-01",
169
+ end_date: "2025-12-31"
170
+ });
171
+ ```
172
+
173
+ ---
174
+
175
+ ### 📊 Structure de réponse
176
+
177
+ Toutes les méthodes retournent un objet standardisé :
178
+
179
+ ```javascript
180
+ {
181
+ ok: boolean, // Succès de la requête
182
+ status: number, // Code de statut HTTP
183
+ statusText: string, // Message de statut
184
+ retryAfter?: number, // Délai avant retry (si 429)
185
+ errors?: string[], // Erreurs éventuelles
186
+ data?: any // Données de réponse
187
+ }
188
+ ```
189
+
190
+ ---
191
+
192
+ ## ⚡ Optimisations avancées
193
+
194
+ ### 🚀 Cache Strategy
195
+
196
+ ```javascript
197
+ // Préférez toujours le cache pour les données statiques
198
+ const servers = client.cache.servers; // ✅ Instantané
199
+ const servers = await client.getServers(); // ❌ Plus lent
200
+
201
+ // Le cache se met à jour automatiquement si nécessaire
202
+ ```
203
+
204
+ ### 🔄 Rate Limiting
205
+
206
+ Le SDK gère automatiquement :
207
+ - **Détection du rate limiting** (429)
208
+ - **Retry automatique** avec backoff
209
+ - **Headers de retry** respectés
210
+
211
+ ---
212
+
213
+ ## 🛠️ Configuration avancée
214
+
215
+ ### 📁 Structure des fichiers cache
216
+
217
+ ```
218
+ .cache/
219
+ ├── $.js # Index des caches
220
+ ├── servers.json # Serveurs
221
+ ├── monsters.json # Monstres
222
+ ├── areas.json # Zones
223
+ └── subareas.json # Sous-zones
224
+ ```
225
+
226
+ ### 🔧 Personnalisation
227
+
228
+ Le cache utilise :
229
+ - **write-file-atomic** pour l'écriture sécurisée
230
+ - **Formatage JSON** avec indentation (4 espaces)
231
+ - **Rechargement automatique** du cache Node.js
232
+
233
+ ---
234
+
235
+ ## 🏆 Contributeurs & Support
236
+
237
+ <div align="center">
238
+
239
+ ### 👨‍💻 Créateur
240
+
241
+ <img src="https://cdn.discordapp.com/avatars/782307250751406091/a_3f71f1ac5e1664038fdf33c2c408482e.gif" style="border-radius:0.5rem; width:5rem; height:auto">
242
+
243
+ **Ix-xs**
244
+ *Développeur auto-didacte & Passionné Dofus*
245
+
246
+ [![Discord](https://img.shields.io/badge/Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/user/ix-xs)
247
+ [![GitHub](https://img.shields.io/badge/GitHub-181717?style=for-the-badge&logo=github&logoColor=white)](https://github.com/ix-xs)
248
+
249
+ ---
250
+
251
+ ### 💬 Besoin d'aide ?
252
+
253
+ - 🐛 **Issues** : [GitHub Issues](https://github.com/ix-xs/metamob.api/issues)
254
+ - 💬 **Discord** : `Ix-xs` - Contact direct
255
+
256
+ </div>
257
+
258
+ ---
259
+
260
+ <div align="center">
261
+
262
+ **🌟 Si ce projet vous aide, n'hésitez pas à lui donner une étoile !**
263
+
264
+ [![Star on GitHub](https://img.shields.io/github/stars/ix-xs/metamob.api.svg?style=social)](https://github.com/ix-xs/metamob.api/stargazers)
265
+
266
+ *Développé avec ❤️ pour la communauté Dofus*
267
+
268
+ ---
269
+
270
+ **⚡ Propulsé par l'API Metamob | Optimisé pour la performance | Conçu pour les développeurs**
271
+
272
+ </div>