@frase/mcp-server 0.2.1 → 0.3.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 (86) hide show
  1. package/dist/api-client.d.ts +3 -90
  2. package/dist/api-client.d.ts.map +1 -1
  3. package/dist/api-client.js +2 -214
  4. package/dist/api-client.js.map +1 -1
  5. package/dist/cache.d.ts +2 -49
  6. package/dist/cache.d.ts.map +1 -1
  7. package/dist/cache.js +2 -94
  8. package/dist/cache.js.map +1 -1
  9. package/dist/cli/config-writer.d.ts.map +1 -1
  10. package/dist/cli/config-writer.js +52 -7
  11. package/dist/cli/config-writer.js.map +1 -1
  12. package/dist/config.d.ts +3 -14
  13. package/dist/config.d.ts.map +1 -1
  14. package/dist/config.js +2 -28
  15. package/dist/config.js.map +1 -1
  16. package/dist/formatter.d.ts +2 -44
  17. package/dist/formatter.d.ts.map +1 -1
  18. package/dist/formatter.js +2 -142
  19. package/dist/formatter.js.map +1 -1
  20. package/dist/index.js +1 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/prompts/cms-publishing.d.ts +16 -0
  23. package/dist/prompts/cms-publishing.d.ts.map +1 -0
  24. package/dist/prompts/cms-publishing.js +84 -0
  25. package/dist/prompts/cms-publishing.js.map +1 -0
  26. package/dist/prompts/competitive-intelligence.d.ts +16 -0
  27. package/dist/prompts/competitive-intelligence.d.ts.map +1 -0
  28. package/dist/prompts/competitive-intelligence.js +78 -0
  29. package/dist/prompts/competitive-intelligence.js.map +1 -0
  30. package/dist/prompts/content-governance.d.ts +16 -0
  31. package/dist/prompts/content-governance.d.ts.map +1 -0
  32. package/dist/prompts/content-governance.js +113 -0
  33. package/dist/prompts/content-governance.js.map +1 -0
  34. package/dist/prompts/geo-optimization.d.ts +17 -0
  35. package/dist/prompts/geo-optimization.d.ts.map +1 -0
  36. package/dist/prompts/geo-optimization.js +79 -0
  37. package/dist/prompts/geo-optimization.js.map +1 -0
  38. package/dist/prompts/index.d.ts.map +1 -1
  39. package/dist/prompts/index.js +15 -0
  40. package/dist/prompts/index.js.map +1 -1
  41. package/dist/tools/atomization.d.ts +8 -0
  42. package/dist/tools/atomization.d.ts.map +1 -0
  43. package/dist/tools/atomization.js +172 -0
  44. package/dist/tools/atomization.js.map +1 -0
  45. package/dist/tools/audits.d.ts.map +1 -1
  46. package/dist/tools/audits.js +1 -2
  47. package/dist/tools/audits.js.map +1 -1
  48. package/dist/tools/briefs.d.ts +2 -2
  49. package/dist/tools/briefs.d.ts.map +1 -1
  50. package/dist/tools/briefs.js +63 -4
  51. package/dist/tools/briefs.js.map +1 -1
  52. package/dist/tools/clusters.d.ts +9 -0
  53. package/dist/tools/clusters.d.ts.map +1 -0
  54. package/dist/tools/clusters.js +166 -0
  55. package/dist/tools/clusters.js.map +1 -0
  56. package/dist/tools/cms-connections.d.ts +7 -0
  57. package/dist/tools/cms-connections.d.ts.map +1 -0
  58. package/dist/tools/cms-connections.js +96 -0
  59. package/dist/tools/cms-connections.js.map +1 -0
  60. package/dist/tools/competitive-analysis.js +2 -2
  61. package/dist/tools/competitive-analysis.js.map +1 -1
  62. package/dist/tools/content.d.ts +2 -2
  63. package/dist/tools/content.d.ts.map +1 -1
  64. package/dist/tools/content.js +73 -9
  65. package/dist/tools/content.js.map +1 -1
  66. package/dist/tools/discover.d.ts +15 -0
  67. package/dist/tools/discover.d.ts.map +1 -0
  68. package/dist/tools/discover.js +180 -0
  69. package/dist/tools/discover.js.map +1 -0
  70. package/dist/tools/index.d.ts.map +1 -1
  71. package/dist/tools/index.js +32 -0
  72. package/dist/tools/index.js.map +1 -1
  73. package/dist/tools/jobs.d.ts +2 -2
  74. package/dist/tools/opportunities.d.ts +11 -0
  75. package/dist/tools/opportunities.d.ts.map +1 -0
  76. package/dist/tools/opportunities.js +122 -0
  77. package/dist/tools/opportunities.js.map +1 -0
  78. package/dist/tools/site-health.d.ts +7 -0
  79. package/dist/tools/site-health.d.ts.map +1 -0
  80. package/dist/tools/site-health.js +120 -0
  81. package/dist/tools/site-health.js.map +1 -0
  82. package/dist/types.d.ts +2 -180
  83. package/dist/types.d.ts.map +1 -1
  84. package/dist/types.js +1 -1
  85. package/package.json +26 -7
  86. package/server.json +4 -4
