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.
Files changed (111) hide show
  1. package/dist/handlers/HandlerFactory.d.ts +0 -5
  2. package/dist/handlers/HandlerFactory.d.ts.map +1 -1
  3. package/dist/handlers/HandlerFactory.js +0 -15
  4. package/dist/handlers/HandlerFactory.js.map +1 -1
  5. package/dist/mcp-server.js +3 -3
  6. package/dist/mcp-server.js.map +1 -1
  7. package/dist/services/api/ApiClient.d.ts +22 -0
  8. package/dist/services/api/ApiClient.d.ts.map +1 -0
  9. package/dist/services/api/ApiClient.js +198 -0
  10. package/dist/services/api/ApiClient.js.map +1 -0
  11. package/dist/services/api/CacheManager.d.ts +21 -0
  12. package/dist/services/api/CacheManager.d.ts.map +1 -0
  13. package/dist/services/api/CacheManager.js +25 -0
  14. package/dist/services/api/CacheManager.js.map +1 -0
  15. package/dist/services/api/comments.d.ts +8 -0
  16. package/dist/services/api/comments.d.ts.map +1 -0
  17. package/dist/services/api/comments.js +86 -0
  18. package/dist/services/api/comments.js.map +1 -0
  19. package/dist/services/api/customFields.d.ts +21 -0
  20. package/dist/services/api/customFields.d.ts.map +1 -0
  21. package/dist/services/api/customFields.js +277 -0
  22. package/dist/services/api/customFields.js.map +1 -0
  23. package/dist/services/api/index.d.ts +22 -0
  24. package/dist/services/api/index.d.ts.map +1 -0
  25. package/dist/services/api/index.js +64 -0
  26. package/dist/services/api/index.js.map +1 -0
  27. package/dist/services/api/projects.d.ts +18 -0
  28. package/dist/services/api/projects.d.ts.map +1 -0
  29. package/dist/services/api/projects.js +346 -0
  30. package/dist/services/api/projects.js.map +1 -0
  31. package/dist/services/api/recurringTasks.d.ts +15 -0
  32. package/dist/services/api/recurringTasks.d.ts.map +1 -0
  33. package/dist/services/api/recurringTasks.js +143 -0
  34. package/dist/services/api/recurringTasks.js.map +1 -0
  35. package/dist/services/api/schedules.d.ts +8 -0
  36. package/dist/services/api/schedules.d.ts.map +1 -0
  37. package/dist/services/api/schedules.js +70 -0
  38. package/dist/services/api/schedules.js.map +1 -0
  39. package/dist/services/api/search.d.ts +29 -0
  40. package/dist/services/api/search.d.ts.map +1 -0
  41. package/dist/services/api/search.js +415 -0
  42. package/dist/services/api/search.js.map +1 -0
  43. package/dist/services/api/statuses.d.ts +7 -0
  44. package/dist/services/api/statuses.d.ts.map +1 -0
  45. package/dist/services/api/statuses.js +67 -0
  46. package/dist/services/api/statuses.js.map +1 -0
  47. package/dist/services/api/tasks.d.ts +34 -0
  48. package/dist/services/api/tasks.d.ts.map +1 -0
  49. package/dist/services/api/tasks.js +474 -0
  50. package/dist/services/api/tasks.js.map +1 -0
  51. package/dist/services/api/types.d.ts +54 -0
  52. package/dist/services/api/types.d.ts.map +1 -0
  53. package/dist/services/api/types.js +9 -0
  54. package/dist/services/api/types.js.map +1 -0
  55. package/dist/services/api/users.d.ts +8 -0
  56. package/dist/services/api/users.d.ts.map +1 -0
  57. package/dist/services/api/users.js +93 -0
  58. package/dist/services/api/users.js.map +1 -0
  59. package/dist/services/api/workspaces.d.ts +7 -0
  60. package/dist/services/api/workspaces.d.ts.map +1 -0
  61. package/dist/services/api/workspaces.js +59 -0
  62. package/dist/services/api/workspaces.js.map +1 -0
  63. package/dist/services/motionApi.d.ts +34 -180
  64. package/dist/services/motionApi.d.ts.map +1 -1
  65. package/dist/services/motionApi.js +84 -2163
  66. package/dist/services/motionApi.js.map +1 -1
  67. package/dist/tools/ToolConfigurator.d.ts +1 -7
  68. package/dist/tools/ToolConfigurator.d.ts.map +1 -1
  69. package/dist/tools/ToolConfigurator.js +0 -31
  70. package/dist/tools/ToolConfigurator.js.map +1 -1
  71. package/dist/tools/ToolRegistry.d.ts +1 -22
  72. package/dist/tools/ToolRegistry.d.ts.map +1 -1
  73. package/dist/tools/ToolRegistry.js +0 -31
  74. package/dist/tools/ToolRegistry.js.map +1 -1
  75. package/dist/types/motion.d.ts +0 -7
  76. package/dist/types/motion.d.ts.map +1 -1
  77. package/dist/utils/cache.d.ts +0 -5
  78. package/dist/utils/cache.d.ts.map +1 -1
  79. package/dist/utils/cache.js +0 -8
  80. package/dist/utils/cache.js.map +1 -1
  81. package/dist/utils/constants.d.ts +4 -0
  82. package/dist/utils/constants.d.ts.map +1 -1
  83. package/dist/utils/constants.js +7 -1
  84. package/dist/utils/constants.js.map +1 -1
  85. package/dist/utils/errorHandling.d.ts +0 -12
  86. package/dist/utils/errorHandling.d.ts.map +1 -1
  87. package/dist/utils/errorHandling.js +2 -23
  88. package/dist/utils/errorHandling.js.map +1 -1
  89. package/dist/utils/errors.d.ts +89 -0
  90. package/dist/utils/errors.d.ts.map +1 -0
  91. package/dist/utils/errors.js +276 -0
  92. package/dist/utils/errors.js.map +1 -0
  93. package/dist/utils/index.d.ts +2 -2
  94. package/dist/utils/index.d.ts.map +1 -1
  95. package/dist/utils/index.js +6 -5
  96. package/dist/utils/index.js.map +1 -1
  97. package/dist/utils/parameterUtils.js +4 -4
  98. package/dist/utils/parameterUtils.js.map +1 -1
  99. package/dist/utils/responseFormatters.js +16 -16
  100. package/dist/utils/responseFormatters.js.map +1 -1
  101. package/dist/utils/serverInstructions.d.ts +2 -0
  102. package/dist/utils/serverInstructions.d.ts.map +1 -0
  103. package/dist/utils/serverInstructions.js +21 -0
  104. package/dist/utils/serverInstructions.js.map +1 -0
  105. package/dist/utils/userFacingErrors.d.ts +0 -8
  106. package/dist/utils/userFacingErrors.d.ts.map +1 -1
  107. package/dist/utils/userFacingErrors.js +0 -19
  108. package/dist/utils/userFacingErrors.js.map +1 -1
  109. package/dist/utils/workspaceResolver.js +12 -12
  110. package/dist/utils/workspaceResolver.js.map +1 -1
  111. 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;IAQ5C,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIrC,sBAAsB,IAAI,MAAM,EAAE;IAIlC,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,KAAI,OAAO,EAAE,cAAc,KAAK,WAAW,GAAG,IAAI;IAIlG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI5C,eAAe,IAAI,MAAM;CAG1B"}
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;IAED,UAAU,CAAC,QAAgB;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED,sBAAsB;QACpB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,eAAe,CAAC,QAAgB,EAAE,YAAyD;QACzF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC5C,CAAC;IAED,iBAAiB,CAAC,QAAgB;QAChC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC5B,CAAC;CACF;AAlDD,wCAkDC"}
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"}
@@ -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.6.0",
52
+ version: "2.7.0",
53
53
  }, {
54
54
  capabilities: {
55
55
  tools: {},
56
56
  prompts: {},
57
57
  resources: {},
58
58
  },
59
- instructions: constants_1.SERVER_INSTRUCTIONS,
59
+ instructions: serverInstructions_1.SERVER_INSTRUCTIONS,
60
60
  });
61
61
  this.handlerFactory = null;
62
62
  this.context = null;
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
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"}