motionmcp 2.2.2 → 2.2.3
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.
- package/README.md +1 -1
- package/dist/handlers/TaskHandler.d.ts +12 -0
- package/dist/handlers/TaskHandler.d.ts.map +1 -1
- package/dist/handlers/TaskHandler.js +49 -30
- package/dist/handlers/TaskHandler.js.map +1 -1
- package/dist/mcp-server-old.d.ts +29 -0
- package/dist/mcp-server-old.d.ts.map +1 -0
- package/dist/mcp-server-old.js +1304 -0
- package/dist/mcp-server-old.js.map +1 -0
- package/dist/mcp-server.js +1 -1
- package/dist/mcp-server.js.map +1 -1
- package/dist/schemas/motion.d.ts +4259 -313
- package/dist/schemas/motion.d.ts.map +1 -1
- package/dist/services/motionApi.d.ts +1 -1
- package/dist/services/motionApi.d.ts.map +1 -1
- package/dist/services/motionApi.js +4 -2
- package/dist/services/motionApi.js.map +1 -1
- package/dist/tools/ToolDefinitions.js +2 -2
- package/dist/tools/ToolDefinitions.js.map +1 -1
- package/package.json +1 -1
- package/dist/utils/pagination.d.ts +0 -61
- package/dist/utils/pagination.d.ts.map +0 -1
- package/dist/utils/pagination.js +0 -168
- package/dist/utils/pagination.js.map +0 -1
package/dist/utils/pagination.js
DELETED
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Pagination Utilities - Shared pagination logic for Motion API calls
|
|
4
|
-
*
|
|
5
|
-
* Provides utilities to handle cursor-based and offset-based pagination
|
|
6
|
-
* consistently across all API endpoints.
|
|
7
|
-
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.fetchAllPages = fetchAllPages;
|
|
10
|
-
exports.fetchInBatches = fetchInBatches;
|
|
11
|
-
exports.hasMorePages = hasMorePages;
|
|
12
|
-
exports.getPaginationInfo = getPaginationInfo;
|
|
13
|
-
const logger_1 = require("./logger");
|
|
14
|
-
const constants_1 = require("./constants");
|
|
15
|
-
/**
|
|
16
|
-
* Generic cursor-based pagination handler
|
|
17
|
-
* Automatically fetches all pages or up to maxPages limit
|
|
18
|
-
*/
|
|
19
|
-
async function fetchAllPages(fetchPage, options = {}) {
|
|
20
|
-
const { maxPages = 10, logProgress = true } = options;
|
|
21
|
-
let allItems = [];
|
|
22
|
-
let cursor;
|
|
23
|
-
let pageCount = 0;
|
|
24
|
-
let hasMore = true;
|
|
25
|
-
// Infinite loop protection - ensure we never fetch more than absolute max pages
|
|
26
|
-
const absoluteMaxPages = Math.min(maxPages, 50); // Hard limit to prevent infinite loops
|
|
27
|
-
while (hasMore && pageCount < absoluteMaxPages) {
|
|
28
|
-
try {
|
|
29
|
-
if (logProgress && pageCount > 0) {
|
|
30
|
-
(0, logger_1.mcpLog)(constants_1.LOG_LEVELS.DEBUG, `Fetching page ${pageCount + 1}`, { cursor });
|
|
31
|
-
}
|
|
32
|
-
const response = await fetchPage(cursor);
|
|
33
|
-
const data = response.data;
|
|
34
|
-
// Extract items from various possible response structures
|
|
35
|
-
const pageItems = extractItemsFromResponse(data);
|
|
36
|
-
// Enforce page size limit to prevent memory exhaustion
|
|
37
|
-
if (pageItems.length > constants_1.LIMITS.MAX_PAGE_SIZE) {
|
|
38
|
-
(0, logger_1.mcpLog)(constants_1.LOG_LEVELS.WARN, `Page size ${pageItems.length} exceeds maximum allowed ${constants_1.LIMITS.MAX_PAGE_SIZE}, truncating`, {
|
|
39
|
-
pageNumber: pageCount + 1,
|
|
40
|
-
originalSize: pageItems.length,
|
|
41
|
-
truncatedSize: constants_1.LIMITS.MAX_PAGE_SIZE
|
|
42
|
-
});
|
|
43
|
-
pageItems.splice(constants_1.LIMITS.MAX_PAGE_SIZE); // Truncate to limit
|
|
44
|
-
}
|
|
45
|
-
allItems = allItems.concat(pageItems);
|
|
46
|
-
// Update pagination state
|
|
47
|
-
const newCursor = data.meta?.nextCursor;
|
|
48
|
-
// Infinite loop protection: If cursor doesn't change, break
|
|
49
|
-
if (cursor && newCursor === cursor) {
|
|
50
|
-
(0, logger_1.mcpLog)(constants_1.LOG_LEVELS.WARN, 'Pagination cursor not advancing - breaking to prevent infinite loop', {
|
|
51
|
-
cursor,
|
|
52
|
-
pageCount,
|
|
53
|
-
itemsCount: pageItems.length
|
|
54
|
-
});
|
|
55
|
-
break;
|
|
56
|
-
}
|
|
57
|
-
cursor = newCursor;
|
|
58
|
-
hasMore = !!cursor && pageItems.length > 0;
|
|
59
|
-
pageCount++;
|
|
60
|
-
if (logProgress) {
|
|
61
|
-
(0, logger_1.mcpLog)(constants_1.LOG_LEVELS.DEBUG, `Page ${pageCount} fetched`, {
|
|
62
|
-
pageItems: pageItems.length,
|
|
63
|
-
totalItems: allItems.length,
|
|
64
|
-
hasMore,
|
|
65
|
-
nextCursor: cursor
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
catch (error) {
|
|
70
|
-
(0, logger_1.mcpLog)(constants_1.LOG_LEVELS.ERROR, `Pagination failed on page ${pageCount + 1}`, {
|
|
71
|
-
error: error instanceof Error ? error.message : String(error),
|
|
72
|
-
cursor
|
|
73
|
-
});
|
|
74
|
-
// Return what we have so far
|
|
75
|
-
break;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
if (pageCount >= absoluteMaxPages && hasMore) {
|
|
79
|
-
(0, logger_1.mcpLog)(constants_1.LOG_LEVELS.WARN, `Reached maximum page limit (${absoluteMaxPages})`, {
|
|
80
|
-
totalFetched: allItems.length,
|
|
81
|
-
finalCursor: cursor
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
return {
|
|
85
|
-
items: allItems,
|
|
86
|
-
nextCursor: cursor,
|
|
87
|
-
hasMore,
|
|
88
|
-
totalFetched: allItems.length
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Extract items from various API response structures
|
|
93
|
-
* Handles the different ways Motion API can structure responses
|
|
94
|
-
*/
|
|
95
|
-
function extractItemsFromResponse(data) {
|
|
96
|
-
// Try different possible array locations
|
|
97
|
-
if (data.tasks && Array.isArray(data.tasks))
|
|
98
|
-
return data.tasks;
|
|
99
|
-
if (data.projects && Array.isArray(data.projects))
|
|
100
|
-
return data.projects;
|
|
101
|
-
if (data.users && Array.isArray(data.users))
|
|
102
|
-
return data.users;
|
|
103
|
-
if (data.comments && Array.isArray(data.comments))
|
|
104
|
-
return data.comments;
|
|
105
|
-
if (data.customFields && Array.isArray(data.customFields))
|
|
106
|
-
return data.customFields;
|
|
107
|
-
if (data.recurringTasks && Array.isArray(data.recurringTasks))
|
|
108
|
-
return data.recurringTasks;
|
|
109
|
-
if (data.schedules && Array.isArray(data.schedules))
|
|
110
|
-
return data.schedules;
|
|
111
|
-
if (data.statuses && Array.isArray(data.statuses))
|
|
112
|
-
return data.statuses;
|
|
113
|
-
if (data.items && Array.isArray(data.items))
|
|
114
|
-
return data.items;
|
|
115
|
-
// Fallback: if data itself is an array
|
|
116
|
-
if (Array.isArray(data))
|
|
117
|
-
return data;
|
|
118
|
-
// No items found
|
|
119
|
-
return [];
|
|
120
|
-
}
|
|
121
|
-
async function fetchInBatches(fetchBatch, params, options = {}) {
|
|
122
|
-
const { batchSize = 100, maxBatches = 10, delayMs = 100 } = options;
|
|
123
|
-
let allItems = [];
|
|
124
|
-
let offset = 0;
|
|
125
|
-
let batchCount = 0;
|
|
126
|
-
let hasMore = true;
|
|
127
|
-
while (hasMore && batchCount < maxBatches) {
|
|
128
|
-
try {
|
|
129
|
-
const batchItems = await fetchBatch(params, offset, batchSize);
|
|
130
|
-
if (batchItems.length === 0) {
|
|
131
|
-
hasMore = false;
|
|
132
|
-
}
|
|
133
|
-
else {
|
|
134
|
-
allItems = allItems.concat(batchItems);
|
|
135
|
-
offset += batchSize;
|
|
136
|
-
batchCount++;
|
|
137
|
-
// Small delay to be API-friendly
|
|
138
|
-
if (delayMs > 0 && hasMore) {
|
|
139
|
-
await new Promise(resolve => setTimeout(resolve, delayMs));
|
|
140
|
-
}
|
|
141
|
-
// If we got fewer items than batch size, we've reached the end
|
|
142
|
-
if (batchItems.length < batchSize) {
|
|
143
|
-
hasMore = false;
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
catch (error) {
|
|
148
|
-
(0, logger_1.mcpLog)(constants_1.LOG_LEVELS.ERROR, `Batch fetch failed at offset ${offset}`, {
|
|
149
|
-
error: error instanceof Error ? error.message : String(error)
|
|
150
|
-
});
|
|
151
|
-
break;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
return allItems;
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* Check if a response indicates more pages are available
|
|
158
|
-
*/
|
|
159
|
-
function hasMorePages(response) {
|
|
160
|
-
return !!(response.meta?.nextCursor || response.meta?.hasMore);
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* Get pagination info from response
|
|
164
|
-
*/
|
|
165
|
-
function getPaginationInfo(response) {
|
|
166
|
-
return response.meta || null;
|
|
167
|
-
}
|
|
168
|
-
//# sourceMappingURL=pagination.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/utils/pagination.ts"],"names":[],"mappings":"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"}
|