@elliotding/ai-agent-mcp 0.1.26 → 0.1.27

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 (185) hide show
  1. package/dist/api/cached-client.d.ts +48 -0
  2. package/dist/api/cached-client.d.ts.map +1 -0
  3. package/dist/api/cached-client.js +126 -0
  4. package/dist/api/cached-client.js.map +1 -0
  5. package/dist/api/client.d.ts +281 -0
  6. package/dist/api/client.d.ts.map +1 -0
  7. package/dist/api/client.js +371 -0
  8. package/dist/api/client.js.map +1 -0
  9. package/dist/auth/index.d.ts +8 -0
  10. package/dist/auth/index.d.ts.map +1 -0
  11. package/dist/auth/index.js +26 -0
  12. package/dist/auth/index.js.map +1 -0
  13. package/dist/auth/middleware.d.ts +36 -0
  14. package/dist/auth/middleware.d.ts.map +1 -0
  15. package/dist/auth/middleware.js +194 -0
  16. package/dist/auth/middleware.js.map +1 -0
  17. package/dist/auth/permissions.d.ts +60 -0
  18. package/dist/auth/permissions.d.ts.map +1 -0
  19. package/dist/auth/permissions.js +262 -0
  20. package/dist/auth/permissions.js.map +1 -0
  21. package/dist/auth/token-validator.d.ts +52 -0
  22. package/dist/auth/token-validator.d.ts.map +1 -0
  23. package/dist/auth/token-validator.js +215 -0
  24. package/dist/auth/token-validator.js.map +1 -0
  25. package/dist/cache/cache-manager.d.ts +49 -0
  26. package/dist/cache/cache-manager.d.ts.map +1 -0
  27. package/dist/cache/cache-manager.js +191 -0
  28. package/dist/cache/cache-manager.js.map +1 -0
  29. package/dist/cache/index.d.ts +6 -0
  30. package/dist/cache/index.d.ts.map +1 -0
  31. package/dist/cache/index.js +12 -0
  32. package/dist/cache/index.js.map +1 -0
  33. package/dist/cache/redis-client.d.ts +45 -0
  34. package/dist/cache/redis-client.d.ts.map +1 -0
  35. package/dist/cache/redis-client.js +210 -0
  36. package/dist/cache/redis-client.js.map +1 -0
  37. package/dist/config/constants.d.ts +28 -0
  38. package/dist/config/constants.d.ts.map +1 -0
  39. package/dist/config/constants.js +31 -0
  40. package/dist/config/constants.js.map +1 -0
  41. package/dist/config/index.d.ts +71 -0
  42. package/dist/config/index.d.ts.map +1 -0
  43. package/dist/config/index.js +190 -0
  44. package/dist/config/index.js.map +1 -0
  45. package/dist/filesystem/manager.d.ts +45 -0
  46. package/dist/filesystem/manager.d.ts.map +1 -0
  47. package/dist/filesystem/manager.js +246 -0
  48. package/dist/filesystem/manager.js.map +1 -0
  49. package/dist/git/multi-source-manager.d.ts +78 -0
  50. package/dist/git/multi-source-manager.d.ts.map +1 -0
  51. package/dist/git/multi-source-manager.js +577 -0
  52. package/dist/git/multi-source-manager.js.map +1 -0
  53. package/dist/git/operations.d.ts +27 -0
  54. package/dist/git/operations.d.ts.map +1 -0
  55. package/dist/git/operations.js +83 -0
  56. package/dist/git/operations.js.map +1 -0
  57. package/dist/index.d.ts +6 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.js +122 -0
  60. package/dist/index.js.map +1 -0
  61. package/dist/monitoring/health.d.ts +35 -0
  62. package/dist/monitoring/health.d.ts.map +1 -0
  63. package/dist/monitoring/health.js +105 -0
  64. package/dist/monitoring/health.js.map +1 -0
  65. package/dist/prompts/cache.d.ts +69 -0
  66. package/dist/prompts/cache.d.ts.map +1 -0
  67. package/dist/prompts/cache.js +163 -0
  68. package/dist/prompts/cache.js.map +1 -0
  69. package/dist/prompts/generator.d.ts +49 -0
  70. package/dist/prompts/generator.d.ts.map +1 -0
  71. package/dist/prompts/generator.js +160 -0
  72. package/dist/prompts/generator.js.map +1 -0
  73. package/dist/prompts/index.d.ts +13 -0
  74. package/dist/prompts/index.d.ts.map +1 -0
  75. package/dist/prompts/index.js +24 -0
  76. package/dist/prompts/index.js.map +1 -0
  77. package/dist/prompts/manager.d.ts +207 -0
  78. package/dist/prompts/manager.d.ts.map +1 -0
  79. package/dist/prompts/manager.js +566 -0
  80. package/dist/prompts/manager.js.map +1 -0
  81. package/dist/resources/index.d.ts +6 -0
  82. package/dist/resources/index.d.ts.map +1 -0
  83. package/dist/resources/index.js +10 -0
  84. package/dist/resources/index.js.map +1 -0
  85. package/dist/resources/loader.d.ts +88 -0
  86. package/dist/resources/loader.d.ts.map +1 -0
  87. package/dist/resources/loader.js +492 -0
  88. package/dist/resources/loader.js.map +1 -0
  89. package/dist/server/http.d.ts +57 -0
  90. package/dist/server/http.d.ts.map +1 -0
  91. package/dist/server/http.js +435 -0
  92. package/dist/server/http.js.map +1 -0
  93. package/dist/server.d.ts +13 -0
  94. package/dist/server.d.ts.map +1 -0
  95. package/dist/server.js +201 -0
  96. package/dist/server.js.map +1 -0
  97. package/dist/session/manager.d.ts +91 -0
  98. package/dist/session/manager.d.ts.map +1 -0
  99. package/dist/session/manager.js +251 -0
  100. package/dist/session/manager.js.map +1 -0
  101. package/dist/telemetry/index.d.ts +3 -0
  102. package/dist/telemetry/index.d.ts.map +1 -0
  103. package/dist/telemetry/index.js +7 -0
  104. package/dist/telemetry/index.js.map +1 -0
  105. package/dist/telemetry/manager.d.ts +151 -0
  106. package/dist/telemetry/manager.d.ts.map +1 -0
  107. package/dist/telemetry/manager.js +367 -0
  108. package/dist/telemetry/manager.js.map +1 -0
  109. package/dist/tools/index.d.ts +13 -0
  110. package/dist/tools/index.d.ts.map +1 -0
  111. package/dist/tools/index.js +29 -0
  112. package/dist/tools/index.js.map +1 -0
  113. package/dist/tools/manage-subscription.d.ts +47 -0
  114. package/dist/tools/manage-subscription.d.ts.map +1 -0
  115. package/dist/tools/manage-subscription.js +317 -0
  116. package/dist/tools/manage-subscription.js.map +1 -0
  117. package/dist/tools/registry.d.ts +40 -0
  118. package/dist/tools/registry.d.ts.map +1 -0
  119. package/dist/tools/registry.js +85 -0
  120. package/dist/tools/registry.js.map +1 -0
  121. package/dist/tools/resolve-prompt-content.d.ts +35 -0
  122. package/dist/tools/resolve-prompt-content.d.ts.map +1 -0
  123. package/dist/tools/resolve-prompt-content.js +99 -0
  124. package/dist/tools/resolve-prompt-content.js.map +1 -0
  125. package/dist/tools/search-resources.d.ts +35 -0
  126. package/dist/tools/search-resources.d.ts.map +1 -0
  127. package/dist/tools/search-resources.js +159 -0
  128. package/dist/tools/search-resources.js.map +1 -0
  129. package/dist/tools/sync-resources.d.ts +54 -0
  130. package/dist/tools/sync-resources.d.ts.map +1 -0
  131. package/dist/tools/sync-resources.js +735 -0
  132. package/dist/tools/sync-resources.js.map +1 -0
  133. package/dist/tools/track-usage.d.ts +63 -0
  134. package/dist/tools/track-usage.d.ts.map +1 -0
  135. package/dist/tools/track-usage.js +90 -0
  136. package/dist/tools/track-usage.js.map +1 -0
  137. package/dist/tools/uninstall-resource.d.ts +30 -0
  138. package/dist/tools/uninstall-resource.d.ts.map +1 -0
  139. package/dist/tools/uninstall-resource.js +174 -0
  140. package/dist/tools/uninstall-resource.js.map +1 -0
  141. package/dist/tools/upload-resource.d.ts +81 -0
  142. package/dist/tools/upload-resource.d.ts.map +1 -0
  143. package/dist/tools/upload-resource.js +393 -0
  144. package/dist/tools/upload-resource.js.map +1 -0
  145. package/dist/transport/sse.d.ts +29 -0
  146. package/dist/transport/sse.d.ts.map +1 -0
  147. package/dist/transport/sse.js +271 -0
  148. package/dist/transport/sse.js.map +1 -0
  149. package/dist/types/errors.d.ts +60 -0
  150. package/dist/types/errors.d.ts.map +1 -0
  151. package/dist/types/errors.js +112 -0
  152. package/dist/types/errors.js.map +1 -0
  153. package/dist/types/index.d.ts +7 -0
  154. package/dist/types/index.d.ts.map +1 -0
  155. package/dist/types/index.js +23 -0
  156. package/dist/types/index.js.map +1 -0
  157. package/dist/types/mcp.d.ts +50 -0
  158. package/dist/types/mcp.d.ts.map +1 -0
  159. package/dist/types/mcp.js +6 -0
  160. package/dist/types/mcp.js.map +1 -0
  161. package/dist/types/resources.d.ts +109 -0
  162. package/dist/types/resources.d.ts.map +1 -0
  163. package/dist/types/resources.js +7 -0
  164. package/dist/types/resources.js.map +1 -0
  165. package/dist/types/tools.d.ts +253 -0
  166. package/dist/types/tools.d.ts.map +1 -0
  167. package/dist/types/tools.js +6 -0
  168. package/dist/types/tools.js.map +1 -0
  169. package/dist/utils/cursor-paths.d.ts +84 -0
  170. package/dist/utils/cursor-paths.d.ts.map +1 -0
  171. package/dist/utils/cursor-paths.js +166 -0
  172. package/dist/utils/cursor-paths.js.map +1 -0
  173. package/dist/utils/log-cleaner.d.ts +18 -0
  174. package/dist/utils/log-cleaner.d.ts.map +1 -0
  175. package/dist/utils/log-cleaner.js +112 -0
  176. package/dist/utils/log-cleaner.js.map +1 -0
  177. package/dist/utils/logger.d.ts +59 -0
  178. package/dist/utils/logger.d.ts.map +1 -0
  179. package/dist/utils/logger.js +292 -0
  180. package/dist/utils/logger.js.map +1 -0
  181. package/dist/utils/validation.d.ts +58 -0
  182. package/dist/utils/validation.d.ts.map +1 -0
  183. package/dist/utils/validation.js +214 -0
  184. package/dist/utils/validation.js.map +1 -0
  185. package/package.json +1 -1
