@pollychrome/joan-mcp 2.0.0 → 2.2.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 (56) hide show
  1. package/README.md +5 -0
  2. package/dist/cli.js +5 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/client/api-client.d.ts +2 -0
  5. package/dist/client/api-client.d.ts.map +1 -1
  6. package/dist/client/api-client.js +35 -6
  7. package/dist/client/api-client.js.map +1 -1
  8. package/dist/index.d.ts +6 -0
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +68 -14
  11. package/dist/index.js.map +1 -1
  12. package/dist/tools/attachments.d.ts.map +1 -1
  13. package/dist/tools/attachments.js +9 -0
  14. package/dist/tools/attachments.js.map +1 -1
  15. package/dist/tools/comments.d.ts.map +1 -1
  16. package/dist/tools/comments.js +9 -0
  17. package/dist/tools/comments.js.map +1 -1
  18. package/dist/tools/goals.d.ts.map +1 -1
  19. package/dist/tools/goals.js +6 -0
  20. package/dist/tools/goals.js.map +1 -1
  21. package/dist/tools/milestones.d.ts.map +1 -1
  22. package/dist/tools/milestones.js +8 -0
  23. package/dist/tools/milestones.js.map +1 -1
  24. package/dist/tools/notes.d.ts.map +1 -1
  25. package/dist/tools/notes.js +4 -0
  26. package/dist/tools/notes.js.map +1 -1
  27. package/dist/tools/project-tags.d.ts.map +1 -1
  28. package/dist/tools/project-tags.js +10 -0
  29. package/dist/tools/project-tags.js.map +1 -1
  30. package/dist/tools/projects.d.ts.map +1 -1
  31. package/dist/tools/projects.js +10 -0
  32. package/dist/tools/projects.js.map +1 -1
  33. package/dist/tools/resources.d.ts.map +1 -1
  34. package/dist/tools/resources.js +13 -0
  35. package/dist/tools/resources.js.map +1 -1
  36. package/dist/tools/tasks.d.ts.map +1 -1
  37. package/dist/tools/tasks.js +13 -4
  38. package/dist/tools/tasks.js.map +1 -1
  39. package/dist/utils/column-mapper.d.ts.map +1 -1
  40. package/dist/utils/column-mapper.js +4 -3
  41. package/dist/utils/column-mapper.js.map +1 -1
  42. package/dist/utils/errors.d.ts.map +1 -1
  43. package/dist/utils/errors.js +7 -0
  44. package/dist/utils/errors.js.map +1 -1
  45. package/dist/utils/logger.d.ts +15 -0
  46. package/dist/utils/logger.d.ts.map +1 -0
  47. package/dist/utils/logger.js +39 -0
  48. package/dist/utils/logger.js.map +1 -0
  49. package/dist/utils/telemetry.d.ts.map +1 -1
  50. package/dist/utils/telemetry.js +3 -2
  51. package/dist/utils/telemetry.js.map +1 -1
  52. package/dist/utils/timeout.d.ts +26 -0
  53. package/dist/utils/timeout.d.ts.map +1 -0
  54. package/dist/utils/timeout.js +63 -0
  55. package/dist/utils/timeout.js.map +1 -0
  56. package/package.json +1 -1
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Timeout utilities for HTTP requests
3
+ */
4
+ export class TimeoutError extends Error {
5
+ timeoutMs;
6
+ constructor(timeoutMs, message) {
7
+ super(message || `Request timed out after ${timeoutMs}ms`);
8
+ this.timeoutMs = timeoutMs;
9
+ this.name = 'TimeoutError';
10
+ }
11
+ }
12
+ /**
13
+ * Fetch with timeout support
14
+ * @param url - URL to fetch
15
+ * @param options - Fetch options plus optional timeoutMs
16
+ * @returns Response
17
+ * @throws TimeoutError if request exceeds timeout
18
+ */
19
+ export async function fetchWithTimeout(url, options = {}) {
20
+ const { timeoutMs = 10000, ...fetchOptions } = options;
21
+ const controller = new AbortController();
22
+ const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
23
+ try {
24
+ return await fetch(url, { ...fetchOptions, signal: controller.signal });
25
+ }
26
+ catch (error) {
27
+ if (error instanceof Error && error.name === 'AbortError') {
28
+ throw new TimeoutError(timeoutMs, `Request to ${url} timed out`);
29
+ }
30
+ throw error;
31
+ }
32
+ finally {
33
+ clearTimeout(timeoutId);
34
+ }
35
+ }
36
+ /**
37
+ * Wrap a promise with a timeout.
38
+ */
39
+ export async function withTimeout(promise, timeoutMs, message) {
40
+ let timeoutId;
41
+ const timeoutPromise = new Promise((_, reject) => {
42
+ timeoutId = setTimeout(() => {
43
+ reject(new TimeoutError(timeoutMs, message));
44
+ }, timeoutMs);
45
+ });
46
+ try {
47
+ return await Promise.race([promise, timeoutPromise]);
48
+ }
49
+ finally {
50
+ if (timeoutId) {
51
+ clearTimeout(timeoutId);
52
+ }
53
+ }
54
+ }
55
+ /**
56
+ * Get default timeout from environment or use 10 seconds
57
+ */
58
+ export function getDefaultTimeout() {
59
+ return process.env.JOAN_MCP_TIMEOUT_MS
60
+ ? parseInt(process.env.JOAN_MCP_TIMEOUT_MS, 10)
61
+ : 10000; // 10 seconds default for fast API
62
+ }
63
+ //# sourceMappingURL=timeout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeout.js","sourceRoot":"","sources":["../../src/utils/timeout.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,OAAO,YAAa,SAAQ,KAAK;IACT;IAA5B,YAA4B,SAAiB,EAAE,OAAgB;QAC7D,KAAK,CAAC,OAAO,IAAI,2BAA2B,SAAS,IAAI,CAAC,CAAC;QADjC,cAAS,GAAT,SAAS,CAAQ;QAE3C,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAAW,EACX,UAAgD,EAAE;IAElD,MAAM,EAAE,SAAS,GAAG,KAAK,EAAE,GAAG,YAAY,EAAE,GAAG,OAAO,CAAC;IACvD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;IAElE,IAAI,CAAC;QACH,OAAO,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,YAAY,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC1D,MAAM,IAAI,YAAY,CAAC,SAAS,EAAE,cAAc,GAAG,YAAY,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,SAAS,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAmB,EACnB,SAAiB,EACjB,OAAgB;IAEhB,IAAI,SAAoD,CAAC;IACzD,MAAM,cAAc,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QACtD,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAC1B,MAAM,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;QAC/C,CAAC,EAAE,SAAS,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;IACvD,CAAC;YAAS,CAAC;QACT,IAAI,SAAS,EAAE,CAAC;YACd,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB;QACpC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,EAAE,CAAC;QAC/C,CAAC,CAAC,KAAK,CAAC,CAAC,kCAAkC;AAC/C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pollychrome/joan-mcp",
3
- "version": "2.0.0",
3
+ "version": "2.2.0",
4
4
  "description": "MCP server for Joan productivity app - enables AI assistants to manage projects, tasks, goals, milestones, and notes",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",