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.
- package/bin/fa-mcp.js +44 -12
- package/cli-template/config/_local.yaml +40 -2
- package/cli-template/config/custom-environment-variables.yaml +5 -1
- package/cli-template/config/default.yaml +35 -5
- package/cli-template/fa-mcp-sdk-spec.md +620 -30
- package/cli-template/package.json +72 -73
- package/dist/core/_types_/TNtlm.d.ts +5 -0
- package/dist/core/_types_/TNtlm.d.ts.map +1 -0
- package/dist/core/_types_/TNtlm.js +2 -0
- package/dist/core/_types_/TNtlm.js.map +1 -0
- package/dist/core/_types_/config.d.ts +75 -0
- package/dist/core/_types_/config.d.ts.map +1 -0
- package/dist/core/_types_/config.js +2 -0
- package/dist/core/_types_/config.js.map +1 -0
- package/dist/core/_types_/types.d.ts +14 -9
- package/dist/core/_types_/types.d.ts.map +1 -1
- package/dist/core/{token/token-core.d.ts → auth/jwt-validation.d.ts} +2 -2
- package/dist/core/auth/jwt-validation.d.ts.map +1 -0
- package/dist/core/{token/token-core.js → auth/jwt-validation.js} +4 -4
- package/dist/core/auth/jwt-validation.js.map +1 -0
- package/dist/core/auth/middleware.d.ts +19 -0
- package/dist/core/auth/middleware.d.ts.map +1 -0
- package/dist/core/{token/token-auth.js → auth/middleware.js} +52 -55
- package/dist/core/auth/middleware.js.map +1 -0
- package/dist/core/auth/multi-auth.d.ts +23 -0
- package/dist/core/auth/multi-auth.d.ts.map +1 -0
- package/dist/core/auth/multi-auth.js +213 -0
- package/dist/core/auth/multi-auth.js.map +1 -0
- package/dist/core/auth/token-generator/html.d.ts.map +1 -0
- package/dist/core/{token/gen-token-app → auth/token-generator}/html.js +2 -2
- package/dist/core/auth/token-generator/html.js.map +1 -0
- package/dist/core/auth/token-generator/ntlm-auth-options.d.ts.map +1 -0
- package/dist/core/{token/gen-token-app → auth/token-generator}/ntlm-auth-options.js +1 -1
- package/dist/core/auth/token-generator/ntlm-auth-options.js.map +1 -0
- package/dist/core/auth/token-generator/ntlm-domain-config.d.ts.map +1 -0
- package/dist/core/auth/token-generator/ntlm-domain-config.js.map +1 -0
- package/dist/core/auth/token-generator/ntlm-integration.d.ts.map +1 -0
- package/dist/core/{token/gen-token-app → auth/token-generator}/ntlm-integration.js +4 -4
- package/dist/core/auth/token-generator/ntlm-integration.js.map +1 -0
- package/dist/core/auth/token-generator/ntlm-session-storage.d.ts.map +1 -0
- package/dist/core/{token/gen-token-app → auth/token-generator}/ntlm-session-storage.js +1 -1
- package/dist/core/auth/token-generator/ntlm-session-storage.js.map +1 -0
- package/dist/core/auth/token-generator/ntlm-templates.d.ts.map +1 -0
- package/dist/core/auth/token-generator/ntlm-templates.js.map +1 -0
- package/dist/core/{token/gen-token-app/gen-token-server.d.ts → auth/token-generator/server.d.ts} +1 -1
- package/dist/core/auth/token-generator/server.d.ts.map +1 -0
- package/dist/core/{token/gen-token-app/gen-token-server.js → auth/token-generator/server.js} +3 -3
- package/dist/core/auth/token-generator/server.js.map +1 -0
- package/dist/core/auth/types.d.ts +29 -0
- package/dist/core/auth/types.d.ts.map +1 -0
- package/dist/core/auth/types.js +5 -0
- package/dist/core/auth/types.js.map +1 -0
- package/dist/core/bootstrap/init-config.d.ts.map +1 -1
- package/dist/core/bootstrap/init-config.js +4 -0
- package/dist/core/bootstrap/init-config.js.map +1 -1
- package/dist/core/cache/cache.d.ts.map +1 -1
- package/dist/core/cache/cache.js +3 -2
- package/dist/core/cache/cache.js.map +1 -1
- package/dist/core/index.d.ts +6 -4
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +6 -3
- package/dist/core/index.js.map +1 -1
- package/dist/core/utils/utils.d.ts +6 -0
- package/dist/core/utils/utils.d.ts.map +1 -1
- package/dist/core/utils/utils.js +25 -0
- package/dist/core/utils/utils.js.map +1 -1
- package/dist/core/web/server-http.d.ts.map +1 -1
- package/dist/core/web/server-http.js +32 -18
- package/dist/core/web/server-http.js.map +1 -1
- package/package.json +2 -2
- package/cli-template/src/_types_/common.d.ts +0 -27
- package/cli-template/src/api/router.ts +0 -35
- package/cli-template/src/api/swagger.ts +0 -167
- package/cli-template/src/asset/favicon.svg +0 -3
- package/cli-template/src/custom-resources.ts +0 -11
- package/cli-template/src/prompts/agent-brief.ts +0 -8
- package/cli-template/src/prompts/agent-prompt.ts +0 -10
- package/cli-template/src/prompts/custom-prompts.ts +0 -12
- package/cli-template/src/start.ts +0 -71
- package/cli-template/src/tools/handle-tool-call.ts +0 -55
- package/cli-template/src/tools/tools.ts +0 -88
- package/cli-template/tests/jest-simple-reporter.js +0 -10
- package/cli-template/tests/mcp/sse/mcp-sse-client-handling.md +0 -111
- package/cli-template/tests/mcp/sse/test-sse-npm-package.js +0 -96
- package/cli-template/tests/mcp/test-cases.js +0 -143
- package/cli-template/tests/mcp/test-http.js +0 -63
- package/cli-template/tests/mcp/test-sse.js +0 -67
- package/cli-template/tests/mcp/test-stdio.js +0 -78
- package/cli-template/tests/utils.ts +0 -154
- package/dist/core/token/gen-token-app/gen-token-server.d.ts.map +0 -1
- package/dist/core/token/gen-token-app/gen-token-server.js.map +0 -1
- package/dist/core/token/gen-token-app/html.d.ts.map +0 -1
- package/dist/core/token/gen-token-app/html.js.map +0 -1
- package/dist/core/token/gen-token-app/ntlm-auth-options.d.ts.map +0 -1
- package/dist/core/token/gen-token-app/ntlm-auth-options.js.map +0 -1
- package/dist/core/token/gen-token-app/ntlm-domain-config.d.ts.map +0 -1
- package/dist/core/token/gen-token-app/ntlm-domain-config.js.map +0 -1
- package/dist/core/token/gen-token-app/ntlm-integration.d.ts.map +0 -1
- package/dist/core/token/gen-token-app/ntlm-integration.js.map +0 -1
- package/dist/core/token/gen-token-app/ntlm-session-storage.d.ts.map +0 -1
- package/dist/core/token/gen-token-app/ntlm-session-storage.js.map +0 -1
- package/dist/core/token/gen-token-app/ntlm-templates.d.ts.map +0 -1
- package/dist/core/token/gen-token-app/ntlm-templates.js.map +0 -1
- package/dist/core/token/i-token.d.ts +0 -13
- package/dist/core/token/i-token.d.ts.map +0 -1
- package/dist/core/token/i-token.js +0 -2
- package/dist/core/token/i-token.js.map +0 -1
- package/dist/core/token/token-auth.d.ts +0 -17
- package/dist/core/token/token-auth.d.ts.map +0 -1
- package/dist/core/token/token-auth.js.map +0 -1
- package/dist/core/token/token-core.d.ts.map +0 -1
- package/dist/core/token/token-core.js.map +0 -1
- /package/dist/core/{token/gen-token-app → auth/token-generator}/html.d.ts +0 -0
- /package/dist/core/{token/gen-token-app → auth/token-generator}/ntlm-auth-options.d.ts +0 -0
- /package/dist/core/{token/gen-token-app → auth/token-generator}/ntlm-domain-config.d.ts +0 -0
- /package/dist/core/{token/gen-token-app → auth/token-generator}/ntlm-domain-config.js +0 -0
- /package/dist/core/{token/gen-token-app → auth/token-generator}/ntlm-integration.d.ts +0 -0
- /package/dist/core/{token/gen-token-app → auth/token-generator}/ntlm-session-storage.d.ts +0 -0
- /package/dist/core/{token/gen-token-app → auth/token-generator}/ntlm-templates.d.ts +0 -0
- /package/dist/core/{token/gen-token-app → auth/token-generator}/ntlm-templates.js +0 -0
|
@@ -1,73 +1,72 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "
|
|
3
|
-
"productName": "{{project.productName}}",
|
|
4
|
-
"version": "0.0.
|
|
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/
|
|
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.
|
|
49
|
-
"dotenv": "^17.2.3",
|
|
50
|
-
"fa-mcp-sdk": "^0.2.
|
|
51
|
-
"swagger-jsdoc": "^6.2.8",
|
|
52
|
-
"swagger-ui-express": "^5.0.1"
|
|
53
|
-
},
|
|
54
|
-
"devDependencies": {
|
|
55
|
-
"@types/express": "^5.0.
|
|
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
|
-
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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;
|
|
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 './
|
|
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=
|
|
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
|
|
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(
|
|
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=
|
|
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
|
-
|
|
8
|
-
const
|
|
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
|
-
*
|
|
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
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
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
|
-
|
|
116
|
-
if (
|
|
117
|
-
|
|
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
|
-
|
|
124
|
-
|
|
125
|
-
|
|
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":"AAEA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EACL,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AAIzB,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC;AAE1D,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AAE3F,MAAM,SAAS,GAAG,CAAC,GAAY,EAAE,IAAY,EAAE,OAAe,EAAqC,EAAE;IACnG,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC;QAC3B,IAAI,UAAU,GAAW,EAAE,CAAC;QAC5B,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAChB,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;gBACtD,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;oBAC1C,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,KAAK,KAAK,OAAO,GAAG,CAAC,GAAG,KAAK,EAAE,CAAC;gBACvD,CAAC;gBACD,OAAO,SAAS,CAAC;YACnB,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;QACD,cAAc,CAAC,GAAG,GAAG,gBAAgB,KAAK,GAAG,IAAI,GAAG,GAAG,IAAI,OAAO,GAAG,KAAK,aAAa,UAAU,IAAI,GAAG,EAAE,CAAC,CAAC;IAC9G,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC3B,CAAC,CAAC;AAGF,wDAAwD;AAExD;;GAEG;AACH,MAAM,gBAAgB,GAAG,CAAC,GAAW,EAAW,EAAE;IAChD,kDAAkD;IAClD,MAAM,YAAY,GAAG,gBAAgB,EAAE,CAAC,SAAS,CAAC;IAClD,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;IAEvD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,KAAK,CAAC,CAAC,4CAA4C;IAC5D,CAAC;IAED,qGAAqG;IACrG,OAAO,QAAQ,CAAC,WAAW,KAAK,KAAK,CAAC;AACxC,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,cAAc,GAAG,CAAC,IAAY,EAAW,EAAE;IAC/C,gDAAgD;IAChD,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC,OAAO,CAAC;IAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAErD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,KAAK,CAAC,CAAC,0CAA0C;IAC1D,CAAC;IAED,iGAAiG;IACjG,OAAQ,MAAc,CAAC,WAAW,KAAK,KAAK,CAAC;AAC/C,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,kBAAkB,GAAG,CAAC,GAAY,EAAW,EAAE;IACnD,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;IAElC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,gBAAgB;YACnB,kCAAkC;YAClC,OAAO,IAAI,CAAC;QAEd,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC;YAClC,OAAO,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC7C,CAAC;QAED,KAAK,cAAc;YACjB,gCAAgC;YAChC,OAAO,IAAI,CAAC;QAEd,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC;YACpC,OAAO,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC7C,CAAC;QAED;YACE,2CAA2C;YAC3C,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC,CAAC;AAEF,mEAAmE;AAEnE;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,GAAY,EAA0D,EAAE;IAC9G,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAChD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,KAAK,IAAI,uBAAuB,CAAC,CAAC;IAC1E,CAAC;IAED,mEAAmE;IAClE,GAAW,CAAC,QAAQ,GAAG,EAAE,GAAG,UAAU,EAAE,CAAC;IAE1C,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAWF;;GAEG;AACH,MAAM,UAAU,YAAY,CAAE,UAAiC,EAAE;IAC/D,MAAM,EACJ,QAAQ,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,EACxC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,MAAM,GACnD,GAAG,OAAO,CAAC;IAEZ,OAAO,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QAC/D,qCAAqC;QACrC,IAAI,SAAS,IAAI,CAAE,YAAoB,CAAC,OAAO,EAAE,CAAC;YAChD,oBAAoB,EAAE,CAAC;YACtB,YAAoB,CAAC,OAAO,GAAG,IAAI,CAAC;QACvC,CAAC;QAED,uEAAuE;QACvE,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,YAAY,IAAI,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5C,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QAED,kCAAkC;QAClC,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QAED,IAAI,CAAC;YACH,qEAAqE;YACrE,MAAM,UAAU,GAAe,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAC;YAC5D,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBACxB,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,KAAK,IAAI,uBAAuB,CAAC,CAAC;gBACtF,OAAO,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAClE,CAAC;YAED,mEAAmE;YAClE,GAAW,CAAC,QAAQ,GAAG,UAAU,CAAC;YACnC,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACP,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YAC7C,OAAO;QACT,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,uCAAuC;AACtC,YAAoB,CAAC,OAAO,GAAG,KAAK,CAAC"}
|
|
@@ -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"}
|