@@ -0,0 +1,371 @@
1
+ "use strict";
2
+ /**
3
+ * REST API Client
4
+ * HTTP client for CSP Resource Server
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.apiClient = void 0;
41
+ const axios_1 = __importStar(require("axios"));
42
+ const config_1 = require("../config");
43
+ const logger_1 = require("../utils/logger");
44
+ const errors_1 = require("../types/errors");
45
+ class APIClient {
46
+ client;
47
+ maxRetries = 3;
48
+ retryDelay = 1000; // 1 second
49
+ constructor() {
50
+ this.client = axios_1.default.create({
51
+ baseURL: config_1.config.csp.apiBaseUrl,
52
+ timeout: config_1.config.csp.timeout,
53
+ headers: {
54
+ 'Content-Type': 'application/json',
55
+ 'User-Agent': `csp-ai-agent-mcp/0.2.0`,
56
+ },
57
+ });
58
+ // Request interceptor for authentication and logging.
59
+ // Every request MUST carry a per-request Authorization header supplied by
60
+ // the caller via authConfig(userToken). If none is present the request is
61
+ // rejected immediately — the token must come from the authenticated SSE
62
+ // connection, not from environment variables.
63
+ this.client.interceptors.request.use((requestConfig) => {
64
+ if (!requestConfig.headers.Authorization) {
65
+ return Promise.reject(new Error('Authorization token is missing. ' +
66
+ 'Ensure the MCP server is connected via SSE with a valid Bearer token in the Authorization header.'));
67
+ }
68
+ // Enhanced request logging
69
+ logger_1.logger.debug({
70
+ type: 'api_request_start',
71
+ method: requestConfig.method?.toUpperCase(),
72
+ url: requestConfig.url,
73
+ params: requestConfig.params,
74
+ data: requestConfig.data ? JSON.stringify(requestConfig.data).substring(0, 500) : undefined,
75
+ headers: this.sanitizeHeaders(requestConfig.headers),
76
+ }, `API Request: ${requestConfig.method?.toUpperCase()} ${requestConfig.url}`);
77
+ // Record start time for duration calculation
78
+ requestConfig.startTime = Date.now();
79
+ return requestConfig;
80
+ }, (error) => {
81
+ logger_1.logger.error({
82
+ type: 'api_request_interceptor_error',
83
+ error: error.message
84
+ }, 'API request interceptor error');
85
+ return Promise.reject(error);
86
+ });
87
+ // Response interceptor for detailed logging
88
+ this.client.interceptors.response.use((response) => {
89
+ const startTime = response.config.startTime || Date.now();
90
+ const duration = Date.now() - startTime;
91
+ const method = response.config.method?.toUpperCase() || 'UNKNOWN';
92
+ const url = response.config.url || 'unknown';
93
+ // Enhanced response logging
94
+ (0, logger_1.logApiRequest)(method, url, response.status, duration, response.config.data, response.data, response.headers);
95
+ return response;
96
+ }, (error) => {
97
+ const startTime = error.config?.startTime || Date.now();
98
+ const duration = Date.now() - startTime;
99
+ const statusCode = error.response?.status;
100
+ const method = error.config?.method?.toUpperCase() || 'UNKNOWN';
101
+ const url = error.config?.url || 'unknown';
102
+ // Enhanced error logging
103
+ (0, logger_1.logApiError)(method, url, error, error.config?.data, statusCode);
104
+ // Log response details if available
105
+ if (error.response) {
106
+ logger_1.logger.error({
107
+ type: 'api_response_error',
108
+ method,
109
+ url,
110
+ status: statusCode,
111
+ statusText: error.response.statusText,
112
+ responseData: error.response.data ? JSON.stringify(error.response.data).substring(0, 1000) : undefined,
113
+ duration,
114
+ }, `API Error Response: ${method} ${url} - ${statusCode}`);
115
+ }
116
+ return Promise.reject(error);
117
+ });
118
+ }
119
+ /**
120
+ * Build an AxiosRequestConfig that carries a per-request user token.
121
+ * Pass the result as the `config` argument to get/post/put/delete or merge it
122
+ * into any existing request config so that the caller's token overrides the
123
+ * server-level fallback set in the interceptor.
124
+ *
125
+ * Usage:
126
+ * await apiClient.get('/some/path', apiClient.authConfig(userToken));
127
+ * await apiClient.post('/some/path', body, apiClient.authConfig(userToken));
128
+ */
129
+ authConfig(token, extra) {
130
+ if (!token)
131
+ return extra ?? {};
132
+ return {
133
+ ...extra,
134
+ headers: {
135
+ ...(extra?.headers ?? {}),
136
+ Authorization: `Bearer ${token}`,
137
+ },
138
+ };
139
+ }
140
+ /**
141
+ * Sanitize headers to hide sensitive information
142
+ */
143
+ sanitizeHeaders(headers) {
144
+ const sanitized = { ...headers };
145
+ if (sanitized['Authorization'] || sanitized['authorization']) {
146
+ const key = sanitized['Authorization'] ? 'Authorization' : 'authorization';
147
+ const value = sanitized[key];
148
+ if (value && value.startsWith('Bearer ')) {
149
+ const token = value.substring(7);
150
+ sanitized[key] = `Bearer ${token.substring(0, 10)}...${token.substring(token.length - 10)}`;
151
+ }
152
+ }
153
+ return sanitized;
154
+ }
155
+ /**
156
+ * Execute request with retry logic
157
+ */
158
+ async executeWithRetry(requestFn, method, url, retryCount = 0) {
159
+ try {
160
+ return await requestFn();
161
+ }
162
+ catch (error) {
163
+ const isNetworkError = error instanceof axios_1.AxiosError &&
164
+ (!error.response || error.code === 'ECONNREFUSED' || error.code === 'ETIMEDOUT');
165
+ if (isNetworkError && retryCount < this.maxRetries) {
166
+ const delay = this.retryDelay * Math.pow(2, retryCount);
167
+ logger_1.logger.warn({
168
+ method,
169
+ url,
170
+ retryCount: retryCount + 1,
171
+ maxRetries: this.maxRetries,
172
+ delay,
173
+ }, `API request failed, retrying in ${delay}ms...`);
174
+ await new Promise((resolve) => setTimeout(resolve, delay));
175
+ return this.executeWithRetry(requestFn, method, url, retryCount + 1);
176
+ }
177
+ // Transform axios error to APIError
178
+ if (error instanceof axios_1.AxiosError) {
179
+ throw (0, errors_1.createAPIError)(method, url, error, error.response?.status, retryCount);
180
+ }
181
+ throw error;
182
+ }
183
+ }
184
+ /**
185
+ * GET request
186
+ */
187
+ async get(url, config) {
188
+ return this.executeWithRetry(async () => {
189
+ const response = await this.client.get(url, config);
190
+ return response.data;
191
+ }, 'GET', url);
192
+ }
193
+ /**
194
+ * POST request
195
+ */
196
+ async post(url, data, config) {
197
+ return this.executeWithRetry(async () => {
198
+ const response = await this.client.post(url, data, config);
199
+ return response.data;
200
+ }, 'POST', url);
201
+ }
202
+ /**
203
+ * PUT request
204
+ */
205
+ async put(url, data, config) {
206
+ return this.executeWithRetry(async () => {
207
+ const response = await this.client.put(url, data, config);
208
+ return response.data;
209
+ }, 'PUT', url);
210
+ }
211
+ /**
212
+ * DELETE request
213
+ */
214
+ async delete(url, config) {
215
+ return this.executeWithRetry(async () => {
216
+ const response = await this.client.delete(url, config);
217
+ return response.data;
218
+ }, 'DELETE', url);
219
+ }
220
+ //===========================================
221
+ // CSP Resource Server API Endpoints
222
+ //===========================================
223
+ /**
224
+ * Get subscription list
225
+ *
226
+ * @param params Query parameters for filtering subscriptions.
227
+ * @param userToken Per-request token from the caller's mcp.json configuration.
228
+ * When provided it overrides the server-level fallback token.
229
+ */
230
+ async getSubscriptions(params, userToken) {
231
+ const response = await this.get('/csp/api/resources/subscriptions', this.authConfig(userToken, { params }));
232
+ if (!response.data) {
233
+ throw new Error('Invalid API response: missing data field');
234
+ }
235
+ return response.data;
236
+ }
237
+ /**
238
+ * Subscribe to resource
239
+ *
240
+ * @param userToken Per-request token from the caller's mcp.json configuration.
241
+ */
242
+ async subscribe(resourceIds, autoSync = true, scope, userToken) {
243
+ const response = await this.post('/csp/api/resources/subscriptions/add', { resource_ids: resourceIds, auto_sync: autoSync, scope }, this.authConfig(userToken));
244
+ if (!response.data) {
245
+ throw new Error('Invalid API response: missing data field');
246
+ }
247
+ return { success: true, subscriptions: response.data.subscriptions };
248
+ }
249
+ /**
250
+ * Unsubscribe from resource
251
+ *
252
+ * @param userToken Per-request token from the caller's mcp.json configuration.
253
+ */
254
+ async unsubscribe(resourceIds, userToken) {
255
+ const ids = Array.isArray(resourceIds) ? resourceIds : [resourceIds];
256
+ const response = await this.delete('/csp/api/resources/subscriptions/remove', this.authConfig(userToken, { data: { resource_ids: ids } }));
257
+ if (!response.data) {
258
+ throw new Error('Invalid API response: missing data field');
259
+ }
260
+ }
261
+ /**
262
+ * Search resources
263
+ *
264
+ * @param userToken Per-request token from the caller's mcp.json configuration.
265
+ */
266
+ async searchResources(params, userToken) {
267
+ const response = await this.get('/csp/api/resources/search', this.authConfig(userToken, { params }));
268
+ if (!response.data) {
269
+ throw new Error('Invalid API response: missing data field');
270
+ }
271
+ return {
272
+ total: response.data.total,
273
+ page: response.data.page,
274
+ page_size: response.data.page_size,
275
+ results: response.data.results.map((r) => ({
276
+ ...r,
277
+ score: r.score || 0,
278
+ is_subscribed: r.is_subscribed || false,
279
+ })),
280
+ };
281
+ }
282
+ /**
283
+ * Download resource — returns all files for the resource.
284
+ *
285
+ * GET /csp/api/resources/download/{id}
286
+ * Response: { data: { resource_id, name, type, version, hash, files: [{path, content}] } }
287
+ *
288
+ * files[].path is the relative path within the resource directory.
289
+ * Single-file resources (command, rule) have exactly one element.
290
+ * Multi-file resources (skill, mcp) have all their files included.
291
+ *
292
+ * @param userToken Per-request token from the caller's mcp.json configuration.
293
+ */
294
+ async downloadResource(resourceId, userToken) {
295
+ const response = await this.get(`/csp/api/resources/download/${resourceId}`, this.authConfig(userToken));
296
+ return response.data;
297
+ }
298
+ /**
299
+ * Get resource detail
300
+ *
301
+ * @param userToken Per-request token from the caller's mcp.json configuration.
302
+ */
303
+ async getResourceDetail(resourceId, userToken) {
304
+ return this.get(`/csp/api/resources/${resourceId}`, this.authConfig(userToken));
305
+ }
306
+ /**
307
+ * Stage resource files for upload (Step 1 of two-step upload flow).
308
+ *
309
+ * POST /csp/api/resources/upload
310
+ * Body: { type, name, files: [{ path, content }] }
311
+ * Response: { upload_id, status, expires_at, preview_url }
312
+ *
313
+ * The server validates path traversal, total size (< 10 MB), and name conflicts.
314
+ * All file types are supported — mcp packages may include .py, .js, package.json, etc.
315
+ *
316
+ * @param userToken Per-request token from the caller's mcp.json configuration.
317
+ */
318
+ async uploadResourceFiles(params, userToken) {
319
+ const resp = await this.post('/csp/api/resources/upload', params, this.authConfig(userToken));
320
+ return resp.data;
321
+ }
322
+ /**
323
+ * Finalize staged upload — triggers Git commit (Step 2 of two-step upload flow).
324
+ *
325
+ * POST /csp/api/resources/finalize
326
+ * Body: { upload_id, commit_message }
327
+ * Response: { resource_id, version, url, commit_hash, download_url }
328
+ *
329
+ * @param userToken Per-request token from the caller's mcp.json configuration.
330
+ */
331
+ async finalizeResourceUpload(uploadId, commitMessage, userToken) {
332
+ const resp = await this.post('/csp/api/resources/finalize', { upload_id: uploadId, commit_message: commitMessage }, this.authConfig(userToken));
333
+ return resp.data;
334
+ }
335
+ /**
336
+ * Report AI resource usage telemetry to the server.
337
+ *
338
+ * POST /csp/api/resources/telemetry
339
+ * Body: { client_version, reported_at, events[], subscribed_rules[], configured_mcps[] }
340
+ *
341
+ * Called by TelemetryManager.flush() every ~10 seconds and on reconnect.
342
+ * Throws on non-2xx so the caller can apply retry logic.
343
+ *
344
+ * jira_id in each event entry is optional — it is only present when the user
345
+ * explicitly passed a Jira ID during the Prompt invocation.
346
+ *
347
+ * @param payload Telemetry report payload built by TelemetryManager
348
+ * @param userToken Per-request Bearer token from the caller's mcp.json configuration
349
+ */
350
+ async reportTelemetry(payload, userToken) {
351
+ await this.post('/csp/api/resources/telemetry', payload, this.authConfig(userToken));
352
+ }
353
+ /**
354
+ * @deprecated Use uploadResourceFiles() + finalizeResourceUpload() instead.
355
+ */
356
+ async uploadResource(params) {
357
+ return this.post('/csp/api/resources/upload', params);
358
+ }
359
+ /**
360
+ * @deprecated Use finalizeResourceUpload() instead.
361
+ */
362
+ async finalizeUpload(uploadId, hash) {
363
+ return this.post('/csp/api/resources/finalize', {
364
+ upload_id: uploadId,
365
+ hash,
366
+ });
367
+ }
368
+ }
369
+ // Export singleton instance
370
+ exports.apiClient = new APIClient();
371
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Authentication Module
3
+ * Exports all authentication and authorization utilities
4
+ */
5
+ export * from './token-validator';
6
+ export * from './permissions';
7
+ export * from './middleware';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,cAAc,mBAAmB,CAAC;AAGlC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ /**
3
+ * Authentication Module
4
+ * Exports all authentication and authorization utilities
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
18
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ // Token validation via CSP API (primary method)
22
+ __exportStar(require("./token-validator"), exports);
23
+ // Permissions and middleware
24
+ __exportStar(require("./permissions"), exports);
25
+ __exportStar(require("./middleware"), exports);
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;AAEH,gDAAgD;AAChD,oDAAkC;AAElC,6BAA6B;AAC7B,gDAA8B;AAC9B,+CAA6B"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Authentication and Permission Middlewares
3
+ * Token authentication and permission checking for HTTP endpoints
4
+ */
5
+ import { FastifyRequest, FastifyReply } from 'fastify';
6
+ import { TokenPayload } from './token-validator';
7
+ /**
8
+ * Extended request with user info
9
+ */
10
+ export interface AuthenticatedRequest extends FastifyRequest {
11
+ user?: TokenPayload;
12
+ }
13
+ /**
14
+ * Token Authentication Middleware
15
+ * Verifies token via external REST API
16
+ */
17
+ export declare function tokenAuthMiddleware(request: AuthenticatedRequest, reply: FastifyReply): Promise<void>;
18
+ /**
19
+ * Token Authentication Middleware with Legacy Bearer Token Support
20
+ * Supports both token validation via API and legacy bearer tokens
21
+ */
22
+ export declare function tokenAuthOrLegacyMiddleware(request: AuthenticatedRequest, reply: FastifyReply): Promise<void>;
23
+ /**
24
+ * Permission Check Middleware Factory
25
+ * Creates middleware to check permissions for a specific tool
26
+ */
27
+ export declare function requirePermission(toolName: string): (request: AuthenticatedRequest, reply: FastifyReply) => Promise<void>;
28
+ /**
29
+ * Permission Check for Tool Call
30
+ * Checks permission when tools/call is invoked
31
+ */
32
+ export declare function checkToolCallPermission(toolName: string, user: TokenPayload): {
33
+ allowed: boolean;
34
+ reason?: string;
35
+ };
36
+ //# sourceMappingURL=middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/auth/middleware.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,EAAe,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAI9D;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IAC1D,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,IAAI,CAAC,CAkEf;AAED;;;GAGG;AACH,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,IAAI,CAAC,CA+Df;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,IAClC,SAAS,oBAAoB,EAAE,OAAO,YAAY,KAAG,OAAO,CAAC,IAAI,CAAC,CA+DjF;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,YAAY,GACjB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAEvC"}
@@ -0,0 +1,194 @@
1
+ "use strict";
2
+ /**
3
+ * Authentication and Permission Middlewares
4
+ * Token authentication and permission checking for HTTP endpoints
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.tokenAuthMiddleware = tokenAuthMiddleware;
8
+ exports.tokenAuthOrLegacyMiddleware = tokenAuthOrLegacyMiddleware;
9
+ exports.requirePermission = requirePermission;
10
+ exports.checkToolCallPermission = checkToolCallPermission;
11
+ const token_validator_1 = require("./token-validator");
12
+ const permissions_1 = require("./permissions");
13
+ const logger_1 = require("../utils/logger");
14
+ /**
15
+ * Token Authentication Middleware
16
+ * Verifies token via external REST API
17
+ */
18
+ async function tokenAuthMiddleware(request, reply) {
19
+ try {
20
+ // Extract token from Authorization header
21
+ const authHeader = request.headers.authorization;
22
+ if (!authHeader || !authHeader.startsWith('Bearer ')) {
23
+ logger_1.logger.warn({
24
+ type: 'auth',
25
+ operation: 'middleware',
26
+ ip: request.ip,
27
+ url: request.url
28
+ }, 'Missing or invalid Authorization header');
29
+ reply.code(401).send({
30
+ error: 'Unauthorized',
31
+ message: 'Missing or invalid Authorization header. Expected: Bearer <token>',
32
+ });
33
+ return;
34
+ }
35
+ const token = authHeader.substring(7); // Remove 'Bearer ' prefix
36
+ // Verify token via external API
37
+ const payload = await (0, token_validator_1.verifyToken)(token);
38
+ if (!payload) {
39
+ logger_1.logger.warn({
40
+ type: 'auth',
41
+ operation: 'middleware',
42
+ ip: request.ip,
43
+ url: request.url
44
+ }, 'Token validation failed');
45
+ reply.code(401).send({
46
+ error: 'Unauthorized',
47
+ message: 'Invalid or expired token',
48
+ });
49
+ return;
50
+ }
51
+ // Attach user info to request
52
+ request.user = payload;
53
+ logger_1.logger.debug({
54
+ type: 'auth',
55
+ operation: 'middleware',
56
+ userId: payload.userId,
57
+ email: payload.email,
58
+ groups: payload.groups
59
+ }, `Token authentication successful for user ${payload.userId}`);
60
+ }
61
+ catch (error) {
62
+ logger_1.logger.error({
63
+ type: 'auth',
64
+ operation: 'middleware',
65
+ error: error instanceof Error ? error.message : 'Unknown error'
66
+ }, 'Token authentication error');
67
+ reply.code(500).send({
68
+ error: 'Internal Server Error',
69
+ message: 'Authentication failed',
70
+ });
71
+ }
72
+ }
73
+ /**
74
+ * Token Authentication Middleware with Legacy Bearer Token Support
75
+ * Supports both token validation via API and legacy bearer tokens
76
+ */
77
+ async function tokenAuthOrLegacyMiddleware(request, reply) {
78
+ try {
79
+ const authHeader = request.headers.authorization;
80
+ if (!authHeader || !authHeader.startsWith('Bearer ')) {
81
+ logger_1.logger.warn({
82
+ type: 'auth',
83
+ operation: 'middleware_legacy',
84
+ ip: request.ip,
85
+ url: request.url
86
+ }, 'Missing or invalid Authorization header');
87
+ reply.code(401).send({
88
+ error: 'Unauthorized',
89
+ message: 'Missing or invalid Authorization header',
90
+ });
91
+ return;
92
+ }
93
+ const token = authHeader.substring(7);
94
+ // Try to validate via API first
95
+ const payload = await (0, token_validator_1.verifyToken)(token);
96
+ if (payload) {
97
+ // API validation successful
98
+ request.user = payload;
99
+ logger_1.logger.debug({
100
+ type: 'auth',
101
+ operation: 'middleware_legacy',
102
+ userId: payload.userId,
103
+ email: payload.email,
104
+ groups: payload.groups
105
+ }, `Token validated via API for user ${payload.userId}`);
106
+ return;
107
+ }
108
+ // Fallback to legacy bearer token (for backward compatibility)
109
+ logger_1.logger.debug({
110
+ type: 'auth',
111
+ operation: 'middleware_legacy',
112
+ ip: request.ip
113
+ }, 'API validation failed, using legacy bearer token mode');
114
+ // In legacy mode, we don't have user info, so continue without setting request.user
115
+ // The endpoint will handle the legacy token separately
116
+ }
117
+ catch (error) {
118
+ logger_1.logger.error({
119
+ type: 'auth',
120
+ operation: 'middleware_legacy',
121
+ error: error instanceof Error ? error.message : 'Unknown error'
122
+ }, 'Token authentication error');
123
+ reply.code(500).send({
124
+ error: 'Internal Server Error',
125
+ message: 'Authentication failed',
126
+ });
127
+ }
128
+ }
129
+ /**
130
+ * Permission Check Middleware Factory
131
+ * Creates middleware to check permissions for a specific tool
132
+ */
133
+ function requirePermission(toolName) {
134
+ return async (request, reply) => {
135
+ try {
136
+ if (!request.user) {
137
+ logger_1.logger.error({
138
+ type: 'auth',
139
+ operation: 'permission_check',
140
+ url: request.url
141
+ }, 'Permission check called without authentication');
142
+ reply.code(401).send({
143
+ error: 'Unauthorized',
144
+ message: 'Authentication required',
145
+ });
146
+ return;
147
+ }
148
+ // Check permission
149
+ const permissionCheck = (0, permissions_1.checkPermission)(toolName, request.user.groups);
150
+ if (!permissionCheck.allowed) {
151
+ logger_1.logger.warn({
152
+ type: 'auth',
153
+ operation: 'permission_check',
154
+ userId: request.user.userId,
155
+ email: request.user.email,
156
+ groups: request.user.groups,
157
+ toolName,
158
+ reason: permissionCheck.reason,
159
+ }, `Permission denied for user ${request.user.userId} to access tool ${toolName}`);
160
+ reply.code(403).send({
161
+ error: 'Forbidden',
162
+ message: permissionCheck.reason || 'Insufficient permissions',
163
+ });
164
+ return;
165
+ }
166
+ logger_1.logger.debug({
167
+ type: 'auth',
168
+ operation: 'permission_check',
169
+ userId: request.user.userId,
170
+ toolName
171
+ }, `Permission granted for user ${request.user.userId} to access tool ${toolName}`);
172
+ }
173
+ catch (error) {
174
+ logger_1.logger.error({
175
+ type: 'auth',
176
+ operation: 'permission_check',
177
+ toolName,
178
+ error: error instanceof Error ? error.message : 'Unknown error'
179
+ }, 'Permission check error');
180
+ reply.code(500).send({
181
+ error: 'Internal Server Error',
182
+ message: 'Permission check failed',
183
+ });
184
+ }
185
+ };
186
+ }
187
+ /**
188
+ * Permission Check for Tool Call
189
+ * Checks permission when tools/call is invoked
190
+ */
191
+ function checkToolCallPermission(toolName, user) {
192
+ return (0, permissions_1.checkPermission)(toolName, user.groups);
193
+ }
194
+ //# sourceMappingURL=middleware.js.map