fa-mcp-sdk 0.2.121 → 0.2.131

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 (120) hide show
  1. package/bin/fa-mcp.js +44 -12
  2. package/cli-template/config/_local.yaml +40 -2
  3. package/cli-template/config/custom-environment-variables.yaml +5 -1
  4. package/cli-template/config/default.yaml +35 -5
  5. package/cli-template/fa-mcp-sdk-spec.md +620 -30
  6. package/cli-template/package.json +72 -73
  7. package/dist/core/_types_/TNtlm.d.ts +5 -0
  8. package/dist/core/_types_/TNtlm.d.ts.map +1 -0
  9. package/dist/core/_types_/TNtlm.js +2 -0
  10. package/dist/core/_types_/TNtlm.js.map +1 -0
  11. package/dist/core/_types_/config.d.ts +75 -0
  12. package/dist/core/_types_/config.d.ts.map +1 -0
  13. package/dist/core/_types_/config.js +2 -0
  14. package/dist/core/_types_/config.js.map +1 -0
  15. package/dist/core/_types_/types.d.ts +14 -9
  16. package/dist/core/_types_/types.d.ts.map +1 -1
  17. package/dist/core/{token/token-core.d.ts → auth/jwt-validation.d.ts} +2 -2
  18. package/dist/core/auth/jwt-validation.d.ts.map +1 -0
  19. package/dist/core/{token/token-core.js → auth/jwt-validation.js} +4 -4
  20. package/dist/core/auth/jwt-validation.js.map +1 -0
  21. package/dist/core/auth/middleware.d.ts +19 -0
  22. package/dist/core/auth/middleware.d.ts.map +1 -0
  23. package/dist/core/{token/token-auth.js → auth/middleware.js} +52 -55
  24. package/dist/core/auth/middleware.js.map +1 -0
  25. package/dist/core/auth/multi-auth.d.ts +23 -0
  26. package/dist/core/auth/multi-auth.d.ts.map +1 -0
  27. package/dist/core/auth/multi-auth.js +213 -0
  28. package/dist/core/auth/multi-auth.js.map +1 -0
  29. package/dist/core/auth/token-generator/html.d.ts.map +1 -0
  30. package/dist/core/{token/gen-token-app → auth/token-generator}/html.js +2 -2
  31. package/dist/core/auth/token-generator/html.js.map +1 -0
  32. package/dist/core/auth/token-generator/ntlm-auth-options.d.ts.map +1 -0
  33. package/dist/core/{token/gen-token-app → auth/token-generator}/ntlm-auth-options.js +1 -1
  34. package/dist/core/auth/token-generator/ntlm-auth-options.js.map +1 -0
  35. package/dist/core/auth/token-generator/ntlm-domain-config.d.ts.map +1 -0
  36. package/dist/core/auth/token-generator/ntlm-domain-config.js.map +1 -0
  37. package/dist/core/auth/token-generator/ntlm-integration.d.ts.map +1 -0
  38. package/dist/core/{token/gen-token-app → auth/token-generator}/ntlm-integration.js +4 -4
  39. package/dist/core/auth/token-generator/ntlm-integration.js.map +1 -0
  40. package/dist/core/auth/token-generator/ntlm-session-storage.d.ts.map +1 -0
  41. package/dist/core/{token/gen-token-app → auth/token-generator}/ntlm-session-storage.js +1 -1
  42. package/dist/core/auth/token-generator/ntlm-session-storage.js.map +1 -0
  43. package/dist/core/auth/token-generator/ntlm-templates.d.ts.map +1 -0
  44. package/dist/core/auth/token-generator/ntlm-templates.js.map +1 -0
  45. package/dist/core/{token/gen-token-app/gen-token-server.d.ts → auth/token-generator/server.d.ts} +1 -1
  46. package/dist/core/auth/token-generator/server.d.ts.map +1 -0
  47. package/dist/core/{token/gen-token-app/gen-token-server.js → auth/token-generator/server.js} +3 -3
  48. package/dist/core/auth/token-generator/server.js.map +1 -0
  49. package/dist/core/auth/types.d.ts +29 -0
  50. package/dist/core/auth/types.d.ts.map +1 -0
  51. package/dist/core/auth/types.js +5 -0
  52. package/dist/core/auth/types.js.map +1 -0
  53. package/dist/core/bootstrap/init-config.d.ts.map +1 -1
  54. package/dist/core/bootstrap/init-config.js +4 -0
  55. package/dist/core/bootstrap/init-config.js.map +1 -1
  56. package/dist/core/cache/cache.d.ts.map +1 -1
  57. package/dist/core/cache/cache.js +3 -2
  58. package/dist/core/cache/cache.js.map +1 -1
  59. package/dist/core/index.d.ts +6 -4
  60. package/dist/core/index.d.ts.map +1 -1
  61. package/dist/core/index.js +6 -3
  62. package/dist/core/index.js.map +1 -1
  63. package/dist/core/utils/utils.d.ts +6 -0
  64. package/dist/core/utils/utils.d.ts.map +1 -1
  65. package/dist/core/utils/utils.js +25 -0
  66. package/dist/core/utils/utils.js.map +1 -1
  67. package/dist/core/web/server-http.d.ts.map +1 -1
  68. package/dist/core/web/server-http.js +32 -18
  69. package/dist/core/web/server-http.js.map +1 -1
  70. package/package.json +2 -2
  71. package/cli-template/src/_types_/common.d.ts +0 -27
  72. package/cli-template/src/api/router.ts +0 -35
  73. package/cli-template/src/api/swagger.ts +0 -167
  74. package/cli-template/src/asset/favicon.svg +0 -3
  75. package/cli-template/src/custom-resources.ts +0 -11
  76. package/cli-template/src/prompts/agent-brief.ts +0 -8
  77. package/cli-template/src/prompts/agent-prompt.ts +0 -10
  78. package/cli-template/src/prompts/custom-prompts.ts +0 -12
  79. package/cli-template/src/start.ts +0 -71
  80. package/cli-template/src/tools/handle-tool-call.ts +0 -55
  81. package/cli-template/src/tools/tools.ts +0 -88
  82. package/cli-template/tests/jest-simple-reporter.js +0 -10
  83. package/cli-template/tests/mcp/sse/mcp-sse-client-handling.md +0 -111
  84. package/cli-template/tests/mcp/sse/test-sse-npm-package.js +0 -96
  85. package/cli-template/tests/mcp/test-cases.js +0 -143
  86. package/cli-template/tests/mcp/test-http.js +0 -63
  87. package/cli-template/tests/mcp/test-sse.js +0 -67
  88. package/cli-template/tests/mcp/test-stdio.js +0 -78
  89. package/cli-template/tests/utils.ts +0 -154
  90. package/dist/core/token/gen-token-app/gen-token-server.d.ts.map +0 -1
  91. package/dist/core/token/gen-token-app/gen-token-server.js.map +0 -1
  92. package/dist/core/token/gen-token-app/html.d.ts.map +0 -1
  93. package/dist/core/token/gen-token-app/html.js.map +0 -1
  94. package/dist/core/token/gen-token-app/ntlm-auth-options.d.ts.map +0 -1
  95. package/dist/core/token/gen-token-app/ntlm-auth-options.js.map +0 -1
  96. package/dist/core/token/gen-token-app/ntlm-domain-config.d.ts.map +0 -1
  97. package/dist/core/token/gen-token-app/ntlm-domain-config.js.map +0 -1
  98. package/dist/core/token/gen-token-app/ntlm-integration.d.ts.map +0 -1
  99. package/dist/core/token/gen-token-app/ntlm-integration.js.map +0 -1
  100. package/dist/core/token/gen-token-app/ntlm-session-storage.d.ts.map +0 -1
  101. package/dist/core/token/gen-token-app/ntlm-session-storage.js.map +0 -1
  102. package/dist/core/token/gen-token-app/ntlm-templates.d.ts.map +0 -1
  103. package/dist/core/token/gen-token-app/ntlm-templates.js.map +0 -1
  104. package/dist/core/token/i-token.d.ts +0 -13
  105. package/dist/core/token/i-token.d.ts.map +0 -1
  106. package/dist/core/token/i-token.js +0 -2
  107. package/dist/core/token/i-token.js.map +0 -1
  108. package/dist/core/token/token-auth.d.ts +0 -17
  109. package/dist/core/token/token-auth.d.ts.map +0 -1
  110. package/dist/core/token/token-auth.js.map +0 -1
  111. package/dist/core/token/token-core.d.ts.map +0 -1
  112. package/dist/core/token/token-core.js.map +0 -1
  113. /package/dist/core/{token/gen-token-app → auth/token-generator}/html.d.ts +0 -0
  114. /package/dist/core/{token/gen-token-app → auth/token-generator}/ntlm-auth-options.d.ts +0 -0
  115. /package/dist/core/{token/gen-token-app → auth/token-generator}/ntlm-domain-config.d.ts +0 -0
  116. /package/dist/core/{token/gen-token-app → auth/token-generator}/ntlm-domain-config.js +0 -0
  117. /package/dist/core/{token/gen-token-app → auth/token-generator}/ntlm-integration.d.ts +0 -0
  118. /package/dist/core/{token/gen-token-app → auth/token-generator}/ntlm-session-storage.d.ts +0 -0
  119. /package/dist/core/{token/gen-token-app → auth/token-generator}/ntlm-templates.d.ts +0 -0
  120. /package/dist/core/{token/gen-token-app → auth/token-generator}/ntlm-templates.js +0 -0
