ticktick-mcp 0.1.0 → 0.2.1

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 (115) hide show
  1. package/dist/index.js +47 -1096
  2. package/dist/index.js.map +1 -1
  3. package/dist/sdk/__tests__/client.test.d.ts +2 -0
  4. package/dist/sdk/__tests__/client.test.d.ts.map +1 -0
  5. package/dist/sdk/__tests__/client.test.js +251 -0
  6. package/dist/sdk/__tests__/client.test.js.map +1 -0
  7. package/dist/sdk/__tests__/errors.test.d.ts +2 -0
  8. package/dist/sdk/__tests__/errors.test.d.ts.map +1 -0
  9. package/dist/sdk/__tests__/errors.test.js +164 -0
  10. package/dist/sdk/__tests__/errors.test.js.map +1 -0
  11. package/dist/sdk/__tests__/types.test.d.ts +2 -0
  12. package/dist/sdk/__tests__/types.test.d.ts.map +1 -0
  13. package/dist/sdk/__tests__/types.test.js +134 -0
  14. package/dist/sdk/__tests__/types.test.js.map +1 -0
  15. package/dist/sdk/client.d.ts +10 -2
  16. package/dist/sdk/client.d.ts.map +1 -1
  17. package/dist/sdk/client.js +14 -3
  18. package/dist/sdk/client.js.map +1 -1
  19. package/dist/sdk/index.d.ts +5 -3
  20. package/dist/sdk/index.d.ts.map +1 -1
  21. package/dist/sdk/index.js +10 -2
  22. package/dist/sdk/index.js.map +1 -1
  23. package/dist/sdk/types.d.ts +215 -23
  24. package/dist/sdk/types.d.ts.map +1 -1
  25. package/dist/sdk/types.js +169 -6
  26. package/dist/sdk/types.js.map +1 -1
  27. package/dist/tools/authExchangeCode.d.ts +9 -0
  28. package/dist/tools/authExchangeCode.d.ts.map +1 -0
  29. package/dist/tools/authExchangeCode.js +49 -0
  30. package/dist/tools/authExchangeCode.js.map +1 -0
  31. package/dist/tools/authGetAuthorizationUrl.d.ts +10 -0
  32. package/dist/tools/authGetAuthorizationUrl.d.ts.map +1 -0
  33. package/dist/tools/authGetAuthorizationUrl.js +53 -0
  34. package/dist/tools/authGetAuthorizationUrl.js.map +1 -0
  35. package/dist/tools/authLogout.d.ts +9 -0
  36. package/dist/tools/authLogout.d.ts.map +1 -0
  37. package/dist/tools/authLogout.js +43 -0
  38. package/dist/tools/authLogout.js.map +1 -0
  39. package/dist/tools/authRefreshToken.d.ts +9 -0
  40. package/dist/tools/authRefreshToken.d.ts.map +1 -0
  41. package/dist/tools/authRefreshToken.js +60 -0
  42. package/dist/tools/authRefreshToken.js.map +1 -0
  43. package/dist/tools/authStatus.d.ts +9 -0
  44. package/dist/tools/authStatus.d.ts.map +1 -0
  45. package/dist/tools/authStatus.js +63 -0
  46. package/dist/tools/authStatus.js.map +1 -0
  47. package/dist/tools/batchCreateTasks.d.ts +9 -0
  48. package/dist/tools/batchCreateTasks.d.ts.map +1 -0
  49. package/dist/tools/batchCreateTasks.js +75 -0
  50. package/dist/tools/batchCreateTasks.js.map +1 -0
  51. package/dist/tools/completeTask.d.ts +9 -0
  52. package/dist/tools/completeTask.d.ts.map +1 -0
  53. package/dist/tools/completeTask.js +47 -0
  54. package/dist/tools/completeTask.js.map +1 -0
  55. package/dist/tools/createProject.d.ts +9 -0
  56. package/dist/tools/createProject.d.ts.map +1 -0
  57. package/dist/tools/createProject.js +64 -0
  58. package/dist/tools/createProject.js.map +1 -0
  59. package/dist/tools/createTask.d.ts +9 -0
  60. package/dist/tools/createTask.d.ts.map +1 -0
  61. package/dist/tools/createTask.js +131 -0
  62. package/dist/tools/createTask.js.map +1 -0
  63. package/dist/tools/deleteProject.d.ts +9 -0
  64. package/dist/tools/deleteProject.d.ts.map +1 -0
  65. package/dist/tools/deleteProject.js +46 -0
  66. package/dist/tools/deleteProject.js.map +1 -0
  67. package/dist/tools/deleteTask.d.ts +9 -0
  68. package/dist/tools/deleteTask.d.ts.map +1 -0
  69. package/dist/tools/deleteTask.js +47 -0
  70. package/dist/tools/deleteTask.js.map +1 -0
  71. package/dist/tools/getHighPriorityTasks.d.ts +9 -0
  72. package/dist/tools/getHighPriorityTasks.d.ts.map +1 -0
  73. package/dist/tools/getHighPriorityTasks.js +114 -0
  74. package/dist/tools/getHighPriorityTasks.js.map +1 -0
  75. package/dist/tools/getProject.d.ts +9 -0
  76. package/dist/tools/getProject.d.ts.map +1 -0
  77. package/dist/tools/getProject.js +62 -0
  78. package/dist/tools/getProject.js.map +1 -0
  79. package/dist/tools/getProjectById.d.ts +9 -0
  80. package/dist/tools/getProjectById.d.ts.map +1 -0
  81. package/dist/tools/getProjectById.js +52 -0
  82. package/dist/tools/getProjectById.js.map +1 -0
  83. package/dist/tools/getTask.d.ts +9 -0
  84. package/dist/tools/getTask.d.ts.map +1 -0
  85. package/dist/tools/getTask.js +65 -0
  86. package/dist/tools/getTask.js.map +1 -0
  87. package/dist/tools/getTasksDueSoon.d.ts +9 -0
  88. package/dist/tools/getTasksDueSoon.d.ts.map +1 -0
  89. package/dist/tools/getTasksDueSoon.js +118 -0
  90. package/dist/tools/getTasksDueSoon.js.map +1 -0
  91. package/dist/tools/getUser.d.ts +9 -0
  92. package/dist/tools/getUser.d.ts.map +1 -0
  93. package/dist/tools/getUser.js +47 -0
  94. package/dist/tools/getUser.js.map +1 -0
  95. package/dist/tools/listProjects.d.ts +9 -0
  96. package/dist/tools/listProjects.d.ts.map +1 -0
  97. package/dist/tools/listProjects.js +78 -0
  98. package/dist/tools/listProjects.js.map +1 -0
  99. package/dist/tools/listTasksInProject.d.ts +10 -0
  100. package/dist/tools/listTasksInProject.d.ts.map +1 -0
  101. package/dist/tools/listTasksInProject.js +177 -0
  102. package/dist/tools/listTasksInProject.js.map +1 -0
  103. package/dist/tools/searchTasks.d.ts +9 -0
  104. package/dist/tools/searchTasks.d.ts.map +1 -0
  105. package/dist/tools/searchTasks.js +134 -0
  106. package/dist/tools/searchTasks.js.map +1 -0
  107. package/dist/tools/updateProject.d.ts +9 -0
  108. package/dist/tools/updateProject.d.ts.map +1 -0
  109. package/dist/tools/updateProject.js +66 -0
  110. package/dist/tools/updateProject.js.map +1 -0
  111. package/dist/tools/updateTask.d.ts +9 -0
  112. package/dist/tools/updateTask.d.ts.map +1 -0
  113. package/dist/tools/updateTask.js +132 -0
  114. package/dist/tools/updateTask.js.map +1 -0
  115. package/package.json +14 -4
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Tool: Get OAuth authorization URL
3
+ *
4
+ * Returns the URL that users should visit to authorize the application.
5
+ * This initiates the OAuth 2.0 authorization code flow.
6
+ */
7
+ export function registerAuthGetAuthorizationUrlTool(server, getOAuthHelper) {
8
+ server.registerTool("auth_get_authorization_url", {
9
+ description: "Get the OAuth authorization URL for TickTick. Returns a URL that the user should visit in their browser to authorize the application.",
10
+ inputSchema: {},
11
+ }, async () => {
12
+ try {
13
+ const oauth = getOAuthHelper();
14
+ const { url, state } = oauth.getAuthorizationUrl();
15
+ return {
16
+ content: [
17
+ {
18
+ type: "text",
19
+ text: JSON.stringify({
20
+ success: true,
21
+ authorizationUrl: url,
22
+ state: state,
23
+ instructions: [
24
+ "1. Open the authorization URL in your browser",
25
+ "2. Log in to TickTick and authorize the application",
26
+ "3. After authorization, you will be redirected to a URL containing a 'code' parameter",
27
+ "4. Copy the 'code' value from the URL",
28
+ "5. Use the auth_exchange_code tool with the code to complete authentication",
29
+ ],
30
+ }, null, 2),
31
+ },
32
+ ],
33
+ };
34
+ }
35
+ catch (error) {
36
+ const errorMessage = error instanceof Error ? error.message : String(error);
37
+ return {
38
+ content: [
39
+ {
40
+ type: "text",
41
+ text: JSON.stringify({
42
+ success: false,
43
+ error: errorMessage,
44
+ hint: "Make sure TICKTICK_CLIENT_ID and TICKTICK_CLIENT_SECRET environment variables are set",
45
+ }, null, 2),
46
+ },
47
+ ],
48
+ isError: true,
49
+ };
50
+ }
51
+ });
52
+ }
53
+ //# sourceMappingURL=authGetAuthorizationUrl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authGetAuthorizationUrl.js","sourceRoot":"","sources":["../../src/tools/authGetAuthorizationUrl.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,MAAM,UAAU,mCAAmC,CACjD,MAAiB,EACjB,cAAmC;IAEnC,MAAM,CAAC,YAAY,CACjB,4BAA4B,EAC5B;QACE,WAAW,EAAE,uIAAuI;QACpJ,WAAW,EAAE,EAAE;KAChB,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;YAC/B,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,mBAAmB,EAAE,CAAC;YAEnD,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,OAAO,EAAE,IAAI;4BACb,gBAAgB,EAAE,GAAG;4BACrB,KAAK,EAAE,KAAK;4BACZ,YAAY,EAAE;gCACZ,+CAA+C;gCAC/C,qDAAqD;gCACrD,uFAAuF;gCACvF,uCAAuC;gCACvC,6EAA6E;6BAC9E;yBACF,EACD,IAAI,EACJ,CAAC,CACF;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACzD,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,OAAO,EAAE,KAAK;4BACd,KAAK,EAAE,YAAY;4BACnB,IAAI,EAAE,uFAAuF;yBAC9F,EACD,IAAI,EACJ,CAAC,CACF;qBACF;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { TickTickOAuth } from "../oauth.js";
3
+ /**
4
+ * Tool: Logout / Clear tokens
5
+ *
6
+ * Remove stored authentication tokens.
7
+ */
8
+ export declare function registerAuthLogoutTool(server: McpServer, getOAuthHelper: () => TickTickOAuth): void;
9
+ //# sourceMappingURL=authLogout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authLogout.d.ts","sourceRoot":"","sources":["../../src/tools/authLogout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS,EACjB,cAAc,EAAE,MAAM,aAAa,QAmDpC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Tool: Logout / Clear tokens
3
+ *
4
+ * Remove stored authentication tokens.
5
+ */
6
+ export function registerAuthLogoutTool(server, getOAuthHelper) {
7
+ server.registerTool("auth_logout", {
8
+ description: "Remove stored authentication tokens. This will log out the user from the TickTick integration.",
9
+ inputSchema: {},
10
+ }, async () => {
11
+ try {
12
+ const oauth = getOAuthHelper();
13
+ await oauth.clearToken();
14
+ return {
15
+ content: [
16
+ {
17
+ type: "text",
18
+ text: JSON.stringify({
19
+ success: true,
20
+ message: "Logged out successfully. Stored tokens have been cleared.",
21
+ }, null, 2),
22
+ },
23
+ ],
24
+ };
25
+ }
26
+ catch (error) {
27
+ const errorMessage = error instanceof Error ? error.message : String(error);
28
+ return {
29
+ content: [
30
+ {
31
+ type: "text",
32
+ text: JSON.stringify({
33
+ success: false,
34
+ error: errorMessage,
35
+ }, null, 2),
36
+ },
37
+ ],
38
+ isError: true,
39
+ };
40
+ }
41
+ });
42
+ }
43
+ //# sourceMappingURL=authLogout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authLogout.js","sourceRoot":"","sources":["../../src/tools/authLogout.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAiB,EACjB,cAAmC;IAEnC,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,WAAW,EAAE,gGAAgG;QAC7G,WAAW,EAAE,EAAE;KAChB,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;YAC/B,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC;YAEzB,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,OAAO,EAAE,IAAI;4BACb,OAAO,EACL,2DAA2D;yBAC9D,EACD,IAAI,EACJ,CAAC,CACF;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACzD,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,OAAO,EAAE,KAAK;4BACd,KAAK,EAAE,YAAY;yBACpB,EACD,IAAI,EACJ,CAAC,CACF;qBACF;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { TickTickOAuth } from "../oauth.js";
3
+ /**
4
+ * Tool: Refresh access token
5
+ *
6
+ * Manually refresh the access token using the stored refresh token.
7
+ */
8
+ export declare function registerAuthRefreshTokenTool(server: McpServer, getOAuthHelper: () => TickTickOAuth): void;
9
+ //# sourceMappingURL=authRefreshToken.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authRefreshToken.d.ts","sourceRoot":"","sources":["../../src/tools/authRefreshToken.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,SAAS,EACjB,cAAc,EAAE,MAAM,aAAa,QAyEpC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Tool: Refresh access token
3
+ *
4
+ * Manually refresh the access token using the stored refresh token.
5
+ */
6
+ export function registerAuthRefreshTokenTool(server, getOAuthHelper) {
7
+ server.registerTool("auth_refresh_token", {
8
+ description: "Manually refresh the OAuth access token. Usually not needed as tokens are automatically refreshed when expired.",
9
+ inputSchema: {},
10
+ }, async () => {
11
+ try {
12
+ const oauth = getOAuthHelper();
13
+ const storedToken = await oauth.loadToken();
14
+ if (!storedToken) {
15
+ return {
16
+ content: [
17
+ {
18
+ type: "text",
19
+ text: JSON.stringify({
20
+ success: false,
21
+ error: "Not authenticated. No stored token found.",
22
+ }, null, 2),
23
+ },
24
+ ],
25
+ isError: true,
26
+ };
27
+ }
28
+ const newTokens = await oauth.refreshToken(storedToken.refreshToken);
29
+ await oauth.storeToken(newTokens);
30
+ return {
31
+ content: [
32
+ {
33
+ type: "text",
34
+ text: JSON.stringify({
35
+ success: true,
36
+ message: "Token refreshed successfully!",
37
+ expiresIn: newTokens.expires_in,
38
+ }, null, 2),
39
+ },
40
+ ],
41
+ };
42
+ }
43
+ catch (error) {
44
+ const errorMessage = error instanceof Error ? error.message : String(error);
45
+ return {
46
+ content: [
47
+ {
48
+ type: "text",
49
+ text: JSON.stringify({
50
+ success: false,
51
+ error: errorMessage,
52
+ }, null, 2),
53
+ },
54
+ ],
55
+ isError: true,
56
+ };
57
+ }
58
+ });
59
+ }
60
+ //# sourceMappingURL=authRefreshToken.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authRefreshToken.js","sourceRoot":"","sources":["../../src/tools/authRefreshToken.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,UAAU,4BAA4B,CAC1C,MAAiB,EACjB,cAAmC;IAEnC,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,WAAW,EAAE,iHAAiH;QAC9H,WAAW,EAAE,EAAE;KAChB,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;YAC/B,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE,CAAC;YAE5C,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;gCACE,OAAO,EAAE,KAAK;gCACd,KAAK,EAAE,2CAA2C;6BACnD,EACD,IAAI,EACJ,CAAC,CACF;yBACF;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;YACrE,MAAM,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAElC,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,OAAO,EAAE,IAAI;4BACb,OAAO,EAAE,+BAA+B;4BACxC,SAAS,EAAE,SAAS,CAAC,UAAU;yBAChC,EACD,IAAI,EACJ,CAAC,CACF;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACzD,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,OAAO,EAAE,KAAK;4BACd,KAAK,EAAE,YAAY;yBACpB,EACD,IAAI,EACJ,CAAC,CACF;qBACF;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { TickTickOAuth } from "../oauth.js";
3
+ /**
4
+ * Tool: Check authentication status
5
+ *
6
+ * Returns information about the current authentication state.
7
+ */
8
+ export declare function registerAuthStatusTool(server: McpServer, getOAuthHelper: () => TickTickOAuth): void;
9
+ //# sourceMappingURL=authStatus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authStatus.d.ts","sourceRoot":"","sources":["../../src/tools/authStatus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS,EACjB,cAAc,EAAE,MAAM,aAAa,QA4EpC"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Tool: Check authentication status
3
+ *
4
+ * Returns information about the current authentication state.
5
+ */
6
+ export function registerAuthStatusTool(server, getOAuthHelper) {
7
+ server.registerTool("auth_status", {
8
+ description: "Check the current authentication status. Shows whether the user is authenticated and when the token expires.",
9
+ inputSchema: {},
10
+ }, async () => {
11
+ try {
12
+ const oauth = getOAuthHelper();
13
+ const status = await oauth.getAuthStatus();
14
+ if (!status.isAuthenticated) {
15
+ return {
16
+ content: [
17
+ {
18
+ type: "text",
19
+ text: JSON.stringify({
20
+ success: true,
21
+ isAuthenticated: false,
22
+ message: "Not authenticated. Use auth_get_authorization_url to start the OAuth flow.",
23
+ }, null, 2),
24
+ },
25
+ ],
26
+ };
27
+ }
28
+ return {
29
+ content: [
30
+ {
31
+ type: "text",
32
+ text: JSON.stringify({
33
+ success: true,
34
+ isAuthenticated: true,
35
+ isExpired: status.isExpired,
36
+ expiresAt: status.expiresAt,
37
+ expiresIn: status.expiresIn,
38
+ message: status.isExpired
39
+ ? "Token is expired. It will be automatically refreshed on next API call."
40
+ : `Token is valid for ${status.expiresIn} more seconds.`,
41
+ }, null, 2),
42
+ },
43
+ ],
44
+ };
45
+ }
46
+ catch (error) {
47
+ const errorMessage = error instanceof Error ? error.message : String(error);
48
+ return {
49
+ content: [
50
+ {
51
+ type: "text",
52
+ text: JSON.stringify({
53
+ success: false,
54
+ error: errorMessage,
55
+ }, null, 2),
56
+ },
57
+ ],
58
+ isError: true,
59
+ };
60
+ }
61
+ });
62
+ }
63
+ //# sourceMappingURL=authStatus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authStatus.js","sourceRoot":"","sources":["../../src/tools/authStatus.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAiB,EACjB,cAAmC;IAEnC,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,WAAW,EAAE,8GAA8G;QAC3H,WAAW,EAAE,EAAE;KAChB,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,aAAa,EAAE,CAAC;YAE3C,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;gBAC5B,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;gCACE,OAAO,EAAE,IAAI;gCACb,eAAe,EAAE,KAAK;gCACtB,OAAO,EACL,4EAA4E;6BAC/E,EACD,IAAI,EACJ,CAAC,CACF;yBACF;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,OAAO,EAAE,IAAI;4BACb,eAAe,EAAE,IAAI;4BACrB,SAAS,EAAE,MAAM,CAAC,SAAS;4BAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;4BAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;4BAC3B,OAAO,EAAE,MAAM,CAAC,SAAS;gCACvB,CAAC,CAAC,wEAAwE;gCAC1E,CAAC,CAAC,sBAAsB,MAAM,CAAC,SAAS,gBAAgB;yBAC3D,EACD,IAAI,EACJ,CAAC,CACF;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACzD,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,OAAO,EAAE,KAAK;4BACd,KAAK,EAAE,YAAY;yBACpB,EACD,IAAI,EACJ,CAAC,CACF;qBACF;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { TickTickClient } from "../sdk/client.js";
3
+ /**
4
+ * Tool: Batch create tasks
5
+ *
6
+ * Creates multiple tasks at once.
7
+ */
8
+ export declare function registerBatchCreateTasksTool(server: McpServer, getClient: () => Promise<TickTickClient>): void;
9
+ //# sourceMappingURL=batchCreateTasks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batchCreateTasks.d.ts","sourceRoot":"","sources":["../../src/tools/batchCreateTasks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,QAqFzC"}
@@ -0,0 +1,75 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Tool: Batch create tasks
4
+ *
5
+ * Creates multiple tasks at once.
6
+ */
7
+ export function registerBatchCreateTasksTool(server, getClient) {
8
+ server.registerTool("batch_create_tasks", {
9
+ description: "Create multiple tasks at once in TickTick. More efficient than creating tasks one by one.",
10
+ inputSchema: {
11
+ tasks: z
12
+ .array(z.object({
13
+ title: z.string().describe("The title of the task (required)"),
14
+ projectId: z
15
+ .string()
16
+ .optional()
17
+ .describe("The project ID (defaults to inbox if not specified)"),
18
+ content: z.string().optional().describe("Task description/notes"),
19
+ priority: z
20
+ .number()
21
+ .min(0)
22
+ .max(5)
23
+ .optional()
24
+ .describe("Priority: 0=None, 1=Low, 3=Medium, 5=High"),
25
+ dueDate: z
26
+ .string()
27
+ .optional()
28
+ .describe("Due date in ISO 8601 format (e.g., 2024-01-15T17:00:00+0000)"),
29
+ }))
30
+ .describe("Array of task objects to create"),
31
+ },
32
+ }, async ({ tasks }) => {
33
+ try {
34
+ const client = await getClient();
35
+ const createdTasks = await client.batchCreateTasks(tasks);
36
+ return {
37
+ content: [
38
+ {
39
+ type: "text",
40
+ text: JSON.stringify({
41
+ success: true,
42
+ message: `Successfully created ${createdTasks.length} tasks!`,
43
+ count: createdTasks.length,
44
+ tasks: createdTasks.map((t) => ({
45
+ id: t.id,
46
+ title: t.title,
47
+ projectId: t.projectId,
48
+ content: t.content,
49
+ priority: t.priority,
50
+ dueDate: t.dueDate,
51
+ status: t.status,
52
+ })),
53
+ }, null, 2),
54
+ },
55
+ ],
56
+ };
57
+ }
58
+ catch (error) {
59
+ const errorMessage = error instanceof Error ? error.message : String(error);
60
+ return {
61
+ content: [
62
+ {
63
+ type: "text",
64
+ text: JSON.stringify({
65
+ success: false,
66
+ error: errorMessage,
67
+ }, null, 2),
68
+ },
69
+ ],
70
+ isError: true,
71
+ };
72
+ }
73
+ });
74
+ }
75
+ //# sourceMappingURL=batchCreateTasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batchCreateTasks.js","sourceRoot":"","sources":["../../src/tools/batchCreateTasks.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;GAIG;AACH,MAAM,UAAU,4BAA4B,CAC1C,MAAiB,EACjB,SAAwC;IAExC,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,WAAW,EAAE,2FAA2F;QACxG,WAAW,EAAE;YACX,KAAK,EAAE,CAAC;iBACL,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;gBACP,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;gBAC9D,SAAS,EAAE,CAAC;qBACT,MAAM,EAAE;qBACR,QAAQ,EAAE;qBACV,QAAQ,CAAC,qDAAqD,CAAC;gBAClE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;gBACjE,QAAQ,EAAE,CAAC;qBACR,MAAM,EAAE;qBACR,GAAG,CAAC,CAAC,CAAC;qBACN,GAAG,CAAC,CAAC,CAAC;qBACN,QAAQ,EAAE;qBACV,QAAQ,CAAC,2CAA2C,CAAC;gBACxD,OAAO,EAAE,CAAC;qBACP,MAAM,EAAE;qBACR,QAAQ,EAAE;qBACV,QAAQ,CACP,8DAA8D,CAC/D;aACJ,CAAC,CACH;iBACA,QAAQ,CAAC,iCAAiC,CAAC;SAC/C;KACF,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAClB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;YACjC,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAE1D,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,OAAO,EAAE,IAAI;4BACb,OAAO,EAAE,wBAAwB,YAAY,CAAC,MAAM,SAAS;4BAC7D,KAAK,EAAE,YAAY,CAAC,MAAM;4BAC1B,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gCAC9B,EAAE,EAAE,CAAC,CAAC,EAAE;gCACR,KAAK,EAAE,CAAC,CAAC,KAAK;gCACd,SAAS,EAAE,CAAC,CAAC,SAAS;gCACtB,OAAO,EAAE,CAAC,CAAC,OAAO;gCAClB,QAAQ,EAAE,CAAC,CAAC,QAAQ;gCACpB,OAAO,EAAE,CAAC,CAAC,OAAO;gCAClB,MAAM,EAAE,CAAC,CAAC,MAAM;6BACjB,CAAC,CAAC;yBACJ,EACD,IAAI,EACJ,CAAC,CACF;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACzD,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,OAAO,EAAE,KAAK;4BACd,KAAK,EAAE,YAAY;yBACpB,EACD,IAAI,EACJ,CAAC,CACF;qBACF;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { TickTickClient } from "../sdk/client.js";
3
+ /**
4
+ * Tool: Complete task
5
+ *
6
+ * Marks a task as complete.
7
+ */
8
+ export declare function registerCompleteTaskTool(server: McpServer, getClient: () => Promise<TickTickClient>): void;
9
+ //# sourceMappingURL=completeTask.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completeTask.d.ts","sourceRoot":"","sources":["../../src/tools/completeTask.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,QAqDzC"}
@@ -0,0 +1,47 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Tool: Complete task
4
+ *
5
+ * Marks a task as complete.
6
+ */
7
+ export function registerCompleteTaskTool(server, getClient) {
8
+ server.registerTool("complete_task", {
9
+ description: "Mark a task as complete in TickTick.",
10
+ inputSchema: {
11
+ projectId: z.string().describe("The project ID containing the task"),
12
+ taskId: z.string().describe("The ID of the task to complete"),
13
+ },
14
+ }, async ({ projectId, taskId }) => {
15
+ try {
16
+ const client = await getClient();
17
+ await client.completeTask(projectId, taskId);
18
+ return {
19
+ content: [
20
+ {
21
+ type: "text",
22
+ text: JSON.stringify({
23
+ success: true,
24
+ message: "Task completed successfully!",
25
+ }, null, 2),
26
+ },
27
+ ],
28
+ };
29
+ }
30
+ catch (error) {
31
+ const errorMessage = error instanceof Error ? error.message : String(error);
32
+ return {
33
+ content: [
34
+ {
35
+ type: "text",
36
+ text: JSON.stringify({
37
+ success: false,
38
+ error: errorMessage,
39
+ }, null, 2),
40
+ },
41
+ ],
42
+ isError: true,
43
+ };
44
+ }
45
+ });
46
+ }
47
+ //# sourceMappingURL=completeTask.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completeTask.js","sourceRoot":"","sources":["../../src/tools/completeTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CACtC,MAAiB,EACjB,SAAwC;IAExC,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,WAAW,EAAE,sCAAsC;QACnD,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;YACpE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;SAC9D;KACF,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE;QAC9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;YACjC,MAAM,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAE7C,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,OAAO,EAAE,IAAI;4BACb,OAAO,EAAE,8BAA8B;yBACxC,EACD,IAAI,EACJ,CAAC,CACF;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACzD,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,OAAO,EAAE,KAAK;4BACd,KAAK,EAAE,YAAY;yBACpB,EACD,IAAI,EACJ,CAAC,CACF;qBACF;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { TickTickClient } from "../sdk/client.js";
3
+ /**
4
+ * Tool: Create project
5
+ *
6
+ * Creates a new project.
7
+ */
8
+ export declare function registerCreateProjectTool(server: McpServer, getClient: () => Promise<TickTickClient>): void;
9
+ //# sourceMappingURL=createProject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createProject.d.ts","sourceRoot":"","sources":["../../src/tools/createProject.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,QAsEzC"}
@@ -0,0 +1,64 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Tool: Create project
4
+ *
5
+ * Creates a new project.
6
+ */
7
+ export function registerCreateProjectTool(server, getClient) {
8
+ server.registerTool("create_project", {
9
+ description: "Create a new project in TickTick.",
10
+ inputSchema: {
11
+ name: z.string().describe("The name of the project"),
12
+ color: z
13
+ .string()
14
+ .optional()
15
+ .describe('Hex color code (e.g., "#ff6b6b")'),
16
+ viewMode: z
17
+ .enum(["list", "kanban", "timeline"])
18
+ .optional()
19
+ .describe("View mode for the project"),
20
+ },
21
+ }, async ({ name, color, viewMode }) => {
22
+ try {
23
+ const client = await getClient();
24
+ const project = await client.createProject({
25
+ name,
26
+ color,
27
+ viewMode: viewMode,
28
+ });
29
+ return {
30
+ content: [
31
+ {
32
+ type: "text",
33
+ text: JSON.stringify({
34
+ success: true,
35
+ message: `Project "${project.name}" created successfully!`,
36
+ project: {
37
+ id: project.id,
38
+ name: project.name,
39
+ color: project.color,
40
+ viewMode: project.viewMode,
41
+ },
42
+ }, null, 2),
43
+ },
44
+ ],
45
+ };
46
+ }
47
+ catch (error) {
48
+ const errorMessage = error instanceof Error ? error.message : String(error);
49
+ return {
50
+ content: [
51
+ {
52
+ type: "text",
53
+ text: JSON.stringify({
54
+ success: false,
55
+ error: errorMessage,
56
+ }, null, 2),
57
+ },
58
+ ],
59
+ isError: true,
60
+ };
61
+ }
62
+ });
63
+ }
64
+ //# sourceMappingURL=createProject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createProject.js","sourceRoot":"","sources":["../../src/tools/createProject.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CACvC,MAAiB,EACjB,SAAwC;IAExC,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,WAAW,EAAE,mCAAmC;QAChD,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;YACpD,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,kCAAkC,CAAC;YAC/C,QAAQ,EAAE,CAAC;iBACR,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;iBACpC,QAAQ,EAAE;iBACV,QAAQ,CAAC,2BAA2B,CAAC;SACzC;KACF,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;QAClC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC;gBACzC,IAAI;gBACJ,KAAK;gBACL,QAAQ,EAAE,QAAe;aAC1B,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,OAAO,EAAE,IAAI;4BACb,OAAO,EAAE,YAAY,OAAO,CAAC,IAAI,yBAAyB;4BAC1D,OAAO,EAAE;gCACP,EAAE,EAAE,OAAO,CAAC,EAAE;gCACd,IAAI,EAAE,OAAO,CAAC,IAAI;gCAClB,KAAK,EAAE,OAAO,CAAC,KAAK;gCACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;6BAC3B;yBACF,EACD,IAAI,EACJ,CAAC,CACF;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACzD,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,OAAO,EAAE,KAAK;4BACd,KAAK,EAAE,YAAY;yBACpB,EACD,IAAI,EACJ,CAAC,CACF;qBACF;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { TickTickClient } from "../sdk/client.js";
3
+ /**
4
+ * Tool: Create task
5
+ *
6
+ * Creates a new task.
7
+ */
8
+ export declare function registerCreateTaskTool(server: McpServer, getClient: () => Promise<TickTickClient>): void;
9
+ //# sourceMappingURL=createTask.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createTask.d.ts","sourceRoot":"","sources":["../../src/tools/createTask.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,QA4IzC"}