@relkit/runtime-hono 0.0.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 +5 -0
- package/dist/api-docs.d.ts +21 -0
- package/dist/api-docs.d.ts.map +1 -0
- package/dist/api-docs.js +91 -0
- package/dist/api-docs.js.map +1 -0
- package/dist/auth.d.ts +18 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +52 -0
- package/dist/auth.js.map +1 -0
- package/dist/client-contract.d.ts +8 -0
- package/dist/client-contract.d.ts.map +1 -0
- package/dist/client-contract.js +10 -0
- package/dist/client-contract.js.map +1 -0
- package/dist/create-app.d.ts +22 -0
- package/dist/create-app.d.ts.map +1 -0
- package/dist/create-app.js +76 -0
- package/dist/create-app.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/internal-endpoints-utils.d.ts +16 -0
- package/dist/internal-endpoints-utils.d.ts.map +1 -0
- package/dist/internal-endpoints-utils.js +154 -0
- package/dist/internal-endpoints-utils.js.map +1 -0
- package/dist/internal-endpoints.d.ts +58 -0
- package/dist/internal-endpoints.d.ts.map +1 -0
- package/dist/internal-endpoints.js +106 -0
- package/dist/internal-endpoints.js.map +1 -0
- package/dist/materialize-routes-utils.d.ts +8 -0
- package/dist/materialize-routes-utils.d.ts.map +1 -0
- package/dist/materialize-routes-utils.js +82 -0
- package/dist/materialize-routes-utils.js.map +1 -0
- package/dist/materialize-routes.d.ts +90 -0
- package/dist/materialize-routes.d.ts.map +1 -0
- package/dist/materialize-routes.js +86 -0
- package/dist/materialize-routes.js.map +1 -0
- package/dist/mcp.d.ts +7 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +81 -0
- package/dist/mcp.js.map +1 -0
- package/dist/middleware-limits.d.ts +4 -0
- package/dist/middleware-limits.d.ts.map +1 -0
- package/dist/middleware-limits.js +53 -0
- package/dist/middleware-limits.js.map +1 -0
- package/dist/middleware-utils.d.ts +57 -0
- package/dist/middleware-utils.d.ts.map +1 -0
- package/dist/middleware-utils.js +90 -0
- package/dist/middleware-utils.js.map +1 -0
- package/dist/middleware.d.ts +17 -0
- package/dist/middleware.d.ts.map +1 -0
- package/dist/middleware.js +106 -0
- package/dist/middleware.js.map +1 -0
- package/dist/rate-limit-store.d.ts +17 -0
- package/dist/rate-limit-store.d.ts.map +1 -0
- package/dist/rate-limit-store.js +77 -0
- package/dist/rate-limit-store.js.map +1 -0
- package/dist/rate-limit-telemetry.d.ts +8 -0
- package/dist/rate-limit-telemetry.d.ts.map +1 -0
- package/dist/rate-limit-telemetry.js +57 -0
- package/dist/rate-limit-telemetry.js.map +1 -0
- package/dist/rate-limit.d.ts +12 -0
- package/dist/rate-limit.d.ts.map +1 -0
- package/dist/rate-limit.js +126 -0
- package/dist/rate-limit.js.map +1 -0
- package/dist/request-context.d.ts +4 -0
- package/dist/request-context.d.ts.map +1 -0
- package/dist/request-context.js +65 -0
- package/dist/request-context.js.map +1 -0
- package/dist/request-mapping-body.d.ts +27 -0
- package/dist/request-mapping-body.d.ts.map +1 -0
- package/dist/request-mapping-body.js +101 -0
- package/dist/request-mapping-body.js.map +1 -0
- package/dist/request-mapping-fields.d.ts +16 -0
- package/dist/request-mapping-fields.d.ts.map +1 -0
- package/dist/request-mapping-fields.js +63 -0
- package/dist/request-mapping-fields.js.map +1 -0
- package/dist/request-mapping-object.d.ts +14 -0
- package/dist/request-mapping-object.d.ts.map +1 -0
- package/dist/request-mapping-object.js +26 -0
- package/dist/request-mapping-object.js.map +1 -0
- package/dist/request-mapping-sources.d.ts +7 -0
- package/dist/request-mapping-sources.d.ts.map +1 -0
- package/dist/request-mapping-sources.js +60 -0
- package/dist/request-mapping-sources.js.map +1 -0
- package/dist/request-mapping-transform.d.ts +3 -0
- package/dist/request-mapping-transform.d.ts.map +1 -0
- package/dist/request-mapping-transform.js +55 -0
- package/dist/request-mapping-transform.js.map +1 -0
- package/dist/request-mapping.d.ts +33 -0
- package/dist/request-mapping.d.ts.map +1 -0
- package/dist/request-mapping.js +111 -0
- package/dist/request-mapping.js.map +1 -0
- package/dist/request-record-middleware.d.ts +6 -0
- package/dist/request-record-middleware.d.ts.map +1 -0
- package/dist/request-record-middleware.js +58 -0
- package/dist/request-record-middleware.js.map +1 -0
- package/dist/request-record-utils.d.ts +11 -0
- package/dist/request-record-utils.d.ts.map +1 -0
- package/dist/request-record-utils.js +71 -0
- package/dist/request-record-utils.js.map +1 -0
- package/dist/response-mapping-utils.d.ts +19 -0
- package/dist/response-mapping-utils.d.ts.map +1 -0
- package/dist/response-mapping-utils.js +72 -0
- package/dist/response-mapping-utils.js.map +1 -0
- package/dist/response-mapping.d.ts +18 -0
- package/dist/response-mapping.d.ts.map +1 -0
- package/dist/response-mapping.js +100 -0
- package/dist/response-mapping.js.map +1 -0
- package/dist/route-middleware.d.ts +4 -0
- package/dist/route-middleware.d.ts.map +1 -0
- package/dist/route-middleware.js +62 -0
- package/dist/route-middleware.js.map +1 -0
- package/dist/rpc.d.ts +4 -0
- package/dist/rpc.d.ts.map +1 -0
- package/dist/rpc.js +163 -0
- package/dist/rpc.js.map +1 -0
- package/dist/static-files.d.ts +6 -0
- package/dist/static-files.d.ts.map +1 -0
- package/dist/static-files.js +100 -0
- package/dist/static-files.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import * as contracts from "@relkit/contracts";
|
|
2
|
+
import type { RegistrationPlan } from "@relkit/graph";
|
|
3
|
+
import type { Hono } from "hono";
|
|
4
|
+
export declare const INTERNAL_ENDPOINT_PROTOCOL: "relkit.inspector";
|
|
5
|
+
export declare const INTERNAL_ENDPOINT_VERSION: 1;
|
|
6
|
+
export declare const INTERNAL_ENDPOINT_PATHS: readonly ["/_relkit/v1/health/live", "/_relkit/v1/health/ready", "/_relkit/v1/graph", "/_relkit/v1/requests", "/_relkit/v1/logs", "/_relkit/v1/traces", "/_relkit/v1/stream", "/_relkit/v1/diagnostics"];
|
|
7
|
+
export type InternalEndpointMode = "development" | "test" | "production";
|
|
8
|
+
export interface InternalQuery {
|
|
9
|
+
readonly cursor?: string;
|
|
10
|
+
readonly limit: number;
|
|
11
|
+
readonly from?: string;
|
|
12
|
+
readonly to?: string;
|
|
13
|
+
readonly severity?: string;
|
|
14
|
+
readonly routeId?: string;
|
|
15
|
+
readonly functionId?: string;
|
|
16
|
+
readonly outcome?: string;
|
|
17
|
+
readonly requestId?: string;
|
|
18
|
+
readonly traceId?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface InternalPage {
|
|
21
|
+
readonly [key: string]: contracts.JsonValue;
|
|
22
|
+
readonly items: readonly contracts.JsonValue[];
|
|
23
|
+
readonly nextCursor?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface InternalReadiness {
|
|
26
|
+
readonly ready: boolean;
|
|
27
|
+
readonly reason?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface InternalStreamEvent {
|
|
30
|
+
readonly [key: string]: contracts.JsonValue;
|
|
31
|
+
readonly cursor: string;
|
|
32
|
+
readonly type: string;
|
|
33
|
+
readonly data: contracts.JsonValue;
|
|
34
|
+
}
|
|
35
|
+
export type QuerySource = contracts.JsonValue | InternalPage | ((query: InternalQuery) => contracts.MaybePromise<contracts.JsonValue | InternalPage>);
|
|
36
|
+
export type ValueSource<T> = T | (() => contracts.MaybePromise<T>);
|
|
37
|
+
export interface InternalEndpointOptions {
|
|
38
|
+
readonly mode?: InternalEndpointMode;
|
|
39
|
+
readonly environment?: InternalEndpointMode;
|
|
40
|
+
readonly enabled?: boolean;
|
|
41
|
+
readonly bearerToken?: string;
|
|
42
|
+
readonly authorize?: (request: Request) => contracts.MaybePromise<boolean>;
|
|
43
|
+
readonly graph?: ValueSource<contracts.JsonValue>;
|
|
44
|
+
readonly readiness?: ValueSource<InternalReadiness>;
|
|
45
|
+
readonly ready?: ValueSource<InternalReadiness>;
|
|
46
|
+
readonly requests?: QuerySource;
|
|
47
|
+
readonly logs?: QuerySource;
|
|
48
|
+
readonly traces?: QuerySource;
|
|
49
|
+
readonly diagnostics?: QuerySource;
|
|
50
|
+
readonly stream?: ValueSource<readonly InternalStreamEvent[]> | ((query: InternalQuery) => contracts.MaybePromise<readonly InternalStreamEvent[]>);
|
|
51
|
+
}
|
|
52
|
+
export declare class InternalEndpointConfigurationError extends TypeError {
|
|
53
|
+
constructor(message: string);
|
|
54
|
+
}
|
|
55
|
+
/** Installs the versioned inspector stubs used before the full API package exists. */
|
|
56
|
+
export declare function installInternalEndpoints(app: Hono, options?: InternalEndpointOptions): void;
|
|
57
|
+
export declare function graphSnapshot(plan: RegistrationPlan): contracts.JsonValue;
|
|
58
|
+
//# sourceMappingURL=internal-endpoints.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal-endpoints.d.ts","sourceRoot":"","sources":["../src/internal-endpoints.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import * as contracts from "@relkit/contracts";
|
|
2
|
+
import { isAuthorized, isInvalidQueryError, jsonResponse, listResponse, readQuery, resolveQuery, resolveValue, streamBody, } from "./internal-endpoints-utils.js";
|
|
3
|
+
export const INTERNAL_ENDPOINT_PROTOCOL = "relkit.inspector";
|
|
4
|
+
export const INTERNAL_ENDPOINT_VERSION = contracts.API_VERSION;
|
|
5
|
+
export const INTERNAL_ENDPOINT_PATHS = Object.freeze([
|
|
6
|
+
`${contracts.API_BASE_PATH}/health/live`,
|
|
7
|
+
`${contracts.API_BASE_PATH}/health/ready`,
|
|
8
|
+
`${contracts.API_BASE_PATH}/graph`,
|
|
9
|
+
`${contracts.API_BASE_PATH}/requests`,
|
|
10
|
+
`${contracts.API_BASE_PATH}/logs`,
|
|
11
|
+
`${contracts.API_BASE_PATH}/traces`,
|
|
12
|
+
`${contracts.API_BASE_PATH}/stream`,
|
|
13
|
+
`${contracts.API_BASE_PATH}/diagnostics`,
|
|
14
|
+
]);
|
|
15
|
+
export class InternalEndpointConfigurationError extends TypeError {
|
|
16
|
+
constructor(message) {
|
|
17
|
+
super(message);
|
|
18
|
+
this.name = "InternalEndpointConfigurationError";
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/** Installs the versioned inspector stubs used before the full API package exists. */
|
|
22
|
+
export function installInternalEndpoints(app, options = {}) {
|
|
23
|
+
const mode = options.environment ?? options.mode ?? "development";
|
|
24
|
+
const enabled = options.enabled ?? mode !== "production";
|
|
25
|
+
validateConfiguration(mode, enabled, options);
|
|
26
|
+
if (!enabled)
|
|
27
|
+
return;
|
|
28
|
+
const handle = (handler) => async (context) => {
|
|
29
|
+
if (!(await isAuthorized(context.req.raw, options)))
|
|
30
|
+
return jsonResponse({ error: "internal-endpoint-protected" }, 401, {
|
|
31
|
+
"www-authenticate": "Bearer",
|
|
32
|
+
});
|
|
33
|
+
try {
|
|
34
|
+
return await handler(context);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
if (isInvalidQueryError(error))
|
|
38
|
+
return jsonResponse({ error: "invalid-query" }, 400);
|
|
39
|
+
return jsonResponse({ error: "internal-error" }, 500);
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
app.get(`${contracts.API_BASE_PATH}/health/live`, handle(async () => jsonResponse({ status: "ok" })));
|
|
43
|
+
app.get(`${contracts.API_BASE_PATH}/health/ready`, handle(async () => {
|
|
44
|
+
const readiness = await resolveValue(options.readiness ?? options.ready ?? { ready: true });
|
|
45
|
+
return jsonResponse(readiness.ready
|
|
46
|
+
? { status: "ready" }
|
|
47
|
+
: { status: "not-ready", reason: readiness.reason ?? "unavailable" }, readiness.ready ? 200 : 503);
|
|
48
|
+
}));
|
|
49
|
+
app.get(`${contracts.API_BASE_PATH}/graph`, handle(async () => jsonResponse(await resolveValue(options.graph ?? { graph: null }))));
|
|
50
|
+
for (const [name, source] of [
|
|
51
|
+
["requests", options.requests],
|
|
52
|
+
["logs", options.logs],
|
|
53
|
+
["traces", options.traces],
|
|
54
|
+
["diagnostics", options.diagnostics],
|
|
55
|
+
]) {
|
|
56
|
+
if (source === undefined && name !== "diagnostics")
|
|
57
|
+
continue;
|
|
58
|
+
app.get(`${contracts.API_BASE_PATH}/${name}`, handle(async (context) => listResponse(source, context)));
|
|
59
|
+
}
|
|
60
|
+
if (options.stream !== undefined)
|
|
61
|
+
app.get(`${contracts.API_BASE_PATH}/stream`, handle(async (context) => streamResponse(options.stream, context)));
|
|
62
|
+
}
|
|
63
|
+
export function graphSnapshot(plan) {
|
|
64
|
+
return {
|
|
65
|
+
protocol: INTERNAL_ENDPOINT_PROTOCOL,
|
|
66
|
+
version: INTERNAL_ENDPOINT_VERSION,
|
|
67
|
+
graphHash: plan.graphHash,
|
|
68
|
+
manifestGraphHash: plan.graphHash,
|
|
69
|
+
graphContractVersion: contracts.GRAPH_VERSION,
|
|
70
|
+
manifestContractVersion: contracts.MANIFEST_VERSION,
|
|
71
|
+
manifestGeneratorVersion: contracts.GENERATOR_VERSION,
|
|
72
|
+
functions: plan.functions,
|
|
73
|
+
httpTriggers: plan.httpTriggers,
|
|
74
|
+
queues: plan.queues,
|
|
75
|
+
schedules: plan.schedules,
|
|
76
|
+
eventTriggers: plan.eventTriggers,
|
|
77
|
+
buckets: plan.buckets,
|
|
78
|
+
caches: plan.caches,
|
|
79
|
+
tools: plan.tools,
|
|
80
|
+
agents: plan.agents,
|
|
81
|
+
services: plan.services ?? [],
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
function validateConfiguration(mode, enabled, options) {
|
|
85
|
+
if (!("development" === mode || "test" === mode || "production" === mode))
|
|
86
|
+
throw new InternalEndpointConfigurationError("mode must be development, test, or production.");
|
|
87
|
+
if (mode === "production" &&
|
|
88
|
+
enabled &&
|
|
89
|
+
options.bearerToken === undefined &&
|
|
90
|
+
options.authorize === undefined)
|
|
91
|
+
throw new InternalEndpointConfigurationError("Production internal endpoints require bearerToken or authorize protection.");
|
|
92
|
+
if (options.bearerToken !== undefined && options.bearerToken.trim().length === 0)
|
|
93
|
+
throw new InternalEndpointConfigurationError("bearerToken must not be empty.");
|
|
94
|
+
}
|
|
95
|
+
async function streamResponse(source, context) {
|
|
96
|
+
const events = source === undefined ? [] : await resolveQuery(source, readQuery(context.req.raw));
|
|
97
|
+
return new Response(streamBody(events), {
|
|
98
|
+
headers: {
|
|
99
|
+
"cache-control": "no-store",
|
|
100
|
+
"content-type": "text/event-stream; charset=utf-8",
|
|
101
|
+
connection: "keep-alive",
|
|
102
|
+
"x-relkit-api-version": String(INTERNAL_ENDPOINT_VERSION),
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=internal-endpoints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal-endpoints.js","sourceRoot":"","sources":["../src/internal-endpoints.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Context } from "hono";
|
|
2
|
+
import type { HttpTriggerRegistration } from "@relkit/graph";
|
|
3
|
+
import type { HttpRouteRequest, RouteMaterializationOptions } from "./materialize-routes.js";
|
|
4
|
+
export declare function createRouteHandler(trigger: HttpTriggerRegistration, options: RouteMaterializationOptions): (context: Context) => Promise<Response>;
|
|
5
|
+
export declare function routeInput(request: HttpRouteRequest, trigger: HttpTriggerRegistration, targetFunctionId: string, options: RouteMaterializationOptions): Promise<unknown>;
|
|
6
|
+
export declare function getEntry<T>(entries: Readonly<Record<string, T>> | ReadonlyMap<string, T>, id: string): T | undefined;
|
|
7
|
+
export declare function isRecord(value: unknown): value is Record<string, unknown>;
|
|
8
|
+
//# sourceMappingURL=materialize-routes-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"materialize-routes-utils.d.ts","sourceRoot":"","sources":["../src/materialize-routes-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAG7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAW7F,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,uBAAuB,EAChC,OAAO,EAAE,2BAA2B,GACnC,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAEzC;AAwED,wBAAsB,UAAU,CAC9B,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,uBAAuB,EAChC,gBAAgB,EAAE,MAAM,EACxB,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,OAAO,CAAC,CAWlB;AAED,wBAAgB,QAAQ,CAAC,CAAC,EACxB,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,EAC7D,EAAE,EAAE,MAAM,GACT,CAAC,GAAG,SAAS,CAIf;AACD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { mapRequest } from "./request-mapping.js";
|
|
2
|
+
import { isRequestMappingFailure } from "./request-mapping.js";
|
|
3
|
+
import { mapFailureResponse, mapInputValidationResponse, mapSuccessResponse, } from "./response-mapping.js";
|
|
4
|
+
import { getRequestState } from "./middleware.js";
|
|
5
|
+
import { invokeWithRecord, mapInputWithRecord, recordDetail } from "./request-record-utils.js";
|
|
6
|
+
import { requestFromContext } from "./request-context.js";
|
|
7
|
+
export function createRouteHandler(trigger, options) {
|
|
8
|
+
return async (context) => stripHead(trigger, await handleRoute(context, trigger, options));
|
|
9
|
+
}
|
|
10
|
+
async function handleRoute(context, trigger, options) {
|
|
11
|
+
const state = getRequestState(context);
|
|
12
|
+
const request = requestFromContext(context, trigger.config.path);
|
|
13
|
+
const builder = state?.requestRecord;
|
|
14
|
+
builder?.setRoute(trigger.id, trigger.targetFunctionId);
|
|
15
|
+
builder?.setServiceId(trigger.serviceId);
|
|
16
|
+
recordDetail(builder, { kind: "match", targetId: trigger.id, outcome: "success" });
|
|
17
|
+
const responseOptions = responseOptionsFor(options, state?.signal);
|
|
18
|
+
const input = await mapInputWithRecord(() => routeInput(request, trigger, trigger.targetFunctionId, options), builder, trigger.targetFunctionId);
|
|
19
|
+
if (isRequestMappingFailure(input)) {
|
|
20
|
+
builder?.setOutcome("validation-error");
|
|
21
|
+
return mapInputValidationResponse(trigger, input.issues, responseOptions);
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
const value = await invokeWithRecord(options.engine, {
|
|
25
|
+
functionId: trigger.targetFunctionId,
|
|
26
|
+
input,
|
|
27
|
+
source: "http",
|
|
28
|
+
...(state?.signal === undefined ? {} : { signal: state.signal }),
|
|
29
|
+
...(state?.requestId === undefined ? {} : { requestId: state.requestId }),
|
|
30
|
+
...(state?.requestId === undefined ? {} : { correlationId: state.requestId }),
|
|
31
|
+
...(state?.traceId === undefined ? {} : { traceId: state.traceId }),
|
|
32
|
+
...(typeof trigger.config.timeoutMs !== "number"
|
|
33
|
+
? {}
|
|
34
|
+
: { timeoutMs: trigger.config.timeoutMs }),
|
|
35
|
+
...(options.auth === undefined ? {} : { auth: options.auth.contextFor(context.req.raw) }),
|
|
36
|
+
}, builder, "function", trigger.targetFunctionId);
|
|
37
|
+
return mapSuccessResponse(trigger, value, responseOptions);
|
|
38
|
+
}
|
|
39
|
+
catch (cause) {
|
|
40
|
+
return mapFailureResponse(trigger, cause, responseOptions);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function stripHead(trigger, response) {
|
|
44
|
+
if (trigger.config.method !== "HEAD")
|
|
45
|
+
return response;
|
|
46
|
+
return new Response(null, {
|
|
47
|
+
status: response.status,
|
|
48
|
+
statusText: response.statusText,
|
|
49
|
+
headers: response.headers,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
function responseOptionsFor(options, signal) {
|
|
53
|
+
return {
|
|
54
|
+
...(options.responseMapping ?? {}),
|
|
55
|
+
...(options.manifest.responseSchemas === undefined
|
|
56
|
+
? {}
|
|
57
|
+
: { responseSchemas: options.manifest.responseSchemas }),
|
|
58
|
+
...(signal === undefined ? {} : { signal }),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
export async function routeInput(request, trigger, targetFunctionId, options) {
|
|
62
|
+
if (options.mapInput !== undefined)
|
|
63
|
+
return options.mapInput(request, trigger, targetFunctionId, trigger.config.request);
|
|
64
|
+
const result = await mapRequest(request, trigger.config.request, {
|
|
65
|
+
...(options.requestMapping ?? {}),
|
|
66
|
+
...(trigger.config.maxBodyBytes === undefined
|
|
67
|
+
? {}
|
|
68
|
+
: { maxBodyBytes: trigger.config.maxBodyBytes }),
|
|
69
|
+
transforms: options.manifest.requestTransforms,
|
|
70
|
+
});
|
|
71
|
+
return isRequestMappingFailure(result) ? result : result.value;
|
|
72
|
+
}
|
|
73
|
+
export function getEntry(entries, id) {
|
|
74
|
+
if (entries instanceof Map)
|
|
75
|
+
return entries.get(id);
|
|
76
|
+
const record = entries;
|
|
77
|
+
return Object.prototype.hasOwnProperty.call(record, id) ? record[id] : undefined;
|
|
78
|
+
}
|
|
79
|
+
export function isRecord(value) {
|
|
80
|
+
return value !== null && (typeof value === "object" || typeof value === "function");
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=materialize-routes-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"materialize-routes-utils.js","sourceRoot":"","sources":["../src/materialize-routes-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import type { Hono } from "hono";
|
|
2
|
+
import { GENERATOR_VERSION, MANIFEST_VERSION, type MaybePromise } from "@relkit/contracts";
|
|
3
|
+
import type { HttpTriggerRegistration, RegistrationPlan } from "@relkit/graph";
|
|
4
|
+
import type { RequestRecordSink } from "@relkit/observability";
|
|
5
|
+
import type { MiddlewareContext } from "@relkit/routes";
|
|
6
|
+
import type { MappingValue, RequestMappingOptions } from "./request-mapping.js";
|
|
7
|
+
import { FRAMEWORK_MIDDLEWARE_ORDER, type FrameworkMiddleware, type FrameworkMiddlewareName } from "./middleware.js";
|
|
8
|
+
import { type RateLimitRuntimeOptions } from "./rate-limit.js";
|
|
9
|
+
import { type HttpAuthInvocation, type HttpAuthRuntime } from "./auth.js";
|
|
10
|
+
import { type McpOptions } from "./mcp.js";
|
|
11
|
+
import { type StaticFilesOptions } from "./static-files.js";
|
|
12
|
+
export type ManifestEntries<T> = Readonly<Record<string, T>> | ReadonlyMap<string, T>;
|
|
13
|
+
export interface RuntimeManifest {
|
|
14
|
+
readonly contractVersion: typeof MANIFEST_VERSION;
|
|
15
|
+
readonly generatorVersion: typeof GENERATOR_VERSION;
|
|
16
|
+
readonly graphHash: string;
|
|
17
|
+
readonly functions: ManifestEntries<unknown>;
|
|
18
|
+
readonly targets?: ManifestEntries<unknown>;
|
|
19
|
+
readonly routes?: ManifestEntries<unknown>;
|
|
20
|
+
readonly tools?: ManifestEntries<unknown>;
|
|
21
|
+
readonly services?: ManifestEntries<unknown>;
|
|
22
|
+
readonly hooks?: ManifestEntries<unknown>;
|
|
23
|
+
readonly application?: {
|
|
24
|
+
readonly env: unknown;
|
|
25
|
+
readonly providers: unknown;
|
|
26
|
+
};
|
|
27
|
+
readonly middleware: ManifestEntries<unknown>;
|
|
28
|
+
readonly requestTransforms: ManifestEntries<unknown>;
|
|
29
|
+
readonly responseSchemas?: ManifestEntries<unknown>;
|
|
30
|
+
}
|
|
31
|
+
export interface HttpInvocationOptions {
|
|
32
|
+
readonly functionId: string;
|
|
33
|
+
readonly input: unknown;
|
|
34
|
+
readonly source: "http" | "tool";
|
|
35
|
+
readonly signal?: AbortSignal;
|
|
36
|
+
readonly requestId?: string;
|
|
37
|
+
readonly traceId?: string;
|
|
38
|
+
readonly correlationId?: string;
|
|
39
|
+
readonly timeoutMs?: number;
|
|
40
|
+
readonly auth?: HttpAuthInvocation;
|
|
41
|
+
readonly toolHooks?: {
|
|
42
|
+
readonly onBefore?: (value: unknown, context: unknown) => unknown;
|
|
43
|
+
readonly onAfter?: (value: unknown, context: unknown) => unknown;
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
export interface HttpEngine {
|
|
47
|
+
readonly invoke: (options: HttpInvocationOptions) => Promise<unknown>;
|
|
48
|
+
}
|
|
49
|
+
export interface HttpRouteRequest {
|
|
50
|
+
readonly request: Request;
|
|
51
|
+
readonly pathPattern?: string;
|
|
52
|
+
readonly params: Readonly<Record<string, MappingValue>>;
|
|
53
|
+
readonly query: Readonly<Record<string, MappingValue>>;
|
|
54
|
+
readonly headers: Readonly<Record<string, MappingValue>>;
|
|
55
|
+
readonly validated?: Readonly<Record<string, unknown>>;
|
|
56
|
+
}
|
|
57
|
+
export type HttpInputMapper = (request: HttpRouteRequest, trigger: HttpTriggerRegistration, targetFunctionId: string, mapping?: unknown) => unknown | Promise<unknown>;
|
|
58
|
+
export interface RouteMaterializationOptions {
|
|
59
|
+
readonly plan: RegistrationPlan;
|
|
60
|
+
readonly manifest: RuntimeManifest;
|
|
61
|
+
readonly engine: HttpEngine;
|
|
62
|
+
readonly mapInput?: HttpInputMapper;
|
|
63
|
+
readonly requestMapping?: RequestMappingOptions;
|
|
64
|
+
readonly responseMapping?: import("./response-mapping.js").ResponseMappingOptions;
|
|
65
|
+
readonly generationId?: string;
|
|
66
|
+
readonly observability?: RequestRecordSink;
|
|
67
|
+
readonly rateLimitRuntime?: RateLimitRuntimeOptions;
|
|
68
|
+
readonly auth?: HttpAuthRuntime;
|
|
69
|
+
readonly mcp?: McpOptions;
|
|
70
|
+
readonly staticFiles?: StaticFilesOptions;
|
|
71
|
+
readonly middlewareContext?: (options: {
|
|
72
|
+
readonly middlewareId: string;
|
|
73
|
+
readonly signal: AbortSignal;
|
|
74
|
+
readonly requestId?: string;
|
|
75
|
+
readonly traceId?: string;
|
|
76
|
+
}) => MaybePromise<MiddlewareContext>;
|
|
77
|
+
}
|
|
78
|
+
export type RuntimeHonoManifestErrorCode = "RELKIT_MANIFEST_VERSION_UNSUPPORTED" | "RELKIT_MANIFEST_GENERATOR_UNSUPPORTED" | "RELKIT_GRAPH_MANIFEST_MISMATCH" | "RELKIT_MANIFEST_MIDDLEWARE_MISSING" | "RELKIT_MANIFEST_MIDDLEWARE_MISMATCH" | "RELKIT_MANIFEST_RAW_ROUTE_MISSING" | "RELKIT_MANIFEST_TRANSFORM_MISSING";
|
|
79
|
+
export declare class RuntimeHonoManifestError extends Error {
|
|
80
|
+
readonly code: RuntimeHonoManifestErrorCode;
|
|
81
|
+
readonly referenceId?: string;
|
|
82
|
+
constructor(code: RuntimeHonoManifestErrorCode, message: string, referenceId?: string);
|
|
83
|
+
}
|
|
84
|
+
/** Verifies the immutable plan/manifest boundary before any route is added. */
|
|
85
|
+
export declare function assertHttpManifest(options: RouteMaterializationOptions): void;
|
|
86
|
+
/** Registers only the HTTP triggers already present in the immutable plan. */
|
|
87
|
+
export declare function materializeRoutes(app: Hono, options: RouteMaterializationOptions): void;
|
|
88
|
+
export { FRAMEWORK_MIDDLEWARE_ORDER };
|
|
89
|
+
export type { FrameworkMiddleware, FrameworkMiddlewareName };
|
|
90
|
+
//# sourceMappingURL=materialize-routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"materialize-routes.d.ts","sourceRoot":"","sources":["../src/materialize-routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { GENERATOR_VERSION, MANIFEST_VERSION } from "@relkit/contracts";
|
|
2
|
+
import { createRouteHandler, getEntry, isRecord } from "./materialize-routes-utils.js";
|
|
3
|
+
import { registerRouteMiddleware } from "./route-middleware.js";
|
|
4
|
+
import { FRAMEWORK_MIDDLEWARE_ORDER, } from "./middleware.js";
|
|
5
|
+
import { withRateLimit } from "./rate-limit.js";
|
|
6
|
+
import { registerAuthMiddleware } from "./auth.js";
|
|
7
|
+
import { installRpc } from "./rpc.js";
|
|
8
|
+
import { installMcp } from "./mcp.js";
|
|
9
|
+
import { installStaticFiles } from "./static-files.js";
|
|
10
|
+
export class RuntimeHonoManifestError extends Error {
|
|
11
|
+
code;
|
|
12
|
+
referenceId;
|
|
13
|
+
constructor(code, message, referenceId) {
|
|
14
|
+
super(message);
|
|
15
|
+
this.name = "RuntimeHonoManifestError";
|
|
16
|
+
this.code = code;
|
|
17
|
+
if (referenceId !== undefined)
|
|
18
|
+
this.referenceId = referenceId;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/** Verifies the immutable plan/manifest boundary before any route is added. */
|
|
22
|
+
export function assertHttpManifest(options) {
|
|
23
|
+
const { manifest, plan } = options;
|
|
24
|
+
if (manifest.contractVersion !== MANIFEST_VERSION)
|
|
25
|
+
throw new RuntimeHonoManifestError("RELKIT_MANIFEST_VERSION_UNSUPPORTED", `Unsupported runtime manifest contract version ${String(manifest.contractVersion)}.`);
|
|
26
|
+
if (manifest.generatorVersion !== GENERATOR_VERSION)
|
|
27
|
+
throw new RuntimeHonoManifestError("RELKIT_MANIFEST_GENERATOR_UNSUPPORTED", `Unsupported runtime manifest generator version ${String(manifest.generatorVersion)}.`);
|
|
28
|
+
if (manifest.graphHash !== plan.graphHash)
|
|
29
|
+
throw new RuntimeHonoManifestError("RELKIT_GRAPH_MANIFEST_MISMATCH", `Manifest hash ${JSON.stringify(manifest.graphHash)} does not match plan hash ${JSON.stringify(plan.graphHash)}.`);
|
|
30
|
+
for (const middleware of plan.middlewares) {
|
|
31
|
+
const entry = getEntry(manifest.middleware, middleware.id);
|
|
32
|
+
if (!isRecord(entry) || entry.path !== middleware.path || typeof entry.handler !== "function")
|
|
33
|
+
throw new RuntimeHonoManifestError(entry === undefined
|
|
34
|
+
? "RELKIT_MANIFEST_MIDDLEWARE_MISSING"
|
|
35
|
+
: "RELKIT_MANIFEST_MIDDLEWARE_MISMATCH", `Manifest middleware "${middleware.id}" is missing or does not match its graph node.`, middleware.id);
|
|
36
|
+
}
|
|
37
|
+
for (const trigger of plan.httpTriggers) {
|
|
38
|
+
if (trigger.config.rawHandler === true) {
|
|
39
|
+
const route = getEntry(manifest.routes ?? {}, trigger.id);
|
|
40
|
+
if (!isRecord(route) || typeof route.handler !== "function") {
|
|
41
|
+
throw new RuntimeHonoManifestError("RELKIT_MANIFEST_RAW_ROUTE_MISSING", `Manifest raw route "${trigger.id}" is missing its handler.`, trigger.id);
|
|
42
|
+
}
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
for (const transform of trigger.config.transforms) {
|
|
46
|
+
if (getEntry(manifest.requestTransforms, transform.id) === undefined)
|
|
47
|
+
throw new RuntimeHonoManifestError("RELKIT_MANIFEST_TRANSFORM_MISSING", `Manifest request transform "${transform.id}" is missing.`, transform.id);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/** Registers only the HTTP triggers already present in the immutable plan. */
|
|
52
|
+
export function materializeRoutes(app, options) {
|
|
53
|
+
assertHttpManifest(options);
|
|
54
|
+
registerRouteMiddleware(app, options);
|
|
55
|
+
registerAuthMiddleware(app, options.auth);
|
|
56
|
+
const triggers = [...options.plan.httpTriggers].sort((left, right) => Number(right.config.method === "HEAD") - Number(left.config.method === "HEAD"));
|
|
57
|
+
for (const trigger of triggers) {
|
|
58
|
+
if (trigger.config.rawHandler === true) {
|
|
59
|
+
registerRawRoute(app, trigger, options);
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
const handler = withRateLimit(trigger, options, createRouteHandler(trigger, options));
|
|
63
|
+
for (const path of trigger.config.runtimePaths ?? [trigger.config.path]) {
|
|
64
|
+
if (trigger.config.method === "HEAD") {
|
|
65
|
+
app.on("GET", path, (context, next) => context.req.method === "HEAD" ? handler(context) : next());
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
app.on(trigger.config.method, path, handler);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
installRpc(app, options);
|
|
73
|
+
installMcp(app, options);
|
|
74
|
+
installStaticFiles(app, options.staticFiles);
|
|
75
|
+
}
|
|
76
|
+
function registerRawRoute(app, trigger, options) {
|
|
77
|
+
const route = getEntry(options.manifest.routes ?? {}, trigger.id);
|
|
78
|
+
if (!isRecord(route) || typeof route.handler !== "function")
|
|
79
|
+
return;
|
|
80
|
+
const handler = route.handler;
|
|
81
|
+
for (const path of trigger.config.runtimePaths ?? [trigger.config.path]) {
|
|
82
|
+
app.all(path, (context) => Promise.resolve(handler(context.req.raw)));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
export { FRAMEWORK_MIDDLEWARE_ORDER };
|
|
86
|
+
//# sourceMappingURL=materialize-routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"materialize-routes.js","sourceRoot":"","sources":["../src/materialize-routes.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Hono } from "hono";
|
|
2
|
+
import type { RouteMaterializationOptions } from "./materialize-routes.js";
|
|
3
|
+
export interface McpOptions {
|
|
4
|
+
readonly enabled?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare function installMcp(app: Hono, options: RouteMaterializationOptions): void;
|
|
7
|
+
//# sourceMappingURL=mcp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAW,IAAI,EAAE,MAAM,MAAM,CAAC;AAG1C,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAG3E,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAWD,wBAAgB,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,2BAA2B,GAAG,IAAI,CAGhF"}
|
package/dist/mcp.js
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { McpServer, createMcpHandler, } from "@modelcontextprotocol/server";
|
|
2
|
+
import { getRequestState } from "./middleware.js";
|
|
3
|
+
import { getEntry, isRecord } from "./materialize-routes-utils.js";
|
|
4
|
+
export function installMcp(app, options) {
|
|
5
|
+
if (options.mcp?.enabled === false)
|
|
6
|
+
return;
|
|
7
|
+
app.all("/mcp", async (context) => handlerFor(context, options).fetch(context.req.raw));
|
|
8
|
+
}
|
|
9
|
+
function handlerFor(context, options) {
|
|
10
|
+
return createMcpHandler(() => {
|
|
11
|
+
const server = new McpServer({ name: "relkit", version: "2" });
|
|
12
|
+
const tools = options.plan.tools
|
|
13
|
+
.filter((entry) => entry.mcp)
|
|
14
|
+
.sort((left, right) => left.id.localeCompare(right.id));
|
|
15
|
+
for (const tool of tools) {
|
|
16
|
+
register(server, tool, context, options);
|
|
17
|
+
}
|
|
18
|
+
return server;
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
function register(server, tool, context, options) {
|
|
22
|
+
const runtime = getEntry(options.manifest.tools ?? {}, tool.id);
|
|
23
|
+
const input = runtime?.target?.input;
|
|
24
|
+
const output = runtime?.target?.output;
|
|
25
|
+
server.registerTool(tool.id, {
|
|
26
|
+
description: tool.description,
|
|
27
|
+
...(input === undefined ? {} : { inputSchema: input }),
|
|
28
|
+
...(output === undefined ? {} : { outputSchema: output }),
|
|
29
|
+
annotations: {
|
|
30
|
+
readOnlyHint: tool.sideEffect === "none" || tool.sideEffect === "read",
|
|
31
|
+
destructiveHint: tool.sideEffect === "write",
|
|
32
|
+
},
|
|
33
|
+
}, async (arguments_) => invoke(tool, runtime, arguments_, context, options));
|
|
34
|
+
}
|
|
35
|
+
async function invoke(tool, runtime, input, context, options) {
|
|
36
|
+
if (requiresApproval(tool)) {
|
|
37
|
+
return failure(`Approval required for tool "${tool.id}"`);
|
|
38
|
+
}
|
|
39
|
+
const state = getRequestState(context);
|
|
40
|
+
try {
|
|
41
|
+
const value = await options.engine.invoke({
|
|
42
|
+
functionId: tool.targetFunctionId,
|
|
43
|
+
input,
|
|
44
|
+
source: "tool",
|
|
45
|
+
...(state?.signal === undefined ? {} : { signal: state.signal }),
|
|
46
|
+
...(state?.requestId === undefined ? {} : { requestId: state.requestId }),
|
|
47
|
+
...(state?.requestId === undefined ? {} : { correlationId: state.requestId }),
|
|
48
|
+
...(state?.traceId === undefined ? {} : { traceId: state.traceId }),
|
|
49
|
+
...(tool.timeoutMs === undefined ? {} : { timeoutMs: tool.timeoutMs }),
|
|
50
|
+
...(options.auth === undefined ? {} : { auth: options.auth.contextFor(context.req.raw) }),
|
|
51
|
+
...(runtime?.onBefore === undefined && runtime?.onAfter === undefined
|
|
52
|
+
? {}
|
|
53
|
+
: {
|
|
54
|
+
toolHooks: {
|
|
55
|
+
...(runtime.onBefore === undefined ? {} : { onBefore: runtime.onBefore }),
|
|
56
|
+
...(runtime.onAfter === undefined ? {} : { onAfter: runtime.onAfter }),
|
|
57
|
+
},
|
|
58
|
+
}),
|
|
59
|
+
});
|
|
60
|
+
return {
|
|
61
|
+
content: [{ type: "text", text: JSON.stringify(value) }],
|
|
62
|
+
...(isRecord(value) ? { structuredContent: value } : {}),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
catch (cause) {
|
|
66
|
+
return failure(publicMessage(cause));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
function requiresApproval(tool) {
|
|
70
|
+
return (tool.approval === "always" ||
|
|
71
|
+
(tool.approval === "on-write" && tool.sideEffect !== "none" && tool.sideEffect !== "read"));
|
|
72
|
+
}
|
|
73
|
+
function failure(message) {
|
|
74
|
+
return { isError: true, content: [{ type: "text", text: message }] };
|
|
75
|
+
}
|
|
76
|
+
function publicMessage(cause) {
|
|
77
|
+
if (isRecord(cause) && typeof cause.code === "string")
|
|
78
|
+
return cause.code;
|
|
79
|
+
return "Tool invocation failed";
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=mcp.js.map
|
package/dist/mcp.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware-limits.d.ts","sourceRoot":"","sources":["../src/middleware-limits.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,EAOL,KAAK,qBAAqB,EAC3B,MAAM,uBAAuB,CAAC;AAG/B,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,qBAA0B,GAAG,iBAAiB,CAiEvF"}
|