funifier-mcp 0.1.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 (174) hide show
  1. package/README.md +351 -0
  2. package/dist/core/api-client.d.ts +131 -0
  3. package/dist/core/api-client.d.ts.map +1 -0
  4. package/dist/core/api-client.js +796 -0
  5. package/dist/core/api-client.js.map +1 -0
  6. package/dist/core/config.d.ts +11 -0
  7. package/dist/core/config.d.ts.map +1 -0
  8. package/dist/core/config.js +37 -0
  9. package/dist/core/config.js.map +1 -0
  10. package/dist/core/constants.d.ts +51 -0
  11. package/dist/core/constants.d.ts.map +1 -0
  12. package/dist/core/constants.js +57 -0
  13. package/dist/core/constants.js.map +1 -0
  14. package/dist/core/index.d.ts +7 -0
  15. package/dist/core/index.d.ts.map +1 -0
  16. package/dist/core/index.js +26 -0
  17. package/dist/core/index.js.map +1 -0
  18. package/dist/core/types/Action.d.ts +13 -0
  19. package/dist/core/types/Action.d.ts.map +1 -0
  20. package/dist/core/types/Action.js +3 -0
  21. package/dist/core/types/Action.js.map +1 -0
  22. package/dist/core/types/Aggregate.d.ts +11 -0
  23. package/dist/core/types/Aggregate.d.ts.map +1 -0
  24. package/dist/core/types/Aggregate.js +3 -0
  25. package/dist/core/types/Aggregate.js.map +1 -0
  26. package/dist/core/types/AiKnowledge.d.ts +10 -0
  27. package/dist/core/types/AiKnowledge.d.ts.map +1 -0
  28. package/dist/core/types/AiKnowledge.js +3 -0
  29. package/dist/core/types/AiKnowledge.js.map +1 -0
  30. package/dist/core/types/AuthModule.d.ts +12 -0
  31. package/dist/core/types/AuthModule.d.ts.map +1 -0
  32. package/dist/core/types/AuthModule.js +3 -0
  33. package/dist/core/types/AuthModule.js.map +1 -0
  34. package/dist/core/types/Challenge.d.ts +26 -0
  35. package/dist/core/types/Challenge.d.ts.map +1 -0
  36. package/dist/core/types/Challenge.js +3 -0
  37. package/dist/core/types/Challenge.js.map +1 -0
  38. package/dist/core/types/ChallengeAggregate.d.ts +13 -0
  39. package/dist/core/types/ChallengeAggregate.d.ts.map +1 -0
  40. package/dist/core/types/ChallengeAggregate.js +3 -0
  41. package/dist/core/types/ChallengeAggregate.js.map +1 -0
  42. package/dist/core/types/CustomPage.d.ts +15 -0
  43. package/dist/core/types/CustomPage.d.ts.map +1 -0
  44. package/dist/core/types/CustomPage.js +3 -0
  45. package/dist/core/types/CustomPage.js.map +1 -0
  46. package/dist/core/types/Leaderboard.d.ts +33 -0
  47. package/dist/core/types/Leaderboard.d.ts.map +1 -0
  48. package/dist/core/types/Leaderboard.js +3 -0
  49. package/dist/core/types/Leaderboard.js.map +1 -0
  50. package/dist/core/types/Level.d.ts +17 -0
  51. package/dist/core/types/Level.d.ts.map +1 -0
  52. package/dist/core/types/Level.js +3 -0
  53. package/dist/core/types/Level.js.map +1 -0
  54. package/dist/core/types/Point.d.ts +8 -0
  55. package/dist/core/types/Point.d.ts.map +1 -0
  56. package/dist/core/types/Point.js +3 -0
  57. package/dist/core/types/Point.js.map +1 -0
  58. package/dist/core/types/PublicEndpoint.d.ts +14 -0
  59. package/dist/core/types/PublicEndpoint.d.ts.map +1 -0
  60. package/dist/core/types/PublicEndpoint.js +3 -0
  61. package/dist/core/types/PublicEndpoint.js.map +1 -0
  62. package/dist/core/types/Quiz.d.ts +33 -0
  63. package/dist/core/types/Quiz.d.ts.map +1 -0
  64. package/dist/core/types/Quiz.js +3 -0
  65. package/dist/core/types/Quiz.js.map +1 -0
  66. package/dist/core/types/Scheduler.d.ts +15 -0
  67. package/dist/core/types/Scheduler.d.ts.map +1 -0
  68. package/dist/core/types/Scheduler.js +3 -0
  69. package/dist/core/types/Scheduler.js.map +1 -0
  70. package/dist/core/types/Trigger.d.ts +14 -0
  71. package/dist/core/types/Trigger.d.ts.map +1 -0
  72. package/dist/core/types/Trigger.js +3 -0
  73. package/dist/core/types/Trigger.js.map +1 -0
  74. package/dist/core/types/VirtualGood.d.ts +21 -0
  75. package/dist/core/types/VirtualGood.d.ts.map +1 -0
  76. package/dist/core/types/VirtualGood.js +3 -0
  77. package/dist/core/types/VirtualGood.js.map +1 -0
  78. package/dist/core/types/Websocket.d.ts +10 -0
  79. package/dist/core/types/Websocket.d.ts.map +1 -0
  80. package/dist/core/types/Websocket.js +3 -0
  81. package/dist/core/types/Websocket.js.map +1 -0
  82. package/dist/core/types/Widget.d.ts +15 -0
  83. package/dist/core/types/Widget.d.ts.map +1 -0
  84. package/dist/core/types/Widget.js +3 -0
  85. package/dist/core/types/Widget.js.map +1 -0
  86. package/dist/core/types/index.d.ts +18 -0
  87. package/dist/core/types/index.d.ts.map +1 -0
  88. package/dist/core/types/index.js +34 -0
  89. package/dist/core/types/index.js.map +1 -0
  90. package/dist/index.d.ts +7 -0
  91. package/dist/index.d.ts.map +1 -0
  92. package/dist/index.js +27 -0
  93. package/dist/index.js.map +1 -0
  94. package/dist/mcp/api-holder.d.ts +40 -0
  95. package/dist/mcp/api-holder.d.ts.map +1 -0
  96. package/dist/mcp/api-holder.js +72 -0
  97. package/dist/mcp/api-holder.js.map +1 -0
  98. package/dist/mcp/bundle.js +99 -0
  99. package/dist/mcp/index.d.ts +3 -0
  100. package/dist/mcp/index.d.ts.map +1 -0
  101. package/dist/mcp/index.js +36 -0
  102. package/dist/mcp/index.js.map +1 -0
  103. package/dist/mcp/prompts/templates.d.ts +3 -0
  104. package/dist/mcp/prompts/templates.d.ts.map +1 -0
  105. package/dist/mcp/prompts/templates.js +83 -0
  106. package/dist/mcp/prompts/templates.js.map +1 -0
  107. package/dist/mcp/resources/documentation.d.ts +3 -0
  108. package/dist/mcp/resources/documentation.d.ts.map +1 -0
  109. package/dist/mcp/resources/documentation.js +79 -0
  110. package/dist/mcp/resources/documentation.js.map +1 -0
  111. package/dist/mcp/tools/_fetch-current.d.ts +3 -0
  112. package/dist/mcp/tools/_fetch-current.d.ts.map +1 -0
  113. package/dist/mcp/tools/_fetch-current.js +67 -0
  114. package/dist/mcp/tools/_fetch-current.js.map +1 -0
  115. package/dist/mcp/tools/_merge.d.ts +2 -0
  116. package/dist/mcp/tools/_merge.d.ts.map +1 -0
  117. package/dist/mcp/tools/_merge.js +7 -0
  118. package/dist/mcp/tools/_merge.js.map +1 -0
  119. package/dist/mcp/tools/connect.d.ts +4 -0
  120. package/dist/mcp/tools/connect.d.ts.map +1 -0
  121. package/dist/mcp/tools/connect.js +44 -0
  122. package/dist/mcp/tools/connect.js.map +1 -0
  123. package/dist/mcp/tools/database.d.ts +4 -0
  124. package/dist/mcp/tools/database.d.ts.map +1 -0
  125. package/dist/mcp/tools/database.js +189 -0
  126. package/dist/mcp/tools/database.js.map +1 -0
  127. package/dist/mcp/tools/delete.d.ts +4 -0
  128. package/dist/mcp/tools/delete.d.ts.map +1 -0
  129. package/dist/mcp/tools/delete.js +97 -0
  130. package/dist/mcp/tools/delete.js.map +1 -0
  131. package/dist/mcp/tools/execute.d.ts +4 -0
  132. package/dist/mcp/tools/execute.d.ts.map +1 -0
  133. package/dist/mcp/tools/execute.js +84 -0
  134. package/dist/mcp/tools/execute.js.map +1 -0
  135. package/dist/mcp/tools/get.d.ts +4 -0
  136. package/dist/mcp/tools/get.d.ts.map +1 -0
  137. package/dist/mcp/tools/get.js +123 -0
  138. package/dist/mcp/tools/get.js.map +1 -0
  139. package/dist/mcp/tools/index.d.ts +4 -0
  140. package/dist/mcp/tools/index.d.ts.map +1 -0
  141. package/dist/mcp/tools/index.js +22 -0
  142. package/dist/mcp/tools/index.js.map +1 -0
  143. package/dist/mcp/tools/list.d.ts +4 -0
  144. package/dist/mcp/tools/list.d.ts.map +1 -0
  145. package/dist/mcp/tools/list.js +261 -0
  146. package/dist/mcp/tools/list.js.map +1 -0
  147. package/dist/mcp/tools/logs.d.ts +4 -0
  148. package/dist/mcp/tools/logs.d.ts.map +1 -0
  149. package/dist/mcp/tools/logs.js +50 -0
  150. package/dist/mcp/tools/logs.js.map +1 -0
  151. package/dist/mcp/tools/save.d.ts +4 -0
  152. package/dist/mcp/tools/save.d.ts.map +1 -0
  153. package/dist/mcp/tools/save.js +106 -0
  154. package/dist/mcp/tools/save.js.map +1 -0
  155. package/dist/mcp/tools/save.test.d.ts +2 -0
  156. package/dist/mcp/tools/save.test.d.ts.map +1 -0
  157. package/dist/mcp/tools/save.test.js +198 -0
  158. package/dist/mcp/tools/save.test.js.map +1 -0
  159. package/package.json +65 -0
  160. package/skills/funifier-create-action/SKILL.md +86 -0
  161. package/skills/funifier-create-aggregate/SKILL.md +87 -0
  162. package/skills/funifier-create-challenge/SKILL.md +87 -0
  163. package/skills/funifier-create-custom-page/SKILL.md +87 -0
  164. package/skills/funifier-create-leaderboard/SKILL.md +87 -0
  165. package/skills/funifier-create-level/SKILL.md +86 -0
  166. package/skills/funifier-create-point/SKILL.md +86 -0
  167. package/skills/funifier-create-quiz/SKILL.md +86 -0
  168. package/skills/funifier-create-scheduler/SKILL.md +87 -0
  169. package/skills/funifier-create-trigger/SKILL.md +88 -0
  170. package/skills/funifier-create-virtual-good/SKILL.md +86 -0
  171. package/skills/funifier-debug/SKILL.md +90 -0
  172. package/skills/funifier-help/SKILL.md +85 -0
  173. package/skills/funifier-implement-frontend/SKILL.md +89 -0
  174. package/skills/funifier-index/SKILL.md +50 -0
