fa-mcp-sdk 0.2.146 → 0.2.174

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 (153) hide show
  1. package/README.md +1 -1
  2. package/bin/fa-mcp.js +66 -54
  3. package/cli-template/.env.example +2 -2
  4. package/cli-template/README.md +2 -2
  5. package/cli-template/fa-mcp-sdk-spec.md +122 -41
  6. package/cli-template/package.json +3 -3
  7. package/cli-template/r/TEST HTTP.xml +9 -0
  8. package/cli-template/{run/TEST SSE.run.xml → r/TEST SSE.xml } +2 -2
  9. package/cli-template/{run/TEST STDIO.run.xml → r/TEST STDIO.xml } +2 -2
  10. package/cli-template/r/generate-token.xml +14 -0
  11. package/cli-template/{run/kill-server.run.xml → r/kill-server.xml} +2 -2
  12. package/cli-template/{run/kill-token-gen-server.xml → r/remove-nul.xml} +4 -5
  13. package/{cli-template/config → config}/_local.yaml +28 -14
  14. package/{cli-template/config → config}/custom-environment-variables.yaml +3 -0
  15. package/{cli-template/config → config}/default.yaml +50 -10
  16. package/{cli-template/config → config}/development.yaml +4 -4
  17. package/config/local.yaml +81 -0
  18. package/{cli-template/config → config}/production.yaml +4 -4
  19. package/dist/core/_types_/active-directory-config.d.ts +3 -0
  20. package/dist/core/_types_/active-directory-config.d.ts.map +1 -1
  21. package/dist/core/_types_/config.d.ts +5 -1
  22. package/dist/core/_types_/config.d.ts.map +1 -1
  23. package/dist/core/_types_/types.d.ts +5 -1
  24. package/dist/core/_types_/types.d.ts.map +1 -1
  25. package/dist/core/ad/group-checker.d.ts +13 -0
  26. package/dist/core/ad/group-checker.d.ts.map +1 -0
  27. package/dist/core/ad/group-checker.js +86 -0
  28. package/dist/core/ad/group-checker.js.map +1 -0
  29. package/dist/core/auth/admin-auth.d.ts +16 -0
  30. package/dist/core/auth/admin-auth.d.ts.map +1 -0
  31. package/dist/core/auth/admin-auth.js +159 -0
  32. package/dist/core/auth/admin-auth.js.map +1 -0
  33. package/dist/core/auth/basic.d.ts +6 -0
  34. package/dist/core/auth/basic.d.ts.map +1 -0
  35. package/dist/core/auth/basic.js +26 -0
  36. package/dist/core/auth/basic.js.map +1 -0
  37. package/dist/core/auth/{jwt-validation.d.ts → jwt.d.ts} +4 -3
  38. package/dist/core/auth/jwt.d.ts.map +1 -0
  39. package/dist/core/auth/{jwt-validation.js → jwt.js} +9 -19
  40. package/dist/core/auth/jwt.js.map +1 -0
  41. package/dist/core/auth/middleware.d.ts.map +1 -1
  42. package/dist/core/auth/middleware.js +3 -3
  43. package/dist/core/auth/middleware.js.map +1 -1
  44. package/dist/core/auth/multi-auth.d.ts +14 -6
  45. package/dist/core/auth/multi-auth.d.ts.map +1 -1
  46. package/dist/core/auth/multi-auth.js +151 -141
  47. package/dist/core/auth/multi-auth.js.map +1 -1
  48. package/dist/core/auth/permanent.d.ts +6 -0
  49. package/dist/core/auth/permanent.d.ts.map +1 -0
  50. package/dist/core/auth/permanent.js +15 -0
  51. package/dist/core/auth/permanent.js.map +1 -0
  52. package/dist/core/auth/token-generator/ntlm/ntlm-domain-config.d.ts +1 -1
  53. package/dist/core/auth/token-generator/ntlm/ntlm-domain-config.d.ts.map +1 -1
  54. package/dist/core/auth/token-generator/ntlm/ntlm-domain-config.js +8 -10
  55. package/dist/core/auth/token-generator/ntlm/ntlm-domain-config.js.map +1 -1
  56. package/dist/core/auth/token-generator/ntlm/ntlm-integration.d.ts.map +1 -1
  57. package/dist/core/auth/token-generator/ntlm/ntlm-integration.js +9 -2
  58. package/dist/core/auth/token-generator/ntlm/ntlm-integration.js.map +1 -1
  59. package/dist/core/auth/token-generator/server.d.ts.map +1 -1
  60. package/dist/core/auth/token-generator/server.js +59 -25
  61. package/dist/core/auth/token-generator/server.js.map +1 -1
  62. package/dist/core/auth/types.d.ts +4 -3
  63. package/dist/core/auth/types.d.ts.map +1 -1
  64. package/dist/core/bootstrap/startup-info.d.ts.map +1 -1
  65. package/dist/core/bootstrap/startup-info.js +19 -0
  66. package/dist/core/bootstrap/startup-info.js.map +1 -1
  67. package/dist/core/consul/access-points-updater.js +1 -1
  68. package/dist/core/consul/access-points-updater.js.map +1 -1
  69. package/dist/core/consul/get-consul-api.d.ts +1 -1
  70. package/dist/core/consul/get-consul-api.d.ts.map +1 -1
  71. package/dist/core/consul/get-consul-api.js +1 -1
  72. package/dist/core/consul/get-consul-api.js.map +1 -1
  73. package/dist/core/consul/register.d.ts +1 -1
  74. package/dist/core/consul/register.d.ts.map +1 -1
  75. package/dist/core/index.d.ts +3 -1
  76. package/dist/core/index.d.ts.map +1 -1
  77. package/dist/core/index.js +3 -1
  78. package/dist/core/index.js.map +1 -1
  79. package/dist/core/init-mcp-server.d.ts.map +1 -1
  80. package/dist/core/init-mcp-server.js +1 -1
  81. package/dist/core/init-mcp-server.js.map +1 -1
  82. package/dist/core/utils/testing/McpSseClient.js.map +1 -1
  83. package/dist/core/web/admin-router.d.ts +10 -0
  84. package/dist/core/web/admin-router.d.ts.map +1 -0
  85. package/dist/core/web/admin-router.js +227 -0
  86. package/dist/core/web/admin-router.js.map +1 -0
  87. package/dist/core/web/favicon-svg.d.ts +1 -1
  88. package/dist/core/web/favicon-svg.d.ts.map +1 -1
  89. package/dist/core/web/favicon-svg.js +21 -3
  90. package/dist/core/web/favicon-svg.js.map +1 -1
  91. package/dist/core/web/home-api.d.ts +7 -0
  92. package/dist/core/web/home-api.d.ts.map +1 -0
  93. package/dist/core/web/home-api.js +93 -0
  94. package/dist/core/web/home-api.js.map +1 -0
  95. package/dist/core/web/server-http.d.ts +1 -0
  96. package/dist/core/web/server-http.d.ts.map +1 -1
  97. package/dist/core/web/server-http.js +60 -25
  98. package/dist/core/web/server-http.js.map +1 -1
  99. package/dist/core/web/static/home/index.html +206 -0
  100. package/dist/core/web/static/home/script.js +636 -0
  101. package/dist/core/web/{about-page/css.js → static/styles.css} +435 -105
  102. package/dist/core/web/static/token-gen/index.html +82 -0
  103. package/dist/core/web/static/token-gen/jwt-icon.svg +3 -0
  104. package/dist/core/web/static/token-gen/logout.svg +4 -0
  105. package/dist/core/web/static/token-gen/script.js +365 -0
  106. package/dist/core/web/static/token-gen/user.svg +4 -0
  107. package/dist/core/web/svg-icons.d.ts +7 -0
  108. package/dist/core/web/svg-icons.d.ts.map +1 -0
  109. package/dist/core/web/svg-icons.js +78 -0
  110. package/dist/core/web/svg-icons.js.map +1 -0
  111. package/package.json +7 -3
  112. package/scripts/copy-static.js +31 -0
  113. package/src/template/_examples/multi-auth-examples.ts +14 -47
  114. package/src/template/_types_/custom-config.ts +83 -0
  115. package/src/template/asset/logo.svg +4 -0
  116. package/src/template/start.ts +3 -3
  117. package/src/template/tools/handle-tool-call.ts +2 -1
  118. package/src/tests/mcp/test-http.js +10 -2
  119. package/src/tests/mcp/test-sse.js +10 -2
  120. package/src/tests/mcp/test-stdio.js +1 -2
  121. package/cli-template/run/TEST HTTP.run.xml +0 -5
  122. package/cli-template/run/TEST search.run.xml +0 -11
  123. package/cli-template/run/remove-nul.js.run.xml +0 -5
  124. package/dist/core/auth/jwt-validation.d.ts.map +0 -1
  125. package/dist/core/auth/jwt-validation.js.map +0 -1
  126. package/dist/core/auth/token-generator/html.d.ts +0 -9
  127. package/dist/core/auth/token-generator/html.d.ts.map +0 -1
  128. package/dist/core/auth/token-generator/html.js +0 -862
  129. package/dist/core/auth/token-generator/html.js.map +0 -1
  130. package/dist/core/web/about-page/css.d.ts +0 -2
  131. package/dist/core/web/about-page/css.d.ts.map +0 -1
  132. package/dist/core/web/about-page/css.js.map +0 -1
  133. package/dist/core/web/about-page/render.d.ts +0 -2
  134. package/dist/core/web/about-page/render.d.ts.map +0 -1
  135. package/dist/core/web/about-page/render.js +0 -773
  136. package/dist/core/web/about-page/render.js.map +0 -1
  137. /package/cli-template/{run/== START ==.run.xml → r/== START ==.xml} +0 -0
  138. /package/cli-template/{run/cb.run.xml → r/cb.xml} +0 -0
  139. /package/cli-template/{run/ci.run.xml → r/ci.xml} +0 -0
  140. /package/cli-template/{run/lint.run.xml → r/lint.xml} +0 -0
  141. /package/cli-template/{run/lint_fix.run.xml → r/lint_fix.xml} +0 -0
  142. /package/cli-template/{run/reinstall.run.xml → r/reinstall.xml} +0 -0
  143. /package/{cli-template/config → config}/test.yaml +0 -0
  144. /package/{src/template/asset/favicon.svg → dist/core/web/static/logo.svg} +0 -0
  145. /package/{cli-template/scripts → scripts}/kill-port.js +0 -0
  146. /package/{cli-template/scripts → scripts}/npm/patch_node_modules.js +0 -0
  147. /package/{cli-template/scripts → scripts}/npm/run.js +0 -0
  148. /package/{cli-template/scripts → scripts}/npm/yarn-ci.ps1 +0 -0
  149. /package/{cli-template/scripts → scripts}/npm/yarn-ci.sh +0 -0
  150. /package/{cli-template/scripts → scripts}/npm/yarn-reinstall.ps1 +0 -0
  151. /package/{cli-template/scripts → scripts}/npm/yarn-reinstall.sh +0 -0
  152. /package/{cli-template/scripts → scripts}/pre-commit +0 -0
  153. /package/{cli-template/scripts → scripts}/remove-nul.js +0 -0
