@kilnai/runtime 0.19.0 → 0.21.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/dist/gateway/auth-middleware.d.ts +9 -0
- package/dist/gateway/auth-middleware.d.ts.map +1 -1
- package/dist/gateway/auth-middleware.js +24 -0
- package/dist/gateway/auth-middleware.js.map +1 -1
- package/dist/gateway/context-formatter.d.ts +1 -0
- package/dist/gateway/context-formatter.d.ts.map +1 -1
- package/dist/gateway/context-formatter.js +5 -0
- package/dist/gateway/context-formatter.js.map +1 -1
- package/dist/gateway/gateway-routes.d.ts +3 -0
- package/dist/gateway/gateway-routes.d.ts.map +1 -1
- package/dist/gateway/gateway-routes.js +17 -0
- package/dist/gateway/gateway-routes.js.map +1 -1
- package/dist/gateway/gateway-server.d.ts.map +1 -1
- package/dist/gateway/gateway-server.js +121 -7
- package/dist/gateway/gateway-server.js.map +1 -1
- package/dist/gateway/jwt-verifier.d.ts +28 -0
- package/dist/gateway/jwt-verifier.d.ts.map +1 -0
- package/dist/gateway/jwt-verifier.js +44 -0
- package/dist/gateway/jwt-verifier.js.map +1 -0
- package/dist/gateway/message-pipeline.d.ts +1 -0
- package/dist/gateway/message-pipeline.d.ts.map +1 -1
- package/dist/gateway/message-pipeline.js +8 -3
- package/dist/gateway/message-pipeline.js.map +1 -1
- package/dist/gateway/mode-b-routes.d.ts.map +1 -1
- package/dist/gateway/mode-b-routes.js +18 -1
- package/dist/gateway/mode-b-routes.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/gateway-mcp-server.d.ts +49 -0
- package/dist/mcp/gateway-mcp-server.d.ts.map +1 -0
- package/dist/mcp/gateway-mcp-server.js +280 -0
- package/dist/mcp/gateway-mcp-server.js.map +1 -0
- package/dist/mcp/gateway-mcp-types.d.ts +68 -0
- package/dist/mcp/gateway-mcp-types.d.ts.map +1 -0
- package/dist/mcp/gateway-mcp-types.js +4 -0
- package/dist/mcp/gateway-mcp-types.js.map +1 -0
- package/dist/mcp/index.d.ts +6 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +4 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/tool-schemas.d.ts +563 -0
- package/dist/mcp/tool-schemas.d.ts.map +1 -0
- package/dist/mcp/tool-schemas.js +268 -0
- package/dist/mcp/tool-schemas.js.map +1 -0
- package/dist/session/mode-b-session.d.ts +7 -0
- package/dist/session/mode-b-session.d.ts.map +1 -1
- package/dist/session/mode-b-session.js +20 -0
- package/dist/session/mode-b-session.js.map +1 -1
- package/dist/session/session-serializer.d.ts.map +1 -1
- package/dist/session/session-serializer.js +1 -0
- package/dist/session/session-serializer.js.map +1 -1
- package/dist/tenant/agent-resolver.d.ts +4 -4
- package/dist/tenant/agent-resolver.d.ts.map +1 -1
- package/dist/tenant/agent-resolver.js +18 -16
- package/dist/tenant/agent-resolver.js.map +1 -1
- package/dist/tenant/interpolate-user-tokens.d.ts +8 -0
- package/dist/tenant/interpolate-user-tokens.d.ts.map +1 -0
- package/dist/tenant/interpolate-user-tokens.js +13 -0
- package/dist/tenant/interpolate-user-tokens.js.map +1 -0
- package/package.json +9 -4
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Context, Next } from "hono";
|
|
2
|
+
import type { JwtVerifyFn } from "./jwt-verifier.js";
|
|
2
3
|
/**
|
|
3
4
|
* Require API key via X-Api-Key header. Returns 401 if missing or invalid.
|
|
4
5
|
*/
|
|
@@ -13,6 +14,14 @@ export declare function requireBearer(token: string): (c: Context, next: Next) =
|
|
|
13
14
|
* Returns 401 if the header is missing or the signature is invalid.
|
|
14
15
|
*/
|
|
15
16
|
export declare function requireWebhookSignature(secret: string, headerName: string): (c: Context, next: Next) => Promise<Response | void>;
|
|
17
|
+
/**
|
|
18
|
+
* Require a valid JWT via Authorization: Bearer <token>.
|
|
19
|
+
* Verifies using the provided JwtVerifyFn (JWKS or HS256).
|
|
20
|
+
* Attaches the decoded payload to the Hono context under key "jwtPayload" for downstream use.
|
|
21
|
+
* Returns 401 if the header is missing, malformed, or the token is invalid/expired.
|
|
22
|
+
* No error details are leaked in the response body.
|
|
23
|
+
*/
|
|
24
|
+
export declare function requireJwt(verify: JwtVerifyFn): (c: Context, next: Next) => Promise<Response | void>;
|
|
16
25
|
/**
|
|
17
26
|
* Check if a WebSocket origin is allowed. Utility function, not middleware.
|
|
18
27
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-middleware.d.ts","sourceRoot":"","sources":["../../src/gateway/auth-middleware.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"auth-middleware.d.ts","sourceRoot":"","sources":["../../src/gateway/auth-middleware.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG1C,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,mBAAmB,CAAC;AAQjE;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAQ/F;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CASjG;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAetD;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAepG;AAID;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAYlG"}
|
|
@@ -52,6 +52,30 @@ export function requireWebhookSignature(secret, headerName) {
|
|
|
52
52
|
return next();
|
|
53
53
|
};
|
|
54
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Require a valid JWT via Authorization: Bearer <token>.
|
|
57
|
+
* Verifies using the provided JwtVerifyFn (JWKS or HS256).
|
|
58
|
+
* Attaches the decoded payload to the Hono context under key "jwtPayload" for downstream use.
|
|
59
|
+
* Returns 401 if the header is missing, malformed, or the token is invalid/expired.
|
|
60
|
+
* No error details are leaked in the response body.
|
|
61
|
+
*/
|
|
62
|
+
export function requireJwt(verify) {
|
|
63
|
+
return async (c, next) => {
|
|
64
|
+
const auth = c.req.header("authorization");
|
|
65
|
+
if (!auth || !auth.startsWith("Bearer ")) {
|
|
66
|
+
return c.json({ error: "unauthorized", message: "Missing or malformed Authorization header" }, 401);
|
|
67
|
+
}
|
|
68
|
+
const token = auth.slice(7);
|
|
69
|
+
try {
|
|
70
|
+
const payload = await verify(token);
|
|
71
|
+
c.set("jwtPayload", payload);
|
|
72
|
+
return next();
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return c.json({ error: "unauthorized", message: "Invalid or expired JWT" }, 401);
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
}
|
|
55
79
|
const LOCALHOST_HOSTNAMES = new Set(["localhost", "127.0.0.1"]);
|
|
56
80
|
/**
|
|
57
81
|
* Check if a WebSocket origin is allowed. Utility function, not middleware.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-middleware.js","sourceRoot":"","sources":["../../src/gateway/auth-middleware.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,mFAAmF;AAGnF,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"auth-middleware.js","sourceRoot":"","sources":["../../src/gateway/auth-middleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { VectorResult, ContactFact, GroundingMode } from "@kilnai/core";
|
|
2
2
|
export declare function formatKnowledgeContext(results: readonly VectorResult[]): string | undefined;
|
|
3
3
|
export declare function formatContactContext(facts: readonly ContactFact[]): string | undefined;
|
|
4
|
+
export declare function formatUserContext(ctx: Record<string, string> | undefined): string | undefined;
|
|
4
5
|
export declare function mergeContextSources(...sources: (string | undefined)[]): string | undefined;
|
|
5
6
|
export declare function appendGroundingDirective(context: string | undefined, groundingMode: GroundingMode | undefined): string | undefined;
|
|
6
7
|
//# sourceMappingURL=context-formatter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-formatter.d.ts","sourceRoot":"","sources":["../../src/gateway/context-formatter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAS7E,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,MAAM,GAAG,SAAS,CAG3F;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,MAAM,GAAG,SAAS,CAGtF;AAED,wBAAgB,mBAAmB,CAAC,GAAG,OAAO,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,GAAG,MAAM,GAAG,SAAS,CAG1F;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,aAAa,EAAE,aAAa,GAAG,SAAS,GACvC,MAAM,GAAG,SAAS,CAGpB"}
|
|
1
|
+
{"version":3,"file":"context-formatter.d.ts","sourceRoot":"","sources":["../../src/gateway/context-formatter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAS7E,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,MAAM,GAAG,SAAS,CAG3F;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,MAAM,GAAG,SAAS,CAGtF;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAG7F;AAED,wBAAgB,mBAAmB,CAAC,GAAG,OAAO,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,GAAG,MAAM,GAAG,SAAS,CAG1F;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,aAAa,EAAE,aAAa,GAAG,SAAS,GACvC,MAAM,GAAG,SAAS,CAGpB"}
|
|
@@ -14,6 +14,11 @@ export function formatContactContext(facts) {
|
|
|
14
14
|
return undefined;
|
|
15
15
|
return "--- Customer Context ---\n" + facts.map((f) => f.content).join("\n") + "\n---";
|
|
16
16
|
}
|
|
17
|
+
export function formatUserContext(ctx) {
|
|
18
|
+
if (!ctx || Object.keys(ctx).length === 0)
|
|
19
|
+
return undefined;
|
|
20
|
+
return "[User Context]:\n" + Object.entries(ctx).map(([k, v]) => `${k}: ${v}`).join("\n");
|
|
21
|
+
}
|
|
17
22
|
export function mergeContextSources(...sources) {
|
|
18
23
|
const filtered = sources.filter(Boolean);
|
|
19
24
|
return filtered.length > 0 ? filtered.join("\n\n") : undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-formatter.js","sourceRoot":"","sources":["../../src/gateway/context-formatter.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAI3F,MAAM,mBAAmB,GACvB,2BAA2B;IAC3B,yFAAyF;IACzF,qFAAqF;IACrF,sDAAsD;IACtD,+EAA+E,CAAC;AAElF,MAAM,UAAU,sBAAsB,CAAC,OAAgC;IACrE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3C,OAAO,wBAAwB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAA6B;IAChE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACzC,OAAO,4BAA4B,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;AACzF,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,GAAG,OAA+B;IACpE,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,OAA2B,EAC3B,aAAwC;IAExC,IAAI,CAAC,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,IAAI,aAAa,KAAK,UAAU,CAAC;QAAE,OAAO,OAAO,CAAC;IAC7F,OAAO,OAAO,GAAG,MAAM,GAAG,mBAAmB,CAAC;AAChD,CAAC"}
|
|
1
|
+
{"version":3,"file":"context-formatter.js","sourceRoot":"","sources":["../../src/gateway/context-formatter.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAI3F,MAAM,mBAAmB,GACvB,2BAA2B;IAC3B,yFAAyF;IACzF,qFAAqF;IACrF,sDAAsD;IACtD,+EAA+E,CAAC;AAElF,MAAM,UAAU,sBAAsB,CAAC,OAAgC;IACrE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3C,OAAO,wBAAwB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAA6B;IAChE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACzC,OAAO,4BAA4B,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;AACzF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAuC;IACvE,IAAI,CAAC,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5D,OAAO,mBAAmB,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5F,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,GAAG,OAA+B;IACpE,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,OAA2B,EAC3B,aAAwC;IAExC,IAAI,CAAC,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,IAAI,aAAa,KAAK,UAAU,CAAC;QAAE,OAAO,OAAO,CAAC;IAC7F,OAAO,OAAO,GAAG,MAAM,GAAG,mBAAmB,CAAC;AAChD,CAAC"}
|
|
@@ -22,6 +22,7 @@ import type { MemoryRoutesConfig } from "./memory-routes.js";
|
|
|
22
22
|
import type { TriggerRegistry } from "../trigger/trigger-registry.js";
|
|
23
23
|
import type { ConversationEventEmitter } from "./conversation-event-emitter.js";
|
|
24
24
|
import type { KnowledgePipelineResult } from "./knowledge-factory.js";
|
|
25
|
+
import type { JwtVerifyFn } from "./jwt-verifier.js";
|
|
25
26
|
export interface LoadedApp {
|
|
26
27
|
readonly name: string;
|
|
27
28
|
readonly app: App;
|
|
@@ -59,6 +60,8 @@ export interface GatewayServerConfig {
|
|
|
59
60
|
readonly studioDistPath?: string;
|
|
60
61
|
readonly upgradeWebSocket?: WsRoutesConfig["upgradeWebSocket"];
|
|
61
62
|
readonly validateToken?: WsRoutesConfig["validateToken"];
|
|
63
|
+
/** Gateway-level JWT verifier. When set, applied to all API and admin routes. */
|
|
64
|
+
readonly jwtVerifier?: JwtVerifyFn;
|
|
62
65
|
}
|
|
63
66
|
export declare function createGatewayApp(config: GatewayServerConfig): Hono;
|
|
64
67
|
//# sourceMappingURL=gateway-routes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway-routes.d.ts","sourceRoot":"","sources":["../../src/gateway/gateway-routes.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEhF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAE1E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAE5E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAE5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAExE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAE9E,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAEvF,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAIhF,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"gateway-routes.d.ts","sourceRoot":"","sources":["../../src/gateway/gateway-routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,7 @@ import { safetyMiddleware } from "./safety-middleware.js";
|
|
|
23
23
|
import { createDevRoutes } from "./dev-routes.js";
|
|
24
24
|
import { createDevInspectorHtml } from "./dev-inspector.js";
|
|
25
25
|
import { createMemoryRoutes } from "./memory-routes.js";
|
|
26
|
+
import { requireJwt } from "./auth-middleware.js";
|
|
26
27
|
export function createGatewayApp(config) {
|
|
27
28
|
const app = new Hono();
|
|
28
29
|
// Security middleware: prompt injection scanning (opt-in via securityConfig)
|
|
@@ -30,6 +31,8 @@ export function createGatewayApp(config) {
|
|
|
30
31
|
const scanner = new PromptScanner(config.securityConfig.promptInjection);
|
|
31
32
|
app.use("*", securityMiddleware(scanner, config.auditLog, config.securityConfig.promptInjection));
|
|
32
33
|
}
|
|
34
|
+
// JWT middleware factory -- created once, reused for all protected route groups
|
|
35
|
+
const jwtMiddleware = config.jwtVerifier ? requireJwt(config.jwtVerifier) : undefined;
|
|
33
36
|
// Health endpoint
|
|
34
37
|
app.get("/health", async (c) => {
|
|
35
38
|
const startTime = config.startTime ?? Date.now();
|
|
@@ -68,11 +71,25 @@ export function createGatewayApp(config) {
|
|
|
68
71
|
}
|
|
69
72
|
// Production memory routes (available in all modes)
|
|
70
73
|
if (config.memoryRoutesConfig) {
|
|
74
|
+
if (jwtMiddleware) {
|
|
75
|
+
app.use("/api/memory/*", jwtMiddleware);
|
|
76
|
+
}
|
|
71
77
|
const memoryRoutes = createMemoryRoutes(config.memoryRoutesConfig);
|
|
72
78
|
app.route("/api", memoryRoutes);
|
|
73
79
|
}
|
|
74
80
|
// Per-app routes
|
|
75
81
|
for (const loadedApp of config.apps) {
|
|
82
|
+
// JWT auth: applied to API/admin/outbound/handoff routes when gateway-level JWT is configured
|
|
83
|
+
if (jwtMiddleware) {
|
|
84
|
+
for (const channel of loadedApp.binding.channels) {
|
|
85
|
+
if (channel.type === "api" && channel.path) {
|
|
86
|
+
app.use(`${channel.path}/*`, jwtMiddleware);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
app.use(`/admin/${loadedApp.name}/*`, jwtMiddleware);
|
|
90
|
+
app.use(`/outbound/${loadedApp.name}/*`, jwtMiddleware);
|
|
91
|
+
app.use(`/handoff/${loadedApp.name}/*`, jwtMiddleware);
|
|
92
|
+
}
|
|
76
93
|
// Safety middleware per app (scans both input and output)
|
|
77
94
|
const safetyPipeline = config.safetyPipelines?.get(loadedApp.name);
|
|
78
95
|
if (safetyPipeline) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway-routes.js","sourceRoot":"","sources":["../../src/gateway/gateway-routes.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,4EAA4E;AAE5E,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAI7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAE3E,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAE7E,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAE7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAErE,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAEzE,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAElF,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"gateway-routes.js","sourceRoot":"","sources":["../../src/gateway/gateway-routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway-server.d.ts","sourceRoot":"","sources":["../../src/gateway/gateway-server.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAA6F,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAmClJ,YAAY,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAClI,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,YAAY,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,2DAA2D;IAC3D,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACtD,gFAAgF;IAChF,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAmDD,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"gateway-server.d.ts","sourceRoot":"","sources":["../../src/gateway/gateway-server.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAA6F,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAmClJ,YAAY,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAClI,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,YAAY,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,2DAA2D;IAC3D,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACtD,gFAAgF;IAChF,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAmDD,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAy5BnG;AAoJD,wBAAsB,cAAc,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuF9E"}
|
|
@@ -551,7 +551,7 @@ export async function startGateway(configPath, options) {
|
|
|
551
551
|
// Auth warnings: notify when channels lack auth configuration
|
|
552
552
|
for (const loaded of loadedApps) {
|
|
553
553
|
for (const channel of loaded.binding.channels) {
|
|
554
|
-
if (channel.type === "api" && channel.path && !channel.apiKeyEnv) {
|
|
554
|
+
if (channel.type === "api" && channel.path && !channel.apiKeyEnv && !gatewayConfig.auth) {
|
|
555
555
|
console.warn(` [warn] API channel at ${channel.path} has no apiKeyEnv -- endpoints are unauthenticated`);
|
|
556
556
|
}
|
|
557
557
|
if (channel.type === "whatsapp" && !channel.appSecretEnv) {
|
|
@@ -637,6 +637,24 @@ export async function startGateway(configPath, options) {
|
|
|
637
637
|
}
|
|
638
638
|
}
|
|
639
639
|
const tokenStore = options?.devMode ? new DevTokenStore() : undefined;
|
|
640
|
+
// JWT verifier: built once at startup when auth block is present in gateway.yaml
|
|
641
|
+
let jwtVerifier;
|
|
642
|
+
if (gatewayConfig.auth) {
|
|
643
|
+
try {
|
|
644
|
+
const { buildJwtVerifier } = await import("./jwt-verifier.js");
|
|
645
|
+
jwtVerifier = await buildJwtVerifier(gatewayConfig.auth);
|
|
646
|
+
const mode = gatewayConfig.auth.algorithm === "RS256"
|
|
647
|
+
? `RS256 JWKS (${gatewayConfig.auth.jwksUri})`
|
|
648
|
+
: `HS256 (${gatewayConfig.auth.secretEnv})`;
|
|
649
|
+
console.log(`Auth: JWT verification enabled -- ${mode}`);
|
|
650
|
+
}
|
|
651
|
+
catch (err) {
|
|
652
|
+
throw new KilnError("CONFIG_INVALID", `Failed to initialize JWT verifier: ${err instanceof Error ? err.message : String(err)}`, {
|
|
653
|
+
context: { algorithm: gatewayConfig.auth.algorithm },
|
|
654
|
+
retryable: false,
|
|
655
|
+
});
|
|
656
|
+
}
|
|
657
|
+
}
|
|
640
658
|
const { upgradeWebSocket, websocket: bunWebsocket } = createBunWebSocket();
|
|
641
659
|
const honoApp = createGatewayApp({
|
|
642
660
|
port,
|
|
@@ -648,6 +666,7 @@ export async function startGateway(configPath, options) {
|
|
|
648
666
|
safetyPipelines,
|
|
649
667
|
upgradeWebSocket,
|
|
650
668
|
validateToken: tokenStore ? (token) => tokenStore.validate(token) : undefined,
|
|
669
|
+
jwtVerifier,
|
|
651
670
|
devMode: options?.devMode,
|
|
652
671
|
studioDistPath,
|
|
653
672
|
devRoutesConfig: options?.devMode
|
|
@@ -704,8 +723,7 @@ export async function startGateway(configPath, options) {
|
|
|
704
723
|
getMemoryByScope: async (scope, q, tags) => {
|
|
705
724
|
if (!devMemoryStores)
|
|
706
725
|
return [];
|
|
707
|
-
const
|
|
708
|
-
const layer = validLayers.includes(scope) ? scope : "project";
|
|
726
|
+
const layer = resolveMemoryLayer(scope);
|
|
709
727
|
const store = devMemoryStores.get(layer);
|
|
710
728
|
if (!store)
|
|
711
729
|
return [];
|
|
@@ -737,10 +755,7 @@ export async function startGateway(configPath, options) {
|
|
|
737
755
|
createMemoryEntry: async (entry) => {
|
|
738
756
|
if (!devMemoryStores)
|
|
739
757
|
return { id: "" };
|
|
740
|
-
const
|
|
741
|
-
const layer = validLayers.includes(entry["layer"])
|
|
742
|
-
? entry["layer"]
|
|
743
|
-
: "project";
|
|
758
|
+
const layer = resolveMemoryLayer(entry["layer"]);
|
|
744
759
|
const store = devMemoryStores.get(layer);
|
|
745
760
|
if (!store)
|
|
746
761
|
return { id: "" };
|
|
@@ -820,6 +835,100 @@ export async function startGateway(configPath, options) {
|
|
|
820
835
|
const metrics = await registry.metrics();
|
|
821
836
|
return c.text(metrics, 200, { "Content-Type": registry.contentType });
|
|
822
837
|
});
|
|
838
|
+
// MCP server: expose gateway capabilities as MCP tools for external agents
|
|
839
|
+
let mcpServerInstance;
|
|
840
|
+
if (gatewayConfig.mcp?.enabled) {
|
|
841
|
+
try {
|
|
842
|
+
const { GatewayMcpServer } = await import("../mcp/gateway-mcp-server.js");
|
|
843
|
+
const mcpPath = gatewayConfig.mcp.path ?? "/mcp";
|
|
844
|
+
const mcpApiKey = gatewayConfig.mcp.auth?.type === "api-key" && gatewayConfig.mcp.auth.keyEnv
|
|
845
|
+
? process.env[gatewayConfig.mcp.auth.keyEnv]
|
|
846
|
+
: undefined;
|
|
847
|
+
const mcpServer = new GatewayMcpServer({
|
|
848
|
+
deps: {
|
|
849
|
+
getMemoryByScope: devMemoryStores
|
|
850
|
+
? async (scope, q, tags) => {
|
|
851
|
+
const layer = resolveMemoryLayer(scope);
|
|
852
|
+
const store = devMemoryStores.get(layer);
|
|
853
|
+
if (!store)
|
|
854
|
+
return [];
|
|
855
|
+
if (q) {
|
|
856
|
+
const results = await store.search(q, 100);
|
|
857
|
+
return results.map((r) => ({
|
|
858
|
+
id: r.entry.id, layer: r.entry.layer, content: r.entry.content,
|
|
859
|
+
tags: r.entry.tags, score: r.score, snippet: r.snippet,
|
|
860
|
+
}));
|
|
861
|
+
}
|
|
862
|
+
return store.listEntries({ tags }).map((e) => ({
|
|
863
|
+
id: e.id, layer: e.layer, content: e.content, tags: e.tags,
|
|
864
|
+
}));
|
|
865
|
+
}
|
|
866
|
+
: undefined,
|
|
867
|
+
createMemoryEntry: devMemoryStores
|
|
868
|
+
? async (entry) => {
|
|
869
|
+
const layer = resolveMemoryLayer(entry["scope"]);
|
|
870
|
+
const store = devMemoryStores.get(layer);
|
|
871
|
+
if (!store)
|
|
872
|
+
return { id: "" };
|
|
873
|
+
const content = typeof entry["content"] === "string" ? entry["content"] : String(entry["content"] ?? "");
|
|
874
|
+
const rawTags = typeof entry["tags"] === "string" ? entry["tags"].split(",").map((t) => t.trim()) : [];
|
|
875
|
+
const id = await store.save({ layer, content, tags: rawTags });
|
|
876
|
+
return { id };
|
|
877
|
+
}
|
|
878
|
+
: undefined,
|
|
879
|
+
deleteMemoryEntry: devMemoryStores
|
|
880
|
+
? async (id) => {
|
|
881
|
+
for (const store of devMemoryStores.values()) {
|
|
882
|
+
if (store.hasEntry(id)) {
|
|
883
|
+
await store.forget(id);
|
|
884
|
+
return true;
|
|
885
|
+
}
|
|
886
|
+
}
|
|
887
|
+
return false;
|
|
888
|
+
}
|
|
889
|
+
: undefined,
|
|
890
|
+
searchKnowledge: async (appName, query, limit) => {
|
|
891
|
+
const loaded = loadedApps.find((a) => a.name === appName);
|
|
892
|
+
if (!loaded?.knowledgePipeline)
|
|
893
|
+
return { results: [] };
|
|
894
|
+
const results = await loaded.knowledgePipeline.pipeline.retrieve(query, { topK: limit });
|
|
895
|
+
return {
|
|
896
|
+
results: results.map((r) => ({
|
|
897
|
+
content: r.content,
|
|
898
|
+
score: r.score,
|
|
899
|
+
source: r.metadata?.source,
|
|
900
|
+
})),
|
|
901
|
+
};
|
|
902
|
+
},
|
|
903
|
+
listKnowledgeSources: (appName) => {
|
|
904
|
+
const loaded = loadedApps.find((a) => a.name === appName);
|
|
905
|
+
if (!loaded?.knowledgeAdminConfig)
|
|
906
|
+
return { sources: [] };
|
|
907
|
+
const sources = loaded.knowledgeAdminConfig.sourceManager.list(appName);
|
|
908
|
+
return { sources: sources.map((s) => ({ ...s })) };
|
|
909
|
+
},
|
|
910
|
+
getCostSummary: () => costTracker.summary,
|
|
911
|
+
getSafetyMetrics: () => {
|
|
912
|
+
if (safetyPipelines.size === 0)
|
|
913
|
+
return { enabled: false };
|
|
914
|
+
const apps = {};
|
|
915
|
+
for (const [appName, pipeline] of safetyPipelines)
|
|
916
|
+
apps[appName] = pipeline.metrics;
|
|
917
|
+
return { enabled: true, apps };
|
|
918
|
+
},
|
|
919
|
+
},
|
|
920
|
+
apiKey: mcpApiKey,
|
|
921
|
+
});
|
|
922
|
+
await mcpServer.initialize();
|
|
923
|
+
mcpServerInstance = mcpServer;
|
|
924
|
+
honoApp.all(`${mcpPath}`, async (c) => mcpServer.handleRequest(c.req.raw));
|
|
925
|
+
honoApp.all(`${mcpPath}/*`, async (c) => mcpServer.handleRequest(c.req.raw));
|
|
926
|
+
console.log(`MCP server: listening on ${mcpPath}${mcpApiKey ? " (api-key auth)" : " (no auth)"}`);
|
|
927
|
+
}
|
|
928
|
+
catch (err) {
|
|
929
|
+
console.warn(`MCP server: failed to initialize -- ${err instanceof Error ? err.message : String(err)}`);
|
|
930
|
+
}
|
|
931
|
+
}
|
|
823
932
|
triggerRegistry.start();
|
|
824
933
|
const appNames = loadedApps.map((a) => a.name).join(", ");
|
|
825
934
|
console.log(`Gateway started on port ${port} with ${loadedApps.length} apps: ${appNames}`);
|
|
@@ -829,11 +938,16 @@ export async function startGateway(configPath, options) {
|
|
|
829
938
|
await serveAndWait(honoApp, port, () => {
|
|
830
939
|
triggerRegistry.stop();
|
|
831
940
|
webhookDedup.close();
|
|
941
|
+
mcpServerInstance?.close().catch(() => { });
|
|
832
942
|
for (const loaded of loadedApps) {
|
|
833
943
|
loaded.knowledgePipeline?.close().catch(() => { });
|
|
834
944
|
}
|
|
835
945
|
}, bunWebsocket);
|
|
836
946
|
}
|
|
947
|
+
const VALID_MEMORY_LAYERS = ["user", "agent", "project"];
|
|
948
|
+
function resolveMemoryLayer(scope) {
|
|
949
|
+
return VALID_MEMORY_LAYERS.includes(scope) ? scope : "project";
|
|
950
|
+
}
|
|
837
951
|
/** Create a ProviderAdapter from a Mode B provider config */
|
|
838
952
|
function createProviderFromConfig(config) {
|
|
839
953
|
const apiKey = config.apiKeyEnv ? process.env[config.apiKeyEnv] ?? "" : "";
|