@@ -1,73 +1,72 @@
1
- {
2
- "name": "{{project.name}}",
3
- "productName": "{{project.productName}}",
4
- "version": "0.0.1",
5
- "description": "{{project.description}}",
6
- "type": "module",
7
- "main": "dist/src/start.js",
8
- "engines": {
9
- "node": ">=20.0.0"
10
- },
11
- "scripts": {
12
- "start": "node dist/src/start.js",
13
- "build": "tsc",
14
- "clean": "rimraf dist",
15
- "cb": "npm run clean && npm run build",
16
- "ci": "node --no-deprecation ./scripts/npm/run.js",
17
- "reinstall": "node --no-deprecation ./scripts/npm/run.js reinstall",
18
- "typecheck": "tsc --noEmit",
19
- "lint": "eslint .",
20
- "lint:fix": "eslint --fix .",
21
- "generate-token": "node node_modules/fa-mcp-sdk/dist/core/token/gen-token-app/gen-token-server.js",
22
- "dead:exports": "ts-prune",
23
- "dead:files": "knip",
24
- "postinstall": "node scripts/npm/patch_node_modules.js",
25
- "consul:unreg": "node node_modules/fa-mcp-sdk/dist/core/consul/deregister.js",
26
- "test": "jest",
27
- "test:mcp": "node scripts/test-mcp-tools.js",
28
- "test:mcp-http": "node tests/mcp/test-http.js",
29
- "test:mcp-sse": "node tests/mcp/test-sse.js",
30
- "test:mcp-stdio": "node tests/mcp/test-stdio.js"
31
- },
32
- "keywords": [
33
- "mcp",
34
- "model-context-protocol",
35
- "typescript",
36
- "template",
37
- "ai",
38
- "prompts",
39
- "tools",
40
- "resources"
41
- ],
42
- "author": {
43
- "name": "{{author.name}}",
44
- "email": "{{author.email}}"
45
- },
46
- "license": "MIT",
47
- "dependencies": {
48
- "@modelcontextprotocol/sdk": "^1.22.0",
49
- "dotenv": "^17.2.3",
50
- "fa-mcp-sdk": "^0.2.108",
51
- "swagger-jsdoc": "^6.2.8",
52
- "swagger-ui-express": "^5.0.1"
53
- },
54
- "devDependencies": {
55
- "@types/express": "^5.0.5",
56
- "@types/jest": "^30.0.0",
57
- "@types/node": "^24.10.1",
58
- "@types/swagger-jsdoc": "^6.0.4",
59
- "@types/swagger-ui-express": "^4.1.8",
60
- "cross-env": "^10.1.0",
61
- "eslint-config-at-25": "^25.9.6",
62
- "jest": "^30.2.0",
63
- "rimraf": "^6.1.0",
64
- "ts-jest": "^29.4.5",
65
- "tsx": "^4.20.6",
66
- "typescript": "^5.9.3"
67
- },
68
- "repository": {
69
- "type": "git",
70
- "url": "git+https://{{git-base-url}}/{{project.name}}.git"
71
- },
72
- "private": true
73
- }
1
+ {
2
+ "name": "project.name",
3
+ "productName": "{{project.productName}}",
4
+ "version": "0.0.3",
5
+ "description": "{{project.description}}",
6
+ "type": "module",
7
+ "main": "dist/src/start.js",
8
+ "engines": {
9
+ "node": ">=20.0.0"
10
+ },
11
+ "scripts": {
12
+ "start": "node dist/src/start.js",
13
+ "build": "tsc",
14
+ "clean": "rimraf dist",
15
+ "cb": "npm run clean && npm run build",
16
+ "ci": "node --no-deprecation ./scripts/npm/run.js",
17
+ "reinstall": "node --no-deprecation ./scripts/npm/run.js reinstall",
18
+ "typecheck": "tsc --noEmit",
19
+ "lint": "eslint .",
20
+ "lint:fix": "eslint --fix .",
21
+ "generate-token": "node node_modules/fa-mcp-sdk/dist/core/auth/token-generator/server.js",
22
+ "dead:exports": "ts-prune",
23
+ "dead:files": "knip",
24
+ "postinstall": "node scripts/npm/patch_node_modules.js",
25
+ "consul:unreg": "node node_modules/fa-mcp-sdk/dist/core/consul/deregister.js",
26
+ "test": "jest",
27
+ "test:mcp": "node scripts/test-mcp-tools.js",
28
+ "test:mcp-http": "node tests/mcp/test-http.js",
29
+ "test:mcp-sse": "node tests/mcp/test-sse.js",
30
+ "test:mcp-stdio": "node tests/mcp/test-stdio.js"
31
+ },
32
+ "keywords": [
33
+ "mcp",
34
+ "model-context-protocol",
35
+ "typescript",
36
+ "template",
37
+ "ai",
38
+ "prompts",
39
+ "tools",
40
+ "resources"
41
+ ],
42
+ "author": {
43
+ "name": "{{author.name}}",
44
+ "email": "{{author.email}}"
45
+ },
46
+ "license": "MIT",
47
+ "dependencies": {
48
+ "@modelcontextprotocol/sdk": "^1.24.3",
49
+ "dotenv": "^17.2.3",
50
+ "fa-mcp-sdk": "^0.2.125",
51
+ "swagger-jsdoc": "^6.2.8",
52
+ "swagger-ui-express": "^5.0.1"
53
+ },
54
+ "devDependencies": {
55
+ "@types/express": "^5.0.6",
56
+ "@types/jest": "^30.0.0",
57
+ "@types/node": "^24.10.1",
58
+ "@types/swagger-jsdoc": "^6.0.4",
59
+ "@types/swagger-ui-express": "^4.1.8",
60
+ "cross-env": "^10.1.0",
61
+ "eslint-config-at-25": "^25.9.6",
62
+ "jest": "^30.2.0",
63
+ "rimraf": "^6.1.0",
64
+ "ts-jest": "^29.4.5",
65
+ "tsx": "^4.20.6",
66
+ "typescript": "^5.9.3"
67
+ },
68
+ "repository": {
69
+ "type": "git",
70
+ "url": "git+https://{{git-base-url}}/{{project.name}}.git"
71
+ }
72
+ }
@@ -0,0 +1,5 @@
1
+ import { IUserData } from 'ya-express-ntlm';
2
+ export type TNtlm = Partial<IUserData> & {
3
+ uri?: string;
4
+ };
5
+ //# sourceMappingURL=TNtlm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TNtlm.d.ts","sourceRoot":"","sources":["../../../src/core/_types_/TNtlm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=TNtlm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TNtlm.js","sourceRoot":"","sources":["../../../src/core/_types_/TNtlm.ts"],"names":[],"mappings":""}
@@ -0,0 +1,75 @@
1
+ import { TFileLogLevel } from 'af-logger-ts';
2
+ import { IAFDatabasesConfig } from 'af-db-ts';
3
+ import { IAFConsulConfig, IAccessPoints } from 'af-consul-ts';
4
+ import { IADConfig } from './active-directory-config.js';
5
+ interface IWebServerConfig {
6
+ webServer: {
7
+ host: string;
8
+ port: number;
9
+ originHosts: string[];
10
+ auth: {
11
+ enabled: boolean;
12
+ basic?: {
13
+ username: string;
14
+ password: string;
15
+ };
16
+ jwtToken: {
17
+ encryptKey: string;
18
+ checkMCPName: boolean;
19
+ };
20
+ permanentServerTokens: string[];
21
+ };
22
+ };
23
+ }
24
+ interface ILoggerConfig {
25
+ logger: {
26
+ level: TFileLogLevel;
27
+ useFileLogger: boolean;
28
+ dir?: string;
29
+ };
30
+ }
31
+ interface IMCPConfig {
32
+ mcp: {
33
+ rateLimit: {
34
+ maxRequests: number;
35
+ windowMs: number;
36
+ };
37
+ toolAnswerAs: 'text' | 'structuredContent';
38
+ transportType: 'stdio' | 'http';
39
+ };
40
+ }
41
+ interface ISwaggerConfig {
42
+ swagger: {
43
+ servers?: {
44
+ url: string;
45
+ description: string;
46
+ }[];
47
+ };
48
+ }
49
+ interface ICacheConfig {
50
+ cache: {
51
+ ttlSeconds: 300;
52
+ maxItems: 1000;
53
+ };
54
+ }
55
+ export interface AppConfig extends IADConfig, ICacheConfig, ILoggerConfig, IAFDatabasesConfig, IWebServerConfig, IMCPConfig, ISwaggerConfig {
56
+ isMainDBUsed: boolean;
57
+ name: string;
58
+ shortName: string;
59
+ repo: string;
60
+ version: string;
61
+ productName: string;
62
+ description: string;
63
+ accessPoints: IAccessPoints;
64
+ consul: IAFConsulConfig & {
65
+ envCode: {
66
+ prod: string;
67
+ dev: string;
68
+ };
69
+ };
70
+ uiColor: {
71
+ primary: string;
72
+ };
73
+ }
74
+ export {};
75
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/core/_types_/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAGzD,UAAU,gBAAgB;IACxB,SAAS,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,IAAI,EAAE;YACJ,OAAO,EAAE,OAAO,CAAC;YACjB,KAAK,CAAC,EAAE;gBACN,QAAQ,EAAE,MAAM,CAAC;gBACjB,QAAQ,EAAE,MAAM,CAAC;aAClB,CAAC;YACF,QAAQ,EAAE;gBACR,UAAU,EAAE,MAAM,CAAC;gBACnB,YAAY,EAAE,OAAO,CAAC;aACvB,CAAA;YACD,qBAAqB,EAAE,MAAM,EAAE,CAAC;SACjC,CAAC;KACH,CAAA;CACF;AAGD,UAAU,aAAa;IACrB,MAAM,EAAE;QACN,KAAK,EAAE,aAAa,CAAC;QACrB,aAAa,EAAE,OAAO,CAAC;QACvB,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAA;CACF;AAED,UAAU,UAAU;IAClB,GAAG,EAAE;QACH,SAAS,EAAE;YACT,WAAW,EAAE,MAAM,CAAC;YACpB,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC;QACF,YAAY,EAAE,MAAM,GAAG,mBAAmB,CAAA;QAC1C,aAAa,EAAE,OAAO,GAAG,MAAM,CAAC;KACjC,CAAA;CACF;AAED,UAAU,cAAc;IACtB,OAAO,EAAE;QACP,OAAO,CAAC,EAAE;YACR,GAAG,EAAE,MAAM,CAAC;YACZ,WAAW,EAAE,MAAM,CAAC;SACrB,EAAE,CAAC;KACL,CAAA;CACF;AAED,UAAU,YAAY;IACpB,KAAK,EAAE;QACL,UAAU,EAAE,GAAG,CAAC;QAChB,QAAQ,EAAE,IAAI,CAAC;KAChB,CAAA;CACF;AAED,MAAM,WAAW,SAAU,SAAQ,SAAS,EAC1C,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,UAAU,EACV,cAAc;IAEd,YAAY,EAAE,OAAO,CAAC;IAEtB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IAEpB,YAAY,EAAE,aAAa,CAAC;IAC5B,MAAM,EAAE,eAAe,GAAG;QACxB,OAAO,EAAE;YACP,IAAI,EAAE,MAAM,CAAC;YACb,GAAG,EAAE,MAAM,CAAC;SACb,CAAC;KACH,CAAC;IACF,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;KACjB,CAAA;CACF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/core/_types_/config.ts"],"names":[],"mappings":""}
@@ -1,5 +1,6 @@
1
1
  import { Tool } from '@modelcontextprotocol/sdk/types.js';