@@ -1,93 +1,6 @@
1
1
  /**
2
- * Frase API Client with retry logic and caching
2
+ * API Client re-exported from @frase/core
3
3
  */
4
- import type { Config } from "./config.js";
5
- /**
6
- * API Error class
7
- */
8
- export declare class FraseApiError extends Error {
9
- readonly status: number;
10
- readonly code: string;
11
- readonly details?: unknown | undefined;
12
- constructor(status: number, code: string, message: string, details?: unknown | undefined);
13
- /**
14
- * Check if this error is retryable
15
- */
16
- get isRetryable(): boolean;
17
- /**
18
- * Format error for display
19
- */
20
- toMarkdown(): string;
21
- }
22
- /**
23
- * Paginated response structure
24
- */
25
- export interface PaginatedResponse<T> {
26
- data: T[];
27
- pagination: {
28
- page: number;
29
- page_size: number;
30
- total: number;
31
- has_more: boolean;
32
- };
33
- }
34
- /**
35
- * API response structure
36
- */
37
- export interface ApiResponse<T> {
38
- data: T;
39
- request_id: string;
40
- }
41
- /**
42
- * Frase API Client
43
- */
44
- export declare class FraseApiClient {
45
- private config;
46
- private cache;
47
- constructor(config: Config);
48
- /**
49
- * Sleep for a specified duration
50
- */
51
- private sleep;
52
- /**
53
- * Calculate retry delay with exponential backoff
54
- */
55
- private getRetryDelay;
56
- /**
57
- * Make an HTTP request with retry logic
58
- */
59
- request<T>(method: string, path: string, options?: {
60
- body?: unknown;
61
- params?: Record<string, string | number | boolean | undefined>;
62
- cacheTtl?: number;
63
- }): Promise<T>;
64
- /**
65
- * GET request
66
- */
67
- get<T>(path: string, params?: Record<string, string | number | boolean | undefined>, cacheTtl?: number): Promise<T>;
68
- /**
69
- * POST request
70
- */
71
- post<T>(path: string, body: unknown): Promise<T>;
72
- /**
73
- * PUT request
74
- */
75
- put<T>(path: string, body: unknown): Promise<T>;
76
- /**
77
- * PATCH request
78
- */
79
- patch<T>(path: string, body: unknown): Promise<T>;
80
- /**
81
- * DELETE request
82
- */
83
- delete<T>(path: string): Promise<T>;
84
- /**
85
- * Clear all cached data
86
- */
87
- clearCache(): void;
88
- /**
89
- * Destroy the client (for graceful shutdown)
90
- */
91
- destroy(): void;
92
- }
4
+ export { FraseApiClient, FraseApiError } from "@frase/core";
5
+ export type { PaginatedResponse, ApiResponse } from "@frase/core";
93
6
  //# sourceMappingURL=api-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAa1C;;GAEG;AACH,qBAAa,aAAc,SAAQ,KAAK;aAEpB,MAAM,EAAE,MAAM;aACd,IAAI,EAAE,MAAM;aAEZ,OAAO,CAAC,EAAE,OAAO;gBAHjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EAC5B,OAAO,EAAE,MAAM,EACC,OAAO,CAAC,EAAE,OAAO,YAAA;IAMnC;;OAEG;IACH,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED;;OAEG;IACH,UAAU,IAAI,MAAM;CAWrB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,UAAU,EAAE;QACV,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,IAAI,EAAE,CAAC,CAAC;IACR,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,cAAc;IAGb,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,KAAK,CAAgB;gBAET,MAAM,EAAE,MAAM;IAIlC;;OAEG;IACH,OAAO,CAAC,KAAK;IAIb;;OAEG;IACH,OAAO,CAAC,aAAa;IAarB;;OAEG;IACG,OAAO,CAAC,CAAC,EACb,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;QAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GACA,OAAO,CAAC,CAAC,CAAC;IAsHb;;OAEG;IACH,GAAG,CAAC,CAAC,EACH,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,EAC9D,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,CAAC,CAAC;IAIb;;OAEG;IACH,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAIhD;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAI/C;;OAEG;IACH,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAIjD;;OAEG;IACH,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAInC;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,OAAO,IAAI,IAAI;CAGhB"}
