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,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerDeleteTool = registerDeleteTool;
4
+ const zod_1 = require("zod");
5
+ const RESOURCE_TYPES = [
6
+ "trigger",
7
+ "scheduler",
8
+ "aggregate",
9
+ "websocket",
10
+ "widget",
11
+ "custom-page",
12
+ "public-endpoint",
13
+ "challenge-aggregate",
14
+ "auth-module",
15
+ "ai-knowledge",
16
+ "action",
17
+ "challenge",
18
+ "point",
19
+ "level",
20
+ "leaderboard",
21
+ "quiz",
22
+ ];
23
+ function registerDeleteTool(server, apiHolder) {
24
+ server.tool("funifier_delete", "Delete a Funifier resource by type and ID", {
25
+ type: zod_1.z.enum(RESOURCE_TYPES).describe("The resource type"),
26
+ id: zod_1.z.string().describe("The resource ID to delete"),
27
+ }, async ({ type, id }) => {
28
+ try {
29
+ const api = apiHolder.requireClient();
30
+ switch (type) {
31
+ case "trigger":
32
+ await api.deleteTrigger(id);
33
+ break;
34
+ case "scheduler":
35
+ await api.deleteScheduler(id);
36
+ break;
37
+ case "aggregate":
38
+ await api.deleteAggregate(id);
39
+ break;
40
+ case "websocket":
41
+ await api.deleteWebsocket(id);
42
+ break;
43
+ case "widget":
44
+ await api.deleteWidget(id);
45
+ break;
46
+ case "custom-page":
47
+ await api.deleteCustomPage(id);
48
+ break;
49
+ case "public-endpoint":
50
+ await api.deletePublicEndpoint(id);
51
+ break;
52
+ case "challenge-aggregate":
53
+ await api.deleteChallengeAggregate(id);
54
+ break;
55
+ case "auth-module":
56
+ await api.deleteAuthModule(id);
57
+ break;
58
+ case "ai-knowledge":
59
+ await api.deleteAiKnowledge(id);
60
+ break;
61
+ case "action":
62
+ await api.deleteAction(id);
63
+ break;
64
+ case "challenge":
65
+ await api.deleteChallenge(id);
66
+ break;
67
+ case "point":
68
+ await api.deletePoint(id);
69
+ break;
70
+ case "level":
71
+ await api.deleteLevel(id);
72
+ break;
73
+ case "leaderboard":
74
+ await api.deleteLeaderboard(id);
75
+ break;
76
+ case "quiz":
77
+ await api.deleteQuiz(id);
78
+ break;
79
+ default:
80
+ return {
81
+ content: [{ type: "text", text: `Unknown resource type: ${type}` }],
82
+ isError: true,
83
+ };
84
+ }
85
+ return {
86
+ content: [{ type: "text", text: `Successfully deleted ${type} with id ${id}` }],
87
+ };
88
+ }
89
+ catch (error) {
90
+ return {
91
+ content: [{ type: "text", text: `Error deleting ${type} ${id}: ${error.message}` }],
92
+ isError: true,
93
+ };
94
+ }
95
+ });
96
+ }
97
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/mcp/tools/delete.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { ApiHolder } from "../api-holder";
3
+ export declare function registerExecuteTool(server: McpServer, apiHolder: ApiHolder): void;
4
+ //# sourceMappingURL=execute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/execute.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,QA4F1E"}
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerExecuteTool = registerExecuteTool;
4
+ const zod_1 = require("zod");
5
+ function registerExecuteTool(server, apiHolder) {
6
+ server.tool("funifier_execute", "Execute a Funifier resource (scheduler, aggregate, or public-endpoint)", {
7
+ type: zod_1.z
8
+ .enum(["scheduler", "aggregate", "public-endpoint"])
9
+ .describe("The resource type to execute"),
10
+ id: zod_1.z.string().describe("The resource ID to execute"),
11
+ params: zod_1.z
12
+ .string()
13
+ .optional()
14
+ .describe("Optional JSON string of execution parameters"),
15
+ }, async ({ type, id, params }) => {
16
+ try {
17
+ const api = apiHolder.requireClient();
18
+ let result;
19
+ switch (type) {
20
+ case "scheduler":
21
+ result = await api.executeScheduler(id);
22
+ break;
23
+ case "aggregate": {
24
+ const aggregateParams = params ? JSON.parse(params) : {};
25
+ result = await api.executeAggregate(id, aggregateParams);
26
+ break;
27
+ }
28
+ case "public-endpoint": {
29
+ if (!params) {
30
+ return {
31
+ content: [
32
+ {
33
+ type: "text",
34
+ text: "public-endpoint execution requires params with apiKey, method, and payload",
35
+ },
36
+ ],
37
+ isError: true,
38
+ };
39
+ }
40
+ const endpointParams = JSON.parse(params);
41
+ const { apiKey, method, payload } = endpointParams;
42
+ if (!apiKey || !method) {
43
+ return {
44
+ content: [
45
+ {
46
+ type: "text",
47
+ text: "public-endpoint params must include apiKey and method",
48
+ },
49
+ ],
50
+ isError: true,
51
+ };
52
+ }
53
+ result = await api.executePublicEndpoint(apiKey, id, payload || {}, method);
54
+ break;
55
+ }
56
+ default:
57
+ return {
58
+ content: [
59
+ {
60
+ type: "text",
61
+ text: `Execute is not supported for type: ${type}. Supported types: scheduler, aggregate, public-endpoint`,
62
+ },
63
+ ],
64
+ isError: true,
65
+ };
66
+ }
67
+ return {
68
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
69
+ };
70
+ }
71
+ catch (error) {
72
+ return {
73
+ content: [
74
+ {
75
+ type: "text",
76
+ text: `Error executing ${type} ${id}: ${error.message}`,
77
+ },
78
+ ],
79
+ isError: true,
80
+ };
81
+ }
82
+ });
83
+ }
84
+ //# sourceMappingURL=execute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/mcp/tools/execute.ts"],"names":[],"mappings":";;AAIA,kDA4FC;AAhGD,6BAAwB;AAIxB,SAAgB,mBAAmB,CAAC,MAAiB,EAAE,SAAoB;IACzE,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,wEAAwE,EACxE;QACE,IAAI,EAAE,OAAC;aACJ,IAAI,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;aACnD,QAAQ,CAAC,8BAA8B,CAAC;QAC3C,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QACrD,MAAM,EAAE,OAAC;aACN,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,8CAA8C,CAAC;KAC5D,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC;YACtC,IAAI,MAAW,CAAC;YAEhB,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,WAAW;oBACd,MAAM,GAAG,MAAM,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;oBACxC,MAAM;gBAER,KAAK,WAAW,CAAC,CAAC,CAAC;oBACjB,MAAM,eAAe,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzD,MAAM,GAAG,MAAM,GAAG,CAAC,gBAAgB,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;oBACzD,MAAM;gBACR,CAAC;gBAED,KAAK,iBAAiB,CAAC,CAAC,CAAC;oBACvB,IAAI,CAAC,MAAM,EAAE,CAAC;wBACZ,OAAO;4BACL,OAAO,EAAE;gCACP;oCACE,IAAI,EAAE,MAAM;oCACZ,IAAI,EAAE,4EAA4E;iCACnF;6BACF;4BACD,OAAO,EAAE,IAAI;yBACd,CAAC;oBACJ,CAAC;oBACD,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBAC1C,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC;oBACnD,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;wBACvB,OAAO;4BACL,OAAO,EAAE;gCACP;oCACE,IAAI,EAAE,MAAM;oCACZ,IAAI,EAAE,uDAAuD;iCAC9D;6BACF;4BACD,OAAO,EAAE,IAAI;yBACd,CAAC;oBACJ,CAAC;oBACD,MAAM,GAAG,MAAM,GAAG,CAAC,qBAAqB,CACtC,MAAM,EACN,EAAE,EACF,OAAO,IAAI,EAAE,EACb,MAAM,CACP,CAAC;oBACF,MAAM;gBACR,CAAC;gBAED;oBACE,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,sCAAsC,IAAI,0DAA0D;6BAC3G;yBACF;wBACD,OAAO,EAAE,IAAI;qBACd,CAAC;YACN,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aACnE,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,mBAAmB,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,OAAO,EAAE;qBACxD;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { ApiHolder } from "../api-holder";
3
+ export declare function registerGetTool(server: McpServer, apiHolder: ApiHolder): void;
4
+ //# sourceMappingURL=get.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/get.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAmC1C,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,QA4FtE"}
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerGetTool = registerGetTool;
4
+ const zod_1 = require("zod");
5
+ const RESOURCE_TYPES = [
6
+ "trigger",
7
+ "scheduler",
8
+ "aggregate",
9
+ "websocket",
10
+ "widget",
11
+ "custom-page",
12
+ "public-endpoint",
13
+ "challenge-aggregate",
14
+ "auth-module",
15
+ "ai-knowledge",
16
+ "action",
17
+ "challenge",
18
+ "point",
19
+ "level",
20
+ "leaderboard",
21
+ "quiz",
22
+ "virtual-good-catalog",
23
+ "virtual-good-item",
24
+ ];
25
+ function findItem(items, idOrName) {
26
+ const byId = items.find((i) => i._id === idOrName);
27
+ if (byId)
28
+ return byId;
29
+ const query = idOrName.toLowerCase();
30
+ const byName = items.find((i) => {
31
+ const name = (i.name || i.title || "").toLowerCase();
32
+ return name === query || name.includes(query);
33
+ });
34
+ return byName || null;
35
+ }
36
+ function registerGetTool(server, apiHolder) {
37
+ server.tool("funifier_get", "Get a specific Funifier resource with full details (including scripts/code). Search by ID or name/title.", {
38
+ type: zod_1.z.enum(RESOURCE_TYPES).describe("The resource type"),
39
+ id: zod_1.z.string().describe("The resource ID or name/title to search for"),
40
+ }, async ({ type, id }) => {
41
+ try {
42
+ const api = apiHolder.requireClient();
43
+ let items;
44
+ switch (type) {
45
+ case "trigger":
46
+ items = await api.listTriggers();
47
+ break;
48
+ case "scheduler":
49
+ items = await api.listSchedulers();
50
+ break;
51
+ case "aggregate":
52
+ items = await api.listAggregates();
53
+ break;
54
+ case "websocket":
55
+ items = await api.listWebsockets();
56
+ break;
57
+ case "widget":
58
+ items = await api.listWidgets();
59
+ break;
60
+ case "custom-page":
61
+ items = await api.listCustomPages();
62
+ break;
63
+ case "public-endpoint":
64
+ items = await api.listPublicEndpoints();
65
+ break;
66
+ case "challenge-aggregate":
67
+ items = await api.listChallengeAggregates();
68
+ break;
69
+ case "auth-module":
70
+ items = await api.listAuthModules();
71
+ break;
72
+ case "ai-knowledge":
73
+ items = await api.listAiKnowledge();
74
+ break;
75
+ case "action":
76
+ items = await api.listActions();
77
+ break;
78
+ case "challenge":
79
+ items = await api.listChallenges();
80
+ break;
81
+ case "point":
82
+ items = await api.listPoints();
83
+ break;
84
+ case "level":
85
+ items = await api.listLevels();
86
+ break;
87
+ case "leaderboard":
88
+ items = await api.listLeaderboards();
89
+ break;
90
+ case "quiz":
91
+ items = await api.listQuizzes();
92
+ break;
93
+ case "virtual-good-catalog":
94
+ items = await api.listVirtualGoodCatalogs();
95
+ break;
96
+ case "virtual-good-item":
97
+ items = await api.listVirtualGoodItems();
98
+ break;
99
+ default:
100
+ return {
101
+ content: [{ type: "text", text: `Unknown resource type: ${type}` }],
102
+ isError: true,
103
+ };
104
+ }
105
+ const item = findItem(items, id);
106
+ if (!item) {
107
+ return {
108
+ content: [{ type: "text", text: `Resource not found: ${type} with id or name "${id}"` }],
109
+ };
110
+ }
111
+ return {
112
+ content: [{ type: "text", text: JSON.stringify(item, null, 2) }],
113
+ };
114
+ }
115
+ catch (error) {
116
+ return {
117
+ content: [{ type: "text", text: `Error getting ${type} ${id}: ${error.message}` }],
118
+ isError: true,
119
+ };
120
+ }
121
+ });
122
+ }
123
+ //# sourceMappingURL=get.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/mcp/tools/get.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { ApiHolder } from "../api-holder";
3
+ export declare function registerTools(server: McpServer, apiHolder: ApiHolder): void;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAU1C,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,QASpE"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerTools = registerTools;
4
+ const connect_1 = require("./connect");
5
+ const list_1 = require("./list");
6
+ const get_1 = require("./get");
7
+ const save_1 = require("./save");
8
+ const delete_1 = require("./delete");
9
+ const execute_1 = require("./execute");
10
+ const logs_1 = require("./logs");
11
+ const database_1 = require("./database");
12
+ function registerTools(server, apiHolder) {
13
+ (0, connect_1.registerConnectTool)(server, apiHolder);
14
+ (0, list_1.registerListTool)(server, apiHolder);
15
+ (0, get_1.registerGetTool)(server, apiHolder);
16
+ (0, save_1.registerSaveTool)(server, apiHolder);
17
+ (0, delete_1.registerDeleteTool)(server, apiHolder);
18
+ (0, execute_1.registerExecuteTool)(server, apiHolder);
19
+ (0, logs_1.registerLogsTool)(server, apiHolder);
20
+ (0, database_1.registerDatabaseTool)(server, apiHolder);
21
+ }
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp/tools/index.ts"],"names":[],"mappings":";;AAWA,sCASC;AAlBD,uCAAgD;AAChD,iCAA0C;AAC1C,+BAAwC;AACxC,iCAA0C;AAC1C,qCAA8C;AAC9C,uCAAgD;AAChD,iCAA0C;AAC1C,yCAAkD;AAElD,SAAgB,aAAa,CAAC,MAAiB,EAAE,SAAoB;IACnE,IAAA,6BAAmB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACvC,IAAA,uBAAgB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACpC,IAAA,qBAAe,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACnC,IAAA,uBAAgB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACpC,IAAA,2BAAkB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACtC,IAAA,6BAAmB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACvC,IAAA,uBAAgB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACpC,IAAA,+BAAoB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { ApiHolder } from "../api-holder";
3
+ export declare function registerListTool(server: McpServer, apiHolder: ApiHolder): void;
4
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAqK1C,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,QAyGvE"}
@@ -0,0 +1,261 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerListTool = registerListTool;
4
+ const zod_1 = require("zod");
5
+ const RESOURCE_TYPES = [
6
+ "trigger",
7
+ "scheduler",
8
+ "aggregate",
9
+ "websocket",
10
+ "widget",
11
+ "custom-page",
12
+ "public-endpoint",
13
+ "challenge-aggregate",
14
+ "auth-module",
15
+ "ai-knowledge",
16
+ "action",
17
+ "challenge",
18
+ "point",
19
+ "level",
20
+ "leaderboard",
21
+ "quiz",
22
+ "virtual-good-catalog",
23
+ "virtual-good-item",
24
+ ];
25
+ /**
26
+ * Returns a summary view of items: only _id, name/title, and key identifying fields.
27
+ * Scripts and large fields are excluded to keep token usage low.
28
+ */
29
+ function summarizeItems(items, type) {
30
+ return items.map((item) => {
31
+ switch (type) {
32
+ case "trigger":
33
+ return {
34
+ _id: item._id,
35
+ name: item.name,
36
+ entity: item.entity,
37
+ event: item.event,
38
+ description: item.description || "",
39
+ status: item.status,
40
+ };
41
+ case "scheduler":
42
+ return {
43
+ _id: item._id,
44
+ name: item.name,
45
+ cron: item.cron,
46
+ active: item.active,
47
+ description: item.description || "",
48
+ status: item.status,
49
+ };
50
+ case "aggregate":
51
+ return {
52
+ _id: item._id,
53
+ title: item.title,
54
+ collection: item.collection,
55
+ description: item.description || "",
56
+ };
57
+ case "websocket":
58
+ return {
59
+ _id: item._id,
60
+ title: item.title,
61
+ description: item.description || "",
62
+ status: item.status,
63
+ };
64
+ case "widget":
65
+ return {
66
+ _id: item._id,
67
+ title: item.title,
68
+ description: item.description || "",
69
+ };
70
+ case "custom-page":
71
+ return {
72
+ _id: item._id,
73
+ title: item.title,
74
+ description: item.description || "",
75
+ };
76
+ case "public-endpoint":
77
+ return {
78
+ _id: item._id,
79
+ title: item.title,
80
+ description: item.description || "",
81
+ };
82
+ case "action":
83
+ return {
84
+ _id: item._id,
85
+ action: item.action,
86
+ active: item.active,
87
+ attributes: item.attributes?.length || 0,
88
+ };
89
+ case "challenge":
90
+ return {
91
+ _id: item._id,
92
+ challenge: item.challenge,
93
+ description: item.description || "",
94
+ rules: item.rules?.length || 0,
95
+ };
96
+ case "point":
97
+ return {
98
+ _id: item._id,
99
+ category: item.category,
100
+ shortName: item.shortName,
101
+ };
102
+ case "level":
103
+ return {
104
+ _id: item._id,
105
+ level: item.level,
106
+ position: item.position,
107
+ minPoints: item.minPoints,
108
+ };
109
+ case "leaderboard":
110
+ return {
111
+ _id: item._id,
112
+ title: item.title,
113
+ description: item.description || "",
114
+ };
115
+ case "quiz":
116
+ return {
117
+ _id: item._id,
118
+ title: item.title,
119
+ grade: item.grade,
120
+ };
121
+ case "virtual-good-catalog":
122
+ return {
123
+ _id: item._id,
124
+ catalog: item.catalog,
125
+ };
126
+ case "virtual-good-item":
127
+ return {
128
+ _id: item._id,
129
+ name: item.name,
130
+ catalogId: item.catalogId,
131
+ active: item.active,
132
+ amount: item.amount,
133
+ };
134
+ default:
135
+ return {
136
+ _id: item._id,
137
+ name: item.name || item.title || "",
138
+ description: item.description || "",
139
+ };
140
+ }
141
+ });
142
+ }
143
+ /**
144
+ * Filters items by a search query matching against name, title, description,
145
+ * entity, event, collection, and _id fields (case-insensitive).
146
+ */
147
+ function filterItems(items, query) {
148
+ const q = query.toLowerCase();
149
+ return items.filter((item) => {
150
+ const searchable = [
151
+ item._id,
152
+ item.name,
153
+ item.title,
154
+ item.description,
155
+ item.entity,
156
+ item.event,
157
+ item.collection,
158
+ ]
159
+ .filter(Boolean)
160
+ .join(" ")
161
+ .toLowerCase();
162
+ return searchable.includes(q);
163
+ });
164
+ }
165
+ function registerListTool(server, apiHolder) {
166
+ server.tool("funifier_list", "List Funifier resources of a given type. Returns a summary (no scripts/code). Use the optional 'search' parameter to filter by name, entity, collection, etc. Use funifier_get to retrieve full details of a specific resource.", {
167
+ type: zod_1.z.enum(RESOURCE_TYPES).describe("The resource type to list"),
168
+ search: zod_1.z
169
+ .string()
170
+ .optional()
171
+ .describe("Optional search query to filter results by name, title, description, entity, event, collection, or ID (case-insensitive)"),
172
+ }, async ({ type, search }) => {
173
+ try {
174
+ const api = apiHolder.requireClient();
175
+ let results;
176
+ switch (type) {
177
+ case "trigger":
178
+ results = await api.listTriggers();
179
+ break;
180
+ case "scheduler":
181
+ results = await api.listSchedulers();
182
+ break;
183
+ case "aggregate":
184
+ results = await api.listAggregates();
185
+ break;
186
+ case "websocket":
187
+ results = await api.listWebsockets();
188
+ break;
189
+ case "widget":
190
+ results = await api.listWidgets();
191
+ break;
192
+ case "custom-page":
193
+ results = await api.listCustomPages();
194
+ break;
195
+ case "public-endpoint":
196
+ results = await api.listPublicEndpoints();
197
+ break;
198
+ case "challenge-aggregate":
199
+ results = await api.listChallengeAggregates();
200
+ break;
201
+ case "auth-module":
202
+ results = await api.listAuthModules();
203
+ break;
204
+ case "ai-knowledge":
205
+ results = await api.listAiKnowledge();
206
+ break;
207
+ case "action":
208
+ results = await api.listActions();
209
+ break;
210
+ case "challenge":
211
+ results = await api.listChallenges();
212
+ break;
213
+ case "point":
214
+ results = await api.listPoints();
215
+ break;
216
+ case "level":
217
+ results = await api.listLevels();
218
+ break;
219
+ case "leaderboard":
220
+ results = await api.listLeaderboards();
221
+ break;
222
+ case "quiz":
223
+ results = await api.listQuizzes();
224
+ break;
225
+ case "virtual-good-catalog":
226
+ results = await api.listVirtualGoodCatalogs();
227
+ break;
228
+ case "virtual-good-item":
229
+ results = await api.listVirtualGoodItems();
230
+ break;
231
+ default:
232
+ return {
233
+ content: [{ type: "text", text: `Unknown resource type: ${type}` }],
234
+ isError: true,
235
+ };
236
+ }
237
+ if (search) {
238
+ results = filterItems(results, search);
239
+ }
240
+ const summary = summarizeItems(results, type);
241
+ const header = search
242
+ ? `Found ${summary.length} ${type}(s) matching "${search}":`
243
+ : `Found ${summary.length} ${type}(s):`;
244
+ return {
245
+ content: [
246
+ {
247
+ type: "text",
248
+ text: header + "\n\n" + JSON.stringify(summary, null, 2),
249
+ },
250
+ ],
251
+ };
252
+ }
253
+ catch (error) {
254
+ return {
255
+ content: [{ type: "text", text: `Error listing ${type}: ${error.message}` }],
256
+ isError: true,
257
+ };
258
+ }
259
+ });
260
+ }
261
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/mcp/tools/list.ts"],"names":[],"mappings":";;AAuKA,4CAyGC;AAhRD,6BAAwB;AAIxB,MAAM,cAAc,GAAG;IACrB,SAAS;IACT,WAAW;IACX,WAAW;IACX,WAAW;IACX,QAAQ;IACR,aAAa;IACb,iBAAiB;IACjB,qBAAqB;IACrB,aAAa;IACb,cAAc;IACd,QAAQ;IACR,WAAW;IACX,OAAO;IACP,OAAO;IACP,aAAa;IACb,MAAM;IACN,sBAAsB;IACtB,mBAAmB;CACX,CAAC;AAEX;;;GAGG;AACH,SAAS,cAAc,CAAC,KAAY,EAAE,IAAY;IAChD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACxB,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,SAAS;gBACZ,OAAO;oBACL,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;oBACnC,MAAM,EAAE,IAAI,CAAC,MAAM;iBACpB,CAAC;YACJ,KAAK,WAAW;gBACd,OAAO;oBACL,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;oBACnC,MAAM,EAAE,IAAI,CAAC,MAAM;iBACpB,CAAC;YACJ,KAAK,WAAW;gBACd,OAAO;oBACL,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,UAAU,EAAE,IAAI,CAAC,UAAU;oBAC3B,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;iBACpC,CAAC;YACJ,KAAK,WAAW;gBACd,OAAO;oBACL,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;oBACnC,MAAM,EAAE,IAAI,CAAC,MAAM;iBACpB,CAAC;YACJ,KAAK,QAAQ;gBACX,OAAO;oBACL,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;iBACpC,CAAC;YACJ,KAAK,aAAa;gBAChB,OAAO;oBACL,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;iBACpC,CAAC;YACJ,KAAK,iBAAiB;gBACpB,OAAO;oBACL,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;iBACpC,CAAC;YACJ,KAAK,QAAQ;gBACX,OAAO;oBACL,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;iBACzC,CAAC;YACJ,KAAK,WAAW;gBACd,OAAO;oBACL,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;oBACnC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;iBAC/B,CAAC;YACJ,KAAK,OAAO;gBACV,OAAO;oBACL,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,SAAS,EAAE,IAAI,CAAC,SAAS;iBAC1B,CAAC;YACJ,KAAK,OAAO;gBACV,OAAO;oBACL,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,SAAS,EAAE,IAAI,CAAC,SAAS;iBAC1B,CAAC;YACJ,KAAK,aAAa;gBAChB,OAAO;oBACL,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;iBACpC,CAAC;YACJ,KAAK,MAAM;gBACT,OAAO;oBACL,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;iBAClB,CAAC;YACJ,KAAK,sBAAsB;gBACzB,OAAO;oBACL,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,OAAO,EAAE,IAAI,CAAC,OAAO;iBACtB,CAAC;YACJ,KAAK,mBAAmB;gBACtB,OAAO;oBACL,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,MAAM,EAAE,IAAI,CAAC,MAAM;iBACpB,CAAC;YACJ;gBACE,OAAO;oBACL,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE;oBACnC,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;iBACpC,CAAC;QACN,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,KAAY,EAAE,KAAa;IAC9C,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAC9B,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QAC3B,MAAM,UAAU,GAAG;YACjB,IAAI,CAAC,GAAG;YACR,IAAI,CAAC,IAAI;YACT,IAAI,CAAC,KAAK;YACV,IAAI,CAAC,WAAW;YAChB,IAAI,CAAC,MAAM;YACX,IAAI,CAAC,KAAK;YACV,IAAI,CAAC,UAAU;SAChB;aACE,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,GAAG,CAAC;aACT,WAAW,EAAE,CAAC;QACjB,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,gBAAgB,CAAC,MAAiB,EAAE,SAAoB;IACtE,MAAM,CAAC,IAAI,CACT,eAAe,EACf,iOAAiO,EACjO;QACE,IAAI,EAAE,OAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QAClE,MAAM,EAAE,OAAC;aACN,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,0HAA0H,CAC3H;KACJ,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE;QACzB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC;YACtC,IAAI,OAAY,CAAC;YACjB,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,SAAS;oBACZ,OAAO,GAAG,MAAM,GAAG,CAAC,YAAY,EAAE,CAAC;oBACnC,MAAM;gBACR,KAAK,WAAW;oBACd,OAAO,GAAG,MAAM,GAAG,CAAC,cAAc,EAAE,CAAC;oBACrC,MAAM;gBACR,KAAK,WAAW;oBACd,OAAO,GAAG,MAAM,GAAG,CAAC,cAAc,EAAE,CAAC;oBACrC,MAAM;gBACR,KAAK,WAAW;oBACd,OAAO,GAAG,MAAM,GAAG,CAAC,cAAc,EAAE,CAAC;oBACrC,MAAM;gBACR,KAAK,QAAQ;oBACX,OAAO,GAAG,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC;oBAClC,MAAM;gBACR,KAAK,aAAa;oBAChB,OAAO,GAAG,MAAM,GAAG,CAAC,eAAe,EAAE,CAAC;oBACtC,MAAM;gBACR,KAAK,iBAAiB;oBACpB,OAAO,GAAG,MAAM,GAAG,CAAC,mBAAmB,EAAE,CAAC;oBAC1C,MAAM;gBACR,KAAK,qBAAqB;oBACxB,OAAO,GAAG,MAAM,GAAG,CAAC,uBAAuB,EAAE,CAAC;oBAC9C,MAAM;gBACR,KAAK,aAAa;oBAChB,OAAO,GAAG,MAAM,GAAG,CAAC,eAAe,EAAE,CAAC;oBACtC,MAAM;gBACR,KAAK,cAAc;oBACjB,OAAO,GAAG,MAAM,GAAG,CAAC,eAAe,EAAE,CAAC;oBACtC,MAAM;gBACR,KAAK,QAAQ;oBACX,OAAO,GAAG,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC;oBAClC,MAAM;gBACR,KAAK,WAAW;oBACd,OAAO,GAAG,MAAM,GAAG,CAAC,cAAc,EAAE,CAAC;oBACrC,MAAM;gBACR,KAAK,OAAO;oBACV,OAAO,GAAG,MAAM,GAAG,CAAC,UAAU,EAAE,CAAC;oBACjC,MAAM;gBACR,KAAK,OAAO;oBACV,OAAO,GAAG,MAAM,GAAG,CAAC,UAAU,EAAE,CAAC;oBACjC,MAAM;gBACR,KAAK,aAAa;oBAChB,OAAO,GAAG,MAAM,GAAG,CAAC,gBAAgB,EAAE,CAAC;oBACvC,MAAM;gBACR,KAAK,MAAM;oBACT,OAAO,GAAG,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC;oBAClC,MAAM;gBACR,KAAK,sBAAsB;oBACzB,OAAO,GAAG,MAAM,GAAG,CAAC,uBAAuB,EAAE,CAAC;oBAC9C,MAAM;gBACR,KAAK,mBAAmB;oBACtB,OAAO,GAAG,MAAM,GAAG,CAAC,oBAAoB,EAAE,CAAC;oBAC3C,MAAM;gBACR;oBACE,OAAO;wBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,IAAI,EAAE,EAAE,CAAC;wBACnE,OAAO,EAAE,IAAI;qBACd,CAAC;YACN,CAAC;YAED,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACzC,CAAC;YAED,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAE9C,MAAM,MAAM,GAAG,MAAM;gBACnB,CAAC,CAAC,SAAS,OAAO,CAAC,MAAM,IAAI,IAAI,iBAAiB,MAAM,IAAI;gBAC5D,CAAC,CAAC,SAAS,OAAO,CAAC,MAAM,IAAI,IAAI,MAAM,CAAC;YAE1C,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;qBACzD;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC5E,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}