@@ -8,7 +8,6 @@ import {
8
8
  createAuthMW,
9
9
  getMultiAuthError,
10
10
  checkMultiAuth,
11
- checkCombinedAuth,
12
11
  detectAuthConfiguration,
13
12
  logAuthConfiguration,
14
13
  McpServerData,
@@ -133,7 +132,6 @@ app.post('/api/test-token', async (req, res) => {
133
132
  return res.json({
134
133
  valid: result.success,
135
134
  authType: result.authType,
136
- tokenType: result.tokenType,
137
135
  error: result.error,
138
136
  username: result.username,
139
137
  hasPayload: !!result.payload,
@@ -220,13 +218,12 @@ const customAuthValidator: CustomAuthValidator = async (req): Promise<AuthResult
220
218
  return {
221
219
  success: true,
222
220
  authType: 'basic',
223
- tokenType: 'apiKey',
224
221
  username: userHeader,
225
222
  payload: {
226
223
  clientIP,
227
224
  apiKeyPrefix: apiKey.substring(0, 8) + '...',
228
- validatedAt: new Date().toISOString()
229
- }
225
+ validatedAt: new Date().toISOString(),
226
+ },
230
227
  };
231
228
  }
232
229
 
@@ -249,51 +246,26 @@ const customAuthValidator: CustomAuthValidator = async (req): Promise<AuthResult
249
246
  return {
250
247
  success: true,
251
248
  authType: 'basic',
252
- tokenType: 'custom',
253
249
  username: `guest-${clientIP}`,
254
250
  payload: {
255
251
  clientIP,
256
252
  userAgent,
257
253
  accessTime: new Date().toISOString(),
258
- businessHoursAccess: isWorkingHours
259
- }
254
+ businessHoursAccess: isWorkingHours,
255
+ },
260
256
  };
261
257
  } catch (error) {
262
258
  return {
263
259
  success: false,
264
- error: `Custom authentication error: ${error instanceof Error ? error.message : 'Unknown error'}`
260
+ error: `Custom authentication error: ${error instanceof Error ? error.message : 'Unknown error'}`,
265
261
  };
266
262
  }
267
263
  };
