motionmcp 2.6.0 → 2.8.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 (125) hide show
  1. package/README.md +4 -4
  2. package/dist/handlers/CustomFieldHandler.d.ts.map +1 -1
  3. package/dist/handlers/CustomFieldHandler.js +18 -2
  4. package/dist/handlers/CustomFieldHandler.js.map +1 -1
  5. package/dist/handlers/HandlerFactory.d.ts +0 -5
  6. package/dist/handlers/HandlerFactory.d.ts.map +1 -1
  7. package/dist/handlers/HandlerFactory.js +0 -15
  8. package/dist/handlers/HandlerFactory.js.map +1 -1
  9. package/dist/handlers/RecurringTaskHandler.d.ts.map +1 -1
  10. package/dist/handlers/RecurringTaskHandler.js +7 -2
  11. package/dist/handlers/RecurringTaskHandler.js.map +1 -1
  12. package/dist/handlers/TaskHandler.d.ts.map +1 -1
  13. package/dist/handlers/TaskHandler.js +7 -0
  14. package/dist/handlers/TaskHandler.js.map +1 -1
  15. package/dist/mcp-server.js +3 -3
  16. package/dist/mcp-server.js.map +1 -1
  17. package/dist/services/api/ApiClient.d.ts +22 -0
  18. package/dist/services/api/ApiClient.d.ts.map +1 -0
  19. package/dist/services/api/ApiClient.js +198 -0
  20. package/dist/services/api/ApiClient.js.map +1 -0
  21. package/dist/services/api/CacheManager.d.ts +21 -0
  22. package/dist/services/api/CacheManager.d.ts.map +1 -0
  23. package/dist/services/api/CacheManager.js +25 -0
  24. package/dist/services/api/CacheManager.js.map +1 -0
  25. package/dist/services/api/comments.d.ts +8 -0
  26. package/dist/services/api/comments.d.ts.map +1 -0
  27. package/dist/services/api/comments.js +86 -0
  28. package/dist/services/api/comments.js.map +1 -0
  29. package/dist/services/api/customFields.d.ts +21 -0
  30. package/dist/services/api/customFields.d.ts.map +1 -0
  31. package/dist/services/api/customFields.js +277 -0
  32. package/dist/services/api/customFields.js.map +1 -0
  33. package/dist/services/api/index.d.ts +22 -0
  34. package/dist/services/api/index.d.ts.map +1 -0
  35. package/dist/services/api/index.js +64 -0
  36. package/dist/services/api/index.js.map +1 -0
  37. package/dist/services/api/projects.d.ts +18 -0
  38. package/dist/services/api/projects.d.ts.map +1 -0
  39. package/dist/services/api/projects.js +346 -0
  40. package/dist/services/api/projects.js.map +1 -0
  41. package/dist/services/api/recurringTasks.d.ts +15 -0
  42. package/dist/services/api/recurringTasks.d.ts.map +1 -0
  43. package/dist/services/api/recurringTasks.js +143 -0
  44. package/dist/services/api/recurringTasks.js.map +1 -0
  45. package/dist/services/api/schedules.d.ts +8 -0
  46. package/dist/services/api/schedules.d.ts.map +1 -0
  47. package/dist/services/api/schedules.js +70 -0
  48. package/dist/services/api/schedules.js.map +1 -0
  49. package/dist/services/api/search.d.ts +29 -0
  50. package/dist/services/api/search.d.ts.map +1 -0
  51. package/dist/services/api/search.js +415 -0
  52. package/dist/services/api/search.js.map +1 -0
  53. package/dist/services/api/statuses.d.ts +7 -0
  54. package/dist/services/api/statuses.d.ts.map +1 -0
  55. package/dist/services/api/statuses.js +67 -0
  56. package/dist/services/api/statuses.js.map +1 -0
  57. package/dist/services/api/tasks.d.ts +34 -0
  58. package/dist/services/api/tasks.d.ts.map +1 -0
  59. package/dist/services/api/tasks.js +474 -0
  60. package/dist/services/api/tasks.js.map +1 -0
  61. package/dist/services/api/types.d.ts +54 -0
  62. package/dist/services/api/types.d.ts.map +1 -0
  63. package/dist/services/api/types.js +9 -0
  64. package/dist/services/api/types.js.map +1 -0
  65. package/dist/services/api/users.d.ts +8 -0
  66. package/dist/services/api/users.d.ts.map +1 -0
  67. package/dist/services/api/users.js +93 -0
  68. package/dist/services/api/users.js.map +1 -0
  69. package/dist/services/api/workspaces.d.ts +7 -0
  70. package/dist/services/api/workspaces.d.ts.map +1 -0
  71. package/dist/services/api/workspaces.js +59 -0
  72. package/dist/services/api/workspaces.js.map +1 -0
  73. package/dist/services/motionApi.d.ts +34 -180
  74. package/dist/services/motionApi.d.ts.map +1 -1
  75. package/dist/services/motionApi.js +84 -2163
  76. package/dist/services/motionApi.js.map +1 -1
  77. package/dist/tools/ToolConfigurator.d.ts +1 -7
  78. package/dist/tools/ToolConfigurator.d.ts.map +1 -1
  79. package/dist/tools/ToolConfigurator.js +0 -31
  80. package/dist/tools/ToolConfigurator.js.map +1 -1
  81. package/dist/tools/ToolDefinitions.js +1 -1
  82. package/dist/tools/ToolDefinitions.js.map +1 -1
  83. package/dist/tools/ToolRegistry.d.ts +1 -22
  84. package/dist/tools/ToolRegistry.d.ts.map +1 -1
  85. package/dist/tools/ToolRegistry.js +0 -31
  86. package/dist/tools/ToolRegistry.js.map +1 -1
  87. package/dist/types/motion.d.ts +0 -7
  88. package/dist/types/motion.d.ts.map +1 -1
  89. package/dist/utils/cache.d.ts +0 -5
  90. package/dist/utils/cache.d.ts.map +1 -1
  91. package/dist/utils/cache.js +0 -8
  92. package/dist/utils/cache.js.map +1 -1
  93. package/dist/utils/constants.d.ts +4 -0
  94. package/dist/utils/constants.d.ts.map +1 -1
  95. package/dist/utils/constants.js +7 -1
  96. package/dist/utils/constants.js.map +1 -1
  97. package/dist/utils/errorHandling.d.ts +0 -12
  98. package/dist/utils/errorHandling.d.ts.map +1 -1
  99. package/dist/utils/errorHandling.js +2 -23
  100. package/dist/utils/errorHandling.js.map +1 -1
  101. package/dist/utils/errors.d.ts +89 -0
  102. package/dist/utils/errors.d.ts.map +1 -0
  103. package/dist/utils/errors.js +276 -0
  104. package/dist/utils/errors.js.map +1 -0
  105. package/dist/utils/index.d.ts +2 -2
  106. package/dist/utils/index.d.ts.map +1 -1
  107. package/dist/utils/index.js +6 -5
  108. package/dist/utils/index.js.map +1 -1
  109. package/dist/utils/parameterUtils.d.ts +10 -0
  110. package/dist/utils/parameterUtils.d.ts.map +1 -1
  111. package/dist/utils/parameterUtils.js +61 -5
  112. package/dist/utils/parameterUtils.js.map +1 -1
  113. package/dist/utils/responseFormatters.js +16 -16
  114. package/dist/utils/responseFormatters.js.map +1 -1
  115. package/dist/utils/serverInstructions.d.ts +2 -0
  116. package/dist/utils/serverInstructions.d.ts.map +1 -0
  117. package/dist/utils/serverInstructions.js +21 -0
  118. package/dist/utils/serverInstructions.js.map +1 -0
  119. package/dist/utils/userFacingErrors.d.ts +0 -8
  120. package/dist/utils/userFacingErrors.d.ts.map +1 -1
  121. package/dist/utils/userFacingErrors.js +0 -19
  122. package/dist/utils/userFacingErrors.js.map +1 -1
  123. package/dist/utils/workspaceResolver.js +12 -12
  124. package/dist/utils/workspaceResolver.js.map +1 -1
  125. package/package.json +2 -1
