node-leek 1.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.
Files changed (188) hide show
  1. package/README.md +109 -0
  2. package/dist/app.d.ts +1 -0
  3. package/dist/app.d.ts.map +1 -0
  4. package/dist/app.js +1 -0
  5. package/dist/autofighter.d.ts +2 -0
  6. package/dist/autofighter.d.ts.map +1 -0
  7. package/dist/autofighter.js +27 -0
  8. package/dist/boss_farming.d.ts +2 -0
  9. package/dist/boss_farming.d.ts.map +1 -0
  10. package/dist/boss_farming.js +33 -0
  11. package/dist/codegen/api/apis.d.ts +12 -0
  12. package/dist/codegen/api/apis.d.ts.map +1 -0
  13. package/dist/codegen/api/apis.js +33 -0
  14. package/dist/codegen/api/defaultApi.d.ts +239 -0
  15. package/dist/codegen/api/defaultApi.d.ts.map +1 -0
  16. package/dist/codegen/api/defaultApi.js +1071 -0
  17. package/dist/codegen/api.d.ts +3 -0
  18. package/dist/codegen/api.d.ts.map +1 -0
  19. package/dist/codegen/api.js +19 -0
  20. package/dist/codegen/model/aicode.d.ts +34 -0
  21. package/dist/codegen/model/aicode.d.ts.map +1 -0
  22. package/dist/codegen/model/aicode.js +47 -0
  23. package/dist/codegen/model/buy200Response.d.ts +27 -0
  24. package/dist/codegen/model/buy200Response.d.ts.map +1 -0
  25. package/dist/codegen/model/buy200Response.js +35 -0
  26. package/dist/codegen/model/buyRequest.d.ts +27 -0
  27. package/dist/codegen/model/buyRequest.d.ts.map +1 -0
  28. package/dist/codegen/model/buyRequest.js +35 -0
  29. package/dist/codegen/model/createFile200Response.d.ts +27 -0
  30. package/dist/codegen/model/createFile200Response.d.ts.map +1 -0
  31. package/dist/codegen/model/createFile200Response.js +29 -0
  32. package/dist/codegen/model/createFile200ResponseAi.d.ts +30 -0
  33. package/dist/codegen/model/createFile200ResponseAi.d.ts.map +1 -0
  34. package/dist/codegen/model/createFile200ResponseAi.js +53 -0
  35. package/dist/codegen/model/createFileRequest.d.ts +31 -0
  36. package/dist/codegen/model/createFileRequest.d.ts.map +1 -0
  37. package/dist/codegen/model/createFileRequest.js +44 -0
  38. package/dist/codegen/model/createFolder200Response.d.ts +26 -0
  39. package/dist/codegen/model/createFolder200Response.d.ts.map +1 -0
  40. package/dist/codegen/model/createFolder200Response.js +29 -0
  41. package/dist/codegen/model/createFolderRequest.d.ts +27 -0
  42. package/dist/codegen/model/createFolderRequest.d.ts.map +1 -0
  43. package/dist/codegen/model/createFolderRequest.js +35 -0
  44. package/dist/codegen/model/credentials.d.ts +31 -0
  45. package/dist/codegen/model/credentials.d.ts.map +1 -0
  46. package/dist/codegen/model/credentials.js +44 -0
  47. package/dist/codegen/model/deleteFileRequest.d.ts +26 -0
  48. package/dist/codegen/model/deleteFileRequest.d.ts.map +1 -0
  49. package/dist/codegen/model/deleteFileRequest.js +29 -0
  50. package/dist/codegen/model/deleteFolderRequest.d.ts +26 -0
  51. package/dist/codegen/model/deleteFolderRequest.d.ts.map +1 -0
  52. package/dist/codegen/model/deleteFolderRequest.js +29 -0
  53. package/dist/codegen/model/farmer.d.ts +110 -0
  54. package/dist/codegen/model/farmer.d.ts.map +1 -0
  55. package/dist/codegen/model/farmer.js +299 -0
  56. package/dist/codegen/model/farmerOpponent.d.ts +35 -0
  57. package/dist/codegen/model/farmerOpponent.d.ts.map +1 -0
  58. package/dist/codegen/model/farmerOpponent.js +68 -0
  59. package/dist/codegen/model/fightResult.d.ts +38 -0
  60. package/dist/codegen/model/fightResult.d.ts.map +1 -0
  61. package/dist/codegen/model/fightResult.js +80 -0
  62. package/dist/codegen/model/fightResume.d.ts +95 -0
  63. package/dist/codegen/model/fightResume.d.ts.map +1 -0
  64. package/dist/codegen/model/fightResume.js +182 -0
  65. package/dist/codegen/model/fightResumeLeeks1Inner.d.ts +27 -0
  66. package/dist/codegen/model/fightResumeLeeks1Inner.d.ts.map +1 -0
  67. package/dist/codegen/model/fightResumeLeeks1Inner.js +35 -0
  68. package/dist/codegen/model/folder.d.ts +31 -0
  69. package/dist/codegen/model/folder.d.ts.map +1 -0
  70. package/dist/codegen/model/folder.js +44 -0
  71. package/dist/codegen/model/garden.d.ts +30 -0
  72. package/dist/codegen/model/garden.d.ts.map +1 -0
  73. package/dist/codegen/model/garden.js +32 -0
  74. package/dist/codegen/model/gardenGarden.d.ts +52 -0
  75. package/dist/codegen/model/gardenGarden.d.ts.map +1 -0
  76. package/dist/codegen/model/gardenGarden.js +113 -0
  77. package/dist/codegen/model/gardenGardenMyCompositionsInner.d.ts +38 -0
  78. package/dist/codegen/model/gardenGardenMyCompositionsInner.d.ts.map +1 -0
  79. package/dist/codegen/model/gardenGardenMyCompositionsInner.js +86 -0
  80. package/dist/codegen/model/gardenGardenMyTeam.d.ts +32 -0
  81. package/dist/codegen/model/gardenGardenMyTeam.d.ts.map +1 -0
  82. package/dist/codegen/model/gardenGardenMyTeam.js +50 -0
  83. package/dist/codegen/model/getFarmerOpponents200Response.d.ts +27 -0
  84. package/dist/codegen/model/getFarmerOpponents200Response.d.ts.map +1 -0
  85. package/dist/codegen/model/getFarmerOpponents200Response.js +29 -0
  86. package/dist/codegen/model/getFilesContentRequest.d.ts +29 -0
  87. package/dist/codegen/model/getFilesContentRequest.d.ts.map +1 -0
  88. package/dist/codegen/model/getFilesContentRequest.js +32 -0
  89. package/dist/codegen/model/getSoloOpponents200Response.d.ts +27 -0
  90. package/dist/codegen/model/getSoloOpponents200Response.d.ts.map +1 -0
  91. package/dist/codegen/model/getSoloOpponents200Response.js +29 -0
  92. package/dist/codegen/model/ia.d.ts +37 -0
  93. package/dist/codegen/model/ia.d.ts.map +1 -0
  94. package/dist/codegen/model/ia.js +80 -0
  95. package/dist/codegen/model/item.d.ts +35 -0
  96. package/dist/codegen/model/item.d.ts.map +1 -0
  97. package/dist/codegen/model/item.js +68 -0
  98. package/dist/codegen/model/leek.d.ts +172 -0
  99. package/dist/codegen/model/leek.d.ts.map +1 -0
  100. package/dist/codegen/model/leek.js +350 -0
  101. package/dist/codegen/model/logindump.d.ts +34 -0
  102. package/dist/codegen/model/logindump.d.ts.map +1 -0
  103. package/dist/codegen/model/logindump.js +41 -0
  104. package/dist/codegen/model/models.d.ts +87 -0
  105. package/dist/codegen/model/models.d.ts.map +1 -0
  106. package/dist/codegen/model/models.js +331 -0
  107. package/dist/codegen/model/opponent.d.ts +32 -0
  108. package/dist/codegen/model/opponent.d.ts.map +1 -0
  109. package/dist/codegen/model/opponent.js +50 -0
  110. package/dist/codegen/model/publicLeek.d.ts +225 -0
  111. package/dist/codegen/model/publicLeek.d.ts.map +1 -0
  112. package/dist/codegen/model/publicLeek.js +494 -0
  113. package/dist/codegen/model/publicLeekAi.d.ts +30 -0
  114. package/dist/codegen/model/publicLeekAi.d.ts.map +1 -0
  115. package/dist/codegen/model/publicLeekAi.js +53 -0
  116. package/dist/codegen/model/publicLeekChipsInner.d.ts +27 -0
  117. package/dist/codegen/model/publicLeekChipsInner.d.ts.map +1 -0
  118. package/dist/codegen/model/publicLeekChipsInner.js +35 -0
  119. package/dist/codegen/model/saveFile200Response.d.ts +29 -0
  120. package/dist/codegen/model/saveFile200Response.d.ts.map +1 -0
  121. package/dist/codegen/model/saveFile200Response.js +32 -0
  122. package/dist/codegen/model/saveFileRequest.d.ts +27 -0
  123. package/dist/codegen/model/saveFileRequest.d.ts.map +1 -0
  124. package/dist/codegen/model/saveFileRequest.js +35 -0
  125. package/dist/codegen/model/startFarmerFightRequest.d.ts +26 -0
  126. package/dist/codegen/model/startFarmerFightRequest.d.ts.map +1 -0
  127. package/dist/codegen/model/startFarmerFightRequest.js +29 -0
  128. package/dist/codegen/model/startSoloFight200Response.d.ts +26 -0
  129. package/dist/codegen/model/startSoloFight200Response.d.ts.map +1 -0
  130. package/dist/codegen/model/startSoloFight200Response.js +29 -0
  131. package/dist/codegen/model/startSoloFightRequest.d.ts +27 -0
  132. package/dist/codegen/model/startSoloFightRequest.d.ts.map +1 -0
  133. package/dist/codegen/model/startSoloFightRequest.js +35 -0
  134. package/dist/codegen/model/team.d.ts +34 -0
  135. package/dist/codegen/model/team.d.ts.map +1 -0
  136. package/dist/codegen/model/team.js +62 -0
  137. package/dist/codegen/model/tournamentResume.d.ts +36 -0
  138. package/dist/codegen/model/tournamentResume.d.ts.map +1 -0
  139. package/dist/codegen/model/tournamentResume.js +47 -0
  140. package/dist/credentials/credentials-manager.d.ts +19 -0
  141. package/dist/credentials/credentials-manager.d.ts.map +1 -0
  142. package/dist/credentials/credentials-manager.js +80 -0
  143. package/dist/leek-sync/filelist/cached-filelist.d.ts +13 -0
  144. package/dist/leek-sync/filelist/cached-filelist.d.ts.map +1 -0
  145. package/dist/leek-sync/filelist/cached-filelist.js +49 -0
  146. package/dist/leek-sync/filelist/filelist.d.ts +24 -0
  147. package/dist/leek-sync/filelist/filelist.d.ts.map +1 -0
  148. package/dist/leek-sync/filelist/filelist.js +77 -0
  149. package/dist/leek-sync/filelist/leekfile.d.ts +18 -0
  150. package/dist/leek-sync/filelist/leekfile.d.ts.map +1 -0
  151. package/dist/leek-sync/filelist/leekfile.js +54 -0
  152. package/dist/leek-sync/leek-sync-client.d.ts +13 -0
  153. package/dist/leek-sync/leek-sync-client.d.ts.map +1 -0
  154. package/dist/leek-sync/leek-sync-client.js +95 -0
  155. package/dist/leek-sync/leekfile-source/leekfile-source.d.ts +15 -0
  156. package/dist/leek-sync/leekfile-source/leekfile-source.d.ts.map +1 -0
  157. package/dist/leek-sync/leekfile-source/leekfile-source.js +37 -0
  158. package/dist/leek-sync/leekfile-source/leekwars-source.d.ts +22 -0
  159. package/dist/leek-sync/leekfile-source/leekwars-source.d.ts.map +1 -0
  160. package/dist/leek-sync/leekfile-source/leekwars-source.js +114 -0
  161. package/dist/leek-sync/leekfile-source/localfile-source.d.ts +22 -0
  162. package/dist/leek-sync/leekfile-source/localfile-source.d.ts.map +1 -0
  163. package/dist/leek-sync/leekfile-source/localfile-source.js +184 -0
  164. package/dist/leeksync.d.ts +2 -0
  165. package/dist/leeksync.d.ts.map +1 -0
  166. package/dist/leeksync.js +15 -0
  167. package/dist/login.d.ts +2 -0
  168. package/dist/login.d.ts.map +1 -0
  169. package/dist/login.js +12 -0
  170. package/dist/node-leek-client/leek-wars-client.d.ts +46 -0
  171. package/dist/node-leek-client/leek-wars-client.d.ts.map +1 -0
  172. package/dist/node-leek-client/leek-wars-client.js +541 -0
  173. package/dist/node-leek-client/leekwars-frontend/Item.d.ts +80 -0
  174. package/dist/node-leek-client/leekwars-frontend/Item.d.ts.map +1 -0
  175. package/dist/node-leek-client/leekwars-frontend/Item.js +88 -0
  176. package/dist/node-leek-client/leekwars-frontend/Items.d.ts +5 -0
  177. package/dist/node-leek-client/leekwars-frontend/Items.d.ts.map +1 -0
  178. package/dist/node-leek-client/leekwars-frontend/Items.js +7077 -0
  179. package/dist/node-leek-client/leekwars-frontend/Notification.d.ts +41 -0
  180. package/dist/node-leek-client/leekwars-frontend/Notification.d.ts.map +1 -0
  181. package/dist/node-leek-client/leekwars-frontend/Notification.js +44 -0
  182. package/dist/node-leek-client/leekwars-frontend/SocketMessage.d.ts +76 -0
  183. package/dist/node-leek-client/leekwars-frontend/SocketMessage.d.ts.map +1 -0
  184. package/dist/node-leek-client/leekwars-frontend/SocketMessage.js +88 -0
  185. package/dist/node-leek-client/node-leek-client.d.ts +37 -0
  186. package/dist/node-leek-client/node-leek-client.d.ts.map +1 -0
  187. package/dist/node-leek-client/node-leek-client.js +203 -0
  188. package/package.json +25 -0