1
+ {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5D,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
@@ -1,217 +1,5 @@
1
1
  /**
2
- * Frase API Client with retry logic and caching
2
+ * API Client re-exported from @frase/core
3
3
  */
4
- import { ResponseCache } from "./cache.js";
5
- import { debugLog } from "./config.js";
6
- /**
7
- * Retry configuration
8
- */
9
- const RETRY_CONFIG = {
10
- maxRetries: 2,
11
- baseDelayMs: 1000,
12
- maxDelayMs: 10000,
13
- retryableStatuses: [429, 500, 502, 503, 504],
14
- };
15
- /**
16
- * API Error class
17
- */
18
- export class FraseApiError extends Error {
19
- status;
20
- code;
21
- details;
22
- constructor(status, code, message, details) {
23
- super(message);
24
- this.status = status;
25
- this.code = code;
26
- this.details = details;
27
- this.name = "FraseApiError";
28
- }
29
- /**
30
- * Check if this error is retryable
31
- */
32
- get isRetryable() {
33
- return RETRY_CONFIG.retryableStatuses.includes(this.status);
34
- }
35
- /**
36
- * Format error for display
37
- */
38
- toMarkdown() {
39
- let md = `**Error:** ${this.message}\n`;
40
- md += `- Code: \`${this.code}\`\n`;
41
- md += `- Status: ${this.status}\n`;
42
- if (this.details) {
43
- md += `- Details: ${JSON.stringify(this.details)}\n`;
44
- }
45
- return md;
46
- }
47
- }
48
- /**
49
- * Frase API Client
50
- */
51
- export class FraseApiClient {
52
- config;
53
- cache;
54
- constructor(config) {
55
- this.config = config;
56
- this.cache = new ResponseCache();
57
- }
58
- /**
59
- * Sleep for a specified duration
60
- */
61
- sleep(ms) {
62
- return new Promise((resolve) => setTimeout(resolve, ms));
63
- }
64
- /**
65
- * Calculate retry delay with exponential backoff
66
- */
67
- getRetryDelay(attempt, retryAfter) {
68
- if (retryAfter) {
69
- const seconds = parseInt(retryAfter, 10);
70
- if (!isNaN(seconds)) {
71
- return Math.min(seconds * 1000, RETRY_CONFIG.maxDelayMs);
72
- }
73
- }
74
- // Exponential backoff: 1s, 2s, 4s... capped at maxDelayMs
75
- const delay = RETRY_CONFIG.baseDelayMs * Math.pow(2, attempt);
76
- return Math.min(delay, RETRY_CONFIG.maxDelayMs);
77
- }
78
- /**
79
- * Make an HTTP request with retry logic
80
- */
81
- async request(method, path, options) {
82
- const { body, params, cacheTtl } = options || {};
83
- // Build URL with query params
84
- let url = `${this.config.apiUrl}${path}`;
85
- if (params) {
86
- const searchParams = new URLSearchParams();
87
- for (const [key, value] of Object.entries(params)) {
88
- if (value !== undefined) {
89
- searchParams.set(key, String(value));
90
- }
91
- }
92
- const queryString = searchParams.toString();
93
- if (queryString) {
94
- url += `?${queryString}`;
95
- }
96
- }
97
- // Check cache for GET requests
98
- if (method === "GET" && cacheTtl) {
99
- const cacheKey = ResponseCache.key(method, path, params);
100
- const cached = this.cache.get(cacheKey);
101
- if (cached) {
102
- debugLog(this.config, `Cache hit: ${path}`);
103
- return cached;
104
- }
105
- }
106
- let lastError = null;
107
- for (let attempt = 0; attempt <= RETRY_CONFIG.maxRetries; attempt++) {
108
- try {
109
- debugLog(this.config, `Request: ${method} ${path} (attempt ${attempt + 1})`);
110
- const response = await fetch(url, {
111
- method,
112
- headers: {
113
- "Content-Type": "application/json",
114
- "X-API-KEY": this.config.apiKey,
115
- "User-Agent": "frase-mcp-server/0.2.1",
116
- },
117
- body: body ? JSON.stringify(body) : undefined,
118
- });
119
- if (!response.ok) {
120
- let errorData = {};
121
- try {
122
- errorData = (await response.json());
123
- }
124
- catch {
125
- // Ignore JSON parse errors
126
- }
127
- const error = new FraseApiError(response.status, errorData.error?.code || `http_${response.status}`, errorData.error?.message || `HTTP ${response.status}`, errorData);
128
- // Check if we should retry
129
- if (attempt < RETRY_CONFIG.maxRetries && error.isRetryable) {
130
- const delay = this.getRetryDelay(attempt, response.headers.get("Retry-After") || undefined);
131
- debugLog(this.config, `Retrying in ${delay}ms...`);
132
- await this.sleep(delay);
133
- continue;
134
- }
135
- throw error;
136
- }
137
- const contentType = response.headers.get("Content-Type") || "";
138
- const isJson = contentType.includes("application/json") ||
139
- // If no content-type header, default to JSON for backwards compatibility
140
- !contentType;
141
- const data = (isJson ? await response.json() : await response.text());
142
- // Cache successful GET responses
143
- if (method === "GET" && cacheTtl) {
144
- const cacheKey = ResponseCache.key(method, path, params);
145
- this.cache.set(cacheKey, data, cacheTtl);
146
- }
147
- // Invalidate cache on write operations
148
- if (method !== "GET") {
149
- const resourceType = path.split("/")[1]; // e.g., /sites -> sites
150
- if (resourceType) {
151
- this.cache.invalidateResourceType(resourceType);
152
- }
153
- }
154
- return data;
155
- }
156
- catch (error) {
157
- lastError = error;
158
- // Don't retry FraseApiError unless it's retryable
159
- if (error instanceof FraseApiError && !error.isRetryable) {
160
- throw error;
161
- }
162
- // Network errors - retry if we have attempts left
163
- if (attempt < RETRY_CONFIG.maxRetries && !(error instanceof FraseApiError)) {
164
- const delay = this.getRetryDelay(attempt);
165
- debugLog(this.config, `Network error, retrying in ${delay}ms...`);
166
- await this.sleep(delay);
167
- continue;
168
- }
169
- throw error;
170
- }
171
- }
172
- throw lastError || new Error("Request failed after retries");
173
- }
174
- /**
175
- * GET request
176
- */
177
- get(path, params, cacheTtl) {
178
- return this.request("GET", path, { params, cacheTtl });
179
- }
180
- /**
181
- * POST request
182
- */
183
- post(path, body) {
184
- return this.request("POST", path, { body });
185
- }
186
- /**
187
- * PUT request
188
- */
189
- put(path, body) {
190
- return this.request("PUT", path, { body });
191
- }
192
- /**
193
- * PATCH request
194
- */
195
- patch(path, body) {
196
- return this.request("PATCH", path, { body });
197
- }
198
- /**
199
- * DELETE request
200
- */
201
- delete(path) {
202
- return this.request("DELETE", path);
203
- }
204
- /**
205
- * Clear all cached data
206
- */
207
- clearCache() {
208
- this.cache.clear();
209
- }
210
- /**
211
- * Destroy the client (for graceful shutdown)
212
- */
213
- destroy() {
214
- this.cache.destroy();
215
- }
216
- }
4
+ export { FraseApiClient, FraseApiError } from "@frase/core";
217
5
  //# sourceMappingURL=api-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
package/dist/cache.d.ts CHANGED
@@ -1,52 +1,5 @@
1
1
  /**
2
- * Simple in-memory cache for GET responses
2
+ * Cache — re-exported from @frase/core
3
3
  */
4
- /**
5
- * Cache TTL configuration (in milliseconds)
6
- */
7
- export declare const CACHE_TTL: {
8
- readonly lists: 60000;
9
- readonly resources: 300000;
10
- };
11
- /**
12
- * Simple cache implementation
13
- */
14
- export declare class ResponseCache {
15
- private cache;
16
- private cleanupInterval;
17
- constructor();
18
- /**
19
- * Get a cached value
20
- */
21
- get<T>(key: string): T | undefined;
22
- /**
23
- * Set a cached value
24
- */
25
- set<T>(key: string, data: T, ttl: number): void;
26
- /**
27
- * Generate cache key for a request
28
- */
29
- static key(method: string, path: string, params?: Record<string, unknown>): string;
30
- /**
31
- * Invalidate cache entries matching a pattern
32
- */
33
- invalidate(pattern: string | RegExp): void;
34
- /**
35
- * Invalidate all cache entries for a resource type
36
- * Called after write operations
37
- */
38
- invalidateResourceType(resourceType: string): void;
39
- /**
40
- * Clear all cached entries
41
- */
42
- clear(): void;
43
- /**
44
- * Clean up expired entries
45
- */
46
- private cleanup;
47
- /**
48
- * Stop the cleanup interval (for graceful shutdown)
49
- */
50
- destroy(): void;
51
- }
4
+ export { ResponseCache, CACHE_TTL } from "@frase/core";
52
5
  //# sourceMappingURL=cache.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH;;GAEG;AACH,eAAO,MAAM,SAAS;;;CAGZ,CAAC;AAEX;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAA0C;IACvD,OAAO,CAAC,eAAe,CAA+B;;IAOtD;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAelC;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAO/C;;OAEG;IACH,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;IAKlF;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAU1C;;;OAGG;IACH,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAIlD;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,OAAO,CAAC,OAAO;IAUf;;OAEG;IACH,OAAO,IAAI,IAAI;CAOhB"}
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
package/dist/cache.js CHANGED
@@ -1,97 +1,5 @@
1
1
  /**
2
- * Simple in-memory cache for GET responses
2
+ * Cache — re-exported from @frase/core
3
3
  */
4
- /**
5
- * Cache TTL configuration (in milliseconds)
6
- */
7
- export const CACHE_TTL = {
8
- lists: 60_000, // 1 minute for list endpoints
9
- resources: 300_000, // 5 minutes for individual resources
10
- };
11
- /**
12
- * Simple cache implementation
13
- */
14
- export class ResponseCache {
15
- cache = new Map();
16
- cleanupInterval = null;
17
- constructor() {
18
- // Run cleanup every minute
19
- this.cleanupInterval = setInterval(() => this.cleanup(), 60_000);
20
- }
21
- /**
22
- * Get a cached value
23
- */
24
- get(key) {
25
- const entry = this.cache.get(key);
26
- if (!entry) {
27
- return undefined;
28
- }
29
- if (Date.now() > entry.expiresAt) {
30
- this.cache.delete(key);
31
- return undefined;
32
- }
33
- return entry.data;
34
- }
35
- /**
36
- * Set a cached value
37
- */
38
- set(key, data, ttl) {
39
- this.cache.set(key, {
40
- data,
41
- expiresAt: Date.now() + ttl,
42
- });
43
- }
44
- /**
45
- * Generate cache key for a request
46
- */
47
- static key(method, path, params) {
48
- const paramStr = params ? JSON.stringify(params) : "";
49
- return `${method}:${path}:${paramStr}`;
50
- }
51
- /**
52
- * Invalidate cache entries matching a pattern
53
- */
54
- invalidate(pattern) {
55
- const regex = typeof pattern === "string" ? new RegExp(pattern) : pattern;
56
- for (const key of this.cache.keys()) {
57
- if (regex.test(key)) {
58
- this.cache.delete(key);
59
- }
60
- }
61
- }
62
- /**
63
- * Invalidate all cache entries for a resource type
64
- * Called after write operations
65
- */
66
- invalidateResourceType(resourceType) {
67
- this.invalidate(new RegExp(`:/${resourceType}`));
68
- }
69
- /**
70
- * Clear all cached entries
71
- */
72
- clear() {
73
- this.cache.clear();
74
- }
75
- /**
76
- * Clean up expired entries
77
- */
78
- cleanup() {
79
- const now = Date.now();
80
- for (const [key, entry] of this.cache.entries()) {
81
- if (now > entry.expiresAt) {
82
- this.cache.delete(key);
83
- }
84
- }
85
- }
86
- /**
87
- * Stop the cleanup interval (for graceful shutdown)
88
- */
89
- destroy() {
90
- if (this.cleanupInterval) {
91
- clearInterval(this.cleanupInterval);
92
- this.cleanupInterval = null;
93
- }
94
- this.cache.clear();
95
- }
96
- }
4
+ export { ResponseCache, CACHE_TTL } from "@frase/core";
97
5
  //# sourceMappingURL=cache.js.map
package/dist/cache.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"config-writer.d.ts","sourceRoot":"","sources":["../../src/cli/config-writer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,2CAA2C;AAC3C,UAAU,cAAc;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,cAAc,CAU/E;AAkBD;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAYzD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CA2D5F"}
1
+ {"version":3,"file":"config-writer.d.ts","sourceRoot":"","sources":["../../src/cli/config-writer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,2CAA2C;AAC3C,UAAU,cAAc;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,cAAc,CAU/E;AAuDD;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAYzD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAiE5F"}
@@ -21,19 +21,59 @@ export function buildFraseEntry(apiKey, apiUrl) {
21
21
  };
22
22
  }
23
23
  /**
24
- * Read a JSON config file, returning empty object if it doesn't exist.
25
- * Returns { data, malformed } malformed is true if the file exists but is not valid JSON.
24
+ * Strip single-line (//) and block (/* * /) comments from JSONC.
25
+ * Respects stringsdoes not strip inside "quoted values".
26
+ */
27
+ function stripJsonComments(text) {
28
+ let result = "";
29
+ let i = 0;
30
+ while (i < text.length) {
31
+ // Skip strings
32
+ if (text[i] === '"') {
33
+ let j = i + 1;
34
+ while (j < text.length && text[j] !== '"') {
35
+ if (text[j] === '\\')
36
+ j++; // skip escaped char
37
+ j++;
38
+ }
39
+ result += text.slice(i, j + 1);
40
+ i = j + 1;
41
+ // Block comment
42
+ }
43
+ else if (text[i] === '/' && text[i + 1] === '*') {
44
+ const end = text.indexOf('*/', i + 2);
45
+ i = end === -1 ? text.length : end + 2;
46
+ // Line comment
47
+ }
48
+ else if (text[i] === '/' && text[i + 1] === '/') {
49
+ const end = text.indexOf('\n', i + 2);
50
+ i = end === -1 ? text.length : end;
51
+ }
52
+ else {
53
+ result += text[i];
54
+ i++;
55
+ }
56
+ }
57
+ return result;
58
+ }
59
+ /**
60
+ * Read a JSON/JSONC config file, returning empty object if it doesn't exist.
61
+ * Returns { data, malformed, hasComments }:
62
+ * - malformed is true if the file exists but is not valid JSON/JSONC
63
+ * - hasComments is true if the file contained // or /* comments
26
64
  */
27
65
  function readJsonConfig(path) {
28
66
  if (!existsSync(path)) {
29
- return { data: {}, malformed: false };
67
+ return { data: {}, malformed: false, hasComments: false };
30
68
  }
31
69
  try {
32
70
  const content = readFileSync(path, "utf-8");
33
- return { data: JSON.parse(content), malformed: false };
71
+ const hasComments = /\/\/|\/\*/.test(content);
72
+ const stripped = hasComments ? stripJsonComments(content) : content;
73
+ return { data: JSON.parse(stripped), malformed: false, hasComments };
34
74
  }
35
75
  catch {
36
- return { data: {}, malformed: true };
76
+ return { data: {}, malformed: true, hasComments: false };
37
77
  }
38
78
  }
39
79
  /**
@@ -43,7 +83,7 @@ export function hasFraseEntry(tool) {
43
83
  if (!tool.configPath || !existsSync(tool.configPath)) {
44
84
  return false;
45
85
  }
46
- const { data } = readJsonConfig(tool.configPath);
86
+ const { data } = readJsonConfig(tool.configPath); // hasComments not needed for read-only check
47
87
  if (tool.id === "vscode") {
48
88
  const mcp = data.mcp;
49
89
  const servers = mcp?.servers;
@@ -72,7 +112,7 @@ export function writeFraseConfig(tool, apiKey, apiUrl) {
72
112
  throw new Error(`Cannot create directory: ${dir}. Check permissions.`);
73
113
  }
74
114
  // Read existing config
75
- const { data: config, malformed } = readJsonConfig(configPath);
115
+ const { data: config, malformed, hasComments } = readJsonConfig(configPath);
76
116
  if (malformed) {
77
117
  console.log(` Warning: ${configPath} contains invalid JSON.`);
78
118
  console.log(" A backup will be created before overwriting.");
@@ -114,6 +154,11 @@ export function writeFraseConfig(tool, apiKey, apiUrl) {
114
154
  }
115
155
  throw err;
116
156
  }
157
+ if (hasComments) {
158
+ const backupPath = configPath + ".backup";
159
+ console.log(` Warning: ${configPath} contained comments (// or /* */) which have been stripped.`);
160
+ console.log(` Your original file was backed up to: ${backupPath}`);
161
+ }
117
162
  return configPath;
118
163
  }
119
164
  //# sourceMappingURL=config-writer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-writer.js","sourceRoot":"","sources":["../../src/cli/config-writer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-writer.js","sourceRoot":"","sources":["../../src/cli/config-writer.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -1,17 +1,6 @@
1
1
  /**
2
- * Configuration for the Frase MCP Server
2
+ * Configuration re-exported from @frase/core
3
3
  */
4
- export interface Config {
5
- apiKey: string;
6
- apiUrl: string;
7
- debug: boolean;
8
- }
9
- /**
10
- * Load configuration from environment variables
11
- */
12
- export declare function loadConfig(): Config;
13
- /**
14
- * Log debug message if debug mode is enabled
15
- */
16
- export declare function debugLog(config: Config, ...args: unknown[]): void;
4
+ export { loadConfig, debugLog, getConfigPath } from "@frase/core";
5
+ export type { Config } from "@frase/core";
17
6
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;CAChB;AAOD;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAenC;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAIjE"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAClE,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC"}