@chnxthr/knowledge-mcp 0.0.0-stage → 0.3.0
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/LICENSE +21 -0
- package/README.md +37 -2
- package/dist/bootstrap.d.ts +1 -0
- package/dist/bootstrap.js +18 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +5 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/auth.d.ts +38 -0
- package/dist/core/auth.js +93 -0
- package/dist/core/auth.js.map +1 -0
- package/dist/core/config.d.ts +259 -0
- package/dist/core/config.js +172 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/context.d.ts +25 -0
- package/dist/core/context.js +37 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/env.d.ts +2 -0
- package/dist/core/env.js +5 -0
- package/dist/core/env.js.map +1 -0
- package/dist/core/log_mask.d.ts +10 -0
- package/dist/core/log_mask.js +88 -0
- package/dist/core/log_mask.js.map +1 -0
- package/dist/core/oauth.d.ts +46 -0
- package/dist/core/oauth.js +507 -0
- package/dist/core/oauth.js.map +1 -0
- package/dist/core/paths.d.ts +5 -0
- package/dist/core/paths.js +47 -0
- package/dist/core/paths.js.map +1 -0
- package/dist/core/scope.d.ts +28 -0
- package/dist/core/scope.js +54 -0
- package/dist/core/scope.js.map +1 -0
- package/dist/core/upstream.d.ts +30 -0
- package/dist/core/upstream.js +164 -0
- package/dist/core/upstream.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/plugin/define.d.ts +144 -0
- package/dist/plugin/define.js +44 -0
- package/dist/plugin/define.js.map +1 -0
- package/dist/plugin/load.d.ts +2 -0
- package/dist/plugin/load.js +41 -0
- package/dist/plugin/load.js.map +1 -0
- package/dist/plugin/ping.d.ts +9 -0
- package/dist/plugin/ping.js +29 -0
- package/dist/plugin/ping.js.map +1 -0
- package/dist/plugin/registry.d.ts +62 -0
- package/dist/plugin/registry.js +248 -0
- package/dist/plugin/registry.js.map +1 -0
- package/dist/plugin/result.d.ts +20 -0
- package/dist/plugin/result.js +59 -0
- package/dist/plugin/result.js.map +1 -0
- package/dist/plugins/drive/chunker.d.ts +28 -0
- package/dist/plugins/drive/chunker.js +356 -0
- package/dist/plugins/drive/chunker.js.map +1 -0
- package/dist/plugins/drive/clean_text.d.ts +13 -0
- package/dist/plugins/drive/clean_text.js +31 -0
- package/dist/plugins/drive/clean_text.js.map +1 -0
- package/dist/plugins/drive/client.d.ts +25 -0
- package/dist/plugins/drive/client.js +62 -0
- package/dist/plugins/drive/client.js.map +1 -0
- package/dist/plugins/drive/embeddings.d.ts +15 -0
- package/dist/plugins/drive/embeddings.js +118 -0
- package/dist/plugins/drive/embeddings.js.map +1 -0
- package/dist/plugins/drive/exclude.d.ts +11 -0
- package/dist/plugins/drive/exclude.js +36 -0
- package/dist/plugins/drive/exclude.js.map +1 -0
- package/dist/plugins/drive/extract_text.d.ts +26 -0
- package/dist/plugins/drive/extract_text.js +108 -0
- package/dist/plugins/drive/extract_text.js.map +1 -0
- package/dist/plugins/drive/get_token.d.ts +5 -0
- package/dist/plugins/drive/get_token.js +113 -0
- package/dist/plugins/drive/get_token.js.map +1 -0
- package/dist/plugins/drive/index.d.ts +5 -0
- package/dist/plugins/drive/index.js +72 -0
- package/dist/plugins/drive/index.js.map +1 -0
- package/dist/plugins/drive/indexer.d.ts +69 -0
- package/dist/plugins/drive/indexer.js +204 -0
- package/dist/plugins/drive/indexer.js.map +1 -0
- package/dist/plugins/drive/mathpix.d.ts +4 -0
- package/dist/plugins/drive/mathpix.js +102 -0
- package/dist/plugins/drive/mathpix.js.map +1 -0
- package/dist/plugins/drive/path.d.ts +40 -0
- package/dist/plugins/drive/path.js +87 -0
- package/dist/plugins/drive/path.js.map +1 -0
- package/dist/plugins/drive/qdrant.d.ts +50 -0
- package/dist/plugins/drive/qdrant.js +61 -0
- package/dist/plugins/drive/qdrant.js.map +1 -0
- package/dist/plugins/drive/reindex.d.ts +2 -0
- package/dist/plugins/drive/reindex.js +263 -0
- package/dist/plugins/drive/reindex.js.map +1 -0
- package/dist/plugins/drive/settings.d.ts +11 -0
- package/dist/plugins/drive/settings.js +13 -0
- package/dist/plugins/drive/settings.js.map +1 -0
- package/dist/plugins/drive/sync.d.ts +16 -0
- package/dist/plugins/drive/sync.js +139 -0
- package/dist/plugins/drive/sync.js.map +1 -0
- package/dist/plugins/drive/sync_state.d.ts +3 -0
- package/dist/plugins/drive/sync_state.js +26 -0
- package/dist/plugins/drive/sync_state.js.map +1 -0
- package/dist/plugins/drive/tools/list_drive_folder.d.ts +104 -0
- package/dist/plugins/drive/tools/list_drive_folder.js +221 -0
- package/dist/plugins/drive/tools/list_drive_folder.js.map +1 -0
- package/dist/plugins/drive/tools/read_drive_file.d.ts +66 -0
- package/dist/plugins/drive/tools/read_drive_file.js +206 -0
- package/dist/plugins/drive/tools/read_drive_file.js.map +1 -0
- package/dist/plugins/drive/tools/search_drive.d.ts +52 -0
- package/dist/plugins/drive/tools/search_drive.js +78 -0
- package/dist/plugins/drive/tools/search_drive.js.map +1 -0
- package/dist/plugins/drive/tools/semantic_search_drive.d.ts +109 -0
- package/dist/plugins/drive/tools/semantic_search_drive.js +228 -0
- package/dist/plugins/drive/tools/semantic_search_drive.js.map +1 -0
- package/dist/plugins/github/index.d.ts +1 -0
- package/dist/plugins/github/index.js +27 -0
- package/dist/plugins/github/index.js.map +1 -0
- package/dist/plugins/github/repo_tree.d.ts +57 -0
- package/dist/plugins/github/repo_tree.js +123 -0
- package/dist/plugins/github/repo_tree.js.map +1 -0
- package/dist/plugins/index.d.ts +11 -0
- package/dist/plugins/index.js +7 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/railway/index.d.ts +1 -0
- package/dist/plugins/railway/index.js +21 -0
- package/dist/plugins/railway/index.js.map +1 -0
- package/dist/plugins/railway/tools.d.ts +114 -0
- package/dist/plugins/railway/tools.js +165 -0
- package/dist/plugins/railway/tools.js.map +1 -0
- package/dist/plugins/slack/api.d.ts +63 -0
- package/dist/plugins/slack/api.js +280 -0
- package/dist/plugins/slack/api.js.map +1 -0
- package/dist/plugins/slack/index.d.ts +1 -0
- package/dist/plugins/slack/index.js +80 -0
- package/dist/plugins/slack/index.js.map +1 -0
- package/dist/plugins/slack/tools/slack_files.d.ts +87 -0
- package/dist/plugins/slack/tools/slack_files.js +204 -0
- package/dist/plugins/slack/tools/slack_files.js.map +1 -0
- package/dist/plugins/slack/tools/slack_list_channels.d.ts +46 -0
- package/dist/plugins/slack/tools/slack_list_channels.js +197 -0
- package/dist/plugins/slack/tools/slack_list_channels.js.map +1 -0
- package/dist/plugins/slack/tools/slack_read_channel.d.ts +56 -0
- package/dist/plugins/slack/tools/slack_read_channel.js +150 -0
- package/dist/plugins/slack/tools/slack_read_channel.js.map +1 -0
- package/dist/plugins/slack/tools/slack_search.d.ts +53 -0
- package/dist/plugins/slack/tools/slack_search.js +132 -0
- package/dist/plugins/slack/tools/slack_search.js.map +1 -0
- package/dist/run.d.ts +8 -0
- package/dist/run.js +270 -0
- package/dist/run.js.map +1 -0
- package/dist/server/http.d.ts +5 -0
- package/dist/server/http.js +406 -0
- package/dist/server/http.js.map +1 -0
- package/dist/server/identity.d.ts +17 -0
- package/dist/server/identity.js +47 -0
- package/dist/server/identity.js.map +1 -0
- package/dist/server/mcp.d.ts +7 -0
- package/dist/server/mcp.js +55 -0
- package/dist/server/mcp.js.map +1 -0
- package/dist/server/stdio.d.ts +2 -0
- package/dist/server/stdio.js +40 -0
- package/dist/server/stdio.js.map +1 -0
- package/dist/store/index.d.ts +11 -0
- package/dist/store/index.js +31 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/keys.d.ts +9 -0
- package/dist/store/keys.js +32 -0
- package/dist/store/keys.js.map +1 -0
- package/dist/store/sqlite.d.ts +38 -0
- package/dist/store/sqlite.js +316 -0
- package/dist/store/sqlite.js.map +1 -0
- package/dist/store/supabase.d.ts +35 -0
- package/dist/store/supabase.js +269 -0
- package/dist/store/supabase.js.map +1 -0
- package/dist/store/supabase_client.d.ts +10 -0
- package/dist/store/supabase_client.js +31 -0
- package/dist/store/supabase_client.js.map +1 -0
- package/dist/store/tool_log.d.ts +12 -0
- package/dist/store/tool_log.js +8 -0
- package/dist/store/tool_log.js.map +1 -0
- package/dist/store/types.d.ts +96 -0
- package/dist/store/types.js +2 -0
- package/dist/store/types.js.map +1 -0
- package/dist/version.d.ts +1 -0
- package/dist/version.js +11 -0
- package/dist/version.js.map +1 -0
- package/package.json +84 -4
- package/sql/supabase.sql +185 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AsyncLocalStorage 기반 request-scoped AuthContext.
|
|
3
|
+
*
|
|
4
|
+
* HTTP transport 에선 per-request 마다 다른 사용자가 호출 →
|
|
5
|
+
* Express middleware 에서 authStore.run() 안에 transport.handleRequest() 감싸면
|
|
6
|
+
* tool handler 가 getAuth() 로 현재 호출자 확인 가능.
|
|
7
|
+
*
|
|
8
|
+
* stdio transport 에선 한 프로세스 = 한 사용자라 setProcessAuth() 로 프로세스 전체 값을 둔다.
|
|
9
|
+
* (enterWith 는 그 뒤에 생기는 비동기 작업에만 전파되고, stdin 핸들은 그 전에 만들어져
|
|
10
|
+
* 도구 호출 콜백에서 getStore() 가 비어 모든 호출이 거부됐다.)
|
|
11
|
+
*/
|
|
12
|
+
import { AsyncLocalStorage } from 'async_hooks';
|
|
13
|
+
import type { AuthContext } from './auth.js';
|
|
14
|
+
export declare const authStore: AsyncLocalStorage<AuthContext>;
|
|
15
|
+
/** stdio 시작 시 1회 — 이 프로세스의 모든 도구 호출이 이 인증으로 처리된다. */
|
|
16
|
+
export declare function setProcessAuth(auth: AuthContext): void;
|
|
17
|
+
/**
|
|
18
|
+
* 현재 request 의 AuthContext 반환. 없거나 ok=false 면 throw.
|
|
19
|
+
* Tool handler 안에서 호출.
|
|
20
|
+
*/
|
|
21
|
+
export declare function getAuth(): AuthContext;
|
|
22
|
+
/**
|
|
23
|
+
* 옵션: ok 여부 무관하게 반환. middleware error response 생성 시 사용.
|
|
24
|
+
*/
|
|
25
|
+
export declare function getAuthMaybe(): AuthContext | undefined;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AsyncLocalStorage 기반 request-scoped AuthContext.
|
|
3
|
+
*
|
|
4
|
+
* HTTP transport 에선 per-request 마다 다른 사용자가 호출 →
|
|
5
|
+
* Express middleware 에서 authStore.run() 안에 transport.handleRequest() 감싸면
|
|
6
|
+
* tool handler 가 getAuth() 로 현재 호출자 확인 가능.
|
|
7
|
+
*
|
|
8
|
+
* stdio transport 에선 한 프로세스 = 한 사용자라 setProcessAuth() 로 프로세스 전체 값을 둔다.
|
|
9
|
+
* (enterWith 는 그 뒤에 생기는 비동기 작업에만 전파되고, stdin 핸들은 그 전에 만들어져
|
|
10
|
+
* 도구 호출 콜백에서 getStore() 가 비어 모든 호출이 거부됐다.)
|
|
11
|
+
*/
|
|
12
|
+
import { AsyncLocalStorage } from 'async_hooks';
|
|
13
|
+
export const authStore = new AsyncLocalStorage();
|
|
14
|
+
// stdio 전용 프로세스 단위 인증. HTTP 에서는 설정하지 않는다(요청마다 authStore.run).
|
|
15
|
+
let _processAuth;
|
|
16
|
+
/** stdio 시작 시 1회 — 이 프로세스의 모든 도구 호출이 이 인증으로 처리된다. */
|
|
17
|
+
export function setProcessAuth(auth) {
|
|
18
|
+
_processAuth = auth;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* 현재 request 의 AuthContext 반환. 없거나 ok=false 면 throw.
|
|
22
|
+
* Tool handler 안에서 호출.
|
|
23
|
+
*/
|
|
24
|
+
export function getAuth() {
|
|
25
|
+
const auth = authStore.getStore() ?? _processAuth;
|
|
26
|
+
if (!auth || !auth.ok) {
|
|
27
|
+
throw new Error('[context] auth not initialized or not ok');
|
|
28
|
+
}
|
|
29
|
+
return auth;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* 옵션: ok 여부 무관하게 반환. middleware error response 생성 시 사용.
|
|
33
|
+
*/
|
|
34
|
+
export function getAuthMaybe() {
|
|
35
|
+
return authStore.getStore() ?? _processAuth;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGhD,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,iBAAiB,EAAe,CAAC;AAE9D,8DAA8D;AAC9D,IAAI,YAAqC,CAAC;AAE1C,qDAAqD;AACrD,MAAM,UAAU,cAAc,CAAC,IAAiB;IAC9C,YAAY,GAAG,IAAI,CAAC;AACtB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,OAAO;IACrB,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE,IAAI,YAAY,CAAC;IAClD,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,SAAS,CAAC,QAAQ,EAAE,IAAI,YAAY,CAAC;AAC9C,CAAC"}
|
package/dist/core/env.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/core/env.ts"],"names":[],"mappings":"AAAA,6GAA6G;AAC7G,MAAM,UAAU,KAAK,CAAC,CAAqB;IACzC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** 문자열에서 시크릿(구체값 + 일반 패턴)을 [REDACTED] 로 가린다. */
|
|
2
|
+
export declare function maskString(input: string): string;
|
|
3
|
+
/**
|
|
4
|
+
* console.{log,error,warn,info,debug} 를 마스킹 래퍼로 교체 (1회).
|
|
5
|
+
* .env 를 읽은 직후·다른 로직 전에 호출해야 이후 모든 로그가 마스킹된다(bootstrap.ts).
|
|
6
|
+
* 화면에 그대로 보여야 하는 값(새 API 키)은 console 이 아니라 process.stdout.write 로 쓴다.
|
|
7
|
+
*/
|
|
8
|
+
export declare function installLogMasking(): void;
|
|
9
|
+
/** 부팅 로그 한 줄용 — 마스킹 중인 env 시크릿 개수. */
|
|
10
|
+
export declare function maskedSecretCount(): number;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 전역 로그 마스킹 — console.* 출력에서 시크릿을 가린다.
|
|
3
|
+
*
|
|
4
|
+
* 왜: 에러 객체(gaxios/fetch 의 request config·Authorization 헤더, Qdrant·Slack·upstream
|
|
5
|
+
* 에러, uncaughtException/unhandledRejection stack)를 통째로 로깅할 때 토큰·API 키가 평문으로
|
|
6
|
+
* Railway 로그에 남을 수 있다. 노출 지점을 하나씩 막는 대신 console 진입을 한 곳에서 가로채
|
|
7
|
+
* 마스킹한다(포괄·방어적).
|
|
8
|
+
*
|
|
9
|
+
* 2축 마스킹:
|
|
10
|
+
* 1) 구체값 — process.env 의 민감 키 값(길이 ≥ 10)을 정확 매칭으로 제거. 가장 확실(키 자체를 지움).
|
|
11
|
+
* 2) 패턴 — sk-/AIza/Bearer/xox/gh*_/JWT/api_key=/PEM private key 등 일반 시크릿 형태.
|
|
12
|
+
*
|
|
13
|
+
* fail-open: 마스킹 중 오류가 나도 원본 로깅은 보장한다(보안 기능이 로깅 자체를 깨면 안 됨).
|
|
14
|
+
*/
|
|
15
|
+
import { inspect } from 'util';
|
|
16
|
+
const REDACTED = '[REDACTED]';
|
|
17
|
+
/** 값이 시크릿일 가능성이 큰 env 키 이름. PAT 은 단어 단위로만(PATH 같은 이름 오탐 방지). */
|
|
18
|
+
const SECRET_KEY_NAME = /(KEY|TOKEN|SECRET|PASSWORD|CREDENTIAL|PRIVATE|REFRESH|SIGNING)|(^|_)PAT($|_)/i;
|
|
19
|
+
/** false-positive 방지 — 키 이름이 위에 걸려도 값이 흔한 비밀-아님이면 제외 */
|
|
20
|
+
const SAFE_VALUES = new Set(['true', 'false', 'production', 'development', 'http', 'https', 'none', 'null']);
|
|
21
|
+
let _installed = false;
|
|
22
|
+
let _envSecretRe = null;
|
|
23
|
+
let _envSecretCount = 0;
|
|
24
|
+
function escapeRegExp(s) {
|
|
25
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
26
|
+
}
|
|
27
|
+
/** process.env 에서 마스킹할 구체 시크릿 값을 모은다 (길이 내림차순 — 긴 값 먼저 치환). */
|
|
28
|
+
function collectEnvSecrets() {
|
|
29
|
+
const out = [];
|
|
30
|
+
for (const [k, v] of Object.entries(process.env)) {
|
|
31
|
+
if (!v || v.length < 10)
|
|
32
|
+
continue;
|
|
33
|
+
if (SAFE_VALUES.has(v.toLowerCase()))
|
|
34
|
+
continue;
|
|
35
|
+
if (SECRET_KEY_NAME.test(k))
|
|
36
|
+
out.push(v);
|
|
37
|
+
}
|
|
38
|
+
return [...new Set(out)].sort((a, b) => b.length - a.length);
|
|
39
|
+
}
|
|
40
|
+
/** 문자열에서 시크릿(구체값 + 일반 패턴)을 [REDACTED] 로 가린다. */
|
|
41
|
+
export function maskString(input) {
|
|
42
|
+
if (!input)
|
|
43
|
+
return input;
|
|
44
|
+
let out = input;
|
|
45
|
+
// 1) env 구체값 (가장 확실)
|
|
46
|
+
if (_envSecretRe)
|
|
47
|
+
out = out.replace(_envSecretRe, REDACTED);
|
|
48
|
+
// 2) 일반 패턴
|
|
49
|
+
out = out.replace(/-----BEGIN[A-Z ]*PRIVATE KEY-----[\s\S]*?-----END[A-Z ]*PRIVATE KEY-----/g, '[REDACTED PRIVATE KEY]');
|
|
50
|
+
out = out.replace(/eyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{6,}\.[A-Za-z0-9_-]{4,}/g, REDACTED); // JWT
|
|
51
|
+
out = out.replace(/\b(sk-[A-Za-z0-9_-]{8,}|AIza[A-Za-z0-9_-]{10,}|xox[bpsar]-[A-Za-z0-9-]{8,}|gh[pousr]_[A-Za-z0-9]{16,}|github_pat_[A-Za-z0-9_]{20,}|kmcp_[A-Za-z0-9_-]{20,})/g, REDACTED);
|
|
52
|
+
out = out.replace(/\bBearer\s+[A-Za-z0-9._~+/-]{12,}=*/gi, `Bearer ${REDACTED}`);
|
|
53
|
+
out = out.replace(/\b(api[-_]?key|access[-_]?token|refresh[-_]?token|client[-_]?secret|authorization)(["':=\s]+)[A-Za-z0-9._-]{8,}/gi, (_m, key, sep) => `${key}${sep}${REDACTED}`);
|
|
54
|
+
return out;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* console.{log,error,warn,info,debug} 를 마스킹 래퍼로 교체 (1회).
|
|
58
|
+
* .env 를 읽은 직후·다른 로직 전에 호출해야 이후 모든 로그가 마스킹된다(bootstrap.ts).
|
|
59
|
+
* 화면에 그대로 보여야 하는 값(새 API 키)은 console 이 아니라 process.stdout.write 로 쓴다.
|
|
60
|
+
*/
|
|
61
|
+
export function installLogMasking() {
|
|
62
|
+
if (_installed)
|
|
63
|
+
return;
|
|
64
|
+
_installed = true;
|
|
65
|
+
const secrets = collectEnvSecrets();
|
|
66
|
+
_envSecretCount = secrets.length;
|
|
67
|
+
_envSecretRe = secrets.length ? new RegExp(secrets.map(escapeRegExp).join('|'), 'g') : null;
|
|
68
|
+
const methods = ['log', 'error', 'warn', 'info', 'debug'];
|
|
69
|
+
for (const m of methods) {
|
|
70
|
+
const orig = console[m].bind(console);
|
|
71
|
+
console[m] = (...args) => {
|
|
72
|
+
try {
|
|
73
|
+
const masked = args.map((a) => typeof a === 'string'
|
|
74
|
+
? maskString(a)
|
|
75
|
+
: maskString(inspect(a, { depth: 4, breakLength: Infinity })));
|
|
76
|
+
orig(...masked);
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
orig(...args); // fail-open — 마스킹 실패가 로깅을 막지 않음
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/** 부팅 로그 한 줄용 — 마스킹 중인 env 시크릿 개수. */
|
|
85
|
+
export function maskedSecretCount() {
|
|
86
|
+
return _envSecretCount;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=log_mask.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log_mask.js","sourceRoot":"","sources":["../../src/core/log_mask.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,MAAM,QAAQ,GAAG,YAAY,CAAC;AAE9B,gEAAgE;AAChE,MAAM,eAAe,GAAG,+EAA+E,CAAC;AACxG,wDAAwD;AACxD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE7G,IAAI,UAAU,GAAG,KAAK,CAAC;AACvB,IAAI,YAAY,GAAkB,IAAI,CAAC;AACvC,IAAI,eAAe,GAAG,CAAC,CAAC;AAExB,SAAS,YAAY,CAAC,CAAS;IAC7B,OAAO,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,+DAA+D;AAC/D,SAAS,iBAAiB;IACxB,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,EAAE;YAAE,SAAS;QAClC,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAAE,SAAS;QAC/C,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;AAC/D,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,IAAI,GAAG,GAAG,KAAK,CAAC;IAChB,qBAAqB;IACrB,IAAI,YAAY;QAAE,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IAC5D,WAAW;IACX,GAAG,GAAG,GAAG,CAAC,OAAO,CACf,2EAA2E,EAC3E,wBAAwB,CACzB,CAAC;IACF,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,8DAA8D,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM;IACnG,GAAG,GAAG,GAAG,CAAC,OAAO,CACf,8JAA8J,EAC9J,QAAQ,CACT,CAAC;IACF,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,uCAAuC,EAAE,UAAU,QAAQ,EAAE,CAAC,CAAC;IACjF,GAAG,GAAG,GAAG,CAAC,OAAO,CACf,mHAAmH,EACnH,CAAC,EAAE,EAAE,GAAW,EAAE,GAAW,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,QAAQ,EAAE,CAC5D,CAAC;IACF,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB;IAC/B,IAAI,UAAU;QAAE,OAAO;IACvB,UAAU,GAAG,IAAI,CAAC;IAElB,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IACpC,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IACjC,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE5F,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAU,CAAC;IACnE,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE;YAClC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC5B,OAAO,CAAC,KAAK,QAAQ;oBACnB,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;oBACf,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC,CAChE,CAAC;gBACF,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;YAClB,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,gCAAgC;YACjD,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;AACH,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,iBAAiB;IAC/B,OAAO,eAAe,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { Response } from 'express';
|
|
2
|
+
import type { OAuthServerProvider, AuthorizationParams } from '@modelcontextprotocol/sdk/server/auth/provider.js';
|
|
3
|
+
import type { OAuthRegisteredClientsStore } from '@modelcontextprotocol/sdk/server/auth/clients.js';
|
|
4
|
+
import type { AuthInfo } from '@modelcontextprotocol/sdk/server/auth/types.js';
|
|
5
|
+
import type { OAuthClientInformationFull, OAuthTokens } from '@modelcontextprotocol/sdk/shared/auth.js';
|
|
6
|
+
export declare const CONSENT_COOKIE = "kmcp_consent";
|
|
7
|
+
export declare const CONSENT_PATH = "/oauth/consent";
|
|
8
|
+
/** OAuth 를 켜는 데 빠진 값 목록 (이름만, 값은 노출 안 함). 빈 배열이면 켤 수 있다. */
|
|
9
|
+
export declare function oauthConfigProblems(): string[];
|
|
10
|
+
/** OAuth 를 하나라도 설정하려 한 흔적이 있는가 — 반쯤 설정된 상태를 부팅 로그에서 크게 알리기 위함. */
|
|
11
|
+
export declare function oauthAttempted(): boolean;
|
|
12
|
+
/** OAuth 활성 조건 — 필수 값이 모두 있어야 함. 없으면 index 가 라우터 미장착(기존 Bearer 유지). */
|
|
13
|
+
export declare function isOAuthConfigured(): boolean;
|
|
14
|
+
export declare const OAUTH_ISSUER_URL: string;
|
|
15
|
+
export declare const OAUTH_RESOURCE: string;
|
|
16
|
+
export declare const OAUTH_SCOPES: string[];
|
|
17
|
+
export declare class KnowledgeOAuthProvider implements OAuthServerProvider {
|
|
18
|
+
private _clients;
|
|
19
|
+
get clientsStore(): OAuthRegisteredClientsStore;
|
|
20
|
+
skipLocalPkceValidation: boolean;
|
|
21
|
+
/**
|
|
22
|
+
* authorize: 동의 화면을 먼저 보여 준다. 승인(POST /oauth/consent)이 와야 Google 로그인으로 넘긴다.
|
|
23
|
+
* 우리 code 는 Google 콜백에서 발급.
|
|
24
|
+
*/
|
|
25
|
+
authorize(client: OAuthClientInformationFull, params: AuthorizationParams, res: Response): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* 동의 화면의 POST 처리 (server/http.ts 의 POST /oauth/consent 가 호출). 돌려줄 redirect URL 을 반환한다.
|
|
28
|
+
* 승인: 폼 csrf·쿠키 csrf·저장된 csrf 가 모두 같을 때만 Google 로그인으로. 거절: client 로 access_denied.
|
|
29
|
+
* 검증 실패는 throw — 호출부가 400 으로 끝낸다(공격자 redirect_uri 로 보내지 않는다).
|
|
30
|
+
*/
|
|
31
|
+
consumeConsent(id: string, formCsrf: string, cookieCsrf: string, approve: boolean): string;
|
|
32
|
+
/** Google 로그인 URL 을 만들고 state 를 기록한다. */
|
|
33
|
+
private googleRedirect;
|
|
34
|
+
/**
|
|
35
|
+
* Google 콜백 처리 (server/http.ts 의 /oauth/google/callback 라우트가 호출).
|
|
36
|
+
* 성공/실패 모두 client redirect_uri 로 돌려보낼 URL 을 반환한다.
|
|
37
|
+
*/
|
|
38
|
+
completeGoogleLogin(googleCode: string, state: string): Promise<string>;
|
|
39
|
+
challengeForAuthorizationCode(_client: OAuthClientInformationFull, authorizationCode: string): Promise<string>;
|
|
40
|
+
exchangeAuthorizationCode(client: OAuthClientInformationFull, authorizationCode: string, _codeVerifier?: string, // SDK 가 challengeForAuthorizationCode 와 PKCE 검증 완료
|
|
41
|
+
redirectUri?: string, _resource?: URL): Promise<OAuthTokens>;
|
|
42
|
+
exchangeRefreshToken(client: OAuthClientInformationFull, refreshToken: string, scopes?: string[], _resource?: URL): Promise<OAuthTokens>;
|
|
43
|
+
/** RS: access token 검증 (requireBearerAuth + 우리 /mcp dual-auth 가 사용) */
|
|
44
|
+
verifyAccessToken(token: string): Promise<AuthInfo>;
|
|
45
|
+
}
|
|
46
|
+
export declare const oauthProvider: KnowledgeOAuthProvider;
|