fa-mcp-sdk 0.4.51 → 0.4.53
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/README.md +1 -1
- package/cli-template/.claude/settings.json +3 -1
- package/cli-template/.claude/skills/edit-claude-files/SKILL.md +46 -0
- package/cli-template/.claude/skills/feature-generator/SKILL.md +364 -0
- package/cli-template/.claude/skills/readme-generator/README.md +1 -0
- package/cli-template/.claude/skills/readme-generator/SKILL.md +237 -0
- package/cli-template/.claude/skills/readme-generator/reference/best-practices.md +218 -0
- package/cli-template/.claude/skills/readme-generator/reference/satellite-templates.md +534 -0
- package/cli-template/.claude/skills/readme-generator/reference/templates.md +385 -0
- package/cli-template/CLAUDE.md +5 -19
- package/cli-template/FA-MCP-SDK-DOC/00-FA-MCP-SDK-index.md +1 -1
- package/cli-template/FA-MCP-SDK-DOC/02-1-tools-and-api.md +60 -0
- package/cli-template/FA-MCP-SDK-DOC/04-authentication.md +10 -8
- package/cli-template/README.md +72 -22
- package/cli-template/SKILL_README.md +139 -0
- package/cli-template/package.json +1 -1
- package/cli-template/prompt-example-new-MCP.md +3 -2
- package/config/custom-environment-variables.yaml +4 -3
- package/config/default.yaml +20 -18
- package/config/local-test.yaml +44 -0
- package/dist/core/_types_/config.d.ts +8 -5
- package/dist/core/_types_/config.d.ts.map +1 -1
- package/dist/core/auth/admin-auth.d.ts +12 -5
- package/dist/core/auth/admin-auth.d.ts.map +1 -1
- package/dist/core/auth/admin-auth.js +37 -25
- package/dist/core/auth/admin-auth.js.map +1 -1
- package/dist/core/bootstrap/startup-info.d.ts.map +1 -1
- package/dist/core/bootstrap/startup-info.js +13 -5
- package/dist/core/bootstrap/startup-info.js.map +1 -1
- package/dist/core/mcp/readme-assembler.d.ts +20 -0
- package/dist/core/mcp/readme-assembler.d.ts.map +1 -0
- package/dist/core/mcp/readme-assembler.js +88 -0
- package/dist/core/mcp/readme-assembler.js.map +1 -0
- package/dist/core/mcp/resources.d.ts.map +1 -1
- package/dist/core/mcp/resources.js +2 -1
- package/dist/core/mcp/resources.js.map +1 -1
- package/dist/core/web/admin-router.js +2 -2
- package/dist/core/web/admin-router.js.map +1 -1
- package/dist/core/web/home-api.d.ts.map +1 -1
- package/dist/core/web/home-api.js +13 -5
- package/dist/core/web/home-api.js.map +1 -1
- package/dist/core/web/server-http.d.ts.map +1 -1
- package/dist/core/web/server-http.js +1 -2
- package/dist/core/web/server-http.js.map +1 -1
- package/dist/core/web/static/home/index.html +2 -2
- package/dist/core/web/static/home/script.js +2 -2
- package/package.json +1 -1
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# Skills (Claude Code)
|
|
2
|
+
|
|
3
|
+
Skills are specialized instructions for Claude Code, located in `.claude/skills/`. They are invoked inside Claude Code
|
|
4
|
+
chat — either by a `/command` or automatically by trigger phrases.
|
|
5
|
+
|
|
6
|
+
## Available Skills
|
|
7
|
+
|
|
8
|
+
### `/gen-jwt` — JWT Token Generator
|
|
9
|
+
|
|
10
|
+
Generates JWT tokens for MCP server authentication via `scripts/generate-jwt.js`.
|
|
11
|
+
|
|
12
|
+
- **Launch**: by command `/gen-jwt` or by trigger phrases ("jwt", "token for user", "токен для", "сгенерируй токен")
|
|
13
|
+
- **Interactive**: asks for missing required params (username, TTL), then optional (request ID, IP restriction,
|
|
14
|
+
service name, extra `key=value` pairs)
|
|
15
|
+
- **Parameters**:
|
|
16
|
+
- `username` (REQUIRED) — user the token is issued to
|
|
17
|
+
- `ttl` (REQUIRED) — lifetime in format `<N>s | <N>m | <N>d | <N>y`
|
|
18
|
+
- `request` (optional) — ticket/issue ID (e.g. `REQ-123`, `JIRA-456`)
|
|
19
|
+
- `ip` (optional) — allowed IPs / CIDR masks, comma-separated
|
|
20
|
+
- `service` (optional) — service name, passed as `-s <name>` flag
|
|
21
|
+
- any additional `key=value` pairs — appended to the token payload
|
|
22
|
+
- **Output**: token string, payload table, saved to `<YYYYMMDD-HHmmss>-jwt.txt` in the project root
|
|
23
|
+
|
|
24
|
+
**Examples:**
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
/gen-jwt admin 30d
|
|
28
|
+
/gen-jwt vpupkin 1y request=REQ-12345 ip=10.0.0.0/24,192.168.1.100
|
|
29
|
+
/gen-jwt svc-account 8d service=my-mcp
|
|
30
|
+
/gen-jwt sergey на год привязать к заявке REQ-555
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
### `/upgrade-guide` — FA-MCP-SDK Upgrade Guide
|
|
36
|
+
|
|
37
|
+
Generates a migration guide for upgrading the `fa-mcp-sdk` dependency in this project. Analyzes diffs in:
|
|
38
|
+
|
|
39
|
+
- `config/*.yaml` — new/removed/changed keys and defaults (correlates `default.yaml`, `_local.yaml`, `local.yaml`)
|
|
40
|
+
- `cli-template/` — `package.json` (new deps only), `tsconfig.json`, `eslint.config.js`, `CLAUDE.md`, `deploy/`,
|
|
41
|
+
`.claude/skills/`, `.run/` (from `r/`)
|
|
42
|
+
- `scripts/` — new or updated SDK utilities (excluding SDK-internal `copy-static.js`, `publish.sh`)
|
|
43
|
+
- `dist/core/index.js` — added/removed/renamed exports and breaking type changes
|
|
44
|
+
- project `src/` — imports and config keys affected by the upgrade
|
|
45
|
+
|
|
46
|
+
By default, versions and commit hashes refer to **this project** — the skill resolves them to the pinned SDK version
|
|
47
|
+
via `git show <ref>:package.json`. To reference SDK versions/commits directly, mention "SDK" explicitly.
|
|
48
|
+
|
|
49
|
+
- **Launch**: by command `/upgrade-guide` or by trigger phrases ("обновить sdk", "upgrade sdk", "migration guide",
|
|
50
|
+
"обновление fa-mcp-sdk")
|
|
51
|
+
- **Output**: `upgrade-guide-<old>-to-<new>.md` in project root
|
|
52
|
+
|
|
53
|
+
**Examples:**
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
/upgrade-guide # current SDK -> latest SDK
|
|
57
|
+
/upgrade-guide 1.2.3 # project version 1.2.3 -> latest SDK
|
|
58
|
+
/upgrade-guide 1.2.3 1.2.7 # project versions
|
|
59
|
+
/upgrade-guide abc1234 def5678 # project commits
|
|
60
|
+
/upgrade-guide from SDK version 0.1.30 # SDK versions directly -> latest SDK
|
|
61
|
+
/upgrade-guide from SDK version 0.1.30 to SDK version 0.5.0 # SDK versions directly
|
|
62
|
+
/upgrade-guide from SDK commit abc1234 to SDK commit def5678 # SDK commits directly
|
|
63
|
+
/upgrade-guide 1.2.3 1.2.7 in Russian # output guide in Russian
|
|
64
|
+
/upgrade-guide 1.2.3 1.2.7 на русском # same, via Russian phrasing
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
### `/feature-generator` — Feature Prompt Generator
|
|
70
|
+
|
|
71
|
+
A **META-skill**: turns a feature description into a self-sufficient prompt for an AI CLI (Claude Code or another
|
|
72
|
+
agent) to implement the feature turnkey. The skill itself does NOT write feature code — it produces the prompt.
|
|
73
|
+
|
|
74
|
+
What it does:
|
|
75
|
+
|
|
76
|
+
- Inspects real code via `Read` / `Grep` / `Glob` — **no guessing**
|
|
77
|
+
- Identifies reusable functions, classes, types, and existing npm dependencies (with `file:line` citations)
|
|
78
|
+
- Designs the minimal sufficient solution (KISS / YAGNI / DRY), applying multi-role review
|
|
79
|
+
(Architect / Senior dev / QA)
|
|
80
|
+
- Drafts a change plan (file → action → what exactly), code examples with TypeScript typing,
|
|
81
|
+
and a testing scenario
|
|
82
|
+
- Outputs a Part A brief summary + Part B self-sufficient 15-section prompt ready to hand off to an AI CLI
|
|
83
|
+
|
|
84
|
+
Characteristics:
|
|
85
|
+
|
|
86
|
+
- **Launch**: **command-only** via `/feature-generator`. Has `disable-model-invocation: true` — does NOT activate
|
|
87
|
+
on trigger phrases or implicit mentions
|
|
88
|
+
- **Input**: free-form feature description OR path to a file with the description (e.g. `task.md`, ticket dump)
|
|
89
|
+
- **Output**: file `prop-<kebab-name>.md` in repository root. If the file already exists, a numeric suffix is
|
|
90
|
+
appended (`-2`, `-3`, …) — the existing file is never overwritten
|
|
91
|
+
|
|
92
|
+
**Examples:**
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
/feature-generator Add a tool for batch-processing customer records across a project
|
|
96
|
+
/feature-generator task.md
|
|
97
|
+
/feature-generator REQ-1234: implement webhook callback receiver for external events
|
|
98
|
+
/feature-generator Add OAuth2 token refresh logic to the HTTP client
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
### `/readme-generator` — MCP Server README Generator
|
|
104
|
+
|
|
105
|
+
Generates a structured, user-friendly `README.md` for an `fa-mcp-sdk`-based MCP server and a set
|
|
106
|
+
of satellite documents under `readme-docs/`. The main README stays scannable (what is this / what
|
|
107
|
+
tools / how to use); reference tables, priority rules, and long technical topics are moved into
|
|
108
|
+
`readme-docs/*.md` and linked from the main.
|
|
109
|
+
|
|
110
|
+
What it does:
|
|
111
|
+
|
|
112
|
+
- **Inventories** the project: `package.json`, `config/*.yaml`, `src/tools/`, `src/api/`,
|
|
113
|
+
`src/prompts/`, `.claude/skills/`
|
|
114
|
+
- **Detects enabled SDK subsystems** (Consul, AD, Database, Admin Panel, Agent Tester, Swagger,
|
|
115
|
+
Cache, Webhooks, Impersonation, JWT, configurable tool set) and project-specific capabilities
|
|
116
|
+
- **Classifies each finding** — drop / inline / satellite — and produces the satellite file set
|
|
117
|
+
dynamically. No stubs for disabled features.
|
|
118
|
+
- **Always inlines** in the main README: the tool list, Quick Start, MCP Client Integration
|
|
119
|
+
snippets (Claude Code / Desktop / Qwen — adapted to this server's custom header names), and
|
|
120
|
+
Key Features
|
|
121
|
+
- **Always uses folder `readme-docs/`** — the SDK's `doc://readme` MCP resource automatically
|
|
122
|
+
inlines every satellite linked from the main README, delivering the full document to the MCP
|
|
123
|
+
registry's RAG index. Any other folder name would be ignored.
|
|
124
|
+
|
|
125
|
+
Characteristics:
|
|
126
|
+
|
|
127
|
+
- **Launch**: by command `/readme-generator` or by trigger phrases ("generate readme", "update
|
|
128
|
+
readme", "обнови README", "сгенерируй README для MCP")
|
|
129
|
+
- **Input**: none required — reads the current project
|
|
130
|
+
- **Output**: `README.md` in project root, `readme-docs/*.md` (one per satellite topic), backup
|
|
131
|
+
of the previous README as `README.backup.md` when rewriting
|
|
132
|
+
|
|
133
|
+
**Examples:**
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
/readme-generator
|
|
137
|
+
/readme-generator refresh the README after adding 3 new tools
|
|
138
|
+
/readme-generator обнови README с учётом того, что теперь подключён PostgreSQL
|
|
139
|
+
```
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
adminPanel:
|
|
2
|
+
enabled: ADMIN_PANEL_ENABLED
|
|
3
|
+
authType: ADMIN_PANEL_AUTH_TYPE # permanentServerTokens | basic | jwtToken | ntlm | none
|
|
4
|
+
|
|
1
5
|
agentTester:
|
|
2
6
|
enabled: AGENT_TESTER_ENABLED
|
|
3
7
|
useAuth: AGENT_TESTER_USE_AUTH
|
|
@@ -52,6 +56,3 @@ webServer:
|
|
|
52
56
|
username: WS_AUTH_BASIC_USERNAME
|
|
53
57
|
password: WS_AUTH_BASIC_PASSWORD
|
|
54
58
|
genJwtApiEnable: WS_GEN_JWT_API_ENABLE
|
|
55
|
-
adminAuth:
|
|
56
|
-
enabled: WS_ADMIN_AUTH_ENABLED
|
|
57
|
-
type: WS_ADMIN_AUTH_TYPE # permanentServerTokens | basic | jwtToken | ntlm
|
package/config/default.yaml
CHANGED
|
@@ -22,6 +22,26 @@
|
|
|
22
22
|
# #> Override the Consul service name to look up (defaults to the alias key)
|
|
23
23
|
# consulServiceName: <consulServiceName>
|
|
24
24
|
|
|
25
|
+
#> ========================================================================
|
|
26
|
+
#> ADMIN PANEL
|
|
27
|
+
#> Token generation & validation UI served at /admin.
|
|
28
|
+
#> Supports 4 authentication methods: permanentServerTokens, basic, jwtToken, ntlm.
|
|
29
|
+
#> ========================================================================
|
|
30
|
+
adminPanel:
|
|
31
|
+
#> Enable/disable admin panel. false — /admin is not mounted at all.
|
|
32
|
+
enabled: true
|
|
33
|
+
#> Authentication type: 'permanentServerTokens' | 'basic' | 'jwtToken' | 'ntlm' | 'none'
|
|
34
|
+
#> Accepts a single type (string) or multiple types (array):
|
|
35
|
+
#> authType: 'basic'
|
|
36
|
+
#> authType: ['jwtToken', 'basic']
|
|
37
|
+
#> 'none' / null / empty array / not set → panel opens WITHOUT authentication
|
|
38
|
+
#> (convenience for local development and debugging; do NOT use in production).
|
|
39
|
+
#> For permanentServerTokens, basic, jwtToken — uses credentials from webServer.auth section.
|
|
40
|
+
#> For ntlm — uses AD configuration from ad.domains section.
|
|
41
|
+
#> When multiple types are set (e.g. ['jwtToken', 'basic']), the login page shows tabs
|
|
42
|
+
#> to choose between Token and Login (username/password) authentication.
|
|
43
|
+
authType: 'basic'
|
|
44
|
+
|
|
25
45
|
#> Active Directory / LDAP settings.
|
|
26
46
|
#> Used for authentication/authorization (e.g., NTLM in admin panel) and checking user membership in AD groups.
|
|
27
47
|
ad:
|
|
@@ -318,21 +338,3 @@ webServer:
|
|
|
318
338
|
#> Requires valid Authorization header (any method configured in webServer.auth).
|
|
319
339
|
#> ========================================================================
|
|
320
340
|
genJwtApiEnable: false
|
|
321
|
-
|
|
322
|
-
#> ========================================================================
|
|
323
|
-
#> ADMIN PANEL AUTHENTICATION
|
|
324
|
-
#> Token generation page available at /admin endpoint
|
|
325
|
-
#> Supports 4 authentication methods: permanentServerTokens, basic, jwtToken, ntlm
|
|
326
|
-
#> ========================================================================
|
|
327
|
-
adminAuth:
|
|
328
|
-
#> Enable/disable admin panel
|
|
329
|
-
enabled: true
|
|
330
|
-
#> Authentication type for admin panel: 'permanentServerTokens' | 'basic' | 'jwtToken' | 'ntlm'
|
|
331
|
-
#> Accepts a single type (string) or multiple types (array):
|
|
332
|
-
#> type: 'basic'
|
|
333
|
-
#> type: ['jwtToken', 'basic']
|
|
334
|
-
#> For permanentServerTokens, basic, jwtToken — uses credentials from webServer.auth section
|
|
335
|
-
#> For ntlm — uses AD configuration from ad.domains section (no additional credentials needed)
|
|
336
|
-
#> When multiple types are set (e.g. ['jwtToken', 'basic']), the login page shows tabs
|
|
337
|
-
#> to choose between Token and Login (username/password) authentication.
|
|
338
|
-
type: 'basic'
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Test-only config overrides layered on top of local.yaml when NODE_APP_INSTANCE=test.
|
|
2
|
+
# Used by the auth-hardening test run — do NOT commit real keys here.
|
|
3
|
+
---
|
|
4
|
+
webServer:
|
|
5
|
+
host: '127.0.0.1'
|
|
6
|
+
port: 9877
|
|
7
|
+
auth:
|
|
8
|
+
enabled: true
|
|
9
|
+
permanentServerTokens:
|
|
10
|
+
- 'pst-TEST-AAAAAAAAAAAAAAAAAAAAAAAA'
|
|
11
|
+
jwtToken:
|
|
12
|
+
encryptKey: 'TEST-ENCRYPT-KEY-0123456789ABCDEF-testing-0123456789'
|
|
13
|
+
checkMCPName: false
|
|
14
|
+
isCheckIP: false
|
|
15
|
+
basic:
|
|
16
|
+
username: 'adminuser'
|
|
17
|
+
password: 'adminpass'
|
|
18
|
+
revoked:
|
|
19
|
+
jwtTokens:
|
|
20
|
+
- token: '1776650314414.e289c9721baa7d250c79adfcff94cec6087cda74d357e156bca209eefd2fa082077a08780c3a57c7e92a5ccb6041343a6ad1659fb64fce6e4c4a968a23cb4729785b34edb0eb6e6f278d9174d38212246d3c0ca81c077b8e977d3feb15cefea55c6605cf3cb0f74a13bdbcae700963e3b4'
|
|
21
|
+
note: 'revoked for token-list test'
|
|
22
|
+
users:
|
|
23
|
+
- 'revokeduser'
|
|
24
|
+
|
|
25
|
+
adminPanel:
|
|
26
|
+
enabled: true
|
|
27
|
+
authType:
|
|
28
|
+
- 'jwtToken'
|
|
29
|
+
- 'basic'
|
|
30
|
+
- 'permanentServerTokens'
|
|
31
|
+
|
|
32
|
+
agentTester:
|
|
33
|
+
enabled: true
|
|
34
|
+
useAuth: false
|
|
35
|
+
showFooterLink: true
|
|
36
|
+
openAi:
|
|
37
|
+
apiKey: 'sk-fake-not-used-for-these-tests'
|
|
38
|
+
|
|
39
|
+
consul:
|
|
40
|
+
service:
|
|
41
|
+
enable: false
|
|
42
|
+
|
|
43
|
+
mcp:
|
|
44
|
+
transportType: http
|
|
@@ -3,6 +3,7 @@ import { TFileLogLevel } from 'af-logger-ts';
|
|
|
3
3
|
import { IAFConsulConfig, IAccessPoints } from 'fa-consul';
|
|
4
4
|
import { IADConfig } from './active-directory-config.js';
|
|
5
5
|
export type AdminAuthType = 'permanentServerTokens' | 'basic' | 'jwtToken' | 'ntlm';
|
|
6
|
+
export type AdminAuthTypeInput = AdminAuthType | 'none';
|
|
6
7
|
interface IWebServerConfig {
|
|
7
8
|
webServer: {
|
|
8
9
|
host: string;
|
|
@@ -28,13 +29,15 @@ interface IWebServerConfig {
|
|
|
28
29
|
users?: string[];
|
|
29
30
|
};
|
|
30
31
|
};
|
|
31
|
-
adminAuth: {
|
|
32
|
-
enabled: boolean;
|
|
33
|
-
type: AdminAuthType | AdminAuthType[];
|
|
34
|
-
};
|
|
35
32
|
genJwtApiEnable: boolean;
|
|
36
33
|
};
|
|
37
34
|
}
|
|
35
|
+
interface IAdminPanelConfig {
|
|
36
|
+
adminPanel?: {
|
|
37
|
+
enabled: boolean;
|
|
38
|
+
authType?: AdminAuthTypeInput | AdminAuthTypeInput[] | null;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
38
41
|
interface ILoggerConfig {
|
|
39
42
|
logger: {
|
|
40
43
|
level: TFileLogLevel;
|
|
@@ -93,7 +96,7 @@ interface ICacheConfig {
|
|
|
93
96
|
maxItems: 1000;
|
|
94
97
|
};
|
|
95
98
|
}
|
|
96
|
-
export interface AppConfig extends IADConfig, ICacheConfig, ILoggerConfig, IAFDatabasesConfig, IWebServerConfig, IMCPConfig, ISwaggerConfig, IAgentTesterConfig, IHomePageConfig {
|
|
99
|
+
export interface AppConfig extends IADConfig, ICacheConfig, ILoggerConfig, IAFDatabasesConfig, IWebServerConfig, IAdminPanelConfig, IMCPConfig, ISwaggerConfig, IAgentTesterConfig, IHomePageConfig {
|
|
97
100
|
isMainDBUsed: boolean;
|
|
98
101
|
name: string;
|
|
99
102
|
shortName: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/core/_types_/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAEzD,MAAM,MAAM,aAAa,GAAG,uBAAuB,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/core/_types_/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Admin panel authentication middleware
|
|
3
3
|
* Supports 4 authentication types: permanentServerTokens, basic, jwtToken, ntlm
|
|
4
|
-
*
|
|
4
|
+
* adminPanel.authType accepts a single type or an array of types.
|
|
5
|
+
* When authType is absent / null / empty array / 'none' — admin panel opens
|
|
6
|
+
* without authentication (dev/debug convenience mode).
|
|
5
7
|
*/
|
|
6
8
|
import { RequestHandler } from 'express';
|
|
7
9
|
import { AdminAuthType } from '../_types_/config.js';
|
|
8
10
|
export type { AdminAuthType };
|
|
9
11
|
/**
|
|
10
|
-
* Normalizes
|
|
12
|
+
* Normalizes adminPanel.authType to an array of real auth types.
|
|
13
|
+
* 'none', null, empty array and undefined all collapse to an empty array,
|
|
14
|
+
* which signals open-access mode.
|
|
11
15
|
*/
|
|
12
16
|
export declare function getAdminAuthTypes(): AdminAuthType[];
|
|
13
17
|
/**
|
|
14
|
-
* Validates admin auth configuration
|
|
15
|
-
* Returns error message if configuration is invalid, null if valid
|
|
18
|
+
* Validates admin auth configuration.
|
|
19
|
+
* Returns error message if configuration is invalid, null if valid.
|
|
20
|
+
* Empty type list with enabled=true is valid and means open access.
|
|
16
21
|
*/
|
|
17
22
|
export declare function validateAdminAuthConfig(): string | null;
|
|
18
23
|
/**
|
|
@@ -21,7 +26,9 @@ export declare function validateAdminAuthConfig(): string | null;
|
|
|
21
26
|
*/
|
|
22
27
|
export declare function getAdminAuthMethods(): string[];
|
|
23
28
|
/**
|
|
24
|
-
* Creates admin authentication middleware based on
|
|
29
|
+
* Creates admin authentication middleware based on adminPanel.authType config.
|
|
30
|
+
* If enabled=false OR authType is empty/'none' — returns a pass-through middleware
|
|
31
|
+
* that stamps the request as an anonymous open-access session.
|
|
25
32
|
*/
|
|
26
33
|
export declare function createAdminAuthMW(): RequestHandler[];
|
|
27
34
|
//# sourceMappingURL=admin-auth.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-auth.d.ts","sourceRoot":"","sources":["../../../src/core/auth/admin-auth.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"admin-auth.d.ts","sourceRoot":"","sources":["../../../src/core/auth/admin-auth.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAmC,cAAc,EAAE,MAAM,SAAS,CAAC;AAE1E,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAarD,YAAY,EAAE,aAAa,EAAE,CAAC;AAI9B;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAK,aAAa,EAAE,CAKpD;AA6CD;;;;GAIG;AACH,wBAAgB,uBAAuB,IAAK,MAAM,GAAG,IAAI,CAWxD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAK,MAAM,EAAE,CAa/C;AA0CD;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAK,cAAc,EAAE,CAmErD"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Admin panel authentication middleware
|
|
3
3
|
* Supports 4 authentication types: permanentServerTokens, basic, jwtToken, ntlm
|
|
4
|
-
*
|
|
4
|
+
* adminPanel.authType accepts a single type or an array of types.
|
|
5
|
+
* When authType is absent / null / empty array / 'none' — admin panel opens
|
|
6
|
+
* without authentication (dev/debug convenience mode).
|
|
5
7
|
*/
|
|
6
8
|
import chalk from 'chalk';
|
|
7
9
|
import { appConfig } from '../bootstrap/init-config.js';
|
|
@@ -13,15 +15,20 @@ import { checkPermanentToken } from './permanent.js';
|
|
|
13
15
|
import { isNTLMEnabled } from './token-generator/ntlm/ntlm-domain-config.js';
|
|
14
16
|
import { setupNTLMAuthentication } from './token-generator/ntlm/ntlm-integration.js';
|
|
15
17
|
const logger = lgr.getSubLogger({ name: chalk.yellow('admin-auth') });
|
|
16
|
-
const {
|
|
18
|
+
const { adminPanel } = appConfig;
|
|
19
|
+
const { auth } = appConfig.webServer || {};
|
|
17
20
|
/**
|
|
18
|
-
* Normalizes
|
|
21
|
+
* Normalizes adminPanel.authType to an array of real auth types.
|
|
22
|
+
* 'none', null, empty array and undefined all collapse to an empty array,
|
|
23
|
+
* which signals open-access mode.
|
|
19
24
|
*/
|
|
20
25
|
export function getAdminAuthTypes() {
|
|
21
|
-
|
|
26
|
+
const raw = adminPanel?.authType;
|
|
27
|
+
if (!raw || raw === 'none') {
|
|
22
28
|
return [];
|
|
23
29
|
}
|
|
24
|
-
|
|
30
|
+
const list = Array.isArray(raw) ? raw : [raw];
|
|
31
|
+
return list.filter((t) => !!t && t !== 'none');
|
|
25
32
|
}
|
|
26
33
|
/**
|
|
27
34
|
* Validates admin auth configuration for a single type
|
|
@@ -31,48 +38,45 @@ function validateSingleAuthType(authType) {
|
|
|
31
38
|
case 'permanentServerTokens': {
|
|
32
39
|
const tokens = auth?.permanentServerTokens;
|
|
33
40
|
if (!Array.isArray(tokens) || !tokens.filter(Boolean).length) {
|
|
34
|
-
return `
|
|
41
|
+
return `adminPanel.authType "${authType}" but no tokens are configured in webServer.auth.permanentServerTokens`;
|
|
35
42
|
}
|
|
36
43
|
break;
|
|
37
44
|
}
|
|
38
45
|
case 'basic': {
|
|
39
46
|
const basic = auth?.basic;
|
|
40
47
|
if (!basic?.username || !basic?.password) {
|
|
41
|
-
return `
|
|
48
|
+
return `adminPanel.authType "${authType}" but username or password is missing in webServer.auth.basic`;
|
|
42
49
|
}
|
|
43
50
|
break;
|
|
44
51
|
}
|
|
45
52
|
case 'jwtToken': {
|
|
46
53
|
const jwt = auth?.jwtToken;
|
|
47
54
|
if (!jwt?.encryptKey || jwt.encryptKey.length < 8) {
|
|
48
|
-
return `
|
|
55
|
+
return `adminPanel.authType "${authType}" but encryptKey is missing or too short in webServer.auth.jwtToken`;
|
|
49
56
|
}
|
|
50
57
|
break;
|
|
51
58
|
}
|
|
52
59
|
case 'ntlm': {
|
|
53
60
|
if (!isNTLMEnabled) {
|
|
54
|
-
return `
|
|
61
|
+
return `adminPanel.authType "${authType}" but no AD configuration found (ad.domains is empty or missing)`;
|
|
55
62
|
}
|
|
56
63
|
break;
|
|
57
64
|
}
|
|
58
65
|
default:
|
|
59
|
-
return `Unknown
|
|
66
|
+
return `Unknown adminPanel authType: ${authType}. Valid types: permanentServerTokens, basic, jwtToken, ntlm, none`;
|
|
60
67
|
}
|
|
61
68
|
return null;
|
|
62
69
|
}
|
|
63
70
|
/**
|
|
64
|
-
* Validates admin auth configuration
|
|
65
|
-
* Returns error message if configuration is invalid, null if valid
|
|
71
|
+
* Validates admin auth configuration.
|
|
72
|
+
* Returns error message if configuration is invalid, null if valid.
|
|
73
|
+
* Empty type list with enabled=true is valid and means open access.
|
|
66
74
|
*/
|
|
67
75
|
export function validateAdminAuthConfig() {
|
|
68
|
-
if (!
|
|
76
|
+
if (!adminPanel?.enabled) {
|
|
69
77
|
return null; // Disabled, no validation needed
|
|
70
78
|
}
|
|
71
|
-
const
|
|
72
|
-
if (types.length === 0) {
|
|
73
|
-
return 'adminAuth is enabled but no type is configured';
|
|
74
|
-
}
|
|
75
|
-
for (const t of types) {
|
|
79
|
+
for (const t of getAdminAuthTypes()) {
|
|
76
80
|
const error = validateSingleAuthType(t);
|
|
77
81
|
if (error) {
|
|
78
82
|
return error;
|
|
@@ -85,7 +89,7 @@ export function validateAdminAuthConfig() {
|
|
|
85
89
|
* Maps auth types to UI categories: 'token' (permanentServerTokens, jwtToken) or 'basic'.
|
|
86
90
|
*/
|
|
87
91
|
export function getAdminAuthMethods() {
|
|
88
|
-
if (!
|
|
92
|
+
if (!adminPanel?.enabled) {
|
|
89
93
|
return [];
|
|
90
94
|
}
|
|
91
95
|
const types = getAdminAuthTypes();
|
|
@@ -140,14 +144,23 @@ function tryAuthType(authType, scheme, credentials) {
|
|
|
140
144
|
}
|
|
141
145
|
}
|
|
142
146
|
/**
|
|
143
|
-
* Creates admin authentication middleware based on
|
|
147
|
+
* Creates admin authentication middleware based on adminPanel.authType config.
|
|
148
|
+
* If enabled=false OR authType is empty/'none' — returns a pass-through middleware
|
|
149
|
+
* that stamps the request as an anonymous open-access session.
|
|
144
150
|
*/
|
|
145
151
|
export function createAdminAuthMW() {
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
152
|
+
const types = getAdminAuthTypes();
|
|
153
|
+
// Open-access mode: panel mounted (enabled=true) but no auth type configured,
|
|
154
|
+
// or panel entirely disabled (shouldn't normally reach here since the route is
|
|
155
|
+
// not mounted, but we keep the branch defensive).
|
|
156
|
+
if (!adminPanel?.enabled || types.length === 0) {
|
|
157
|
+
if (adminPanel?.enabled) {
|
|
158
|
+
logger.info('Admin authentication is OPEN (no authType configured)');
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
logger.info('Admin authentication is DISABLED');
|
|
162
|
+
}
|
|
149
163
|
return [(req, res, next) => {
|
|
150
|
-
// Set anonymous user info for compatibility
|
|
151
164
|
req.ntlm = {
|
|
152
165
|
isAuthenticated: false,
|
|
153
166
|
username: 'Anonymous',
|
|
@@ -156,7 +169,6 @@ export function createAdminAuthMW() {
|
|
|
156
169
|
next();
|
|
157
170
|
}];
|
|
158
171
|
}
|
|
159
|
-
const types = getAdminAuthTypes();
|
|
160
172
|
// If the only type is NTLM, use existing NTLM middleware
|
|
161
173
|
if (types.length === 1 && types[0] === 'ntlm') {
|
|
162
174
|
return setupNTLMAuthentication();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-auth.js","sourceRoot":"","sources":["../../../src/core/auth/admin-auth.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"admin-auth.js","sourceRoot":"","sources":["../../../src/core/auth/admin-auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"startup-info.d.ts","sourceRoot":"","sources":["../../../src/core/bootstrap/startup-info.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,WAAW,GAAU,MAAM;IACtC,YAAY,EAAE,GAAG,CAAC;IAClB,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,SAAS,CAAC;CACpD,
|
|
1
|
+
{"version":3,"file":"startup-info.d.ts","sourceRoot":"","sources":["../../../src/core/bootstrap/startup-info.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,WAAW,GAAU,MAAM;IACtC,YAAY,EAAE,GAAG,CAAC;IAClB,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,SAAS,CAAC;CACpD,kBAwEA,CAAC"}
|
|
@@ -29,14 +29,22 @@ export const startupInfo = async (args) => {
|
|
|
29
29
|
const dbInfo = cfg.isMainDBUsed ? [...databasesInfo(cfg, ['main'])] : [['DB', 'not used']];
|
|
30
30
|
// Authentication info
|
|
31
31
|
const authConfig = cfg.webServer?.auth;
|
|
32
|
-
const
|
|
32
|
+
const adminPanelConfig = cfg.adminPanel;
|
|
33
33
|
const { configured: mcpAuthTypes, errors: authErrors } = detectAuthConfiguration();
|
|
34
34
|
const mcpAuthInfo = authConfig?.enabled
|
|
35
35
|
? (mcpAuthTypes.length ? mcpAuthTypes.join(', ') : 'enabled but not configured')
|
|
36
36
|
: 'disabled';
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
let adminPanelInfo;
|
|
38
|
+
if (!adminPanelConfig?.enabled) {
|
|
39
|
+
adminPanelInfo = 'disabled';
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
const raw = adminPanelConfig.authType;
|
|
43
|
+
const types = !raw || raw === 'none'
|
|
44
|
+
? []
|
|
45
|
+
: (Array.isArray(raw) ? raw.filter((t) => t && t !== 'none') : [raw]);
|
|
46
|
+
adminPanelInfo = types.length === 0 ? 'open (no auth)' : types.join(', ');
|
|
47
|
+
}
|
|
40
48
|
// Log auth configuration errors if any
|
|
41
49
|
if (Object.keys(authErrors).length > 0) {
|
|
42
50
|
Object.entries(authErrors).forEach(([type, errors]) => {
|
|
@@ -53,7 +61,7 @@ export const startupInfo = async (args) => {
|
|
|
53
61
|
useFileLogger ? ['Logs dir', fileLogger?.logDir] : '',
|
|
54
62
|
...dbInfo,
|
|
55
63
|
['MCP Auth', mcpAuthInfo],
|
|
56
|
-
['Admin
|
|
64
|
+
['Admin Panel', adminPanelInfo],
|
|
57
65
|
['Gen JWT API', cfg.webServer?.genJwtApiEnable ? 'POST /gen-jwt' : 'disabled'],
|
|
58
66
|
...(args.customStartupInfo || []),
|
|
59
67
|
consulInfoItem,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"startup-info.js","sourceRoot":"","sources":["../../../src/core/bootstrap/startup-info.ts"],"names":[],"mappings":"AAAA;;EAEE;AACF,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,iBAAiB,EAAa,MAAM,aAAa,CAAC;AAC7G,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,IAAI,GAAG,EAAE,MAAM,cAAc,CAAC;AAExE,OAAO,EAAE,SAAS,IAAI,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAGpD,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAGhE,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAAE,IAGjC,EAAE,EAAE;IACH,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAE9B,IAAI,cAAc,GAA8B,EAAE,CAAC;IACnD,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;IAC7B,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;QACb,MAAM,SAAS,GAAiB,MAAM,YAAY,EAAE,CAAC;QACrD,MAAM,CAAC,GAAG,SAAS,CAAC,cAAc,CAAC;QAEnC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAa,CAAC;QACzB,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAgB,CAAC;QAC5B,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;QACZ,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC;QAC3B,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC;QACxB,cAAc,GAAG,CAAC,kBAAkB,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;QAC3D,QAAQ,GAAG,eAAe,GAAG,SAAS,CAAC,QAAS,CAAC;IACnD,CAAC;IAED,UAAU,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gDAAgD;IAEpH,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IAE3F,sBAAsB;IACtB,MAAM,UAAU,GAAG,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC;IACvC,MAAM,
|
|
1
|
+
{"version":3,"file":"startup-info.js","sourceRoot":"","sources":["../../../src/core/bootstrap/startup-info.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Assemble an extended README for the `doc://readme` MCP resource.
|
|
3
|
+
*
|
|
4
|
+
* Reads the project's README.md, finds every link pointing into `readme-docs/`, appends those
|
|
5
|
+
* satellite Markdown files at the end (each separated by `\n\n---\n\n`), and rewrites the in-text
|
|
6
|
+
* links to `See "<heading>" below` so the assembled document reads naturally.
|
|
7
|
+
*
|
|
8
|
+
* This is what the MCP registry's RAG index consumes via `doc://readme` — so the whole
|
|
9
|
+
* documentation must be delivered as one searchable markdown blob.
|
|
10
|
+
*/
|
|
11
|
+
export declare const SATELLITE_DIR_NAME = "readme-docs";
|
|
12
|
+
/**
|
|
13
|
+
* Build the extended README.
|
|
14
|
+
*
|
|
15
|
+
* @param projectRoot - Absolute path to the project root (where README.md lives).
|
|
16
|
+
* @returns The README content with satellites inlined. Empty string if README.md is missing.
|
|
17
|
+
* If `readme-docs/` is missing, returns the main README as-is.
|
|
18
|
+
*/
|
|
19
|
+
export declare const assembleReadmeWithSatellites: (projectRoot: string) => string;
|
|
20
|
+
//# sourceMappingURL=readme-assembler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readme-assembler.d.ts","sourceRoot":"","sources":["../../../src/core/mcp/readme-assembler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,eAAO,MAAM,kBAAkB,gBAAgB,CAAC;AA6BhD;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B,GAAI,aAAa,MAAM,KAAG,MAiDlE,CAAC"}
|