2
2
  import { Router } from 'express';
3
+ import { AuthResult } from '../auth/types.js';
3
4
  export interface IPromptData {
4
5
  name: string;
5
6
  description: string;
@@ -13,22 +14,18 @@ export interface IRequiredHttpHeader {
13
14
  isOptional?: boolean;
14
15
  }
15
16
  export interface IResourceInfo {
16
- uri: string;
17
- name: string;
18
- description: string;
19
- mimeType: string;
20
- }
21
- export type TResourceContentFunction = (uri: string) => string | Promise<string>;
22
- export type IResourceContent = string | object | TResourceContentFunction;
23
- export interface IResourceData {
24
17
  uri: string;
25
18
  name: string;
26
19
  title?: string;
27
20
  description: string;
28
21
  mimeType: string;
29
- content: IResourceContent;
30
22
  requireAuth?: boolean;
31
23
  }
24
+ export interface IResourceData extends IResourceInfo {
25
+ content: IResourceContent;
26
+ }
27
+ export type TResourceContentFunction = (uri: string) => string | Promise<string>;
28
+ export type IResourceContent = string | object | TResourceContentFunction;
32
29
  export interface IResource {
33
30
  contents: [
34
31
  {
@@ -43,6 +40,12 @@ export interface ISwaggerData {
43
40
  swaggerSpecs: any;
44
41
  swaggerUi: any;
45
42
  }
43
+ /**
44
+ * Custom Authentication validation function
45
+ * @param req - Express request object containing all authentication information
46
+ * @returns Promise<AuthResult> or AuthResult with detailed authentication result
47
+ */
48
+ export type CustomAuthValidator = (req: any) => Promise<AuthResult> | AuthResult;
46
49
  /**
47
50
  * All data that needs to be passed to initialize the MCP server
48
51
  */
@@ -51,12 +54,14 @@ export interface McpServerData {
51
54
  toolHandler: (params: {
52
55
  name: string;
53
56
  arguments?: any;
57
+ headers?: Record<string, string>;
54
58
  }) => Promise<any>;
55
59
  agentBrief: string;
56
60
  agentPrompt: string;
57
61
  customPrompts?: IPromptData[];
58
62
  requiredHttpHeaders?: IRequiredHttpHeader[] | null;
59
63
  customResources?: IResourceData[] | null;
64
+ customAuthValidator?: CustomAuthValidator;
60
65
  httpComponents?: {
61
66
  apiRouter?: Router | null;
62
67
  endpointsOn404?: IEndpointsOn404;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/_types_/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,EAAE,CAAC;IACd,OAAO,EAAE,cAAc,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,wBAAwB,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AACjF,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,wBAAwB,CAAC;AAE1E,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE;QACR;YACE,GAAG,EAAE,MAAM,CAAC;YACZ,QAAQ,EAAE,MAAM,CAAC;YACjB,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;SACvB;KACF,CAAC;CACH;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAA;AAE/D,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,GAAG,CAAC;IAClB,SAAS,EAAE,GAAG,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAE5B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,WAAW,EAAE,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,GAAG,CAAA;KAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IAGzE,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;IAG9B,mBAAmB,CAAC,EAAE,mBAAmB,EAAE,GAAG,IAAI,CAAC;IACnD,eAAe,CAAC,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IAEzC,cAAc,CAAC,EAAE;QACf,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,cAAc,CAAC,EAAE,eAAe,CAAC;QACjC,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;KAC/B,CAAC;IAEF,MAAM,CAAC,EAAE;QACP,OAAO,CAAC,EAAE,MAAM,CAAC;QAEjB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;IAGF,kBAAkB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;CACpD;AAGD,MAAM,WAAW,iBAAiB;IAChC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,MAAM,EAAE,aAAa,GAAG,iBAAiB,CAAC;IAC1C,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAED,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,EAAE,iBAAiB,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAC7F,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,sBAAsB,CAAC;AAE7D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE;QACN,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,CAAC,CAAC,EAAE,MAAM,GAAG;QACX,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAChC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/_types_/types.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { ICheckTokenResult } from './i-token.js';
1
+ import { ICheckTokenResult } from './types.js';
2
2
  export declare const tokenRE: RegExp;
3
3
  /**
4
4
  * Encrypts the transmitted text with a symmetric key taken from the config
@@ -25,4 +25,4 @@ export declare const checkToken: (arg: {
25
25
  expectedUser?: string;
26
26
  expectedService?: string;
27
27
  }) => ICheckTokenResult;
28
- //# sourceMappingURL=token-core.d.ts.map
28
+ //# sourceMappingURL=jwt-validation.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -5,13 +5,13 @@ import { logger as lgr } from '../logger.js';
5
5
  import { isObject, trim } from '../utils/utils.js';
6
6
  import chalk from 'chalk';
7
7
  const logger = lgr.getSubLogger({ name: chalk.cyan('token-auth') });
8
- const pt = appConfig.webServer?.auth?.permanentServerTokens || [];
8
+ const { jwtToken, permanentServerTokens: pt = [] } = appConfig.webServer?.auth || {};
9
+ const checkMCPName = jwtToken?.checkMCPName || false;
9
10
  const permanentServerTokensSet = new Set(Array.isArray(pt) ? pt : [pt]);
10
- const checkMCPName = appConfig.webServer?.auth?.token?.checkMCPName || false;
11
11
  const ALGORITHM = 'aes-256-ctr';
12
12
  const KEY = crypto
13
13
  .createHash('sha256')
14
- .update(String(appConfig.webServer?.auth?.token?.encryptKey || 'secret'))
14
+ .update(String(jwtToken?.encryptKey || 'secret'))
15
15
  .digest('base64')
16
16
  .substring(0, 32);
17
17
  export const tokenRE = /^(\d{13,})\.([\da-fA-F]{32,})$/;
@@ -138,4 +138,4 @@ export const checkToken = (arg) => {
138
138
  // OK!
139
139
  return { inTokenType: 'JWT', payload };
140
140
  };
141
- //# sourceMappingURL=token-core.js.map
141
+ //# sourceMappingURL=jwt-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt-validation.js","sourceRoot":"","sources":["../../../src/core/auth/jwt-validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { NextFunction, Request, Response } from 'express';
2
+ /**
3
+ * Programmatic authentication checking - for manual auth validation in code
4
+ * Returns error object if authentication failed, undefined if successful
5
+ */
6
+ export declare const getMultiAuthError: (req: Request) => Promise<{
7
+ code: number;
8
+ message: string;
9
+ } | undefined>;
10
+ interface AuthMiddlewareOptions {
11
+ mcpPaths?: string[];
12
+ logConfig?: boolean;
13
+ }
14
+ /**
15
+ * Universal authentication middleware - handles all authentication scenarios
16
+ */
17
+ export declare function createAuthMW(options?: AuthMiddlewareOptions): (req: Request, res: Response, next: NextFunction) => Promise<void | Response<any, Record<string, any>>>;
18
+ export {};
19
+ //# sourceMappingURL=middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../src/core/auth/middleware.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAqG1D;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAU,KAAK,OAAO,KAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAc3G,CAAC;AAMF,UAAU,qBAAqB;IAC7B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAE,OAAO,GAAE,qBAA0B,IAMjD,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,wDAkC9D"}
@@ -1,13 +1,10 @@
1
1
  import { cyan, lBlue, magenta, red, reset } from 'af-color';
2
- import { checkToken } from './token-core.js';
3
2
  import { debugTokenAuth } from '../debug.js';
4
3
  import { appConfig } from '../bootstrap/init-config.js';
5
4
  import { getResourcesList } from '../mcp/resources.js';
6
5
  import { getPromptsList } from '../mcp/prompts.js';
7
- const { enabled } = appConfig.webServer.auth;
8
- const getTokenFromHttpHeader = (req) => {
9
- return (req.headers.authorization || '').replace(/^Bearer */, '');
10
- };
6
+ import { checkCombinedAuth, logAuthConfiguration, } from './multi-auth.js';
7
+ const { enabled: authEnabled } = appConfig.webServer.auth;
11
8
  const SHOW_HEADERS_SET = new Set(['user', 'authorization', 'x-real-ip', 'x-mode', 'host']);
12
9
  const debugAuth = (req, code, message) => {
13
10
  if (debugTokenAuth.enabled) {
@@ -24,33 +21,7 @@ const debugAuth = (req, code, message) => {
24
21
  }
25
22
  return { code, message };
26
23
  };
27
- /**
28
- * Checks token authorization.
29
- * If everything is OK, it will return undefined.
30
- * Otherwise, it will return the object with an error
31
- */
32
- export const getAuthByTokenError = (req) => {
33
- if (!enabled) {
34
- return undefined;
35
- }
36
- const token = getTokenFromHttpHeader(req);
37
- if (!token) {
38
- return debugAuth(req, 400, 'Missing authorization header');
39
- }
40
- const checkResult = checkToken({ token });
41
- if (checkResult.errorReason) {
42
- return debugAuth(req, 401, checkResult.errorReason);
43
- }
44
- return undefined;
45
- };
46
- export const authByToken = (req, res) => {
47
- const authError = getAuthByTokenError(req);
48
- if (authError) {
49
- res.status(authError.code).send(authError.message);
50
- return false;
51
- }
52
- return true;
53
- };
24
+ // Legacy functions removed - use createAuthMW() instead
54
25
  /**
55
26
  * Check if a resource URI is public (doesn't require authentication)
56
27
  */
@@ -102,34 +73,60 @@ const isPublicMcpRequest = (req) => {
102
73
  return false;
103
74
  }
104
75
  };
76
+ // Legacy middleware functions removed - use createAuthMW() instead
105
77
  /**
106
- * Create conditional auth middleware that checks for public MCP requests
78
+ * Programmatic authentication checking - for manual auth validation in code
79
+ * Returns error object if authentication failed, undefined if successful
107
80
  */
108
- export const createConditionalAuthMiddleware = () => {
109
- return (req, res, next) => {
110
- // Check if this is an MCP request (HTTP or SSE) that should be public
111
- const isMcpRequest = req.path === '/mcp' || req.path === '/messages' || req.path === '/sse';
81
+ export const getMultiAuthError = async (req) => {
82
+ if (!authEnabled) {
83
+ return undefined;
84
+ }
85
+ const authResult = await checkCombinedAuth(req);
86
+ if (!authResult.success) {
87
+ return debugAuth(req, 401, authResult.error || 'Authentication failed');
88
+ }
89
+ // Add authentication information to request for use in application
90
+ req.authInfo = { ...authResult };
91
+ return undefined;
92
+ };
93
+ /**
94
+ * Universal authentication middleware - handles all authentication scenarios
95
+ */
96
+ export function createAuthMW(options = {}) {
97
+ const { mcpPaths = ['/mcp', '/messages', '/sse'], logConfig = process.env.LOG_AUTH_CONFIG === 'true', } = options;
98
+ return async (req, res, next) => {
99
+ // Log configuration on first request
100
+ if (logConfig && !createAuthMW._logged) {
101
+ logAuthConfiguration();
102
+ createAuthMW._logged = true;
103
+ }
104
+ // Check if this is a public MCP request on any of the configured paths
105
+ const isMcpRequest = mcpPaths.includes(req.path);
112
106
  if (isMcpRequest && isPublicMcpRequest(req)) {
113
107
  return next();
114
108
  }
115
- const authError = getAuthByTokenError(req);
116
- if (authError) {
117
- res.status(authError.code).send(authError.message);
109
+ // Skip authentication if disabled
110
+ if (!authEnabled) {
111
+ return next();
112
+ }
113
+ try {
114
+ // Use enhanced combined authentication (standard + custom validator)
115
+ const authResult = await checkCombinedAuth(req);
116
+ if (!authResult.success) {
117
+ const errorDetails = debugAuth(req, 401, authResult.error || 'Authentication failed');
118
+ return res.status(errorDetails.code).send(errorDetails.message);
119
+ }
120
+ // Add authentication information to request for use in application
121
+ req.authInfo = authResult;
122
+ return next();
123
+ }
124
+ catch {
125
+ res.status(500).send('Authentication error');
118
126
  return;
119
127
  }
120
- next();
121
128
  };
122
- };
123
- export const authTokenMW = (req, res, next) => {
124
- // Check if this is a public MCP request
125
- if (req.path === '/mcp' && isPublicMcpRequest(req)) {
126
- return next();
127
- }
128
- const authError = getAuthByTokenError(req);
129
- if (authError) {
130
- res.status(authError.code).send(authError.message);
131
- return;
132
- }
133
- next();
134
- };
135
- //# sourceMappingURL=token-auth.js.map
129
+ }
130
+ // Static property for logging tracking
131
+ createAuthMW._logged = false;
132
+ //# sourceMappingURL=middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../src/core/auth/middleware.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Multi-authentication system core
3
+ */
4
+ import { Request } from 'express';
5
+ import { AuthDetectionResult, AuthResult } from './types.js';
6
+ export declare const getTokenFromHttpHeader: (req: Request) => string;
7
+ /**
8
+ * Detects configured authentication types in priority order (ascending CPU load)
9
+ */
10
+ export declare function detectAuthConfiguration(): AuthDetectionResult;
11
+ /**
12
+ * Checks auth using all configured authentication methods in ascending CPU load order
13
+ */
14
+ export declare function checkMultiAuth(req: Request): Promise<AuthResult>;
15
+ /**
16
+ * Enhanced authentication check that combines configured auth methods with custom validator
17
+ */
18
+ export declare function checkCombinedAuth(req: Request): Promise<AuthResult>;
19
+ /**
20
+ * Logs authentication configuration (for debugging)
21
+ */
22
+ export declare function logAuthConfiguration(): void;
23
+ //# sourceMappingURL=multi-auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-auth.d.ts","sourceRoot":"","sources":["../../../src/core/auth/multi-auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAY,MAAM,YAAY,CAAC;AAwBvE,eAAO,MAAM,sBAAsB,GAAI,KAAK,OAAO,KAAG,MAErD,CAAC;AAWF;;GAEG;AACH,wBAAgB,uBAAuB,IAAK,mBAAmB,CAqC9D;AAmCD;;GAEG;AACH,wBAAsB,cAAc,CAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CA6CvE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAwD1E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAK,IAAI,CAa5C"}