@@ -0,0 +1,796 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createAPIClient = createAPIClient;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const constants_1 = require("./constants");
9
+ function createAPIClient(config) {
10
+ if (!config.apiKey || !config.secretKey || !config.serverUrl) {
11
+ throw new Error("Funifier config is required: apiKey, secretKey, and serverUrl must be provided");
12
+ }
13
+ const axiosClient = axios_1.default.create({
14
+ baseURL: `${config.serverUrl}${constants_1.API.BASE_PATH}`,
15
+ headers: {
16
+ "Content-Type": "application/json",
17
+ Authorization: `Basic ${Buffer.from(`${config.apiKey}:${config.secretKey}`).toString("base64")}`,
18
+ Range: constants_1.API.RANGE_HEADER,
19
+ },
20
+ });
21
+ return {
22
+ // --- Triggers ---
23
+ listTriggers: async () => {
24
+ try {
25
+ const response = await axiosClient.get(constants_1.Endpoints.TRIGGER);
26
+ return response.data;
27
+ }
28
+ catch (e) {
29
+ console.error(e);
30
+ return [];
31
+ }
32
+ },
33
+ saveTrigger: async (payload) => {
34
+ try {
35
+ const response = await axiosClient.post(constants_1.Endpoints.TRIGGER, payload);
36
+ return response.data;
37
+ }
38
+ catch (e) {
39
+ throw new Error("Failed to update trigger: " + e);
40
+ }
41
+ },
42
+ deleteTrigger: async (id) => {
43
+ try {
44
+ const response = await axiosClient.delete(`${constants_1.Endpoints.TRIGGER}/${id}`);
45
+ return response.data;
46
+ }
47
+ catch (e) {
48
+ throw new Error("Failed to delete trigger: " + e);
49
+ }
50
+ },
51
+ getTriggerLogs: async (id) => {
52
+ try {
53
+ const payload = [
54
+ {
55
+ $match: { _id: id },
56
+ },
57
+ ];
58
+ const response = await axiosClient.post(constants_1.Endpoints.TRIGGER_LOG, payload);
59
+ return response.data;
60
+ }
61
+ catch (e) {
62
+ console.error(e);
63
+ return [];
64
+ }
65
+ },
66
+ // --- Schedulers ---
67
+ listSchedulers: async () => {
68
+ try {
69
+ const response = await axiosClient.get(constants_1.Endpoints.SCHEDULER_FETCH);
70
+ return response.data;
71
+ }
72
+ catch (e) {
73
+ console.error(e);
74
+ return [];
75
+ }
76
+ },
77
+ saveScheduler: async (payload) => {
78
+ try {
79
+ const response = await axiosClient.post(constants_1.Endpoints.SCHEDULER, payload);
80
+ return response.data;
81
+ }
82
+ catch (e) {
83
+ console.error(e);
84
+ return undefined;
85
+ }
86
+ },
87
+ deleteScheduler: async (id) => {
88
+ try {
89
+ const response = await axiosClient.delete(`${constants_1.Endpoints.SCHEDULER}/${id}`);
90
+ return response.data;
91
+ }
92
+ catch (e) {
93
+ throw new Error("Failed to delete scheduler: " + e);
94
+ }
95
+ },
96
+ executeScheduler: async (id) => {
97
+ try {
98
+ const response = await axiosClient.get(`${constants_1.Endpoints.SCHEDULER}/execute/${id}`);
99
+ return response.data;
100
+ }
101
+ catch (e) {
102
+ console.error(e);
103
+ throw new Error("Failed to execute scheduler: " + e);
104
+ }
105
+ },
106
+ getSchedulerLogs: async (id) => {
107
+ try {
108
+ const response = await axiosClient.get(constants_1.Endpoints.SCHEDULER_LOG, {
109
+ params: { orderby: "time", reverse: true, max_results: 10, item: id },
110
+ });
111
+ return response.data;
112
+ }
113
+ catch (e) {
114
+ console.error(e);
115
+ return [];
116
+ }
117
+ },
118
+ // --- Aggregates ---
119
+ listAggregates: async () => {
120
+ try {
121
+ const response = await axiosClient.get(constants_1.Endpoints.AGGREGATE);
122
+ return response.data;
123
+ }
124
+ catch (e) {
125
+ console.error(e);
126
+ return [];
127
+ }
128
+ },
129
+ saveAggregate: async (payload) => {
130
+ try {
131
+ const response = await axiosClient.put(constants_1.Endpoints.AGGREGATE, payload);
132
+ return response.data;
133
+ }
134
+ catch (e) {
135
+ console.error(e);
136
+ return undefined;
137
+ }
138
+ },
139
+ deleteAggregate: async (id) => {
140
+ try {
141
+ const response = await axiosClient.delete(constants_1.Endpoints.AGGREGATE_BY_ID(id));
142
+ return response.data;
143
+ }
144
+ catch (e) {
145
+ throw new Error("Failed to delete aggregate: " + e);
146
+ }
147
+ },
148
+ executeAggregate: async (id, params) => {
149
+ try {
150
+ const response = await axiosClient.post(constants_1.Endpoints.AGGREGATE_FIND(id), params);
151
+ return response.data;
152
+ }
153
+ catch (e) {
154
+ console.error(e);
155
+ throw new Error("Failed to execute aggregate: " + e);
156
+ }
157
+ },
158
+ analyzeAggregate: async (id, params) => {
159
+ try {
160
+ const response = await axiosClient.post(constants_1.Endpoints.AGGREGATE_ANALYZE(id), params);
161
+ return response.data;
162
+ }
163
+ catch (e) {
164
+ console.error(e);
165
+ throw new Error("Failed to analyze aggregate: " + e);
166
+ }
167
+ },
168
+ getAggregateParams: async (id) => {
169
+ try {
170
+ const response = await axiosClient.get(constants_1.Endpoints.AGGREGATE_PARAMS(id));
171
+ return response.data;
172
+ }
173
+ catch (e) {
174
+ console.error(e);
175
+ throw new Error("Failed to get aggregate params: " + e);
176
+ }
177
+ },
178
+ // --- Websockets ---
179
+ listWebsockets: async () => {
180
+ try {
181
+ const response = await axiosClient.get(constants_1.Endpoints.WEBSOCKET);
182
+ return response.data;
183
+ }
184
+ catch (e) {
185
+ console.error(e);
186
+ return [];
187
+ }
188
+ },
189
+ saveWebsocket: async (payload, isNew) => {
190
+ try {
191
+ const data = { ...payload, isNew };
192
+ const response = await axiosClient.post(constants_1.Endpoints.WEBSOCKET_UPDATE, data);
193
+ return response.data;
194
+ }
195
+ catch (e) {
196
+ console.error(e);
197
+ return undefined;
198
+ }
199
+ },
200
+ deleteWebsocket: async (id) => {
201
+ try {
202
+ await axiosClient.delete(`${constants_1.Endpoints.WEBSOCKET_UPDATE}/${id}`);
203
+ return { success: true };
204
+ }
205
+ catch (e) {
206
+ throw new Error("Failed to delete websocket: " + e);
207
+ }
208
+ },
209
+ // --- Widgets ---
210
+ listWidgets: async () => {
211
+ try {
212
+ const response = await axiosClient.get(constants_1.Endpoints.WIDGET);
213
+ return response.data;
214
+ }
215
+ catch (e) {
216
+ console.error(e);
217
+ return [];
218
+ }
219
+ },
220
+ getWidgetById: async (id) => {
221
+ try {
222
+ const response = await axiosClient.get(`${constants_1.Endpoints.WIDGET}/${id}`);
223
+ return response.data;
224
+ }
225
+ catch (e) {
226
+ console.error(e);
227
+ return undefined;
228
+ }
229
+ },
230
+ saveWidget: async (payload) => {
231
+ try {
232
+ const response = await axiosClient.post(constants_1.Endpoints.WIDGET, payload);
233
+ return response.data;
234
+ }
235
+ catch (e) {
236
+ console.error(e);
237
+ return undefined;
238
+ }
239
+ },
240
+ deleteWidget: async (id) => {
241
+ try {
242
+ const response = await axiosClient.delete(`${constants_1.Endpoints.WIDGET}/${id}`);
243
+ return response.data;
244
+ }
245
+ catch (e) {
246
+ throw new Error("Failed to delete widget: " + e);
247
+ }
248
+ },
249
+ // --- Custom Pages ---
250
+ listCustomPages: async () => {
251
+ try {
252
+ const response = await axiosClient.get(constants_1.Endpoints.CUSTOM_PAGE);
253
+ return response.data;
254
+ }
255
+ catch (e) {
256
+ console.error(e);
257
+ return [];
258
+ }
259
+ },
260
+ saveCustomPage: async (payload) => {
261
+ try {
262
+ const response = await axiosClient.put(constants_1.Endpoints.CUSTOM_PAGE, payload);
263
+ return response.data;
264
+ }
265
+ catch (e) {
266
+ console.error(e);
267
+ return undefined;
268
+ }
269
+ },
270
+ deleteCustomPage: async (id) => {
271
+ try {
272
+ const response = await axiosClient.delete(`${constants_1.Endpoints.CUSTOM_PAGE}?q=_id:'${id}'`);
273
+ return response.data;
274
+ }
275
+ catch (e) {
276
+ throw new Error("Failed to delete custom page: " + e);
277
+ }
278
+ },
279
+ // --- Public Endpoints ---
280
+ listPublicEndpoints: async () => {
281
+ try {
282
+ const response = await axiosClient.get(constants_1.Endpoints.PUBLIC_ENDPOINT);
283
+ return response.data;
284
+ }
285
+ catch (e) {
286
+ console.error(e);
287
+ return [];
288
+ }
289
+ },
290
+ savePublicEndpoint: async (payload) => {
291
+ try {
292
+ const response = await axiosClient.post(constants_1.Endpoints.PUBLIC_ENDPOINT_UPDATE, payload);
293
+ return response.data;
294
+ }
295
+ catch (e) {
296
+ console.error(e);
297
+ return undefined;
298
+ }
299
+ },
300
+ deletePublicEndpoint: async (id) => {
301
+ try {
302
+ const response = await axiosClient.delete(constants_1.Endpoints.PUBLIC_ENDPOINT_BY_ID(id));
303
+ return response.data;
304
+ }
305
+ catch (e) {
306
+ throw new Error("Failed to delete public endpoint: " + e);
307
+ }
308
+ },
309
+ executePublicEndpoint: async (apiKey, id, payload, method) => {
310
+ try {
311
+ const url = `/pub/${apiKey}/${id}`;
312
+ const response = method.toUpperCase() === "GET"
313
+ ? await axiosClient.get(url)
314
+ : await axiosClient.post(url, payload);
315
+ return response.data;
316
+ }
317
+ catch (e) {
318
+ console.error(e);
319
+ if (e.response?.data) {
320
+ return e.response.data;
321
+ }
322
+ throw new Error("Failed to execute public endpoint: " + e);
323
+ }
324
+ },
325
+ // --- Challenge Aggregates ---
326
+ listChallengeAggregates: async () => {
327
+ try {
328
+ const response = await axiosClient.get(constants_1.Endpoints.CHALLENGE_AGGREGATE);
329
+ return response.data;
330
+ }
331
+ catch (e) {
332
+ console.error(e);
333
+ return [];
334
+ }
335
+ },
336
+ saveChallengeAggregate: async (payload) => {
337
+ try {
338
+ const response = await axiosClient.put(constants_1.Endpoints.CHALLENGE_AGGREGATE, payload);
339
+ return response.data;
340
+ }
341
+ catch (e) {
342
+ console.error(e);
343
+ return undefined;
344
+ }
345
+ },
346
+ deleteChallengeAggregate: async (id) => {
347
+ try {
348
+ const response = await axiosClient.delete(`${constants_1.Endpoints.CHALLENGE_AGGREGATE}?q=_id:'${id}'`);
349
+ return response.data;
350
+ }
351
+ catch (e) {
352
+ throw new Error("Failed to delete challenge aggregate: " + e);
353
+ }
354
+ },
355
+ // --- Auth Modules ---
356
+ listAuthModules: async () => {
357
+ try {
358
+ const response = await axiosClient.get(constants_1.Endpoints.AUTH_MODULE);
359
+ return response.data;
360
+ }
361
+ catch (e) {
362
+ console.error(e);
363
+ return [];
364
+ }
365
+ },
366
+ saveAuthModule: async (payload, isNew) => {
367
+ try {
368
+ const data = { ...payload, isNew };
369
+ const response = await axiosClient.post(constants_1.Endpoints.AUTH_MODULE_UPDATE, data);
370
+ return response.data;
371
+ }
372
+ catch (e) {
373
+ console.error(e);
374
+ return undefined;
375
+ }
376
+ },
377
+ deleteAuthModule: async (id) => {
378
+ try {
379
+ await axiosClient.delete(`${constants_1.Endpoints.AUTH_MODULE_UPDATE}/${id}`);
380
+ return { success: true };
381
+ }
382
+ catch (e) {
383
+ throw new Error("Failed to delete auth module: " + e);
384
+ }
385
+ },
386
+ // --- AI Knowledge ---
387
+ listAiKnowledge: async () => {
388
+ try {
389
+ const response = await axiosClient.post(`${constants_1.Endpoints.AI_KNOWLEDGE}/aggregate`, []);
390
+ return response.data;
391
+ }
392
+ catch (e) {
393
+ console.error(e);
394
+ return [];
395
+ }
396
+ },
397
+ saveAiKnowledge: async (payload) => {
398
+ try {
399
+ const response = await axiosClient.post(constants_1.Endpoints.AI_KNOWLEDGE, payload);
400
+ return response.data;
401
+ }
402
+ catch (e) {
403
+ console.error(e);
404
+ return undefined;
405
+ }
406
+ },
407
+ deleteAiKnowledge: async (id) => {
408
+ try {
409
+ const response = await axiosClient.delete(`${constants_1.Endpoints.AI_KNOWLEDGE}/${id}`);
410
+ return response.data;
411
+ }
412
+ catch (e) {
413
+ throw new Error("Failed to delete AI knowledge: " + e);
414
+ }
415
+ },
416
+ // --- Studio Page Folders ---
417
+ getStudioPageFolders: async () => {
418
+ try {
419
+ const response = await axiosClient.get(`${constants_1.Endpoints.CUSTOM_PAGE}_folder`);
420
+ const data = response.data;
421
+ if (Array.isArray(data))
422
+ return data;
423
+ if (data && typeof data === "object")
424
+ return [data];
425
+ return [];
426
+ }
427
+ catch (e) {
428
+ console.error(e);
429
+ return [];
430
+ }
431
+ },
432
+ // --- Utility ---
433
+ evaluateCron: async (expression) => {
434
+ try {
435
+ const response = await axiosClient.post(constants_1.Endpoints.CRON_VALIDATE, {
436
+ expression,
437
+ language: "en",
438
+ });
439
+ return response.data;
440
+ }
441
+ catch (e) {
442
+ console.error(e);
443
+ throw new Error("Failed to evaluate cron expression: " + e);
444
+ }
445
+ },
446
+ getCollections: async () => {
447
+ try {
448
+ const response = await axiosClient.get(constants_1.Endpoints.COLLECTIONS);
449
+ return response.data;
450
+ }
451
+ catch (e) {
452
+ console.error(e);
453
+ return [];
454
+ }
455
+ },
456
+ // --- Database (generic collection access) ---
457
+ queryCollection: async (collection, query = {}, options = {}) => {
458
+ try {
459
+ const params = {};
460
+ if (Object.keys(query).length > 0) {
461
+ params.q = JSON.stringify(query);
462
+ }
463
+ if (options.sort) {
464
+ params.sort = JSON.stringify(options.sort);
465
+ }
466
+ if (options.limit) {
467
+ params.limit = String(options.limit);
468
+ }
469
+ if (options.skip) {
470
+ params.skip = String(options.skip);
471
+ }
472
+ const response = await axiosClient.get(`/database/${collection}`, { params });
473
+ return response.data;
474
+ }
475
+ catch (e) {
476
+ console.error(e);
477
+ return [];
478
+ }
479
+ },
480
+ aggregateCollection: async (collection, pipeline) => {
481
+ try {
482
+ const response = await axiosClient.post(`/database/${collection}/aggregate`, pipeline);
483
+ return response.data;
484
+ }
485
+ catch (e) {
486
+ console.error(e);
487
+ throw new Error(`Failed to aggregate on ${collection}: ${e}`);
488
+ }
489
+ },
490
+ insertDocument: async (collection, data) => {
491
+ try {
492
+ const response = await axiosClient.post(`/database/${collection}`, data);
493
+ return response.data;
494
+ }
495
+ catch (e) {
496
+ console.error(e);
497
+ throw new Error(`Failed to insert document into ${collection}: ${e}`);
498
+ }
499
+ },
500
+ updateDocument: async (collection, data) => {
501
+ try {
502
+ const response = await axiosClient.put(`/database/${collection}`, data);
503
+ return response.data;
504
+ }
505
+ catch (e) {
506
+ console.error(e);
507
+ throw new Error(`Failed to update document in ${collection}: ${e}`);
508
+ }
509
+ },
510
+ deleteDocument: async (collection, query) => {
511
+ try {
512
+ const response = await axiosClient.delete(`/database/${collection}?q=${query}`);
513
+ return response.data;
514
+ }
515
+ catch (e) {
516
+ console.error(e);
517
+ throw new Error(`Failed to delete document from ${collection}: ${e}`);
518
+ }
519
+ },
520
+ bulkInsert: async (collection, data) => {
521
+ try {
522
+ const response = await axiosClient.post(`/database/${collection}/bulk`, data);
523
+ return response.data;
524
+ }
525
+ catch (e) {
526
+ console.error(e);
527
+ throw new Error(`Failed to bulk insert into ${collection}: ${e}`);
528
+ }
529
+ },
530
+ // --- Actions ---
531
+ listActions: async () => {
532
+ try {
533
+ const response = await axiosClient.get(constants_1.Endpoints.ACTION);
534
+ return response.data;
535
+ }
536
+ catch (e) {
537
+ console.error(e);
538
+ return [];
539
+ }
540
+ },
541
+ saveAction: async (payload) => {
542
+ try {
543
+ const response = await axiosClient.post(constants_1.Endpoints.ACTION, payload);
544
+ return response.data;
545
+ }
546
+ catch (e) {
547
+ throw new Error("Failed to save action: " + e);
548
+ }
549
+ },
550
+ deleteAction: async (id) => {
551
+ try {
552
+ const response = await axiosClient.delete(`${constants_1.Endpoints.ACTION}/${id}`);
553
+ return response.data;
554
+ }
555
+ catch (e) {
556
+ throw new Error("Failed to delete action: " + e);
557
+ }
558
+ },
559
+ // --- Challenges ---
560
+ listChallenges: async () => {
561
+ try {
562
+ const response = await axiosClient.get(constants_1.Endpoints.CHALLENGE);
563
+ return response.data;
564
+ }
565
+ catch (e) {
566
+ console.error(e);
567
+ return [];
568
+ }
569
+ },
570
+ saveChallenge: async (payload) => {
571
+ try {
572
+ const response = await axiosClient.post(constants_1.Endpoints.CHALLENGE, payload);
573
+ return response.data;
574
+ }
575
+ catch (e) {
576
+ throw new Error("Failed to save challenge: " + e);
577
+ }
578
+ },
579
+ deleteChallenge: async (id) => {
580
+ try {
581
+ const response = await axiosClient.delete(`${constants_1.Endpoints.CHALLENGE}/${id}`);
582
+ return response.data;
583
+ }
584
+ catch (e) {
585
+ throw new Error("Failed to delete challenge: " + e);
586
+ }
587
+ },
588
+ // --- Points ---
589
+ listPoints: async () => {
590
+ try {
591
+ const response = await axiosClient.get(constants_1.Endpoints.POINT);
592
+ return response.data;
593
+ }
594
+ catch (e) {
595
+ console.error(e);
596
+ return [];
597
+ }
598
+ },
599
+ savePoint: async (payload) => {
600
+ try {
601
+ const response = await axiosClient.post(constants_1.Endpoints.POINT, payload);
602
+ return response.data;
603
+ }
604
+ catch (e) {
605
+ throw new Error("Failed to save point: " + e);
606
+ }
607
+ },
608
+ deletePoint: async (id) => {
609
+ try {
610
+ const response = await axiosClient.delete(`${constants_1.Endpoints.POINT}/${id}`);
611
+ return response.data;
612
+ }
613
+ catch (e) {
614
+ throw new Error("Failed to delete point: " + e);
615
+ }
616
+ },
617
+ // --- Levels ---
618
+ listLevels: async () => {
619
+ try {
620
+ const response = await axiosClient.get(constants_1.Endpoints.LEVEL);
621
+ return response.data;
622
+ }
623
+ catch (e) {
624
+ console.error(e);
625
+ return [];
626
+ }
627
+ },
628
+ saveLevel: async (payload) => {
629
+ try {
630
+ const response = await axiosClient.post(constants_1.Endpoints.LEVEL, payload);
631
+ return response.data;
632
+ }
633
+ catch (e) {
634
+ throw new Error("Failed to save level: " + e);
635
+ }
636
+ },
637
+ deleteLevel: async (id) => {
638
+ try {
639
+ const response = await axiosClient.delete(`${constants_1.Endpoints.LEVEL}/${id}`);
640
+ return response.data;
641
+ }
642
+ catch (e) {
643
+ throw new Error("Failed to delete level: " + e);
644
+ }
645
+ },
646
+ saveLevelConfig: async (payload) => {
647
+ try {
648
+ const response = await axiosClient.put(constants_1.Endpoints.LEVEL_CONFIG, payload);
649
+ return response.data;
650
+ }
651
+ catch (e) {
652
+ throw new Error("Failed to save level config: " + e);
653
+ }
654
+ },
655
+ // --- Leaderboards ---
656
+ listLeaderboards: async () => {
657
+ try {
658
+ const response = await axiosClient.get(constants_1.Endpoints.LEADERBOARD);
659
+ return response.data;
660
+ }
661
+ catch (e) {
662
+ console.error(e);
663
+ return [];
664
+ }
665
+ },
666
+ saveLeaderboard: async (payload) => {
667
+ try {
668
+ const response = await axiosClient.post(constants_1.Endpoints.LEADERBOARD, payload);
669
+ return response.data;
670
+ }
671
+ catch (e) {
672
+ throw new Error("Failed to save leaderboard: " + e);
673
+ }
674
+ },
675
+ deleteLeaderboard: async (id) => {
676
+ try {
677
+ const response = await axiosClient.delete(`${constants_1.Endpoints.LEADERBOARD}/${id}`);
678
+ return response.data;
679
+ }
680
+ catch (e) {
681
+ throw new Error("Failed to delete leaderboard: " + e);
682
+ }
683
+ },
684
+ getLeaderboardResults: async (id) => {
685
+ try {
686
+ const response = await axiosClient.post(constants_1.Endpoints.LEADERBOARD_LEADERS(id), []);
687
+ return response.data;
688
+ }
689
+ catch (e) {
690
+ console.error(e);
691
+ return [];
692
+ }
693
+ },
694
+ // --- Quizzes ---
695
+ listQuizzes: async () => {
696
+ try {
697
+ const response = await axiosClient.get(constants_1.Endpoints.QUIZ_LIST);
698
+ return response.data;
699
+ }
700
+ catch (e) {
701
+ console.error(e);
702
+ return [];
703
+ }
704
+ },
705
+ saveQuiz: async (payload) => {
706
+ try {
707
+ const response = await axiosClient.post(constants_1.Endpoints.QUIZ, payload);
708
+ return response.data;
709
+ }
710
+ catch (e) {
711
+ throw new Error("Failed to save quiz: " + e);
712
+ }
713
+ },
714
+ deleteQuiz: async (id) => {
715
+ try {
716
+ const response = await axiosClient.delete(`${constants_1.Endpoints.QUIZ}/${id}`);
717
+ return response.data;
718
+ }
719
+ catch (e) {
720
+ throw new Error("Failed to delete quiz: " + e);
721
+ }
722
+ },
723
+ listQuizQuestions: async (quizId) => {
724
+ try {
725
+ const response = await axiosClient.get(constants_1.Endpoints.QUIZ_QUESTION_BY_QUIZ(quizId));
726
+ return response.data;
727
+ }
728
+ catch (e) {
729
+ console.error(e);
730
+ return [];
731
+ }
732
+ },
733
+ saveQuestion: async (payload) => {
734
+ try {
735
+ const response = await axiosClient.post(constants_1.Endpoints.QUIZ_QUESTION, payload);
736
+ return response.data;
737
+ }
738
+ catch (e) {
739
+ throw new Error("Failed to save question: " + e);
740
+ }
741
+ },
742
+ // --- Virtual Goods ---
743
+ listVirtualGoodCatalogs: async () => {
744
+ try {
745
+ const response = await axiosClient.get(constants_1.Endpoints.VIRTUAL_GOOD_CATALOG);
746
+ return response.data;
747
+ }
748
+ catch (e) {
749
+ console.error(e);
750
+ return [];
751
+ }
752
+ },
753
+ saveVirtualGoodCatalog: async (payload) => {
754
+ try {
755
+ const response = await axiosClient.post(constants_1.Endpoints.VIRTUAL_GOOD_CATALOG, payload);
756
+ return response.data;
757
+ }
758
+ catch (e) {
759
+ throw new Error("Failed to save virtual good catalog: " + e);
760
+ }
761
+ },
762
+ listVirtualGoodItems: async () => {
763
+ try {
764
+ const response = await axiosClient.get(constants_1.Endpoints.VIRTUAL_GOOD_ITEM);
765
+ return response.data;
766
+ }
767
+ catch (e) {
768
+ console.error(e);
769
+ return [];
770
+ }
771
+ },
772
+ saveVirtualGoodItem: async (payload) => {
773
+ try {
774
+ const response = await axiosClient.post(constants_1.Endpoints.VIRTUAL_GOOD_ITEM, payload);
775
+ return response.data;
776
+ }
777
+ catch (e) {
778
+ throw new Error("Failed to save virtual good item: " + e);
779
+ }
780
+ },
781
+ getGamification: async (apiKey) => {
782
+ try {
783
+ const response = await axiosClient.get(constants_1.Endpoints.GAMIFICATION(apiKey));
784
+ return response.data;
785
+ }
786
+ catch (e) {
787
+ if (e.response?.data) {
788
+ return e.response.data;
789
+ }
790
+ console.error(e);
791
+ throw e;
792
+ }
793
+ },
794
+ };
795
+ }
796
+ //# sourceMappingURL=api-client.js.map