motionmcp 2.6.0 → 2.7.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.
- package/dist/handlers/HandlerFactory.d.ts +0 -5
- package/dist/handlers/HandlerFactory.d.ts.map +1 -1
- package/dist/handlers/HandlerFactory.js +0 -15
- package/dist/handlers/HandlerFactory.js.map +1 -1
- package/dist/mcp-server.js +3 -3
- package/dist/mcp-server.js.map +1 -1
- package/dist/services/api/ApiClient.d.ts +22 -0
- package/dist/services/api/ApiClient.d.ts.map +1 -0
- package/dist/services/api/ApiClient.js +198 -0
- package/dist/services/api/ApiClient.js.map +1 -0
- package/dist/services/api/CacheManager.d.ts +21 -0
- package/dist/services/api/CacheManager.d.ts.map +1 -0
- package/dist/services/api/CacheManager.js +25 -0
- package/dist/services/api/CacheManager.js.map +1 -0
- package/dist/services/api/comments.d.ts +8 -0
- package/dist/services/api/comments.d.ts.map +1 -0
- package/dist/services/api/comments.js +86 -0
- package/dist/services/api/comments.js.map +1 -0
- package/dist/services/api/customFields.d.ts +21 -0
- package/dist/services/api/customFields.d.ts.map +1 -0
- package/dist/services/api/customFields.js +277 -0
- package/dist/services/api/customFields.js.map +1 -0
- package/dist/services/api/index.d.ts +22 -0
- package/dist/services/api/index.d.ts.map +1 -0
- package/dist/services/api/index.js +64 -0
- package/dist/services/api/index.js.map +1 -0
- package/dist/services/api/projects.d.ts +18 -0
- package/dist/services/api/projects.d.ts.map +1 -0
- package/dist/services/api/projects.js +346 -0
- package/dist/services/api/projects.js.map +1 -0
- package/dist/services/api/recurringTasks.d.ts +15 -0
- package/dist/services/api/recurringTasks.d.ts.map +1 -0
- package/dist/services/api/recurringTasks.js +143 -0
- package/dist/services/api/recurringTasks.js.map +1 -0
- package/dist/services/api/schedules.d.ts +8 -0
- package/dist/services/api/schedules.d.ts.map +1 -0
- package/dist/services/api/schedules.js +70 -0
- package/dist/services/api/schedules.js.map +1 -0
- package/dist/services/api/search.d.ts +29 -0
- package/dist/services/api/search.d.ts.map +1 -0
- package/dist/services/api/search.js +415 -0
- package/dist/services/api/search.js.map +1 -0
- package/dist/services/api/statuses.d.ts +7 -0
- package/dist/services/api/statuses.d.ts.map +1 -0
- package/dist/services/api/statuses.js +67 -0
- package/dist/services/api/statuses.js.map +1 -0
- package/dist/services/api/tasks.d.ts +34 -0
- package/dist/services/api/tasks.d.ts.map +1 -0
- package/dist/services/api/tasks.js +474 -0
- package/dist/services/api/tasks.js.map +1 -0
- package/dist/services/api/types.d.ts +54 -0
- package/dist/services/api/types.d.ts.map +1 -0
- package/dist/services/api/types.js +9 -0
- package/dist/services/api/types.js.map +1 -0
- package/dist/services/api/users.d.ts +8 -0
- package/dist/services/api/users.d.ts.map +1 -0
- package/dist/services/api/users.js +93 -0
- package/dist/services/api/users.js.map +1 -0
- package/dist/services/api/workspaces.d.ts +7 -0
- package/dist/services/api/workspaces.d.ts.map +1 -0
- package/dist/services/api/workspaces.js +59 -0
- package/dist/services/api/workspaces.js.map +1 -0
- package/dist/services/motionApi.d.ts +34 -180
- package/dist/services/motionApi.d.ts.map +1 -1
- package/dist/services/motionApi.js +84 -2163
- package/dist/services/motionApi.js.map +1 -1
- package/dist/tools/ToolConfigurator.d.ts +1 -7
- package/dist/tools/ToolConfigurator.d.ts.map +1 -1
- package/dist/tools/ToolConfigurator.js +0 -31
- package/dist/tools/ToolConfigurator.js.map +1 -1
- package/dist/tools/ToolRegistry.d.ts +1 -22
- package/dist/tools/ToolRegistry.d.ts.map +1 -1
- package/dist/tools/ToolRegistry.js +0 -31
- package/dist/tools/ToolRegistry.js.map +1 -1
- package/dist/types/motion.d.ts +0 -7
- package/dist/types/motion.d.ts.map +1 -1
- package/dist/utils/cache.d.ts +0 -5
- package/dist/utils/cache.d.ts.map +1 -1
- package/dist/utils/cache.js +0 -8
- package/dist/utils/cache.js.map +1 -1
- package/dist/utils/constants.d.ts +4 -0
- package/dist/utils/constants.d.ts.map +1 -1
- package/dist/utils/constants.js +7 -1
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/errorHandling.d.ts +0 -12
- package/dist/utils/errorHandling.d.ts.map +1 -1
- package/dist/utils/errorHandling.js +2 -23
- package/dist/utils/errorHandling.js.map +1 -1
- package/dist/utils/errors.d.ts +89 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +276 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/index.d.ts +2 -2
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +6 -5
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/parameterUtils.js +4 -4
- package/dist/utils/parameterUtils.js.map +1 -1
- package/dist/utils/responseFormatters.js +16 -16
- package/dist/utils/responseFormatters.js.map +1 -1
- package/dist/utils/serverInstructions.d.ts +2 -0
- package/dist/utils/serverInstructions.d.ts.map +1 -0
- package/dist/utils/serverInstructions.js +21 -0
- package/dist/utils/serverInstructions.js.map +1 -0
- package/dist/utils/userFacingErrors.d.ts +0 -8
- package/dist/utils/userFacingErrors.d.ts.map +1 -1
- package/dist/utils/userFacingErrors.js +0 -19
- package/dist/utils/userFacingErrors.js.map +1 -1
- package/dist/utils/workspaceResolver.js +12 -12
- package/dist/utils/workspaceResolver.js.map +1 -1
- package/package.json +2 -1
|
@@ -6,10 +6,5 @@ export declare class HandlerFactory {
|
|
|
6
6
|
constructor(context: HandlerContext);
|
|
7
7
|
private registerHandlers;
|
|
8
8
|
createHandler(toolName: string): BaseHandler;
|
|
9
|
-
hasHandler(toolName: string): boolean;
|
|
10
|
-
getRegisteredToolNames(): string[];
|
|
11
|
-
registerHandler(toolName: string, handlerClass: new (context: HandlerContext) => BaseHandler): void;
|
|
12
|
-
unregisterHandler(toolName: string): boolean;
|
|
13
|
-
getHandlerCount(): number;
|
|
14
9
|
}
|
|
15
10
|
//# sourceMappingURL=HandlerFactory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HandlerFactory.d.ts","sourceRoot":"","sources":["../../src/handlers/HandlerFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAezD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAA2D;IAC3E,OAAO,CAAC,OAAO,CAAiB;gBAEpB,OAAO,EAAE,cAAc;IAMnC,OAAO,CAAC,gBAAgB;IAaxB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW;
|
|
1
|
+
{"version":3,"file":"HandlerFactory.d.ts","sourceRoot":"","sources":["../../src/handlers/HandlerFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAezD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAA2D;IAC3E,OAAO,CAAC,OAAO,CAAiB;gBAEpB,OAAO,EAAE,cAAc;IAMnC,OAAO,CAAC,gBAAgB;IAaxB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW;CAO7C"}
|
|
@@ -38,21 +38,6 @@ class HandlerFactory {
|
|
|
38
38
|
}
|
|
39
39
|
return new HandlerClass(this.context);
|
|
40
40
|
}
|
|
41
|
-
hasHandler(toolName) {
|
|
42
|
-
return this.handlers.has(toolName);
|
|
43
|
-
}
|
|
44
|
-
getRegisteredToolNames() {
|
|
45
|
-
return Array.from(this.handlers.keys());
|
|
46
|
-
}
|
|
47
|
-
registerHandler(toolName, handlerClass) {
|
|
48
|
-
this.handlers.set(toolName, handlerClass);
|
|
49
|
-
}
|
|
50
|
-
unregisterHandler(toolName) {
|
|
51
|
-
return this.handlers.delete(toolName);
|
|
52
|
-
}
|
|
53
|
-
getHandlerCount() {
|
|
54
|
-
return this.handlers.size;
|
|
55
|
-
}
|
|
56
41
|
}
|
|
57
42
|
exports.HandlerFactory = HandlerFactory;
|
|
58
43
|
//# sourceMappingURL=HandlerFactory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HandlerFactory.js","sourceRoot":"","sources":["../../src/handlers/HandlerFactory.ts"],"names":[],"mappings":";;;AAEA,8DAAsD;AAEtD,6BAA6B;AAC7B,+CAA4C;AAC5C,qDAAkD;AAClD,yDAAsD;AACtD,+CAA4C;AAC5C,mDAAgD;AAChD,qDAAkD;AAClD,6DAA0D;AAC1D,iEAA8D;AAC9D,uDAAoD;AACpD,mDAAgD;AAEhD,MAAa,cAAc;IAIzB,YAAY,OAAuB;QACjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAEO,gBAAgB;QACtB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,4BAAU,CAAC,KAAK,EAAE,yBAAW,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,4BAAU,CAAC,QAAQ,EAAE,+BAAc,CAAC,CAAC;QACvD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,4BAAU,CAAC,UAAU,EAAE,mCAAgB,CAAC,CAAC;QAC3D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,4BAAU,CAAC,KAAK,EAAE,yBAAW,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,4BAAU,CAAC,MAAM,EAAE,6BAAa,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,4BAAU,CAAC,QAAQ,EAAE,+BAAc,CAAC,CAAC;QACvD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,4BAAU,CAAC,aAAa,EAAE,uCAAkB,CAAC,CAAC;QAChE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,4BAAU,CAAC,eAAe,EAAE,2CAAoB,CAAC,CAAC;QACpE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,4BAAU,CAAC,SAAS,EAAE,iCAAe,CAAC,CAAC;QACzD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,4BAAU,CAAC,QAAQ,EAAE,6BAAa,CAAC,CAAC;IACxD,CAAC;IAED,aAAa,CAAC,QAAgB;QAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,mCAAmC,QAAQ,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;
|
|
1
|
+
{"version":3,"file":"HandlerFactory.js","sourceRoot":"","sources":["../../src/handlers/HandlerFactory.ts"],"names":[],"mappings":";;;AAEA,8DAAsD;AAEtD,6BAA6B;AAC7B,+CAA4C;AAC5C,qDAAkD;AAClD,yDAAsD;AACtD,+CAA4C;AAC5C,mDAAgD;AAChD,qDAAkD;AAClD,6DAA0D;AAC1D,iEAA8D;AAC9D,uDAAoD;AACpD,mDAAgD;AAEhD,MAAa,cAAc;IAIzB,YAAY,OAAuB;QACjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAEO,gBAAgB;QACtB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,4BAAU,CAAC,KAAK,EAAE,yBAAW,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,4BAAU,CAAC,QAAQ,EAAE,+BAAc,CAAC,CAAC;QACvD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,4BAAU,CAAC,UAAU,EAAE,mCAAgB,CAAC,CAAC;QAC3D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,4BAAU,CAAC,KAAK,EAAE,yBAAW,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,4BAAU,CAAC,MAAM,EAAE,6BAAa,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,4BAAU,CAAC,QAAQ,EAAE,+BAAc,CAAC,CAAC;QACvD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,4BAAU,CAAC,aAAa,EAAE,uCAAkB,CAAC,CAAC;QAChE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,4BAAU,CAAC,eAAe,EAAE,2CAAoB,CAAC,CAAC;QACpE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,4BAAU,CAAC,SAAS,EAAE,iCAAe,CAAC,CAAC;QACzD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,4BAAU,CAAC,QAAQ,EAAE,6BAAa,CAAC,CAAC;IACxD,CAAC;IAED,aAAa,CAAC,QAAgB;QAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,mCAAmC,QAAQ,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;CACF;AA9BD,wCA8BC"}
|
package/dist/mcp-server.js
CHANGED
|
@@ -39,24 +39,24 @@ const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
|
39
39
|
const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
|
|
40
40
|
const motionApi_1 = require("./services/motionApi");
|
|
41
41
|
const utils_1 = require("./utils");
|
|
42
|
+
const serverInstructions_1 = require("./utils/serverInstructions");
|
|
42
43
|
const validator_1 = require("./utils/validator");
|
|
43
44
|
const HandlerFactory_1 = require("./handlers/HandlerFactory");
|
|
44
45
|
const tools_1 = require("./tools");
|
|
45
|
-
const constants_1 = require("./constants");
|
|
46
46
|
const dotenv = __importStar(require("dotenv"));
|
|
47
47
|
dotenv.config({ quiet: true });
|
|
48
48
|
class MotionMCPServer {
|
|
49
49
|
constructor() {
|
|
50
50
|
this.server = new index_js_1.Server({
|
|
51
51
|
name: "motion-mcp-server",
|
|
52
|
-
version: "2.
|
|
52
|
+
version: "2.7.0",
|
|
53
53
|
}, {
|
|
54
54
|
capabilities: {
|
|
55
55
|
tools: {},
|
|
56
56
|
prompts: {},
|
|
57
57
|
resources: {},
|
|
58
58
|
},
|
|
59
|
-
instructions:
|
|
59
|
+
instructions: serverInstructions_1.SERVER_INSTRUCTIONS,
|
|
60
60
|
});
|
|
61
61
|
this.handlerFactory = null;
|
|
62
62
|
this.context = null;
|
package/dist/mcp-server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,wEAAmE;AACnE,wEAAiF;AACjF,iEAK4C;AAC5C,oDAAwD;AACxD,mCAAgF;AAChF,iDAAmD;AAEnD,8DAA2D;AAC3D,mCAAyD;AACzD
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ApiClient — HTTP request infrastructure extracted from MotionApiService.
|
|
3
|
+
*
|
|
4
|
+
* Handles Axios setup, request interceptors, retry with exponential backoff,
|
|
5
|
+
* response validation, and error formatting.
|
|
6
|
+
*/
|
|
7
|
+
import { AxiosInstance, AxiosResponse } from 'axios';
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
import { TruncationInfo } from '../../types/mcp';
|
|
10
|
+
import { UserFacingError } from '../../utils/errors';
|
|
11
|
+
import { IApiClient } from './types';
|
|
12
|
+
/** Helper to get error message from unknown error type. */
|
|
13
|
+
export declare function getErrorMessage(error: unknown): string;
|
|
14
|
+
export declare class ApiClient implements IApiClient {
|
|
15
|
+
readonly client: AxiosInstance;
|
|
16
|
+
constructor(apiKey?: string);
|
|
17
|
+
validateResponse<T>(data: unknown, schema: z.ZodSchema<T>, context: string): T;
|
|
18
|
+
formatApiError(error: unknown, action: string, resourceType?: 'task' | 'project' | 'workspace' | 'user' | 'comment' | 'custom field' | 'recurring task' | 'schedule' | 'status', resourceId?: string, resourceName?: string): UserFacingError;
|
|
19
|
+
requestWithRetry<T>(request: () => Promise<AxiosResponse<T>>): Promise<AxiosResponse<T>>;
|
|
20
|
+
mergeTruncationMetadata(aggregate: TruncationInfo | undefined, source: TruncationInfo | undefined): TruncationInfo | undefined;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=ApiClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApiClient.d.ts","sourceRoot":"","sources":["../../../src/services/api/ApiClient.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAc,EAAE,aAAa,EAAE,aAAa,EAAc,MAAM,OAAO,CAAC;AACxE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAA6C,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEhG,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,2DAA2D;AAC3D,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKtD;AAED,qBAAa,SAAU,YAAW,UAAU;IAC1C,SAAgB,MAAM,EAAE,aAAa,CAAC;gBAE1B,MAAM,CAAC,EAAE,MAAM;IA2D3B,gBAAgB,CAAC,CAAC,EAChB,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EACtB,OAAO,EAAE,MAAM,GACd,CAAC;IA8BJ,cAAc,CACZ,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,cAAc,GAAG,gBAAgB,GAAG,UAAU,GAAG,QAAQ,EAChI,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM,GACpB,eAAe;IAKZ,gBAAgB,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAwE9F,uBAAuB,CACrB,SAAS,EAAE,cAAc,GAAG,SAAS,EACrC,MAAM,EAAE,cAAc,GAAG,SAAS,GACjC,cAAc,GAAG,SAAS;CA6B9B"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ApiClient — HTTP request infrastructure extracted from MotionApiService.
|
|
4
|
+
*
|
|
5
|
+
* Handles Axios setup, request interceptors, retry with exponential backoff,
|
|
6
|
+
* response validation, and error formatting.
|
|
7
|
+
*/
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ApiClient = void 0;
|
|
13
|
+
exports.getErrorMessage = getErrorMessage;
|
|
14
|
+
const axios_1 = __importDefault(require("axios"));
|
|
15
|
+
const zod_1 = require("zod");
|
|
16
|
+
const constants_1 = require("../../utils/constants");
|
|
17
|
+
const logger_1 = require("../../utils/logger");
|
|
18
|
+
const errors_1 = require("../../utils/errors");
|
|
19
|
+
const motion_1 = require("../../schemas/motion");
|
|
20
|
+
/** Helper to get error message from unknown error type. */
|
|
21
|
+
function getErrorMessage(error) {
|
|
22
|
+
if (error instanceof Error) {
|
|
23
|
+
return error.message;
|
|
24
|
+
}
|
|
25
|
+
return String(error);
|
|
26
|
+
}
|
|
27
|
+
class ApiClient {
|
|
28
|
+
constructor(apiKey) {
|
|
29
|
+
const resolvedApiKey = apiKey || process.env.MOTION_API_KEY;
|
|
30
|
+
if (!resolvedApiKey) {
|
|
31
|
+
(0, logger_1.mcpLog)(constants_1.LOG_LEVELS.ERROR, 'Motion API key not found in environment variables', {
|
|
32
|
+
component: 'MotionApiService',
|
|
33
|
+
method: 'constructor'
|
|
34
|
+
});
|
|
35
|
+
throw new Error('MOTION_API_KEY environment variable is required');
|
|
36
|
+
}
|
|
37
|
+
const baseUrl = 'https://api.usemotion.com/v1';
|
|
38
|
+
(0, logger_1.mcpLog)(constants_1.LOG_LEVELS.INFO, 'Initializing Motion API service', {
|
|
39
|
+
component: 'MotionApiService',
|
|
40
|
+
baseUrl
|
|
41
|
+
});
|
|
42
|
+
this.client = axios_1.default.create({
|
|
43
|
+
baseURL: baseUrl,
|
|
44
|
+
headers: {
|
|
45
|
+
'X-API-Key': resolvedApiKey,
|
|
46
|
+
'Content-Type': 'application/json'
|
|
47
|
+
},
|
|
48
|
+
timeout: constants_1.API_CONFIG.TIMEOUT_MS
|
|
49
|
+
});
|
|
50
|
+
this.client.interceptors.response.use((response) => {
|
|
51
|
+
(0, logger_1.mcpLog)(constants_1.LOG_LEVELS.INFO, 'Motion API response successful', {
|
|
52
|
+
url: response.config?.url,
|
|
53
|
+
method: response.config?.method?.toUpperCase(),
|
|
54
|
+
status: response.status,
|
|
55
|
+
component: 'MotionApiService'
|
|
56
|
+
});
|
|
57
|
+
return response;
|
|
58
|
+
}, (error) => {
|
|
59
|
+
const errorData = error.response?.data;
|
|
60
|
+
const errorDetails = {
|
|
61
|
+
url: error.config?.url,
|
|
62
|
+
method: error.config?.method?.toUpperCase(),
|
|
63
|
+
status: error.response?.status,
|
|
64
|
+
statusText: error.response?.statusText,
|
|
65
|
+
apiMessage: errorData?.message,
|
|
66
|
+
apiCode: errorData?.code,
|
|
67
|
+
errorMessage: error.message,
|
|
68
|
+
component: 'MotionApiService'
|
|
69
|
+
};
|
|
70
|
+
(0, logger_1.mcpLog)(constants_1.LOG_LEVELS.ERROR, 'Motion API request failed', errorDetails);
|
|
71
|
+
// Re-throw original AxiosError so requestWithRetry can detect it
|
|
72
|
+
// via axios.isAxiosError() for retry/rate-limit handling
|
|
73
|
+
return Promise.reject(error);
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
validateResponse(data, schema, context) {
|
|
77
|
+
if (motion_1.VALIDATION_CONFIG.mode === 'off') {
|
|
78
|
+
return data;
|
|
79
|
+
}
|
|
80
|
+
try {
|
|
81
|
+
return schema.parse(data);
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
if (error instanceof zod_1.z.ZodError) {
|
|
85
|
+
const errorDetails = {
|
|
86
|
+
context,
|
|
87
|
+
validationErrors: error.issues,
|
|
88
|
+
...(motion_1.VALIDATION_CONFIG.includeDataInLogs ? { receivedData: data } : {})
|
|
89
|
+
};
|
|
90
|
+
if (motion_1.VALIDATION_CONFIG.logErrors) {
|
|
91
|
+
(0, logger_1.mcpLog)(constants_1.LOG_LEVELS.WARN, `API response validation failed for ${context}`, errorDetails);
|
|
92
|
+
}
|
|
93
|
+
if (motion_1.VALIDATION_CONFIG.mode === 'strict') {
|
|
94
|
+
throw new Error(`Invalid API response structure for ${context}: ${error.message}`);
|
|
95
|
+
}
|
|
96
|
+
// Lenient mode: return original data and hope for the best
|
|
97
|
+
return data;
|
|
98
|
+
}
|
|
99
|
+
throw error;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
formatApiError(error, action, resourceType, resourceId, resourceName) {
|
|
103
|
+
const context = (0, errors_1.createErrorContext)(action, resourceType, resourceId, resourceName);
|
|
104
|
+
return (0, errors_1.createUserFacingError)(error, context);
|
|
105
|
+
}
|
|
106
|
+
async requestWithRetry(request) {
|
|
107
|
+
for (let attempt = 1; attempt <= constants_1.RETRY_CONFIG.MAX_RETRIES; attempt++) {
|
|
108
|
+
try {
|
|
109
|
+
return await request();
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
if (!axios_1.default.isAxiosError(error)) {
|
|
113
|
+
throw error; // Not a network error, re-throw immediately
|
|
114
|
+
}
|
|
115
|
+
const status = error.response?.status;
|
|
116
|
+
const requestMethod = error.config?.method?.toUpperCase() || 'GET';
|
|
117
|
+
const isSafeMethod = requestMethod === 'GET';
|
|
118
|
+
const isNetworkError = !error.response;
|
|
119
|
+
const isRetryableStatus = status === 429 || (status !== undefined && status >= 500);
|
|
120
|
+
const isRetryable = isSafeMethod && (isNetworkError || isRetryableStatus);
|
|
121
|
+
if (!isRetryable || attempt === constants_1.RETRY_CONFIG.MAX_RETRIES) {
|
|
122
|
+
(0, logger_1.mcpLog)(constants_1.LOG_LEVELS.WARN, `Request failed and will not be retried`, {
|
|
123
|
+
status,
|
|
124
|
+
httpMethod: requestMethod,
|
|
125
|
+
attempt,
|
|
126
|
+
maxRetries: constants_1.RETRY_CONFIG.MAX_RETRIES,
|
|
127
|
+
isRetryable,
|
|
128
|
+
component: 'MotionApiService',
|
|
129
|
+
method: 'requestWithRetry'
|
|
130
|
+
});
|
|
131
|
+
throw error; // Final attempt failed or error is not retryable
|
|
132
|
+
}
|
|
133
|
+
// Handle Retry-After header for 429
|
|
134
|
+
const retryAfterHeaderRaw = error.response?.headers['retry-after'];
|
|
135
|
+
const retryAfterHeader = Array.isArray(retryAfterHeaderRaw) ? retryAfterHeaderRaw[0] : retryAfterHeaderRaw;
|
|
136
|
+
let delay = 0;
|
|
137
|
+
if (status === 429 && retryAfterHeader) {
|
|
138
|
+
const retryAfterSeconds = Number(retryAfterHeader);
|
|
139
|
+
if (!isNaN(retryAfterSeconds) && retryAfterSeconds >= 0) {
|
|
140
|
+
delay = retryAfterSeconds * 1000;
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
const retryAfterDate = Date.parse(retryAfterHeader);
|
|
144
|
+
if (!isNaN(retryAfterDate)) {
|
|
145
|
+
delay = Math.max(0, retryAfterDate - Date.now());
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
// If no Retry-After header, use exponential backoff with jitter
|
|
150
|
+
if (delay === 0) {
|
|
151
|
+
const backoff = constants_1.RETRY_CONFIG.INITIAL_BACKOFF_MS * Math.pow(constants_1.RETRY_CONFIG.BACKOFF_MULTIPLIER, attempt - 1);
|
|
152
|
+
const jitter = backoff * constants_1.RETRY_CONFIG.JITTER_FACTOR * Math.random();
|
|
153
|
+
delay = Math.min(backoff + jitter, constants_1.RETRY_CONFIG.MAX_BACKOFF_MS);
|
|
154
|
+
}
|
|
155
|
+
(0, logger_1.mcpLog)(constants_1.LOG_LEVELS.INFO, `Request failed, retrying`, {
|
|
156
|
+
attempt,
|
|
157
|
+
maxRetries: constants_1.RETRY_CONFIG.MAX_RETRIES,
|
|
158
|
+
delayMs: Math.round(delay),
|
|
159
|
+
error: error.message,
|
|
160
|
+
status,
|
|
161
|
+
httpMethod: requestMethod,
|
|
162
|
+
isNetworkError,
|
|
163
|
+
component: 'MotionApiService',
|
|
164
|
+
method: 'requestWithRetry'
|
|
165
|
+
});
|
|
166
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// Should never reach here, but TypeScript requires a return or throw
|
|
170
|
+
throw new Error('Max retries exceeded');
|
|
171
|
+
}
|
|
172
|
+
mergeTruncationMetadata(aggregate, source) {
|
|
173
|
+
if (!source?.wasTruncated) {
|
|
174
|
+
return aggregate;
|
|
175
|
+
}
|
|
176
|
+
if (!aggregate?.wasTruncated) {
|
|
177
|
+
return { ...source };
|
|
178
|
+
}
|
|
179
|
+
const merged = { ...aggregate, wasTruncated: true };
|
|
180
|
+
if (aggregate.reason !== source.reason) {
|
|
181
|
+
delete merged.reason;
|
|
182
|
+
delete merged.limit;
|
|
183
|
+
return merged;
|
|
184
|
+
}
|
|
185
|
+
if (source.reason !== undefined) {
|
|
186
|
+
merged.reason = source.reason;
|
|
187
|
+
}
|
|
188
|
+
if (aggregate.limit !== source.limit) {
|
|
189
|
+
delete merged.limit;
|
|
190
|
+
}
|
|
191
|
+
else if (source.limit !== undefined) {
|
|
192
|
+
merged.limit = source.limit;
|
|
193
|
+
}
|
|
194
|
+
return merged;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
exports.ApiClient = ApiClient;
|
|
198
|
+
//# sourceMappingURL=ApiClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApiClient.js","sourceRoot":"","sources":["../../../src/services/api/ApiClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CacheManager — all 9 typed cache instances for the Motion API service.
|
|
3
|
+
*
|
|
4
|
+
* Each cache has a per-resource TTL defined in CACHE_TTL (src/utils/constants.ts).
|
|
5
|
+
*/
|
|
6
|
+
import { SimpleCache } from '../../utils/cache';
|
|
7
|
+
import { MotionWorkspace, MotionProject, MotionUser, MotionComment, MotionCustomField, MotionRecurringTask, MotionSchedule, MotionStatus, MotionPaginatedResponse } from '../../types/motion';
|
|
8
|
+
import { ICacheManager } from './types';
|
|
9
|
+
export declare class CacheManager implements ICacheManager {
|
|
10
|
+
readonly workspace: SimpleCache<MotionWorkspace[]>;
|
|
11
|
+
readonly user: SimpleCache<MotionUser[]>;
|
|
12
|
+
readonly project: SimpleCache<MotionProject[]>;
|
|
13
|
+
readonly singleProject: SimpleCache<MotionProject>;
|
|
14
|
+
readonly comment: SimpleCache<MotionPaginatedResponse<MotionComment>>;
|
|
15
|
+
readonly customField: SimpleCache<MotionCustomField[]>;
|
|
16
|
+
readonly recurringTask: SimpleCache<MotionRecurringTask[]>;
|
|
17
|
+
readonly schedule: SimpleCache<MotionSchedule[]>;
|
|
18
|
+
readonly status: SimpleCache<MotionStatus[]>;
|
|
19
|
+
constructor();
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=CacheManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CacheManager.d.ts","sourceRoot":"","sources":["../../../src/services/api/CacheManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EACL,eAAe,EACf,aAAa,EACb,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,YAAY,EACZ,uBAAuB,EACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,qBAAa,YAAa,YAAW,aAAa;IAChD,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,eAAe,EAAE,CAAC,CAAC;IACnD,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,UAAU,EAAE,CAAC,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,aAAa,EAAE,CAAC,CAAC;IAC/C,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;IACnD,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC,CAAC;IACtE,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACvD,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC3D,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC;IACjD,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC;;CAa9C"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CacheManager — all 9 typed cache instances for the Motion API service.
|
|
4
|
+
*
|
|
5
|
+
* Each cache has a per-resource TTL defined in CACHE_TTL (src/utils/constants.ts).
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.CacheManager = void 0;
|
|
9
|
+
const cache_1 = require("../../utils/cache");
|
|
10
|
+
const constants_1 = require("../../utils/constants");
|
|
11
|
+
class CacheManager {
|
|
12
|
+
constructor() {
|
|
13
|
+
this.workspace = new cache_1.SimpleCache(constants_1.CACHE_TTL.WORKSPACES);
|
|
14
|
+
this.user = new cache_1.SimpleCache(constants_1.CACHE_TTL.USERS);
|
|
15
|
+
this.project = new cache_1.SimpleCache(constants_1.CACHE_TTL.PROJECTS);
|
|
16
|
+
this.singleProject = new cache_1.SimpleCache(constants_1.CACHE_TTL.PROJECTS);
|
|
17
|
+
this.comment = new cache_1.SimpleCache(constants_1.CACHE_TTL.COMMENTS);
|
|
18
|
+
this.customField = new cache_1.SimpleCache(constants_1.CACHE_TTL.CUSTOM_FIELDS);
|
|
19
|
+
this.recurringTask = new cache_1.SimpleCache(constants_1.CACHE_TTL.RECURRING_TASKS);
|
|
20
|
+
this.schedule = new cache_1.SimpleCache(constants_1.CACHE_TTL.SCHEDULES);
|
|
21
|
+
this.status = new cache_1.SimpleCache(constants_1.CACHE_TTL.STATUSES);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.CacheManager = CacheManager;
|
|
25
|
+
//# sourceMappingURL=CacheManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CacheManager.js","sourceRoot":"","sources":["../../../src/services/api/CacheManager.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,6CAAgD;AAChD,qDAAkD;AAclD,MAAa,YAAY;IAWvB;QACE,IAAI,CAAC,SAAS,GAAG,IAAI,mBAAW,CAAC,qBAAS,CAAC,UAAU,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,GAAG,IAAI,mBAAW,CAAC,qBAAS,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,GAAG,IAAI,mBAAW,CAAC,qBAAS,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,CAAC,aAAa,GAAG,IAAI,mBAAW,CAAC,qBAAS,CAAC,QAAQ,CAAC,CAAC;QACzD,IAAI,CAAC,OAAO,GAAG,IAAI,mBAAW,CAAC,qBAAS,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,CAAC,WAAW,GAAG,IAAI,mBAAW,CAAC,qBAAS,CAAC,aAAa,CAAC,CAAC;QAC5D,IAAI,CAAC,aAAa,GAAG,IAAI,mBAAW,CAAC,qBAAS,CAAC,eAAe,CAAC,CAAC;QAChE,IAAI,CAAC,QAAQ,GAAG,IAAI,mBAAW,CAAC,qBAAS,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,GAAG,IAAI,mBAAW,CAAC,qBAAS,CAAC,QAAQ,CAAC,CAAC;IACpD,CAAC;CACF;AAtBD,oCAsBC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Comment resource module — getComments, createComment
|
|
3
|
+
*/
|
|
4
|
+
import { MotionComment, CreateCommentData, MotionPaginatedResponse } from '../../types/motion';
|
|
5
|
+
import { ResourceContext } from './types';
|
|
6
|
+
export declare function getComments(ctx: ResourceContext, taskId: string, cursor?: string): Promise<MotionPaginatedResponse<MotionComment>>;
|
|
7
|
+
export declare function createComment(ctx: ResourceContext, commentData: CreateCommentData): Promise<MotionComment>;
|
|
8
|
+
//# sourceMappingURL=comments.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comments.d.ts","sourceRoot":"","sources":["../../../src/services/api/comments.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAI/F,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG1C,wBAAsB,WAAW,CAAC,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC,CAgDxI;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,eAAe,EAAE,WAAW,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC,CAmChH"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Comment resource module — getComments, createComment
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getComments = getComments;
|
|
7
|
+
exports.createComment = createComment;
|
|
8
|
+
const axios_1 = require("axios");
|
|
9
|
+
const constants_1 = require("../../utils/constants");
|
|
10
|
+
const logger_1 = require("../../utils/logger");
|
|
11
|
+
const responseWrapper_1 = require("../../utils/responseWrapper");
|
|
12
|
+
const ApiClient_1 = require("./ApiClient");
|
|
13
|
+
async function getComments(ctx, taskId, cursor) {
|
|
14
|
+
const cacheKey = `comments:${taskId}:${cursor ?? 'none'}`;
|
|
15
|
+
return ctx.cache.comment.withCache(cacheKey, async () => {
|
|
16
|
+
try {
|
|
17
|
+
(0, logger_1.mcpLog)(constants_1.LOG_LEVELS.DEBUG, 'Fetching comments from Motion API', {
|
|
18
|
+
method: 'getComments',
|
|
19
|
+
taskId,
|
|
20
|
+
cursor
|
|
21
|
+
});
|
|
22
|
+
const params = new URLSearchParams({ taskId });
|
|
23
|
+
if (cursor)
|
|
24
|
+
params.append('cursor', cursor);
|
|
25
|
+
const response = await ctx.api.requestWithRetry(() => ctx.api.client.get(`/comments?${params.toString()}`));
|
|
26
|
+
// Use new response wrapper for consistent handling
|
|
27
|
+
const unwrapped = (0, responseWrapper_1.unwrapApiResponse)(response.data, 'comments');
|
|
28
|
+
(0, logger_1.mcpLog)(constants_1.LOG_LEVELS.INFO, 'Comments fetched successfully', {
|
|
29
|
+
method: 'getComments',
|
|
30
|
+
count: unwrapped.data.length,
|
|
31
|
+
hasMore: !!unwrapped.meta?.nextCursor,
|
|
32
|
+
taskId
|
|
33
|
+
});
|
|
34
|
+
// Return in our standard paginated format
|
|
35
|
+
return {
|
|
36
|
+
data: unwrapped.data,
|
|
37
|
+
meta: {
|
|
38
|
+
nextCursor: unwrapped.meta?.nextCursor,
|
|
39
|
+
pageSize: unwrapped.meta?.pageSize || unwrapped.data.length
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
(0, logger_1.mcpLog)(constants_1.LOG_LEVELS.ERROR, 'Failed to fetch comments', {
|
|
45
|
+
method: 'getComments',
|
|
46
|
+
error: (0, ApiClient_1.getErrorMessage)(error),
|
|
47
|
+
apiStatus: (0, axios_1.isAxiosError)(error) ? error.response?.status : undefined,
|
|
48
|
+
apiMessage: (0, axios_1.isAxiosError)(error) ? error.response?.data?.message : undefined,
|
|
49
|
+
taskId,
|
|
50
|
+
cursor
|
|
51
|
+
});
|
|
52
|
+
throw ctx.api.formatApiError(error, 'fetch', 'comment');
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
async function createComment(ctx, commentData) {
|
|
57
|
+
try {
|
|
58
|
+
(0, logger_1.mcpLog)(constants_1.LOG_LEVELS.DEBUG, 'Creating comment in Motion API', {
|
|
59
|
+
method: 'createComment',
|
|
60
|
+
taskId: commentData.taskId,
|
|
61
|
+
contentLength: commentData.content?.length || 0
|
|
62
|
+
});
|
|
63
|
+
// Create minimal payload by removing empty/null values to avoid validation errors
|
|
64
|
+
const minimalPayload = (0, constants_1.createMinimalPayload)(commentData);
|
|
65
|
+
const response = await ctx.api.requestWithRetry(() => ctx.api.client.post('/comments', minimalPayload));
|
|
66
|
+
// Invalidate all cached pages for this task's comments (cursor variants included)
|
|
67
|
+
ctx.cache.comment.invalidate(`comments:${commentData.taskId}:`);
|
|
68
|
+
(0, logger_1.mcpLog)(constants_1.LOG_LEVELS.INFO, 'Comment created successfully', {
|
|
69
|
+
method: 'createComment',
|
|
70
|
+
commentId: response.data?.id,
|
|
71
|
+
taskId: commentData.taskId
|
|
72
|
+
});
|
|
73
|
+
return response.data;
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
(0, logger_1.mcpLog)(constants_1.LOG_LEVELS.ERROR, 'Failed to create comment', {
|
|
77
|
+
method: 'createComment',
|
|
78
|
+
error: (0, ApiClient_1.getErrorMessage)(error),
|
|
79
|
+
apiStatus: (0, axios_1.isAxiosError)(error) ? error.response?.status : undefined,
|
|
80
|
+
apiMessage: (0, axios_1.isAxiosError)(error) ? error.response?.data?.message : undefined,
|
|
81
|
+
taskId: commentData?.taskId
|
|
82
|
+
});
|
|
83
|
+
throw ctx.api.formatApiError(error, 'create', 'comment');
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=comments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comments.js","sourceRoot":"","sources":["../../../src/services/api/comments.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom Field resource module — getCustomFields, createCustomField, deleteCustomField,
|
|
3
|
+
* addCustomFieldToProject, removeCustomFieldFromProject,
|
|
4
|
+
* addCustomFieldToTask, removeCustomFieldFromTask
|
|
5
|
+
*/
|
|
6
|
+
import { MotionCustomField, MotionCustomFieldValue, CreateCustomFieldData } from '../../types/motion';
|
|
7
|
+
import { ResourceContext } from './types';
|
|
8
|
+
export declare function getCustomFields(ctx: ResourceContext, workspaceId: string): Promise<MotionCustomField[]>;
|
|
9
|
+
export declare function createCustomField(ctx: ResourceContext, workspaceId: string, fieldData: CreateCustomFieldData): Promise<MotionCustomField>;
|
|
10
|
+
export declare function deleteCustomField(ctx: ResourceContext, workspaceId: string, fieldId: string): Promise<{
|
|
11
|
+
success: boolean;
|
|
12
|
+
}>;
|
|
13
|
+
export declare function addCustomFieldToProject(ctx: ResourceContext, projectId: string, fieldId: string, value?: string | number | boolean | string[] | null, fieldType?: string): Promise<MotionCustomFieldValue>;
|
|
14
|
+
export declare function removeCustomFieldFromProject(ctx: ResourceContext, projectId: string, valueId: string): Promise<{
|
|
15
|
+
success: boolean;
|
|
16
|
+
}>;
|
|
17
|
+
export declare function addCustomFieldToTask(ctx: ResourceContext, taskId: string, fieldId: string, value?: string | number | boolean | string[] | null, fieldType?: string): Promise<MotionCustomFieldValue>;
|
|
18
|
+
export declare function removeCustomFieldFromTask(ctx: ResourceContext, taskId: string, valueId: string): Promise<{
|
|
19
|
+
success: boolean;
|
|
20
|
+
}>;
|
|
21
|
+
//# sourceMappingURL=customFields.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customFields.d.ts","sourceRoot":"","sources":["../../../src/services/api/customFields.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAGtG,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG1C,wBAAsB,eAAe,CAAC,GAAG,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAmC7G;AAED,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,qBAAqB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA+C/I;AAED,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAiCjI;AAED,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GAAG,IAAI,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAwDhN;AAED,wBAAsB,4BAA4B,CAAC,GAAG,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAiC1I;AAED,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GAAG,IAAI,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAoD1M;AAED,wBAAsB,yBAAyB,CAAC,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CA8BpI"}
|