@@ -0,0 +1,346 @@
1
+ "use strict";
2
+ /**
3
+ * Project resource module — getProjects, getAllProjects, getProject, createProject,
4
+ * updateProject, deleteProject, getProjectByName
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.getProjects = getProjects;
8
+ exports.getAllProjects = getAllProjects;
9
+ exports.getProject = getProject;
10
+ exports.createProject = createProject;
11
+ exports.updateProject = updateProject;
12
+ exports.deleteProject = deleteProject;
13
+ exports.getProjectByName = getProjectByName;
14
+ const axios_1 = require("axios");
15
+ const constants_1 = require("../../utils/constants");
16
+ const errors_1 = require("../../utils/errors");
17
+ const logger_1 = require("../../utils/logger");
18
+ const paginationNew_1 = require("../../utils/paginationNew");
19
+ const responseWrapper_1 = require("../../utils/responseWrapper");
20
+ const ApiClient_1 = require("./ApiClient");
21
+ const workspaces_1 = require("./workspaces");
22
+ async function getProjects(ctx, workspaceId, options) {
23
+ const { maxPages = constants_1.LIMITS.MAX_PAGES, limit } = options || {};
24
+ // Validate limit parameter if provided
25
+ if (limit !== undefined && (limit < 0 || !Number.isInteger(limit))) {
26
+ throw new Error('limit must be a non-negative integer');
27
+ }
28
+ const cacheKey = `projects:workspace:${workspaceId}:maxPages:${maxPages ?? 'default'}:limit:${limit ?? 'none'}`;
29
+ // Check cache - return items only (no stale truncation info)
30
+ const cachedItems = ctx.cache.project.get(cacheKey);
31
+ if (cachedItems !== null) {
32
+ return { items: cachedItems };
33
+ }
34
+ try {
35
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.DEBUG, 'Fetching projects from Motion API', {
36
+ method: 'getProjects',
37
+ workspaceId,
38
+ maxPages,
39
+ limit
40
+ });
41
+ // Create a fetch function for potential pagination
42
+ const fetchPage = async (cursor) => {
43
+ const params = new URLSearchParams();
44
+ params.append('workspaceId', workspaceId);
45
+ if (cursor) {
46
+ params.append('cursor', cursor);
47
+ }
48
+ const queryString = params.toString();
49
+ const url = `/projects?${queryString}`;
50
+ return ctx.api.requestWithRetry(() => ctx.api.client.get(url));
51
+ };
52
+ try {
53
+ // Attempt pagination-aware fetch with new response wrapper
54
+ const paginatedResult = await (0, paginationNew_1.fetchAllPages)(fetchPage, 'projects', {
55
+ maxPages,
56
+ logProgress: false,
57
+ ...(limit ? { maxItems: limit } : {})
58
+ });
59
+ const projects = paginatedResult.items;
60
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.INFO, 'Projects fetched successfully with pagination', {
61
+ method: 'getProjects',
62
+ totalCount: projects.length,
63
+ hasMore: paginatedResult.hasMore,
64
+ workspaceId
65
+ });
66
+ // Cache only items, not truncation metadata
67
+ ctx.cache.project.set(cacheKey, projects);
68
+ return { items: projects, truncation: paginatedResult.truncation };
69
+ }
70
+ catch (paginationError) {
71
+ // Fallback to simple fetch if pagination fails — results may be incomplete
72
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.WARN, 'Pagination failed, falling back to single-page fetch', {
73
+ method: 'getProjects',
74
+ error: paginationError instanceof Error ? paginationError.message : String(paginationError)
75
+ });
76
+ }
77
+ // Use new response wrapper for single page fallback
78
+ const response = await fetchPage();
79
+ const unwrapped = (0, responseWrapper_1.unwrapApiResponse)(response.data, 'projects');
80
+ let projects = unwrapped.data;
81
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.INFO, 'Projects fetched successfully (single page)', {
82
+ method: 'getProjects',
83
+ count: projects.length,
84
+ workspaceId
85
+ });
86
+ // Do not cache fallback results. If pagination failed, this may be only the first page.
87
+ return { items: projects, truncation: { wasTruncated: true, returnedCount: projects.length, reason: 'error' } };
88
+ }
89
+ catch (error) {
90
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.ERROR, 'Failed to fetch projects', {
91
+ method: 'getProjects',
92
+ error: (0, ApiClient_1.getErrorMessage)(error),
93
+ apiStatus: (0, axios_1.isAxiosError)(error) ? error.response?.status : undefined,
94
+ apiMessage: (0, axios_1.isAxiosError)(error) ? error.response?.data?.message : undefined
95
+ });
96
+ throw ctx.api.formatApiError(error, 'fetch', 'project');
97
+ }
98
+ }
99
+ async function getAllProjects(ctx) {
100
+ try {
101
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.DEBUG, 'Fetching projects from all workspaces', {
102
+ method: 'getAllProjects'
103
+ });
104
+ const allWorkspaces = await (0, workspaces_1.getWorkspaces)(ctx);
105
+ const allProjects = [];
106
+ let aggregateTruncation;
107
+ for (const workspace of allWorkspaces) {
108
+ try {
109
+ const { items, truncation } = await getProjects(ctx, workspace.id);
110
+ allProjects.push(...items);
111
+ aggregateTruncation = ctx.api.mergeTruncationMetadata(aggregateTruncation, truncation);
112
+ }
113
+ catch (workspaceError) {
114
+ // Log error but continue with other workspaces
115
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.WARN, 'Failed to fetch projects from workspace', {
116
+ method: 'getAllProjects',
117
+ workspaceId: workspace.id,
118
+ workspaceName: workspace.name,
119
+ error: (0, ApiClient_1.getErrorMessage)(workspaceError)
120
+ });
121
+ }
122
+ }
123
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.INFO, 'All projects fetched successfully', {
124
+ method: 'getAllProjects',
125
+ totalProjects: allProjects.length,
126
+ workspaceCount: allWorkspaces.length
127
+ });
128
+ if (aggregateTruncation) {
129
+ aggregateTruncation.returnedCount = allProjects.length;
130
+ }
131
+ return { items: allProjects, truncation: aggregateTruncation };
132
+ }
133
+ catch (error) {
134
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.ERROR, 'Failed to fetch projects from all workspaces', {
135
+ method: 'getAllProjects',
136
+ error: (0, ApiClient_1.getErrorMessage)(error)
137
+ });
138
+ throw ctx.api.formatApiError(error, 'fetch', 'project');
139
+ }
140
+ }
141
+ async function getProject(ctx, projectId) {
142
+ const cacheKey = `project:${projectId}`;
143
+ return ctx.cache.singleProject.withCache(cacheKey, async () => {
144
+ try {
145
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.DEBUG, 'Fetching single project from Motion API', {
146
+ method: 'getProject',
147
+ projectId
148
+ });
149
+ const response = await ctx.api.requestWithRetry(() => ctx.api.client.get(`/projects/${projectId}`));
150
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.INFO, 'Successfully fetched project', {
151
+ method: 'getProject',
152
+ projectId,
153
+ projectName: response.data.name
154
+ });
155
+ return response.data;
156
+ }
157
+ catch (error) {
158
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.ERROR, 'Failed to fetch project', {
159
+ method: 'getProject',
160
+ projectId,
161
+ error: (0, ApiClient_1.getErrorMessage)(error),
162
+ apiStatus: (0, axios_1.isAxiosError)(error) ? error.response?.status : undefined,
163
+ apiMessage: (0, axios_1.isAxiosError)(error) ? error.response?.data?.message : undefined
164
+ });
165
+ throw ctx.api.formatApiError(error, 'fetch', 'project', projectId);
166
+ }
167
+ });
168
+ }
169
+ async function createProject(ctx, projectData) {
170
+ try {
171
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.DEBUG, 'Creating project in Motion API', {
172
+ method: 'createProject',
173
+ projectName: projectData.name,
174
+ workspaceId: projectData.workspaceId
175
+ });
176
+ if (!projectData.workspaceId) {
177
+ throw new errors_1.UserFacingError('Workspace ID is required to create a project', 'Workspace ID is required to create a project', undefined, undefined, 400);
178
+ }
179
+ // Create minimal payload by removing empty/null values to avoid validation errors
180
+ const minimalPayload = (0, constants_1.createMinimalPayload)(projectData);
181
+ // Debug logging: log the exact payload being sent to API
182
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.DEBUG, 'API payload for project creation', {
183
+ method: 'createProject',
184
+ payload: JSON.stringify(minimalPayload, null, 2)
185
+ });
186
+ const response = await ctx.api.requestWithRetry(() => ctx.api.client.post('/projects', minimalPayload));
187
+ // Invalidate cache after successful creation
188
+ ctx.cache.project.invalidate(`projects:workspace:${projectData.workspaceId}`);
189
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.INFO, 'Project created successfully', {
190
+ method: 'createProject',
191
+ projectId: response.data.id,
192
+ projectName: response.data.name
193
+ });
194
+ return response.data;
195
+ }
196
+ catch (error) {
197
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.ERROR, 'Failed to create project', {
198
+ method: 'createProject',
199
+ error: (0, ApiClient_1.getErrorMessage)(error),
200
+ apiStatus: (0, axios_1.isAxiosError)(error) ? error.response?.status : undefined,
201
+ apiMessage: (0, axios_1.isAxiosError)(error) ? error.response?.data?.message : undefined,
202
+ fullErrorResponse: (0, axios_1.isAxiosError)(error) ? JSON.stringify(error.response?.data, null, 2) : undefined
203
+ });
204
+ throw ctx.api.formatApiError(error, 'create', 'project', undefined, projectData.name);
205
+ }
206
+ }
207
+ // Note: Project update/delete are not in the public API docs but appear to be functional
208
+ async function updateProject(ctx, projectId, updates) {
209
+ try {
210
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.DEBUG, 'Updating project in Motion API', {
211
+ method: 'updateProject',
212
+ projectId,
213
+ updates: Object.keys(updates)
214
+ });
215
+ // Create minimal payload by removing empty/null values to avoid validation errors
216
+ const minimalUpdates = (0, constants_1.createMinimalPayload)(updates);
217
+ const response = await ctx.api.requestWithRetry(() => ctx.api.client.patch(`/projects/${projectId}`, minimalUpdates));
218
+ // Invalidate cache after successful update
219
+ ctx.cache.project.invalidate(`projects:workspace:${response.data.workspaceId}`);
220
+ ctx.cache.singleProject.invalidate(`project:${projectId}`);
221
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.INFO, 'Project updated successfully', {
222
+ method: 'updateProject',
223
+ projectId,
224
+ projectName: response.data.name
225
+ });
226
+ return response.data;
227
+ }
228
+ catch (error) {
229
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.ERROR, 'Failed to update project', {
230
+ method: 'updateProject',
231
+ projectId,
232
+ error: (0, ApiClient_1.getErrorMessage)(error),
233
+ apiStatus: (0, axios_1.isAxiosError)(error) ? error.response?.status : undefined,
234
+ apiMessage: (0, axios_1.isAxiosError)(error) ? error.response?.data?.message : undefined
235
+ });
236
+ throw ctx.api.formatApiError(error, 'update', 'project', projectId);
237
+ }
238
+ }
239
+ // Note: Project delete is not in the public API docs but appears to be functional
240
+ async function deleteProject(ctx, projectId) {
241
+ try {
242
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.DEBUG, 'Deleting project from Motion API', {
243
+ method: 'deleteProject',
244
+ projectId
245
+ });
246
+ await ctx.api.requestWithRetry(() => ctx.api.client.delete(`/projects/${projectId}`));
247
+ // Invalidate all project caches since we don't know the workspace ID
248
+ ctx.cache.project.invalidate();
249
+ ctx.cache.singleProject.invalidate(`project:${projectId}`);
250
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.INFO, 'Project deleted successfully', {
251
+ method: 'deleteProject',
252
+ projectId
253
+ });
254
+ }
255
+ catch (error) {
256
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.ERROR, 'Failed to delete project', {
257
+ method: 'deleteProject',
258
+ projectId,
259
+ error: (0, ApiClient_1.getErrorMessage)(error),
260
+ apiStatus: (0, axios_1.isAxiosError)(error) ? error.response?.status : undefined,
261
+ apiMessage: (0, axios_1.isAxiosError)(error) ? error.response?.data?.message : undefined
262
+ });
263
+ throw ctx.api.formatApiError(error, 'delete', 'project', projectId);
264
+ }
265
+ }
266
+ async function getProjectByName(ctx, projectName, workspaceId) {
267
+ try {
268
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.DEBUG, 'Finding project by name', {
269
+ method: 'getProjectByName',
270
+ projectName,
271
+ workspaceId
272
+ });
273
+ // First, search in the specified workspace (if provided)
274
+ if (workspaceId) {
275
+ const { items: projects } = await getProjects(ctx, workspaceId);
276
+ const project = projects.find(p => p.name === projectName);
277
+ if (project) {
278
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.INFO, 'Project found by name in specified workspace', {
279
+ method: 'getProjectByName',
280
+ projectName,
281
+ projectId: project.id,
282
+ workspaceId
283
+ });
284
+ return project;
285
+ }
286
+ }
287
+ // If not found in specified workspace (or none specified), search across all other workspaces
288
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.DEBUG, 'Project not found in specified workspace, searching all workspaces', {
289
+ method: 'getProjectByName',
290
+ projectName,
291
+ specifiedWorkspaceId: workspaceId
292
+ });
293
+ const allWorkspaces = await (0, workspaces_1.getWorkspaces)(ctx);
294
+ const otherWorkspaces = allWorkspaces.filter(w => w.id !== workspaceId);
295
+ for (const workspace of otherWorkspaces) {
296
+ try {
297
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.DEBUG, 'Searching workspace for project', {
298
+ method: 'getProjectByName',
299
+ projectName,
300
+ searchingWorkspaceId: workspace.id,
301
+ searchingWorkspaceName: workspace.name
302
+ });
303
+ const { items: workspaceProjects } = await getProjects(ctx, workspace.id);
304
+ const foundProject = workspaceProjects.find(p => p.name === projectName);
305
+ if (foundProject) {
306
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.WARN, 'Project found by name in different workspace', {
307
+ method: 'getProjectByName',
308
+ projectName,
309
+ projectId: foundProject.id,
310
+ foundInWorkspaceId: workspace.id,
311
+ foundInWorkspaceName: workspace.name,
312
+ originalWorkspaceId: workspaceId
313
+ });
314
+ return foundProject;
315
+ }
316
+ }
317
+ catch (workspaceError) {
318
+ // Log error but continue searching other workspaces
319
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.WARN, 'Failed to search workspace for project', {
320
+ method: 'getProjectByName',
321
+ projectName,
322
+ workspaceId: workspace.id,
323
+ workspaceName: workspace.name,
324
+ error: (0, ApiClient_1.getErrorMessage)(workspaceError)
325
+ });
326
+ }
327
+ }
328
+ // Project not found in any workspace
329
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.WARN, 'Project not found by name in any workspace', {
330
+ method: 'getProjectByName',
331
+ projectName,
332
+ searchedWorkspaces: [workspaceId, ...otherWorkspaces.map(w => w.id)],
333
+ totalWorkspacesSearched: allWorkspaces.length
334
+ });
335
+ return undefined;
336
+ }
337
+ catch (error) {
338
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.ERROR, 'Failed to find project by name', {
339
+ method: 'getProjectByName',
340
+ projectName,
341
+ error: (0, ApiClient_1.getErrorMessage)(error)
342
+ });
343
+ throw error;
344
+ }
345
+ }
346
+ //# sourceMappingURL=projects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../../src/services/api/projects.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Recurring task resource module — getRecurringTasks, createRecurringTask, deleteRecurringTask
3
+ */
4
+ import { MotionRecurringTask, CreateRecurringTaskData } from '../../types/motion';
5
+ import { ListResult } from '../../types/mcp';
6
+ import { ResourceContext } from './types';
7
+ export declare function getRecurringTasks(ctx: ResourceContext, workspaceId?: string, options?: {
8
+ maxPages?: number;
9
+ limit?: number;
10
+ }): Promise<ListResult<MotionRecurringTask>>;
11
+ export declare function createRecurringTask(ctx: ResourceContext, taskData: CreateRecurringTaskData): Promise<MotionRecurringTask>;
12
+ export declare function deleteRecurringTask(ctx: ResourceContext, recurringTaskId: string): Promise<{
13
+ success: boolean;
14
+ }>;
15
+ //# sourceMappingURL=recurringTasks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recurringTasks.d.ts","sourceRoot":"","sources":["../../../src/services/api/recurringTasks.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAIlF,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG1C,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,eAAe,EACpB,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9C,OAAO,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,CA0D1C;AAED,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,eAAe,EAAE,QAAQ,EAAE,uBAAuB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAuD/H;AAED,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CA8BtH"}
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ /**
3
+ * Recurring task resource module — getRecurringTasks, createRecurringTask, deleteRecurringTask
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getRecurringTasks = getRecurringTasks;
7
+ exports.createRecurringTask = createRecurringTask;
8
+ exports.deleteRecurringTask = deleteRecurringTask;
9
+ const axios_1 = require("axios");
10
+ const constants_1 = require("../../utils/constants");
11
+ const logger_1 = require("../../utils/logger");
12
+ const paginationNew_1 = require("../../utils/paginationNew");
13
+ const frequencyTransform_1 = require("../../utils/frequencyTransform");
14
+ const ApiClient_1 = require("./ApiClient");
15
+ async function getRecurringTasks(ctx, workspaceId, options) {
16
+ const { maxPages = constants_1.LIMITS.MAX_PAGES, limit } = options || {};
17
+ const cacheKey = workspaceId ? `recurring-tasks:workspace:${workspaceId}` : 'recurring-tasks:all';
18
+ // Check cache - return items only (no stale truncation info)
19
+ const cachedItems = ctx.cache.recurringTask.get(cacheKey);
20
+ if (cachedItems !== null) {
21
+ return { items: cachedItems };
22
+ }
23
+ try {
24
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.DEBUG, 'Fetching recurring tasks from Motion API with pagination', {
25
+ method: 'getRecurringTasks',
26
+ workspaceId,
27
+ maxPages,
28
+ limit
29
+ });
30
+ // Create a fetch function for pagination utility
31
+ const fetchPage = async (cursor) => {
32
+ const params = new URLSearchParams();
33
+ if (workspaceId)
34
+ params.append('workspaceId', workspaceId);
35
+ if (cursor)
36
+ params.append('cursor', cursor);
37
+ const queryString = params.toString();
38
+ const url = queryString ? `/recurring-tasks?${queryString}` : '/recurring-tasks';
39
+ return ctx.api.requestWithRetry(() => ctx.api.client.get(url));
40
+ };
41
+ // Use pagination utility to fetch all pages
42
+ const paginatedResult = await (0, paginationNew_1.fetchAllPages)(fetchPage, 'recurring-tasks', {
43
+ maxPages,
44
+ logProgress: true,
45
+ ...(limit ? { maxItems: limit } : {})
46
+ });
47
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.INFO, 'Recurring tasks fetched successfully with pagination', {
48
+ method: 'getRecurringTasks',
49
+ totalCount: paginatedResult.totalFetched,
50
+ pagesProcessed: Math.ceil(paginatedResult.totalFetched / constants_1.LIMITS.DEFAULT_PAGE_SIZE),
51
+ hasMore: paginatedResult.hasMore,
52
+ workspaceId
53
+ });
54
+ // Cache only items, not truncation metadata
55
+ ctx.cache.recurringTask.set(cacheKey, paginatedResult.items);
56
+ return { items: paginatedResult.items, truncation: paginatedResult.truncation };
57
+ }
58
+ catch (error) {
59
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.ERROR, 'Failed to fetch recurring tasks', {
60
+ method: 'getRecurringTasks',
61
+ error: (0, ApiClient_1.getErrorMessage)(error),
62
+ apiStatus: (0, axios_1.isAxiosError)(error) ? error.response?.status : undefined,
63
+ apiMessage: (0, axios_1.isAxiosError)(error) ? error.response?.data?.message : undefined,
64
+ workspaceId
65
+ });
66
+ throw ctx.api.formatApiError(error, 'fetch', 'recurring task');
67
+ }
68
+ }
69
+ async function createRecurringTask(ctx, taskData) {
70
+ try {
71
+ // Validate frequency object before transformation
72
+ const freqValidation = (0, frequencyTransform_1.validateFrequencyObject)(taskData.frequency);
73
+ if (!freqValidation.valid) {
74
+ throw new Error(`Invalid frequency object: ${freqValidation.reason || 'Unknown reason'}`);
75
+ }
76
+ // Transform frequency object to API string format
77
+ const frequencyString = (0, frequencyTransform_1.transformFrequencyToApiString)(taskData.frequency);
78
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.DEBUG, 'Creating recurring task in Motion API', {
79
+ method: 'createRecurringTask',
80
+ name: taskData.name,
81
+ assigneeId: taskData.assigneeId,
82
+ frequency: frequencyString,
83
+ originalFrequency: taskData.frequency,
84
+ workspaceId: taskData.workspaceId
85
+ });
86
+ // Build API payload: extract endDate from frequency object to top-level,
87
+ // replace frequency object with transformed string
88
+ const { frequency: _freqObj, ...restTaskData } = taskData;
89
+ const apiPayload = {
90
+ ...restTaskData,
91
+ frequency: frequencyString,
92
+ ...(taskData.frequency.endDate && { endDate: taskData.frequency.endDate })
93
+ };
94
+ // Create minimal payload by removing empty/null values to avoid validation errors
95
+ const minimalPayload = (0, constants_1.createMinimalPayload)(apiPayload);
96
+ const response = await ctx.api.requestWithRetry(() => ctx.api.client.post('/recurring-tasks', minimalPayload));
97
+ // Invalidate cache after successful creation
98
+ ctx.cache.recurringTask.invalidate('recurring-tasks:');
99
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.INFO, 'Recurring task created successfully', {
100
+ method: 'createRecurringTask',
101
+ taskId: response.data?.id,
102
+ name: taskData.name
103
+ });
104
+ return response.data;
105
+ }
106
+ catch (error) {
107
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.ERROR, 'Failed to create recurring task', {
108
+ method: 'createRecurringTask',
109
+ error: (0, ApiClient_1.getErrorMessage)(error),
110
+ apiStatus: (0, axios_1.isAxiosError)(error) ? error.response?.status : undefined,
111
+ apiMessage: (0, axios_1.isAxiosError)(error) ? error.response?.data?.message : undefined,
112
+ taskName: taskData?.name
113
+ });
114
+ throw ctx.api.formatApiError(error, 'create', 'recurring task', undefined, taskData.name);
115
+ }
116
+ }
117
+ async function deleteRecurringTask(ctx, recurringTaskId) {
118
+ try {
119
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.DEBUG, 'Deleting recurring task from Motion API', {
120
+ method: 'deleteRecurringTask',
121
+ recurringTaskId
122
+ });
123
+ await ctx.api.requestWithRetry(() => ctx.api.client.delete(`/recurring-tasks/${recurringTaskId}`));
124
+ // Invalidate cache after successful deletion
125
+ ctx.cache.recurringTask.invalidate('recurring-tasks:');
126
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.INFO, 'Recurring task deleted successfully', {
127
+ method: 'deleteRecurringTask',
128
+ recurringTaskId
129
+ });
130
+ return { success: true };
131
+ }
132
+ catch (error) {
133
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.ERROR, 'Failed to delete recurring task', {
134
+ method: 'deleteRecurringTask',
135
+ error: (0, ApiClient_1.getErrorMessage)(error),
136
+ apiStatus: (0, axios_1.isAxiosError)(error) ? error.response?.status : undefined,
137
+ apiMessage: (0, axios_1.isAxiosError)(error) ? error.response?.data?.message : undefined,
138
+ recurringTaskId
139
+ });
140
+ throw ctx.api.formatApiError(error, 'delete', 'recurring task', recurringTaskId);
141
+ }
142
+ }
143
+ //# sourceMappingURL=recurringTasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recurringTasks.js","sourceRoot":"","sources":["../../../src/services/api/recurringTasks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Schedule resource module — getSchedules, getAvailableScheduleNames
3
+ */
4
+ import { MotionSchedule } from '../../types/motion';
5
+ import { ResourceContext } from './types';
6
+ export declare function getSchedules(ctx: ResourceContext): Promise<MotionSchedule[]>;
7
+ export declare function getAvailableScheduleNames(ctx: ResourceContext, workspaceId?: string): Promise<string[]>;
8
+ //# sourceMappingURL=schedules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedules.d.ts","sourceRoot":"","sources":["../../../src/services/api/schedules.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAgB,MAAM,oBAAoB,CAAC;AAIlE,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG1C,wBAAsB,YAAY,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAwClF;AAED,wBAAsB,yBAAyB,CAAC,GAAG,EAAE,eAAe,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA0B7G"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ /**
3
+ * Schedule resource module — getSchedules, getAvailableScheduleNames
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getSchedules = getSchedules;
7
+ exports.getAvailableScheduleNames = getAvailableScheduleNames;
8
+ const axios_1 = require("axios");
9
+ const constants_1 = require("../../utils/constants");
10
+ const logger_1 = require("../../utils/logger");
11
+ const motion_1 = require("../../schemas/motion");
12
+ const ApiClient_1 = require("./ApiClient");
13
+ async function getSchedules(ctx) {
14
+ const cacheKey = 'schedules:all';
15
+ return ctx.cache.schedule.withCache(cacheKey, async () => {
16
+ try {
17
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.DEBUG, 'Fetching schedules from Motion API', {
18
+ method: 'getSchedules'
19
+ });
20
+ const response = await ctx.api.requestWithRetry(() => ctx.api.client.get('/schedules'));
21
+ // Validate response against schema
22
+ const validatedResponse = ctx.api.validateResponse(response.data, motion_1.SchedulesListResponseSchema, 'getSchedules');
23
+ // Handle both wrapped and unwrapped responses
24
+ const schedules = Array.isArray(validatedResponse)
25
+ ? validatedResponse
26
+ : validatedResponse.schedules || [];
27
+ const schedulesArray = Array.isArray(schedules) ? schedules : [];
28
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.INFO, 'Schedules fetched successfully', {
29
+ method: 'getSchedules',
30
+ count: schedulesArray.length
31
+ });
32
+ return schedulesArray;
33
+ }
34
+ catch (error) {
35
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.ERROR, 'Failed to fetch schedules', {
36
+ method: 'getSchedules',
37
+ error: (0, ApiClient_1.getErrorMessage)(error),
38
+ apiStatus: (0, axios_1.isAxiosError)(error) ? error.response?.status : undefined,
39
+ apiMessage: (0, axios_1.isAxiosError)(error) ? error.response?.data?.message : undefined
40
+ });
41
+ throw ctx.api.formatApiError(error, 'fetch', 'schedule');
42
+ }
43
+ });
44
+ }
45
+ async function getAvailableScheduleNames(ctx, workspaceId) {
46
+ try {
47
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.DEBUG, 'Fetching available schedule names', {
48
+ method: 'getAvailableScheduleNames',
49
+ workspaceId
50
+ });
51
+ // Fetch all schedules without filters to get available schedule templates
52
+ const schedules = await getSchedules(ctx);
53
+ const scheduleNames = schedules.map(schedule => schedule.name).filter(Boolean);
54
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.INFO, 'Available schedule names fetched successfully', {
55
+ method: 'getAvailableScheduleNames',
56
+ count: scheduleNames.length,
57
+ scheduleNames
58
+ });
59
+ return scheduleNames;
60
+ }
61
+ catch (error) {
62
+ (0, logger_1.mcpLog)(constants_1.LOG_LEVELS.ERROR, 'Failed to fetch available schedule names', {
63
+ method: 'getAvailableScheduleNames',
64
+ error: (0, ApiClient_1.getErrorMessage)(error),
65
+ workspaceId
66
+ });
67
+ throw ctx.api.formatApiError(error, 'fetch', 'schedule');
68
+ }
69
+ }
70
+ //# sourceMappingURL=schedules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedules.js","sourceRoot":"","sources":["../../../src/services/api/schedules.ts"],"names":[],"mappings":"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"}