@@ -0,0 +1,541 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LeekWarsClient = void 0;
4
+ const defaultApi_js_1 = require("../codegen/api/defaultApi.js");
5
+ const aicode_js_1 = require("../codegen/model/aicode.js");
6
+ const fightResult_js_1 = require("../codegen/model/fightResult.js");
7
+ const createFile200ResponseAi_js_1 = require("../codegen/model/createFile200ResponseAi.js");
8
+ const SocketMessage_js_1 = require("./leekwars-frontend/SocketMessage.js");
9
+ const Notification_js_1 = require("./leekwars-frontend/Notification.js");
10
+ const Items_js_1 = require("./leekwars-frontend/Items.js");
11
+ function getSetterOf(header, attribute) {
12
+ return header.find(cookie => cookie.trim().startsWith(`${attribute}=`) && !cookie.startsWith(`${attribute}=deleted;`)) ?? `${attribute}=;`;
13
+ }
14
+ function getCookieToken(header) {
15
+ const cookie = getSetterOf(header ?? [], "token");
16
+ if (!cookie.includes("token="))
17
+ return "";
18
+ const value = cookie.split(";")[0].split("token=")[1];
19
+ return value !== undefined ? value : "";
20
+ }
21
+ function getPhpsessidToken(header) {
22
+ const cookie = getSetterOf(header ?? [], "PHPSESSID");
23
+ if (!cookie.includes("PHPSESSID="))
24
+ return "";
25
+ const value = cookie.split(";")[0].split("PHPSESSID=")[1];
26
+ return value !== undefined ? value : "";
27
+ }
28
+ class LeekWarsClient {
29
+ apiClient;
30
+ ready = false;
31
+ username;
32
+ password;
33
+ readonly;
34
+ socket;
35
+ token = "";
36
+ phpsessid = "";
37
+ currentRoom = "";
38
+ constructor(username, password, readonly = false) {
39
+ this.readonly = readonly;
40
+ this.username = username;
41
+ this.password = password;
42
+ this.socket = null;
43
+ this.apiClient = new defaultApi_js_1.DefaultApi();
44
+ }
45
+ async loginOnLeekwars() {
46
+ return this.apiClient.login({
47
+ login: this.username,
48
+ password: this.password,
49
+ keepConnected: true
50
+ }).then(async (r) => {
51
+ this.token = getCookieToken(r.response.headers["set-cookie"]);
52
+ this.phpsessid = getPhpsessidToken(r.response.headers["set-cookie"]);
53
+ this.apiClient.setApiKey(defaultApi_js_1.DefaultApiApiKeys.cookieAuth, this.token);
54
+ this.apiClient.setApiKey(defaultApi_js_1.DefaultApiApiKeys.phpsessid, this.phpsessid);
55
+ this.ready = true;
56
+ await this.connectWebSocket();
57
+ // Add on purpose delay to avoid TOO_MANY_REQUEST
58
+ await this.sleep(100);
59
+ return r.body.farmer;
60
+ })
61
+ .catch(err => {
62
+ if (err.statusCode == 429) { // TOO MANY REQUEST
63
+ return this.sleep(15000).then(() => this.loginOnLeekwars());
64
+ }
65
+ console.error("Can't connect " + this.username + " -> [" + err.statusCode + "] " + err.body.error);
66
+ throw err;
67
+ });
68
+ }
69
+ async close() {
70
+ this.socket?.close();
71
+ }
72
+ async sleep(delay) {
73
+ return new Promise(resolve => setTimeout(resolve, delay));
74
+ }
75
+ async getLeek(leek_id) {
76
+ if (!this.ready)
77
+ return null;
78
+ return this.apiClient.getLeek(leek_id)
79
+ .then(result => {
80
+ return result.body;
81
+ })
82
+ .catch(err => {
83
+ if (err.statusCode == 429) { // TOO MANY REQUEST
84
+ return this.sleep(15000).then(() => this.getLeek(leek_id));
85
+ }
86
+ console.error("Can't get Leek " + leek_id + " -> [" + err.statusCode + "] " + err.body.error);
87
+ return null;
88
+ });
89
+ }
90
+ async buy(item_id, quantity = 1) {
91
+ if (!this.ready)
92
+ return null;
93
+ if (this.readonly) {
94
+ console.error("Readonly mode, can't buy items");
95
+ return null;
96
+ }
97
+ return this.apiClient.buy({
98
+ itemId: item_id,
99
+ quantity: quantity
100
+ })
101
+ .then(async (result) => {
102
+ // Add on purpose delay to avoid TOO_MANY_REQUEST
103
+ await this.sleep(100);
104
+ return result.body;
105
+ })
106
+ .catch(err => {
107
+ if (err.statusCode == 429) { // TOO MANY REQUEST
108
+ return this.sleep(15000)
109
+ .then(() => this.buy(item_id, quantity));
110
+ }
111
+ console.error("Can't buy " + item_id + " " + quantity + " times -> [" + err.statusCode + "] " + err.body.error);
112
+ return null;
113
+ });
114
+ }
115
+ async fetchFiles(requests) {
116
+ if (!this.ready)
117
+ return [new aicode_js_1.Aicode()];
118
+ return this.apiClient.getFilesContent({
119
+ ais: JSON.stringify(requests)
120
+ })
121
+ .then(result => result.body)
122
+ .catch(err => {
123
+ if (err.statusCode == 429) { // TOO MANY REQUEST
124
+ return this.sleep(15000)
125
+ .then(() => this.fetchFiles(requests));
126
+ }
127
+ console.error("fetchFiles(" + requests + ") -> [" + err.statusCode + "] " + err.body.error);
128
+ return [];
129
+ });
130
+ }
131
+ async fetchFile(ai, timestamp) {
132
+ if (!this.ready)
133
+ return new aicode_js_1.Aicode();
134
+ const request = {};
135
+ request[ai] = timestamp;
136
+ return this.fetchFiles(request)
137
+ .then(result => result[0])
138
+ .catch(err => {
139
+ console.error("fetchFile -> [" + err.statusCode + "] " + err.body.error);
140
+ return new aicode_js_1.Aicode();
141
+ });
142
+ }
143
+ async saveFile(ai_id, code) {
144
+ if (!this.ready)
145
+ return 0;
146
+ if (this.readonly) {
147
+ console.error("Readonly mode, can't save file");
148
+ return 0;
149
+ }
150
+ return this.apiClient.saveFile({
151
+ aiId: ai_id,
152
+ code: code
153
+ })
154
+ .then(result => result.body.modified)
155
+ .catch(err => {
156
+ if (err.statusCode == 429) { // TOO MANY REQUEST
157
+ return this.sleep(15000)
158
+ .then(() => this.saveFile(ai_id, code));
159
+ }
160
+ console.error("saveFile " + ai_id + " (" + code.substring(0, 20) + ") -> [" + err.statusCode + "] " + err.body.error);
161
+ return 0;
162
+ });
163
+ }
164
+ async createFile(folder_id, name, version = 4) {
165
+ if (!this.ready)
166
+ return new createFile200ResponseAi_js_1.CreateFile200ResponseAi();
167
+ if (this.readonly) {
168
+ console.error("Readonly mode, can't create file");
169
+ return new createFile200ResponseAi_js_1.CreateFile200ResponseAi();
170
+ }
171
+ return this.apiClient.createFile({
172
+ folderId: folder_id,
173
+ name: name,
174
+ version: version
175
+ })
176
+ .then(result => result.body.ai)
177
+ .catch(err => {
178
+ if (err.statusCode == 429) { // TOO MANY REQUEST
179
+ return this.sleep(15000)
180
+ .then(() => this.createFile(folder_id, name, version));
181
+ }
182
+ console.error("createFile " + name + " (parent is " + folder_id + ") -> [" + err.statusCode + "] " + err.body.error);
183
+ return new createFile200ResponseAi_js_1.CreateFile200ResponseAi();
184
+ });
185
+ }
186
+ async createFolder(folder_id, name) {
187
+ if (!this.ready)
188
+ return -1;
189
+ if (this.readonly) {
190
+ console.error("Readonly mode, can't create folder");
191
+ return -1;
192
+ }
193
+ return this.apiClient.createFolder({
194
+ folderId: folder_id,
195
+ name: name
196
+ })
197
+ .then(result => result.body.id)
198
+ .catch(err => {
199
+ if (err.statusCode == 429) { // TOO MANY REQUEST
200
+ return this.sleep(15000)
201
+ .then(() => this.createFolder(folder_id, name));
202
+ }
203
+ console.error("createFolder " + name + " (parent is " + folder_id + ") -> [" + err.statusCode + "] " + err.body.error);
204
+ return -1;
205
+ });
206
+ }
207
+ async deleteFile(ai_id) {
208
+ if (!this.ready)
209
+ return;
210
+ if (this.readonly) {
211
+ console.error("Readonly mode, can't delete file");
212
+ return;
213
+ }
214
+ return this.apiClient.deleteFile({
215
+ aiId: ai_id,
216
+ })
217
+ .then(result => { })
218
+ .catch(err => {
219
+ if (err.statusCode == 429) { // TOO MANY REQUEST
220
+ return this.sleep(15000)
221
+ .then(() => this.deleteFile(ai_id));
222
+ }
223
+ console.error("deleteFile " + ai_id + " -> [" + err.statusCode + "] " + err.body.error);
224
+ });
225
+ }
226
+ async deleteFolder(folder_id) {
227
+ if (!this.ready)
228
+ return;
229
+ if (this.readonly) {
230
+ console.error("Readonly mode, can't delete folder");
231
+ return;
232
+ }
233
+ return this.apiClient.deleteFolder({
234
+ folderId: folder_id,
235
+ })
236
+ .then(result => result.body)
237
+ .catch(err => {
238
+ if (err.statusCode == 429) { // TOO MANY REQUEST
239
+ return this.sleep(15000)
240
+ .then(() => this.deleteFolder(folder_id));
241
+ }
242
+ console.error("deleteFolder " + folder_id + " -> [" + err.statusCode + "] " + err.body.error);
243
+ });
244
+ }
245
+ async getSoloOpponents(leek_id) {
246
+ return this.apiClient.getSoloOpponents(leek_id)
247
+ .then(result => result.body.opponents)
248
+ .catch(err => {
249
+ if (err.statusCode == 429) { // TOO MANY REQUEST
250
+ return this.sleep(15000)
251
+ .then(() => this.getSoloOpponents(leek_id));
252
+ }
253
+ console.error("getSoloOpponents " + leek_id + " -> [" + err.statusCode + "] " + err.body.error);
254
+ return [];
255
+ });
256
+ }
257
+ async startSoloFight(leek_id, target_id) {
258
+ if (!this.ready)
259
+ return -1;
260
+ if (this.readonly) {
261
+ console.error("Readonly mode, can't start fight");
262
+ return -1;
263
+ }
264
+ return this.apiClient.startSoloFight({
265
+ leekId: leek_id,
266
+ targetId: target_id
267
+ })
268
+ .then(async (result) => {
269
+ // Add on purpose delay to avoid TOO_MANY_REQUEST
270
+ await this.sleep(100);
271
+ return result.body.fight;
272
+ })
273
+ .catch(err => {
274
+ if (err.statusCode == 429) { // TOO MANY REQUEST
275
+ return this.sleep(15000)
276
+ .then(() => this.startSoloFight(leek_id, target_id));
277
+ }
278
+ console.error("startSoloFight " + leek_id + " vs " + target_id + " -> [" + err.statusCode + "] " + err.body);
279
+ return -1;
280
+ });
281
+ }
282
+ async getFarmerOpponents() {
283
+ if (!this.ready)
284
+ return [];
285
+ return this.apiClient.getFarmerOpponents()
286
+ .then(result => result.body.opponents)
287
+ .catch(err => {
288
+ if (err.statusCode == 429) { // TOO MANY REQUEST
289
+ return this.sleep(15000)
290
+ .then(() => this.getFarmerOpponents());
291
+ }
292
+ console.error("getFarmerOpponents -> [" + err.statusCode + "] " + err.body.error);
293
+ return [];
294
+ });
295
+ }
296
+ async startFarmerFight(target_id) {
297
+ if (!this.ready)
298
+ return -1;
299
+ if (this.readonly) {
300
+ console.error("Readonly mode, can't start fight");
301
+ return -1;
302
+ }
303
+ return this.apiClient.startFarmerFight({
304
+ targetId: target_id
305
+ })
306
+ .then(result => result.body.fight)
307
+ .catch(err => {
308
+ if (err.statusCode == 429) { // TOO MANY REQUEST
309
+ return this.sleep(15000)
310
+ .then(() => this.startFarmerFight(target_id));
311
+ }
312
+ console.error("startFarmerFight vs " + target_id + " -> [" + err.statusCode + "] " + err.body);
313
+ return -1;
314
+ });
315
+ }
316
+ async getFight(fight_id) {
317
+ if (!this.ready)
318
+ return new fightResult_js_1.FightResult();
319
+ return this.apiClient.getFight(fight_id)
320
+ .then(async (result) => {
321
+ await this.sleep(75);
322
+ return result.body;
323
+ })
324
+ .catch(err => {
325
+ if (err.statusCode == 429) { // TOO MANY REQUEST
326
+ return this.sleep(15000)
327
+ .then(() => this.getFight(fight_id));
328
+ }
329
+ console.error("getFight " + fight_id + " -> [" + err.statusCode + "] " + err.body.error);
330
+ return new fightResult_js_1.FightResult();
331
+ });
332
+ }
333
+ async createBossRoom(bossId = 1, locked = false, leeks = []) {
334
+ const r = `[${SocketMessage_js_1.SocketMessage.GARDEN_BOSS_CREATE_SQUAD}, ${bossId}, ${locked}, [${leeks}]]`;
335
+ this.socket?.send(r);
336
+ console.log("Create room : ", r);
337
+ }
338
+ async joinBossRoom(roomId, leeks = []) {
339
+ const r = `[${SocketMessage_js_1.SocketMessage.GARDEN_BOSS_JOIN_SQUAD}, "${roomId}", [${leeks}]]`;
340
+ this.socket?.send(r);
341
+ console.log("Join room : ", r);
342
+ }
343
+ async startRoomFight() {
344
+ const r = `[${SocketMessage_js_1.SocketMessage.GARDEN_BOSS_ATTACK}]`;
345
+ this.socket?.send(r);
346
+ console.log("Start room : ", r);
347
+ }
348
+ async recieveNotification(message) {
349
+ switch (message.type) {
350
+ case Notification_js_1.NotificationType.TROPHY_UNLOCKED:
351
+ console.log(`[WS ${this.username}] Trophy unlocked :`, message);
352
+ break;
353
+ case Notification_js_1.NotificationType.UP_LEVEL:
354
+ console.log(`[WS ${this.username}] Leek ${message.parameters[0]} reached level ${message.parameters[1]} (${message.parameters[2]} capitals to spend)`, message);
355
+ this.on_level_up(message.parameters[0], message.parameters[1], message.parameters[2]);
356
+ break;
357
+ case Notification_js_1.NotificationType.BOSS_STARTED:
358
+ // console.log(`[WS ${this.username}] Boss fight started`);
359
+ break;
360
+ default:
361
+ console.log(`[WS ${this.username}] Notification :`, message);
362
+ break;
363
+ }
364
+ }
365
+ async connectWebSocket() {
366
+ if (!this.ready)
367
+ return;
368
+ this.socket = new WebSocket('wss://leekwars.com/ws', [
369
+ 'leek-wars',
370
+ this.token
371
+ ]),
372
+ this.socket.onopen = () => {
373
+ console.log("Websocket connected !");
374
+ // o.M.commit('invalidate-chats'),
375
+ // o.M.commit('wsconnected'),
376
+ // this.retry_count = 10,
377
+ // this.retry_delay = 1000;
378
+ // for (const e of this.queue) this.send(e);
379
+ // this.queue = [],
380
+ // r.H.battleRoyale.init(),
381
+ // r.H.bossSquads.init()
382
+ },
383
+ this.socket.onclose = () => {
384
+ console.log("Websocket closed ! ");
385
+ // if (
386
+ // o.M.getters.admin ||
387
+ // r.H.LOCAL ||
388
+ // r.H.DEV ||
389
+ // window.__FARMER__ &&
390
+ // 1 === window.__FARMER__.farmer.id
391
+ // ) {
392
+ // const e = '[WS] fermée';
393
+ // console.error(e)
394
+ // }
395
+ // o.M.commit('wsclose'),
396
+ // this.retry()
397
+ },
398
+ this.socket.onerror = e => {
399
+ console.error(`[WS ${this.username}] erreur`, e);
400
+ },
401
+ this.socket.onmessage = msg => {
402
+ const json = JSON.parse(msg.data);
403
+ const id = json[0];
404
+ const data = json[1];
405
+ const request_id = json[2];
406
+ switch (id) {
407
+ case SocketMessage_js_1.SocketMessage.PONG: {
408
+ console.log(`"[WS ${this.username}] received PONG`, data);
409
+ break;
410
+ }
411
+ case SocketMessage_js_1.SocketMessage.NOTIFICATION_RECEIVE: {
412
+ this.recieveNotification({ id: data[0], type: data[1], parameters: data[2], new: true });
413
+ break;
414
+ }
415
+ case SocketMessage_js_1.SocketMessage.LUCKY: {
416
+ // NOTHING TO DO
417
+ break;
418
+ }
419
+ case SocketMessage_js_1.SocketMessage.FAKE_LUCKY: {
420
+ // CLICK ON LUCKY
421
+ break;
422
+ }
423
+ case SocketMessage_js_1.SocketMessage.BATTLE_ROYALE_CHAT_NOTIF: {
424
+ console.log(`[WS ${this.username}] received BATTLE_ROYALE_CHAT_NOTIF`, data);
425
+ break;
426
+ }
427
+ case SocketMessage_js_1.SocketMessage.BATTLE_ROYALE_UPDATE: {
428
+ console.log(`[WS ${this.username}] received BATTLE_ROYALE_UPDATE`, data);
429
+ break;
430
+ }
431
+ case SocketMessage_js_1.SocketMessage.BATTLE_ROYALE_START: {
432
+ console.log(`[WS ${this.username}] received BATTLE_ROYALE_START`, data);
433
+ break;
434
+ }
435
+ case SocketMessage_js_1.SocketMessage.BATTLE_ROYALE_LEAVE: {
436
+ console.log(`[WS ${this.username}] received BATTLE_ROYALE_LEAVE`, data);
437
+ break;
438
+ }
439
+ case SocketMessage_js_1.SocketMessage.GARDEN_QUEUE: {
440
+ console.log(`[WS ${this.username}] received GARDEN_QUEUE`, data);
441
+ break;
442
+ }
443
+ case SocketMessage_js_1.SocketMessage.FIGHT_PROGRESS: {
444
+ console.log(`[WS ${this.username}] received FIGHT_PROGRESS`, data);
445
+ break;
446
+ }
447
+ case SocketMessage_js_1.SocketMessage.TOURNAMENT_UPDATE: {
448
+ console.log(`[WS ${this.username}] received TOURNAMENT_UPDATE`, data);
449
+ break;
450
+ }
451
+ case SocketMessage_js_1.SocketMessage.UPDATE_HABS: {
452
+ console.log(`[WS ${this.username}] +` + data[0] + " 🪙");
453
+ break;
454
+ }
455
+ case SocketMessage_js_1.SocketMessage.UPDATE_LEEK_XP: {
456
+ console.log(`[WS ${this.username}] +` + data[1] + " xp");
457
+ break;
458
+ }
459
+ case SocketMessage_js_1.SocketMessage.UPDATE_LEEK_TALENT: {
460
+ console.log(`[WS ${this.username}] ` + (data[1] > 0 ? "+" : "") + data[1] + " talents");
461
+ break;
462
+ }
463
+ case SocketMessage_js_1.SocketMessage.UPDATE_FARMER_TALENT: {
464
+ console.log(`[WS ${this.username}] ` + (data[1] > 0 ? "+" : "") + data[1] + " farmer talents");
465
+ break;
466
+ }
467
+ case SocketMessage_js_1.SocketMessage.UPDATE_TEAM_TALENT: {
468
+ console.log(`[WS ${this.username}] ` + (data[1] > 0 ? "+" : "") + data[1] + " team talents");
469
+ break;
470
+ }
471
+ case SocketMessage_js_1.SocketMessage.ADD_RESOURCE: {
472
+ // console.log(`[WS ${this.username}] received ADD_RESOURCE`, data);
473
+ console.log(`[WS ${this.username}] ` + (data[2] > 1 ? data[2] : "") + " " + Items_js_1.ITEMS[data[0]]?.name);
474
+ // console.log("add resource", data)
475
+ // const template = data[0]
476
+ // const id = data[1]
477
+ // const quantity = data[2]
478
+ // const item = "" // TODO LeekWars.items[data[0]]
479
+ // const time = data[3]
480
+ // if (item) {
481
+ // //store.commit('add-inventory', { type: item.type, template, id, quantity, time })
482
+ // }
483
+ break;
484
+ }
485
+ case SocketMessage_js_1.SocketMessage.GARDEN_BOSS_SQUADS: {
486
+ // console.log(`[WS ${this.username}] received GARDEN_BOSS_SQUADS`, data);
487
+ break;
488
+ }
489
+ case SocketMessage_js_1.SocketMessage.GARDEN_BOSS_SQUAD_JOINED: {
490
+ console.log(`[WS ${this.username}] received GARDEN_BOSS_SQUAD_JOINED`);
491
+ this.currentRoom = data.id;
492
+ break;
493
+ }
494
+ case SocketMessage_js_1.SocketMessage.GARDEN_BOSS_SQUAD: {
495
+ // console.log(`[WS ${this.username}] received GARDEN_BOSS_SQUAD`, data);
496
+ break;
497
+ }
498
+ case SocketMessage_js_1.SocketMessage.GARDEN_BOSS_NO_SUCH_SQUAD: {
499
+ console.log(`[WS ${this.username}] received GARDEN_BOSS_NO_SUCH_SQUAD`, data);
500
+ break;
501
+ }
502
+ case SocketMessage_js_1.SocketMessage.GARDEN_BOSS_STARTED: {
503
+ console.log(`[WS ${this.username}] received GARDEN_BOSS_STARTED`);
504
+ this.currentRoom = "";
505
+ break;
506
+ }
507
+ case SocketMessage_js_1.SocketMessage.GARDEN_BOSS_LEFT: {
508
+ console.log(`[WS ${this.username}] received GARDEN_BOSS_LEFT`, data);
509
+ break;
510
+ }
511
+ case SocketMessage_js_1.SocketMessage.CONSOLE_RESULT: {
512
+ console.log(`[WS ${this.username}] received CONSOLE_RESULT`, data);
513
+ break;
514
+ }
515
+ case SocketMessage_js_1.SocketMessage.CONSOLE_ERROR: {
516
+ console.log(`[WS ${this.username}] received CONSOLE_ERROR`, data);
517
+ break;
518
+ }
519
+ case SocketMessage_js_1.SocketMessage.CONSOLE_LOG: {
520
+ console.log(`[WS ${this.username}] received CONSOLE_LOG`, data);
521
+ break;
522
+ }
523
+ case SocketMessage_js_1.SocketMessage.EDITOR_ANALYZE: {
524
+ console.log(`[WS ${this.username}] received EDITOR_ANALYZE`, data);
525
+ break;
526
+ }
527
+ case SocketMessage_js_1.SocketMessage.EDITOR_HOVER: {
528
+ console.log(`[WS ${this.username}] received EDITOR_HOVER`, data);
529
+ break;
530
+ }
531
+ case SocketMessage_js_1.SocketMessage.EDITOR_COMPLETE: {
532
+ console.log(`[WS ${this.username}] received EDITOR_COMPLETE`, data);
533
+ break;
534
+ }
535
+ }
536
+ };
537
+ }
538
+ // Make this an observable
539
+ on_level_up = (_) => { };
540
+ }
541
+ exports.LeekWarsClient = LeekWarsClient;
@@ -0,0 +1,80 @@
1
+ declare enum ItemType {
2
+ ALL = 0,
3
+ WEAPON = 1,
4
+ CHIP = 2,
5
+ POTION = 3,
6
+ HAT = 4,
7
+ POMP = 5,
8
+ FIGHT_PACK = 6,
9
+ RESOURCE = 7,
10
+ COMPONENT = 8,
11
+ SCHEME = 9
12
+ }
13
+ declare const ItemTypes: ItemType[];
14
+ export { ItemType, ItemTypes };
15
+ declare class Item {
16
+ id: number;
17
+ template: number;
18
+ quantity: number;
19
+ time: number;
20
+ }
21
+ declare class ItemTemplate {
22
+ id: number;
23
+ name: string;
24
+ type: ItemType;
25
+ price: number | null;
26
+ crystals: number | null;
27
+ sellable: boolean;
28
+ level: number;
29
+ params: any;
30
+ buyable: boolean;
31
+ public: boolean;
32
+ singleton: boolean;
33
+ trophy: number | null;
34
+ market: boolean;
35
+ buyable_crystals: boolean;
36
+ rarity: number;
37
+ leeks?: number[];
38
+ leek_count?: number;
39
+ farmer_count?: number;
40
+ sell_price?: number;
41
+ seen?: boolean;
42
+ }
43
+ declare const ITEM_CATEGORY_NAME: {
44
+ 0: string;
45
+ 1: string;
46
+ 2: string;
47
+ 3: string;
48
+ 4: string;
49
+ 5: string;
50
+ 6: string;
51
+ 7: string;
52
+ 8: string;
53
+ 9: string;
54
+ };
55
+ declare const ITEM_TYPE_NAME: {
56
+ 0: string;
57
+ 1: string;
58
+ 2: string;
59
+ 3: string;
60
+ 4: string;
61
+ 5: string;
62
+ 6: string;
63
+ 7: string;
64
+ 8: string;
65
+ 9: string;
66
+ };
67
+ declare const ITEM_TYPE_ICONS: {
68
+ 0: string;
69
+ 1: string;
70
+ 2: string;
71
+ 3: string;
72
+ 4: string;
73
+ 5: string;
74
+ 6: string;
75
+ 7: string;
76
+ 8: string;
77
+ 9: string;
78
+ };
79
+ export { Item, ItemTemplate, ITEM_CATEGORY_NAME, ITEM_TYPE_NAME, ITEM_TYPE_ICONS };
80
+ //# sourceMappingURL=Item.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Item.d.ts","sourceRoot":"","sources":["../../../src/node-leek-client/leekwars-frontend/Item.ts"],"names":[],"mappings":"AAAA,aAAK,QAAQ;IACT,GAAG,IAAI;IACP,MAAM,IAAI;IACV,IAAI,IAAI;IACR,MAAM,IAAI;IACV,GAAG,IAAI;IACP,IAAI,IAAI;IACR,UAAU,IAAI;IACd,QAAQ,IAAI;IACZ,SAAS,IAAI;IACb,MAAM,IAAI;CACb;AACD,QAAA,MAAM,SAAS,YAA4K,CAAA;AAE3L,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAA;AAE9B,cAAM,IAAI;IACC,EAAE,EAAG,MAAM,CAAA;IACX,QAAQ,EAAG,MAAM,CAAA;IACjB,QAAQ,EAAG,MAAM,CAAA;IACjB,IAAI,EAAG,MAAM,CAAA;CACvB;AAED,cAAM,YAAY;IACP,EAAE,EAAG,MAAM,CAAA;IACX,IAAI,EAAG,MAAM,CAAA;IACb,IAAI,EAAG,QAAQ,CAAA;IACf,KAAK,EAAG,MAAM,GAAG,IAAI,CAAA;IACrB,QAAQ,EAAG,MAAM,GAAG,IAAI,CAAA;IACxB,QAAQ,EAAG,OAAO,CAAA;IAClB,KAAK,EAAG,MAAM,CAAA;IACd,MAAM,EAAG,GAAG,CAAA;IACZ,OAAO,EAAG,OAAO,CAAA;IACjB,MAAM,EAAG,OAAO,CAAA;IAChB,SAAS,EAAG,OAAO,CAAA;IACnB,MAAM,EAAG,MAAM,GAAG,IAAI,CAAA;IACtB,MAAM,EAAG,OAAO,CAAA;IAChB,gBAAgB,EAAG,OAAO,CAAA;IAC1B,MAAM,EAAG,MAAM,CAAA;IAEf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAEhB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,OAAO,CAAA;CACxB;AAED,QAAA,MAAM,kBAAkB;;;;;;;;;;;CAWvB,CAAA;AAED,QAAA,MAAM,cAAc;;;;;;;;;;;CAWnB,CAAA;AAED,QAAA,MAAM,eAAe;;;;;;;;;;;CAWpB,CAAA;AAED,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,eAAe,EAAE,CAAA"}