268
264
 
269
- // Демонстрация использования checkCombinedAuth напрямую
270
- app.post('/api/combined-auth-test', async (req, res) => {
271
- try {
272
- // checkCombinedAuth проверяет и стандартную auth + кастомный валидатор
273
- const result = await checkCombinedAuth(req);
274
-
275
- if (result.success) {
276
- res.json({
277
- message: 'Combined authentication successful',
278
- authType: result.authType,
279
- tokenType: result.tokenType,
280
- username: result.username,
281
- });
282
- } else {
283
- res.status(401).json({
284
- error: 'Combined authentication failed',
285
- reason: result.error,
286
- });
287
- }
288
- } catch {
289
- res.status(500).json({ error: 'Authentication system error' });
290
- }
291
- });
292
-
293
265
  // Пример middleware, который использует combined auth
294
266
  const combinedAuthMiddleware = async (req: any, res: any, next: any) => {
295
267
  try {
296
- const result = await checkCombinedAuth(req);
268
+ const result = await checkMultiAuth(req);
297
269
 
298
270
  if (!result.success) {
299
271
  return res.status(401).json({ error: result.error });
@@ -302,7 +274,6 @@ const combinedAuthMiddleware = async (req: any, res: any, next: any) => {
302
274
  // Добавляем информацию об аутентификации в request
303
275
  req.authInfo = {
304
276
  authType: result.authType,
305
- tokenType: result.tokenType,
306
277
  username: result.username,
307
278
  payload: result.payload,
308
279
  };
@@ -351,13 +322,12 @@ const mcpServerDataExample: McpServerData = {
351
322
  return {
352
323
  success: true,
353
324
  authType: 'basic',
354
- tokenType: 'specialToken',
355
325
  username: 'company-user',
356
326
  payload: {
357
327
  tokenType: 'company',
358
328
  issuedAt: new Date().toISOString(),
359
- level: 'company-wide'
360
- }
329
+ level: 'company-wide',
330
+ },
361
331
  };
362
332
  }
363
333
 
@@ -367,13 +337,12 @@ const mcpServerDataExample: McpServerData = {
367
337
  return {
368
338
  success: true,
369
339
  authType: 'basic',
370
- tokenType: 'clientCert',
371
340
  username: 'cert-user',
372
341
  payload: {
373
342
  certificateFingerprint: clientCert.substring(0, 32) + '...',
374
343
  validatedAt: new Date().toISOString(),
375
- level: 'certificate-based'
376
- }
344
+ level: 'certificate-based',
345
+ },
377
346
  };
378
347
  }
379
348
 
@@ -386,13 +355,12 @@ const mcpServerDataExample: McpServerData = {
386
355
  return {
387
356
  success: true,
388
357
  authType: 'basic',
389
- tokenType: 'externalToken',
390
358
  username: 'external-user',
391
359
  payload: {
392
360
  tokenPrefix: token.substring(0, 8) + '...',
393
361
  validatedAt: new Date().toISOString(),
394
- level: 'external-system'
395
- }
362
+ level: 'external-system',
363
+ },
396
364
  };
397
365
  }
398
366
  }
@@ -403,7 +371,7 @@ const mcpServerDataExample: McpServerData = {
403
371
  console.log('❌ Custom authentication error:', error);
404
372
  return {
405
373
  success: false,
406
- error: `Custom authentication error: ${error instanceof Error ? error.message : 'Unknown error'}`
374
+ error: `Custom authentication error: ${error instanceof Error ? error.message : 'Unknown error'}`,
407
375
  };
408
376
  }
409
377
  },
@@ -502,12 +470,11 @@ async function testCombinedAuth () {
502
470
 
503
471
  try {
504
472
  // @ts-ignore
505
- const result = await checkCombinedAuth(mockRequest);
473
+ const result = await checkMultiAuth(mockRequest);
506
474
 
507
475
  if (result.success) {
508
476
  console.log('✅ Combined authentication test: PASSED');
509
477
  console.log(` Auth Type: ${result.authType}`);
510
- console.log(` Token Type: ${result.tokenType}`);
511
478
  console.log(` Username: ${result.username || 'N/A'}`);
512
479
  } else {
513
480
  console.log('❌ Combined authentication test: FAILED');
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Пример расширения конфигурации fa-mcp-sdk кастомным блоком настроек.
3
+ *
4
+ * Этот файл демонстрирует, как добавить собственные настройки
5
+ * (например, для проверки членства пользователя в AD-группе).
6
+ */
7
+
8
+ import { AppConfig } from '../../core/index.js';
9
+
10
+ /**
11
+ * Настройки проверки членства в AD-группе
12
+ */
13
+ export interface IGroupAccessConfig {
14
+ groupAccess: {
15
+ /** AD-группа, членство в которой требуется для доступа */
16
+ requiredGroup: string;
17
+
18
+ /** Опционально: разрешить доступ без проверки группы (для отладки) */
19
+ bypassGroupCheck?: boolean;
20
+
21
+ /** Опционально: кэшировать результат проверки (секунды) */
22
+ cacheTtlSeconds?: number;
23
+
24
+ /** Опционально: список групп с разными уровнями доступа */
25
+ accessLevels?: {
26
+ /** Группа для полного доступа (read/write) */
27
+ fullAccess?: string;
28
+ /** Группа только для чтения */
29
+ readOnly?: string;
30
+ /** Группа администраторов */
31
+ admin?: string;
32
+ };
33
+ };
34
+ }
35
+
36
+ /**
37
+ * Расширенный конфиг приложения с настройками проверки групп
38
+ */
39
+ export interface CustomAppConfig extends AppConfig, IGroupAccessConfig {}
40
+
41
+ // ========================================================================
42
+ // ПРИМЕР YAML-КОНФИГУРАЦИИ (config/default.yaml)
43
+ // ========================================================================
44
+ /*
45
+ groupAccess:
46
+ requiredGroup: "DOMAIN\\MCP-Users"
47
+ bypassGroupCheck: false
48
+ cacheTtlSeconds: 300
49
+ accessLevels:
50
+ fullAccess: "DOMAIN\\MCP-FullAccess"
51
+ readOnly: "DOMAIN\\MCP-ReadOnly"
52
+ admin: "DOMAIN\\MCP-Admins"
53
+ */
54
+
55
+ // ========================================================================
56
+ // ПРИМЕР ИСПОЛЬЗОВАНИЯ В КОДЕ
57
+ // ========================================================================
58
+ /*
59
+ import { appConfig } from '../core/index.js';
60
+
61
+ // Типизированный доступ к кастомным настройкам
62
+ const config = appConfig as CustomAppConfig;
63
+
64
+ const requiredGroup = config.groupAccess.requiredGroup;
65
+ const shouldBypass = config.groupAccess.bypassGroupCheck;
66
+
67
+ // Проверка уровня доступа из payload
68
+ function getUserAccessLevel(payload: { user: string; groups?: string[] }): 'admin' | 'full' | 'readonly' | 'none' {
69
+ const { accessLevels } = config.groupAccess;
70
+ const userGroups = payload.groups || [];
71
+
72
+ if (accessLevels?.admin && userGroups.includes(accessLevels.admin)) {
73
+ return 'admin';
74
+ }
75
+ if (accessLevels?.fullAccess && userGroups.includes(accessLevels.fullAccess)) {
76
+ return 'full';
77
+ }
78
+ if (accessLevels?.readOnly && userGroups.includes(accessLevels.readOnly)) {
79
+ return 'readonly';
80
+ }
81
+ return 'none';
82
+ }
83
+ */
@@ -0,0 +1,4 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
2
+ <path fill="currentColor"
3
+ d="m 17.622437,19.155864 v -2.611959 h 2.251659 v 2.611959 H 22.468 v 2.251688 h -2.593904 v 2.581936 h -2.251659 v -2.581936 h -2.632933 v -2.251688 z m -5.686183,2.592444 v 2.251688 H 1.4 V 0 H 22.404961 V 15.011256 H 20.153302 V 2.251689 H 3.6516577 V 21.748308 H 11.937755 Z M 7.4959862,7.535651 V 6.034525 h 8.9705968 v 1.501126 z m 0.02402,4.552914 v -1.501126 h 8.9180578 v 1.501126 z m 0.02252,4.420814 v -1.501125 h 5.9278628 v 1.501125 z" />
4
+ </svg>
@@ -16,8 +16,8 @@ const isConsulProd = (process.env.NODE_CONSUL_ENV || process.env.NODE_ENV) === '
16
16
  * Main function that assembles all project data and starts the MCP server
17
17
  */
18
18
  const startProject = async (): Promise<void> => {
19
- // Read favicon from assets
20
- const favicon = getAsset('favicon.svg')!;
19
+ // Read logo from assets
20
+ const logoSvg = getAsset('logo.svg')!;
21
21
 
22
22
  // Assemble all data to pass to the core
23
23
  const serverData: McpServerData = {
@@ -45,7 +45,7 @@ const startProject = async (): Promise<void> => {
45
45
 
46
46
  // Assets
47
47
  assets: {
48
- favicon,
48
+ logoSvg: logoSvg,
49
49
  maintainerHtml: '<a href="https://support.com/page/2805" target="_blank" rel="noopener" class="clickable">Support</a>',
50
50
  },
51
51
  // Function to get Consul UI address (if consul enabled: consul.service.enable = true)
@@ -21,8 +21,9 @@ export const handleToolCall = async (params: { name: string, arguments?: any }):
21
21
  default:
22
22
  throw new ToolExecutionError(name, `Unknown tool: ${name}`);
23
23
  }
24
- } catch (error) {
24
+ } catch (error: Error | any) {
25
25
  logger.error(`Tool execution failed for ${name}:`, error);
26
+ error.printed = true;
26
27
  throw error;
27
28
  }
28
29
  };
@@ -5,7 +5,7 @@
5
5
  * Uses McpHttpClient (simple POST requests)
6
6
  */
7
7
 
8
- import { appConfig, McpHttpClient } from '../../../dist/core/index.js';
8
+ import { appConfig, McpHttpClient, getAuthHeadersForTests } from '../../../dist/core/index.js';
9
9
  import TEMPLATE_TESTS from './test-cases.js';
10
10
 
11
11
  const baseUrl = (process.env.TEST_MCP_SERVER_URL || `http://localhost:${appConfig.webServer.port}`).replace(/\/+$/,'');
@@ -37,7 +37,15 @@ async function main () {
37
37
  console.log('🧪 HTTP tests for template MCP server');
38
38
  console.log('='.repeat(60));
39
39
 
40
- const client = new McpHttpClient(baseUrl);
40
+ // Get authentication headers based on config
41
+ const headers = getAuthHeadersForTests();
42
+ if (Object.keys(headers).length) {
43
+ console.log(' Authentication enabled');
44
+ } else if (appConfig.webServer?.auth?.enabled) {
45
+ console.log('⚠️ Warning: Auth is enabled but no valid credentials found');
46
+ }
47
+
48
+ const client = new McpHttpClient(baseUrl, { headers });
41
49
  try {
42
50
  await client.initialize({
43
51
  protocolVersion: '2024-11-05',
@@ -5,7 +5,7 @@
5
5
  * Uses McpSseClient to send requests via HTTP and receive responses via SSE
6
6
  */
7
7
 
8
- import { appConfig, McpSseClient } from '../../../dist/core/index.js';
8
+ import { appConfig, McpSseClient, getAuthHeadersForTests } from '../../../dist/core/index.js';
9
9
  import TEMPLATE_TESTS from './test-cases.js';
10
10
 
11
11
  const baseUrl = (process.env.TEST_MCP_SERVER_URL || `http://localhost:${appConfig.webServer.port}`).replace(/\/+$/,'');
@@ -37,7 +37,15 @@ async function main () {
37
37
  console.log('🧪 SSE tests for template MCP server');
38
38
  console.log('='.repeat(60));
39
39
 
40
- const client = new McpSseClient(baseUrl);
40
+ // Get authentication headers based on config
41
+ const headers = getAuthHeadersForTests();
42
+ if (Object.keys(headers).length) {
43
+ console.log(' Authentication enabled');
44
+ } else if (appConfig.webServer?.auth?.enabled) {
45
+ console.log('⚠️ Warning: Auth is enabled but no valid credentials found');
46
+ }
47
+
48
+ const client = new McpSseClient(baseUrl, headers);
41
49
  try {
42
50
  // Health check (optional)
43
51
  await client.health().catch(() => undefined);
@@ -13,9 +13,8 @@ import { McpStdioClient } from '../../../dist/core/index.js';
13
13
 
14
14
  const __filename = fileURLToPath(import.meta.url);
15
15
  const __dirname = dirname(__filename);
16
- const projectRoot = join(__dirname, '../../../');
17
16
 
18
- const serverPath = join(projectRoot, 'dist/template/start.js');
17
+ const serverPath = join(__dirname, '../../../dist/template/start.js');
19
18
 
20
19
  async function runTestGroup (title, tests, client) {
21
20
  console.log(`\n${title}:`);
@@ -1,5 +0,0 @@
1
- <component name="ProjectRunConfigurationManager">
2
- <configuration default="false" name="TEST HTTP" type="NodeJSConfigurationType" path-to-js-file="src/tests/mcp/test-http.js" working-dir="$PROJECT_DIR$/">
3
- <method v="2" />
4
- </configuration>
5
- </component>
@@ -1,11 +0,0 @@
1
- <component name="ProjectRunConfigurationManager">
2
- <configuration default="false" name="TEST search" type="JavaScriptTestRunnerJest">
3
- <node-interpreter value="project" />
4
- <jest-package value="$PROJECT_DIR$/node_modules/jest" />
5
- <working-dir value="$PROJECT_DIR$" />
6
- <envs />
7
- <scope-kind value="TEST_FILE" />
8
- <test-file value="$PROJECT_DIR$/tests/tools/search.test.ts" />
9
- <method v="2" />
10
- </configuration>
11
- </component>
@@ -1,5 +0,0 @@
1
- <component name="ProjectRunConfigurationManager">
2
- <configuration default="false" name="remove-nul.js" type="NodeJSConfigurationType" nameIsGenerated="true" path-to-js-file="cli-template/scripts/remove-nul.js" working-dir="$PROJECT_DIR$">
3
- <method v="2" />
4
- </configuration>
5
- </component>
@@ -1 +0,0 @@
1
- {"version":3,"file":"jwt-validation.d.ts","sourceRoot":"","sources":["../../../src/core/auth/jwt-validation.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAiB,MAAM,YAAY,CAAC;AAmB9D,eAAO,MAAM,OAAO,QAAmC,CAAC;AAExD;;GAEG;AACH,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,KAAG,MAStC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,OAAO,GAAI,cAAc,MAAM,WAW3C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,EAAE,aAAa,MAAM,EAAE,UAAU,GAAG,KAAG,MAYhF,CAAC;AAGF;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GAAI,KAAK;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,KAAG,iBA2EH,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"jwt-validation.js","sourceRoot":"","sources":["../../../src/core/auth/jwt-validation.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- interface AuthStatus {
2
- isAuthenticated: boolean;
3
- username: string;
4
- domain: string;
5
- ntlmEnabled: boolean;
6
- }
7
- export declare const getHTMLPage: (authStatus?: AuthStatus) => string;
8
- export {};
9
- //# sourceMappingURL=html.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../../../src/core/auth/token-generator/html.ts"],"names":[],"mappings":"AAIA,UAAU,UAAU;IAClB,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,eAAO,MAAM,WAAW,GAAI,aAAa,UAAU,KAAG,MAy1BrD,CAAC"}